ncmb-ruby-client 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
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