ncmb-ruby-client 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 12cc26d4c875deb46103f478e2d04bd752b813bc
4
- data.tar.gz: 5b7cff028775e7e26dac5dde6093aa5a7c09ed1f
3
+ metadata.gz: a99591b3222464ef82634322a71414dfc6663465
4
+ data.tar.gz: 995375ed8c9a7ef1d3fce4cb4ae2304bfd0b9cea
5
5
  SHA512:
6
- metadata.gz: f104345075bafde235ab95927daa6fbbf9a7c31901fb1a408a3a926f94ac44717024f19d4993440b293ff5bb21573629f7488150f641b5d170b38df04e9a5aab
7
- data.tar.gz: 88edda35c363f9903be0591473571dcc285e1610a3dac6b4f856ab0c2c489756eb76ae48e4920d0119ddefef382d646a0f2a8c9165000b775b5d3f6ea8613c98
6
+ metadata.gz: d59a07ef9b8c75191ece14db9bfc5930017f4e706af983b56b245a4b9486ce9d22bb96147680ce076ec027499570aeaac338df71289e91dce0d49e2768149c0f
7
+ data.tar.gz: 7d66392148b933ebdeb52061a49122001d744c3fb98aae5d77d52bad2117bf8bb7156fac2a9bbcdee3130b90ecf703261f77c654a14ad7fc07b42b4887a929a1
data/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
1
  source 'https://rubygems.org'
2
-
2
+ gem 'simplecov'
3
+ gem 'simplecov-gem-profile'
3
4
  # Specify your gem's dependencies in ncmb-ruby-client.gemspec
4
5
  gemspec
data/Rakefile CHANGED
@@ -5,5 +5,5 @@ require 'rspec/core/rake_task'
5
5
 
6
6
  desc "run spec"
7
7
  RSpec::Core::RakeTask.new(:spec) do |t|
8
- t.rspec_opts = ["-c", "-fs"]
8
+ t.rspec_opts = ["--color", "--format documentation"]
9
9
  end
@@ -0,0 +1,32 @@
1
+ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $:.unshift(File.dirname(__FILE__))
3
+ require 'rubygems'
4
+ require 'ncmb'
5
+ require 'yaml'
6
+ yaml = YAML.load_file(File.join(File.dirname(__FILE__), '..', 'setting.yml'))
7
+ NCMB.initialize application_key: yaml['application_key'], client_key: yaml['client_key']
8
+
9
+ if @user = NCMB::User.login('testUser2', 'testPassword2')
10
+ puts NCMB.CurrentUser.userName
11
+ NCMB.CurrentUser.delete
12
+ begin
13
+ @user.delete
14
+ rescue => e
15
+ puts e.message
16
+ end
17
+ end
18
+
19
+ @user = NCMB::User.new
20
+ @user.set('userName', 'testUser2')
21
+ @user.set('password', 'testPassword2')
22
+ if @user.signUp
23
+ puts "User create successful."
24
+ @user.set("Hello", "World")
25
+ @user.update
26
+ else
27
+ puts "User create failed. #{@user.error.message}"
28
+ end
29
+
30
+
31
+
32
+
data/lib/ncmb.rb CHANGED
@@ -13,6 +13,7 @@ require "ncmb/version"
13
13
  require "ncmb/client"
14
14
  require "ncmb/data_store"
15
15
  require "ncmb/object"
16
+ require "ncmb/user"
16
17
  require "ncmb/push"
17
18
  require "ncmb/geo_point"
18
19
  require "ncmb/increment"
data/lib/ncmb/client.rb CHANGED
@@ -11,6 +11,8 @@ module NCMB
11
11
  @application_key = nil
12
12
  @client_key = nil
13
13
  @@client = nil
14
+ @@current_user = nil
15
+ @@last_error = nil
14
16
 
15
17
  class Client
16
18
  include NCMB
@@ -22,20 +24,20 @@ module NCMB
22
24
  @client_key = params[:client_key]
23
25
  end
24
26
 
25
- def get(path, params)
26
- request :get, path, params
27
+ def get(path, params = {}, session_key = nil)
28
+ request :get, path, params, session_key
27
29
  end
