diff --git a/examples/performance.rb b/examples/performance.rb new file mode 100644 index 0000000..d0c6668 --- /dev/null +++ b/examples/performance.rb @@ -0,0 +1,38 @@ +$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib')) +$:.unshift(File.dirname(__FILE__)) +require 'rubygems' +require 'ncmb' +require 'yaml' +yaml = YAML.load_file(File.join(File.dirname(__FILE__), '..', 'setting.yml')) +NCMB.initialize application_key: yaml['application_key'], client_key: yaml['client_key'] + +example = NCMB::DataStore.new 'Example' + +require 'benchmark' + +ary = [] +Benchmark.bm 10 do |r| + r.report "Save DataStore" do + 100.times do |i| + item = example.new + item.set('String', "ใƒ†ใ‚นใƒˆ#{i}00") + item.set('Integer', i) + item.set('Boolean', true) + item.set('Array', [i, i * 2, i * 3, "Orange", "Tomato"]) + item.set('Object', {test1: 'a', test2: 'b'}) + item.set('Location', NCMB::GeoPoint.new(30, 50)) + item.set('MultipleLine', "test\ntest\n") + item.set('Increment', NCMB::Increment.new(i + 1)) + item.set('Date', Time.now) + item.save + ary << item.objectId + end + end + r.report "Delete objects" do + ary.each do |objectId| + item = example.new(objectId: objectId) + item.delete + end + end +end + diff --git a/examples/pointer_test.rb b/examples/pointer_test.rb new file mode 100644 index 0000000..32326d1 --- /dev/null +++ b/examples/pointer_test.rb @@ -0,0 +1,16 @@ +$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib')) +$:.unshift(File.dirname(__FILE__)) +require 'rubygems' +require 'ncmb' +require 'yaml' +yaml = YAML.load_file(File.join(File.dirname(__FILE__), '..', 'setting.yml')) +NCMB.initialize application_key: yaml['application_key'], client_key: yaml['client_key'] + +Parent = NCMB::DataStore.new 'Parent' + +Child = NCMB::DataStore.new 'Child' +child = Child.new(name: "Taro") +parent = Parent.new(name: "Oya") +parent.child = child +parent.save + diff --git a/examples/relation.rb b/examples/relation.rb new file mode 100644 index 0000000..5c4b45f --- /dev/null +++ b/examples/relation.rb @@ -0,0 +1,22 @@ +$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib')) +$:.unshift(File.dirname(__FILE__)) +require 'rubygems' +require 'ncmb' +require 'yaml' +yaml = YAML.load_file(File.join(File.dirname(__FILE__), '..', 'setting.yml')) +NCMB.initialize application_key: yaml['application_key'], client_key: yaml['client_key'] + +Food = NCMB::DataStore.new 'Food' + +Basket = NCMB::DataStore.new('Basket') +basket = Basket.new +basket.foods = [] +basket.foods << Food.new(name: "banana", type: "fruit") +basket.foods << Food.new(name: "pear", type: "fruit") + +# relation = NCMB::Relation.new +# relation << Food.new(name: "banana", type: "fruit", objectId: "test1") +# relation << Food.new(name: "pear", type: "fruit", objectId: "test2") + +# puts basket.fields +basket.save diff --git a/lib/ncmb.rb b/lib/ncmb.rb index fdb15c5..b4b2d36 100644 --- a/lib/ncmb.rb +++ b/lib/ncmb.rb @@ -22,4 +22,5 @@ require "ncmb/increment" require "ncmb/acl" require "ncmb/role" +require "ncmb/relation" require "ncmb/error" diff --git a/lib/ncmb/acl.rb b/lib/ncmb/acl.rb index be17cd7..a3423cb 100644 --- a/lib/ncmb/acl.rb +++ b/lib/ncmb/acl.rb @@ -1,5 +1,5 @@ module NCMB - class Acl < NCMB::Object + class Acl include NCMB def initialize(params = nil) diff --git a/lib/ncmb/object.rb b/lib/ncmb/object.rb index 7beecc8..eb0dae0 100644 --- a/lib/ncmb/object.rb +++ b/lib/ncmb/object.rb @@ -12,6 +12,10 @@ def fields @fields end + def ClassName + @name + end + def method_missing(name, value = nil) if name =~ /.*=$/ sym = name.to_s.gsub(/(.*?)=$/, '\1').to_sym @@ -56,7 +60,29 @@ def path "#{base_path}/#{@fields[:objectId] || '' }" end + def saved? + @fields[:objectId] != nil + end + def post + @fields.each do |key, field| + if field.is_a?(NCMB::Object) + field.save unless field.saved? + @fields[key] = { + __type: "Pointer", + className: field.ClassName, + objectId: field.objectId + } + end + if field.is_a?(Array) && field[0].is_a?(NCMB::Object) + relation = NCMB::Relation.new + field.each do |sub_field| + sub_field.save unless sub_field.saved? + relation << sub_field + end + @fields[key] = relation + end + end result = @@client.post path, @fields @fields.merge!(result) self diff --git a/lib/ncmb/relation.rb b/lib/ncmb/relation.rb new file mode 100644 index 0000000..7c72eec --- /dev/null +++ b/lib/ncmb/relation.rb @@ -0,0 +1,24 @@ +module NCMB + class Relation < Array + include NCMB + + def initialize + + end + + def to_json(a = "") + params = { + "__op": "AddRelation", + } + params["objects"] = [] + self.each do |obj| + params["objects"] << { + "__type": "Pointer", + "className": obj.ClassName, + "objectId": obj.objectId + } + end + params.to_json + end + end +end \ No newline at end of file diff --git a/lib/ncmb/version.rb b/lib/ncmb/version.rb index 4025596..ff5bae7 100644 --- a/lib/ncmb/version.rb +++ b/lib/ncmb/version.rb @@ -1,3 +1,3 @@ module Ncmb - VERSION = "0.1.1" + VERSION = "0.1.2" end