28
30
 
29
- def post(path, params)
30
- request :post, path, params
31
+ def post(path, params = {}, session_key = nil)
32
+ request :post, path, params, session_key
31
33
  end
32
34
 
33
- def put(path, params)
34
- request :put, path, params
35
+ def put(path, params = {}, session_key = nil)
36
+ request :put, path, params, session_key
35
37
  end
36
38
 
37
- def delete(path, params)
38
- request :delete, path
39
+ def delete(path, params = {}, session_key = nil)
40
+ request :delete, path, params, session_key
39
41
  end
40
42
 
41
43
  def array2hash(ary)
@@ -99,7 +101,15 @@ module NCMB
99
101
  params = method == :get ? params_base.merge(encode_query(queries)) : params_base
100
102
  now ||= Time.now.utc.iso8601
101
103
  params = params.merge "X-NCMB-Timestamp" => now
102
- params = params.sort_by{|a, b| a.to_s}.to_h
104
+ if [].respond_to?("to_h") # Array#to_h inpremented over ruby 2.1
105
+ params = params.sort_by{|a, b| a.to_s}.to_h
106
+ else
107
+ sorted_params = {}
108
+ params = params.sort_by{|a, b| a.to_s}.each {|kv|
109
+ sorted_params[kv[0]] = kv[1]
110
+ }
111
+ params = sorted_params
112
+ end
103
113
  signature_base = []
104
114
  signature_base << method.upcase
105
115
  signature_base << @domain
@@ -108,7 +118,7 @@ module NCMB
108
118
  signature = Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), @client_key, signature_base.join("\n"))).strip()
109
119
  end
110
120
 
111
- def request(method, path, queries = {})
121
+ def request(method, path, queries = {}, session_key = nil)
112
122
  now = Time.now.utc.iso8601
113
123
  signature = generate_signature(method, path, now, queries)
114
124
  http = Net::HTTP.new(@domain, 443)
@@ -119,23 +129,37 @@ module NCMB
119
129
  "X-NCMB-Timestamp" => now,
120
130
  "Content-Type" => 'application/json'
121
131
  }
132
+ if session_key
133
+ headers['X-NCMB-Apps-Session-Token'] = session_key
134
+ end
122
135
  # queries = hash2query(queries)
123
- case method
124
- when :get
125
- query = encode_query(queries).map do |key, value|
126
- "#{key}=#{value}"
127
- end.join("&")
128
- path = path + (query == '' ? "" : "?"+query)
129
- return JSON.parse(http.get(path, headers).body, symbolize_names: true)
130
- when :post
131
- queries = change_query(queries)
132
- return JSON.parse(http.post(path, queries.to_json, headers).body, symbolize_names: true)
133
- when :put
134
- return JSON.parse(http.put(path, queries.to_json, headers).body, symbolize_names: true)
135
- when :delete
136
- http.delete(path, headers)
137
- return {}
136
+ json = nil
137
+ begin
138
+ case method
139
+ when :get
140
+ query = encode_query(queries).map do |key, value|
141
+ "#{key}=#{value}"
142
+ end.join("&")
143
+ path = path + (query == '' ? "" : "?"+query)
144
+ json = JSON.parse(http.get(path, headers).body, symbolize_names: true)
145
+ when :post
146
+ queries = change_query(queries)
147
+ json = JSON.parse(http.post(path, queries.to_json, headers).body, symbolize_names: true)
148
+ when :put
149
+ json = JSON.parse(http.put(path, queries.to_json, headers).body, symbolize_names: true)
150
+ when :delete
151
+ response = http.delete(path, headers).body
152
+ return true if response == ""
153
+ json = JSON.parse(response, symbolize_names: true)
154
+ end
155
+ rescue => e
156
+ @@last_error = e
157
+ raise NCMB::APIError.new(e.to_s)
138
158
  end
159
+ if json[:error] != nil
160
+ raise NCMB::APIError.new(json[:error])
161
+ end
162
+ json
139
163
  end
140
164
  end
141
165
 
@@ -147,4 +171,18 @@ module NCMB
147
171
  defaulted.merge!(params)
148
172
  @@client = Client.new(defaulted)
149
173
  end
174
+
175
+ def NCMB.CurrentUser
176
+ @@current_user
177
+ end
178
+
179
+ class APIError < StandardError
180
+ def initialize(msg)
181
+ @message = msg
182
+ end
183
+
184
+ def message
185
+ @message
186
+ end
187
+ end
150
188
  end
@@ -159,15 +159,21 @@ module NCMB
159
159
  end
160
160
  @items
161
161
  end
162
+ alias :all :get
163
+
164
+ def queries
165
+ @queries
166
+ end
162
167
 
163
168
  def delete_all
164
169
  max = 1000
165
- count = self.limit(max).count().get
170
+ dataStore = NCMB::DataStore.new(@name)
171
+ count = dataStore.limit(max).count().all
166
172
  if count == 0
167
173
  return true
168
174
  end
169
- @queries.delete :count
170
- self.limit(max).each do |item|
175
+ dataStore.queries.delete :count
176
+ dataStore.each do |item|
171
177
  item.delete
172
178
  end
173
179
  if count > max
data/lib/ncmb/object.rb CHANGED
@@ -7,7 +7,11 @@ module NCMB
7
7
  @alc = alc
8
8
  @fields = fields
9
9
  end
10
-
10
+
11
+ def fields
12
+ @fields
13
+ end
14
+
11
15
  def method_missing(name)
12
16
  sym = name.to_sym
13
17
  if @fields.has_key?(sym)
@@ -18,7 +22,7 @@ module NCMB
18
22
  end
19
23
 
20
24
  def set(name, value)
21
- @fields[name] = value
25
+ @fields[name.to_sym] = value
22
26
  end
23
27
 
24
28
  def call(name)
@@ -32,9 +36,8 @@ module NCMB
32
36
  def post
33
37
  path = "/#{@@client.api_version}/classes/#{@name}"
34
38
  result = @@client.post path, @fields
35
- alc = result[:acl]
36
- result.delete(:acl)
37
- NCMB::Object.new(@name, result, alc)
39
+ @fields.merge!(result)
40
+ self
38
41
  end
39
42
  alias :save :post
40
43
 
@@ -46,12 +49,23 @@ module NCMB
46
49
  params.delete :updateDate
47
50
  result = @@client.put path, params
48
51
  @fields[:updateDate] = result[:updateDate]
52
+ self
49
53
  end
50
54
  alias :update :put
51
55
 
52
56
  def delete
53
57
  path = "/#{@@client.api_version}/classes/#{@name}/#{@fields[:objectId]}"
54
- @@client.delete path, {}
58
+ response = @@client.delete path, {}
59
+ if response == true
60
+ return true
61
+ else
62
+ @@last_error = response
63
+ return false
64
+ end
65
+ end
66
+
67
+ def error
68
+ @@last_error
55
69
  end
56
70
  end
57
71
  end
data/lib/ncmb/user.rb ADDED
@@ -0,0 +1,67 @@
1
+ module NCMB
2
+ class User < NCMB::Object
3
+ include NCMB
4
+
5
+ def initialize(params = {}, alc = nil)
6
+ super('users', params, alc)
7
+ end
8
+
9
+ def signUp
10
+ path = "/#{@@client.api_version}/#{@name}"
11
+ begin
12
+ result = @@client.post path, @fields
13
+ rescue => e
14
+ @@last_error = e
15
+ return false
16
+ end
17
+ @fields.merge!(result)
18
+ @@current_user = self
19
+ self
20
+ end
21
+
22
+ def put
23
+ path = "/#{@@client.api_version}/#{@name}/#{@fields[:objectId]}"
24
+ params = @fields
25
+ session_key = params[:sessionToken]
26
+ [:objectId, :createDate, :updateDate, :sessionToken, :password].each do |name|
27
+ params.delete name
28
+ end
29
+ result = @@client.put path, params, session_key
30
+ @fields[:updateDate] = result[:updateDate]
31
+ self
32
+ end
33
+ alias :update :put
34
+
35
+ def delete
36
+ path = "/#{@@client.api_version}/#{@name}/#{@fields[:objectId]}"
37
+ response = @@client.delete path, {}, @fields[:sessionToken]
38
+ if response == true
39
+ @@current_user = nil
40
+ return true
41
+ else
42
+ @@last_error = response
43
+ return false
44
+ end
45
+ end
46
+
47
+ def self.login(userid_or_email, password, authType = :id)
48
+ params = {password: password}
49
+ case authType.to_sym
50
+ when :id
51
+ params[:userName] = userid_or_email
52
+ when :email
53
+ params[:mailAddres] = userid_or_email
54
+ else
55
+ raise NCMB::APIError.new("No support #{authType} authentication. We support only id or email.")
56
+ end
57
+ begin
58
+ path = "/#{@@client.api_version}/login"
59
+ result = @@client.get path, params
60
+ rescue => e
61
+ @@last_error = e
62
+ return false
63
+ end
64
+ @@current_user = NCMB::User.new(result)
65
+ end
66
+ end
67
+ end
data/lib/ncmb/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ncmb
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
data/spec/delete_spec.rb CHANGED
@@ -2,19 +2,19 @@ require "spec_helper"
2
2
  describe NCMB do
3
3
  before do
4
4
  yaml = YAML.load_file(File.join(File.dirname(__FILE__), '..', 'setting.yml'))
5
- @ncmb = NCMB::Client.new(application_key: yaml['application_key'],
6
- client_key: yaml['client_key']
7
- )
8
- @object_id = @ncmb.post('/2013-09-01/classes/TODO', todo: "Test task")[:objectId]
5
+ NCMB.initialize application_key: yaml['application_key'], client_key: yaml['client_key']
6
+ @Todo = NCMB::DataStore.new('TODO')
7
+ @todo = @Todo.new(text: "Test task")
8
+ @object_id = @todo.save().objectId
9
9
  end
10
10
 
11
11
  it "Delete #1" do
12
- res = @ncmb.delete("/2013-09-01/classes/TODO/#{@object_id}")
13
- res.should == {}
12
+ @todo.delete.should == true
14
13
  end
15
14
 
16
- it "Delete #2" do
17
- res = @ncmb.delete("/2013-09-01/classes/TODO/doesnotexist")
18
- res[:code].should == 'E404001'
15
+ it "Delete again" do
16
+ @todo.delete.should == true
17
+ @todo.delete.should == false
18
+ @todo.error[:code].should == 'E404001'
19
19
  end
20
20
  end
data/spec/get_spec.rb CHANGED
@@ -3,40 +3,17 @@ require "spec_helper"
3
3
  describe NCMB do
4
4
  before do
5
5
  yaml = YAML.load_file(File.join(File.dirname(__FILE__), '..', 'setting.yml'))
6
- @ncmb = NCMB.init(application_key: yaml['application_key'],
7
- client_key: yaml['client_key']
8
- )
6
+ NCMB.initialize application_key: yaml['application_key'], client_key: yaml['client_key']
7
+ @todoClass = todoClass = NCMB::DataStore.new 'GET_TODO'
8
+ @todoClass.delete_all
9
+ 10.times do |i|
10
+ @todoClass.new(text: "Task ##{i + 1}").save
11
+ end
9
12
  end
10
13
 
11
14
  it "Get #1" do
12
- queries = {:count => "1", :limit => "20", :order => "-createDate", :skip => "0"}
13
- todo_class = @ncmb.data_store 'TODO'
14
- # {"count":5,"results":[{"objectId":"VwswoCe7PEuSbGEU","createDate":"2014-05-07T12:03:37.428Z","updateDate":"2014-05-07T12:03:37.428Z","acl":{"*":{"read":true,"write":true}},"todo":"タスクの追加"},{"objectId":"pj9scMgCGQ3wyd5m","createDate":"2014-05-07T08:03:56.268Z","updateDate":"2014-05-07T08:03:56.268Z","acl":{"*":{"read":true,"write":true}},"todo":"タスクを追加"},{"objectId":"lq3CIoaSAcM5Du6I","createDate":"2014-05-07T08:03:44.181Z","updateDate":"2014-05-07T08:03:44.181Z","acl":{"*":{"read":true,"write":true}},"todo":"テストのタスク"},{"objectId":"jln8aWojgUDUnCYo","createDate":"2014-05-07T08:02:23.104Z","updateDate":"2014-05-07T08:02:23.104Z","acl":{"*":{"read":true,"write":true}},"todo":"レビューします"},{"objectId":"zhRGEjECBdaUBLLn","createDate":"2014-05-07T08:02:10.573Z","updateDate":"2014-05-07T08:02:10.573Z","acl":{"*":{"read":true,"write":true}},"todo":"記事を書きます"}]}
15
- #puts todo_class.get queries
15
+ @items = @todoClass.order('-createDate').skip(0).all
16
+ @items.length.should == 10
16
17
  end
17
18
 
18
- it "Generate signature #3" do
19
- params = {
20
- :where => {
21
- "point" => {
22
- "$within" => {
23
- "$box" => [
24
- {
25
- "__type" => "GeoPoint",
26
- "latitude" => 35.690921,
27
- "longitude" => 139.700258
28
- },
29
- {
30
- "__type" => "GeoPoint",
31
- "latitude" => 35.728926,
32
- "longitude" => 139.71038
33
- }
34
- ]
35
- }
36
- }
37
- }
38
- }
39
- signature = @ncmb.generate_signature :get, "/#{@ncmb.api_version}/classes/Venue", URI.escape("2014-05-20T04:55:16.395Z", /[^-_.!~*'()a-zA-Z\d]/u), params
40
- expect(signature).to eq("sqlhM3xxNPUxFWDHQ5CdDqBp6dInU/YkO2PzuY31Pbk=")
41
- end
42
19
  end
data/spec/post_spec.rb CHANGED
@@ -2,17 +2,15 @@ require "spec_helper"
2
2
  describe NCMB do
3
3
  before do
4
4
  yaml = YAML.load_file(File.join(File.dirname(__FILE__), '..', 'setting.yml'))
5
- @ncmb = NCMB.init(application_key: yaml['application_key'],
6
- client_key: yaml['client_key']
7
- )
5
+ NCMB.initialize application_key: yaml['application_key'], client_key: yaml['client_key']
8
6
  end
9
7
 
10
8
  it "Post #1" do
11
- queries = {todo: "Test task"}
12
- todo_class = @ncmb.data_store 'TODO'
13
- response = todo_class.post queries
14
- # {"createDate":"2014-05-20T01:53:25.280Z","objectId":"rEDC6P4EgfiBf0AZ"}
15
- puts response.body
9
+ text = "Test task"
10
+ queries = {todo: text}
11
+ todo_class = NCMB::DataStore.new 'POST_TODO'
12
+ todo = todo_class.new(queries).save
13
+ todo.todo.should == text
16
14
  end
17
15
 
18
16
  it "Post with location #1" do
data/spec/spec_helper.rb CHANGED
@@ -4,3 +4,8 @@ $:.unshift(File.dirname(__FILE__))
4
4
  require f
5
5
  end
6
6
  require "ncmb"
7
+ require 'simplecov'
8
+ require 'simplecov-gem-profile'
9
+
10
+ SimpleCov.minimum_coverage 90
11
+ SimpleCov.start 'gem'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ncmb-ruby-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Atsushi Nakatsugawa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-05 00:00:00.000000000 Z
11
+ date: 2016-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -68,6 +68,7 @@ files:
68
68
  - examples/data_store.rb
69
69
  - examples/push.rb
70
70
  - examples/signature.rb
71
+ - examples/user_test.rb
71
72
  - examples/venue_search.rb
72
73
  - examples/venues.json
73
74
  - lib/ncmb.rb
@@ -79,6 +80,7 @@ files:
79
80
  - lib/ncmb/increment.rb
80
81
  - lib/ncmb/object.rb
81
82
  - lib/ncmb/push.rb
83
+ - lib/ncmb/user.rb
82
84
  - lib/ncmb/version.rb
83
85
  - ncmb-ruby-client.gemspec
84
86
  - setting_default.yml