ncmb-ruby-client 0.1.2 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rubocop.yml +2 -0
- data/Gemfile +4 -1
- data/README.md +6 -2
- data/Rakefile +6 -0
- data/examples/acl_test.rb +12 -6
- data/examples/csv_test.rb +17 -8
- data/examples/data_store.rb +13 -5
- data/examples/file_test.rb +24 -8
- data/examples/performance.rb +12 -6
- data/examples/pointer_test.rb +11 -5
- data/examples/push.rb +13 -7
- data/examples/relation.rb +11 -5
- data/examples/script.rb +25 -0
- data/examples/signature.rb +18 -4
- data/examples/user_test.rb +11 -5
- data/examples/venue_search.rb +16 -13
- data/lib/ncmb.rb +23 -20
- data/lib/ncmb/acl.rb +10 -2
- data/lib/ncmb/client.rb +42 -21
- data/lib/ncmb/data_store.rb +12 -2
- data/lib/ncmb/device.rb +3 -1
- data/lib/ncmb/error.rb +2 -0
- data/lib/ncmb/file.rb +8 -1
- data/lib/ncmb/geo_point.rb +6 -4
- data/lib/ncmb/increment.rb +2 -0
- data/lib/ncmb/object.rb +12 -3
- data/lib/ncmb/push.rb +2 -0
- data/lib/ncmb/query.rb +20 -18
- data/lib/ncmb/relation.rb +9 -7
- data/lib/ncmb/role.rb +2 -0
- data/lib/ncmb/script.rb +56 -0
- data/lib/ncmb/user.rb +2 -0
- data/lib/ncmb/version.rb +3 -1
- data/ncmb-ruby-client.gemspec +13 -12
- data/spec/delete_spec.rb +13 -9
- data/spec/get_spec.rb +9 -5
- data/spec/post_spec.rb +11 -6
- data/spec/put_spec.rb +19 -10
- data/spec/spec_helper.rb +6 -3
- metadata +8 -6
data/examples/venue_search.rb
CHANGED
@@ -1,34 +1,37 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
4
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
5
|
+
|
3
6
|
require 'rubygems'
|
4
7
|
require 'ncmb'
|
5
8
|
require 'yaml'
|
6
9
|
yaml = YAML.load_file(File.join(File.dirname(__FILE__), '..', 'setting.yml'))
|
7
|
-
|
10
|
+
NCMB.initialize(application_key: yaml['application_key'],
|
8
11
|
client_key: yaml['client_key']
|
9
12
|
)
|
10
13
|
json = JSON.parse(open(File.join(File.dirname(__FILE__), 'venues.json'), 'r').read)
|
11
|
-
venues_class =
|
14
|
+
venues_class = NCMB::DataStore.new 'Venues'
|
12
15
|
json['response']['venues'].each do |venue|
|
13
16
|
params = {
|
14
17
|
name: venue['name'],
|
15
18
|
location: {
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
+
'__type' => 'GeoPoint',
|
20
|
+
'latitude' => venue['location']['lat'],
|
21
|
+
'longitude' => venue['location']['lng']
|
19
22
|
}
|
20
23
|
}
|
21
24
|
puts venues_class.post(params).body
|
22
25
|
end
|
23
26
|
params = {}
|
24
27
|
params[:where] = {
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
28
|
+
'location' => {
|
29
|
+
'$nearSphere' => {
|
30
|
+
'__type' => 'GeoPoint',
|
31
|
+
'longitude' => 139.745433,
|
32
|
+
'latitude' => 35.691152
|
30
33
|
},
|
31
|
-
|
34
|
+
'$maxDistanceInKilometers' => 10
|
32
35
|
}
|
33
36
|
}
|
34
37
|
#
|
data/lib/ncmb.rb
CHANGED
@@ -1,26 +1,29 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
4
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
5
|
|
4
6
|
require 'time'
|
5
7
|
require 'openssl'
|
6
8
|
require 'base64'
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
9
|
+
require 'net/http'
|
10
|
+
require 'uri'
|
11
|
+
require 'erb'
|
12
|
+
require 'json'
|
11
13
|
require 'securerandom'
|
12
14
|
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require
|
20
|
-
require
|
21
|
-
require
|
22
|
-
require
|
23
|
-
require
|
24
|
-
require
|
25
|
-
require
|
26
|
-
require
|
15
|
+
require 'ncmb/version'
|
16
|
+
require 'ncmb/client'
|
17
|
+
require 'ncmb/query'
|
18
|
+
require 'ncmb/data_store'
|
19
|
+
require 'ncmb/object'
|
20
|
+
require 'ncmb/file'
|
21
|
+
require 'ncmb/user'
|
22
|
+
require 'ncmb/push'
|
23
|
+
require 'ncmb/geo_point'
|
24
|
+
require 'ncmb/increment'
|
25
|
+
require 'ncmb/acl'
|
26
|
+
require 'ncmb/role'
|
27
|
+
require 'ncmb/relation'
|
28
|
+
require 'ncmb/script'
|
29
|
+
require 'ncmb/error'
|
data/lib/ncmb/acl.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module NCMB
|
2
4
|
class Acl
|
3
5
|
include NCMB
|
@@ -23,16 +25,22 @@ module NCMB
|
|
23
25
|
end
|
24
26
|
params.to_json
|
25
27
|
end
|
28
|
+
|
29
|
+
def fields
|
30
|
+
@fields
|
31
|
+
end
|
26
32
|
|
27
|
-
def public(read_or_write,
|
28
|
-
@fields['*'.to_sym][read_or_write.to_sym] =
|
33
|
+
def public(read_or_write, bol = true)
|
34
|
+
@fields['*'.to_sym][read_or_write.to_sym] = bol
|
29
35
|
end
|
30
36
|
|
37
|
+
# :reek:DuplicateMethodCall { max_calls: 2 }
|
31
38
|
def user(user, read_or_write, value = true)
|
32
39
|
@fields[user.objectId.to_sym] = {read: true, write: true} unless @fields[user.objectId.to_sym]
|
33
40
|
@fields[user.objectId.to_sym][read_or_write.to_sym] = value
|
34
41
|
end
|
35
42
|
|
43
|
+
# :reek:DuplicateMethodCall { max_calls: 2 }
|
36
44
|
def role(role, read_or_write, value = true)
|
37
45
|
@fields[role.name.to_sym] = {read: true, write: true} unless @fields[role.name.to_sym]
|
38
46
|
@fields[role.name.to_sym][read_or_write.to_sym] = value
|
data/lib/ncmb/client.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Time
|
2
4
|
def to_json(a)
|
3
5
|
v = self.getgm
|
@@ -6,7 +8,9 @@ class Time
|
|
6
8
|
end
|
7
9
|
|
8
10
|
module NCMB
|
9
|
-
DOMAIN = '
|
11
|
+
DOMAIN = 'mbaas.api.nifcloud.com'
|
12
|
+
SCRIPT_DOMAIN = 'script.mbaas.api.nifcloud.com'
|
13
|
+
SCRIPT_API_VERSION = '2015-09-01'
|
10
14
|
API_VERSION = '2013-09-01'
|
11
15
|
@application_key = nil
|
12
16
|
@client_key = nil
|
@@ -16,28 +20,30 @@ module NCMB
|
|
16
20
|
|
17
21
|
class Client
|
18
22
|
include NCMB
|
19
|
-
attr_accessor :application_key, :client_key, :domain, :api_version
|
23
|
+
attr_accessor :application_key, :client_key, :domain, :api_version, :script_api_version
|
20
24
|
def initialize(params = {})
|
21
25
|
@domain = NCMB::DOMAIN
|
22
26
|
@api_version = NCMB::API_VERSION
|
27
|
+
@script_domain = NCMB::SCRIPT_DOMAIN
|
28
|
+
@script_api_version = NCMB::SCRIPT_API_VERSION
|
23
29
|
@application_key = params[:application_key]
|
24
30
|
@client_key = params[:client_key]
|
25
31
|
end
|
26
32
|
|
27
|
-
def get(path, params = {})
|
28
|
-
request :get, path, params
|
33
|
+
def get(path, params = {}, headers = {})
|
34
|
+
request :get, path, params, headers
|
29
35
|
end
|
30
36
|
|
31
|
-
def post(path, params = {})
|
32
|
-
request :post, path, params
|
37
|
+
def post(path, params = {}, headers = {})
|
38
|
+
request :post, path, params, headers
|
33
39
|
end
|
34
40
|
|
35
|
-
def put(path, params = {})
|
36
|
-
request :put, path, params
|
41
|
+
def put(path, params = {}, headers = {})
|
42
|
+
request :put, path, params, headers
|
37
43
|
end
|
38
44
|
|
39
|
-
def delete(path, params = {})
|
40
|
-
request :delete, path, params
|
45
|
+
def delete(path, params = {}, headers = {})
|
46
|
+
request :delete, path, params, headers
|
41
47
|
end
|
42
48
|
|
43
49
|
def array2hash(ary)
|
@@ -58,7 +64,7 @@ module NCMB
|
|
58
64
|
results = {}
|
59
65
|
queries.each do |k, v|
|
60
66
|
v = array2hash(v) if v.is_a? Array
|
61
|
-
value = URI.
|
67
|
+
value = URI.encode_www_form_component(v.is_a?(Hash) ? v.to_json : v.to_s).gsub("[", "%5B").gsub(":", "%3A").gsub("]", "%5D")
|
62
68
|
results[k.to_s] = value
|
63
69
|
end
|
64
70
|
results
|
@@ -88,7 +94,6 @@ module NCMB
|
|
88
94
|
results[k.to_s] = v.to_s
|
89
95
|
end
|
90
96
|
end
|
91
|
-
puts results
|
92
97
|
results
|
93
98
|
end
|
94
99
|
|
@@ -112,10 +117,10 @@ module NCMB
|
|
112
117
|
end
|
113
118
|
signature_base = []
|
114
119
|
signature_base << method.upcase
|
115
|
-
signature_base <<
|
120
|
+
signature_base << get_domain(path)
|
116
121
|
signature_base << path
|
117
122
|
signature_base << params.collect{|k,v| "#{k}=#{v}"}.join("&")
|
118
|
-
|
123
|
+
Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), @client_key, signature_base.join("\n"))).strip()
|
119
124
|
end
|
120
125
|
|
121
126
|
def make_boundary(boundary, queries)
|
@@ -123,7 +128,6 @@ module NCMB
|
|
123
128
|
post_body << "--#{boundary}"
|
124
129
|
post_body << "Content-Disposition: form-data; name=\"file\"; filename=\"#{queries[:fileName]}\""
|
125
130
|
post_body << "Content-Type: #{queries['mime-type'.to_sym]}"
|
126
|
-
post_body << ""
|
127
131
|
post_body << queries[:file].read
|
128
132
|
post_body << ""
|
129
133
|
post_body << "--#{boundary}"
|
@@ -134,10 +138,19 @@ module NCMB
|
|
134
138
|
post_body.join("\r\n")
|
135
139
|
end
|
136
140
|
|
137
|
-
def
|
141
|
+
def get_domain(path)
|
142
|
+
domain = @domain
|
143
|
+
if path.start_with?("/#{@script_api_version}/script\/")
|
144
|
+
domain = @script_domain
|
145
|
+
end
|
146
|
+
domain
|
147
|
+
end
|
148
|
+
|
149
|
+
def request(method, path, queries = {}, addHeaders = {})
|
138
150
|
now = Time.now.utc.iso8601
|
139
151
|
signature = generate_signature(method, path, now, queries)
|
140
|
-
|
152
|
+
domain = get_domain(path)
|
153
|
+
http = Net::HTTP.new(domain, 443)
|
141
154
|
http.use_ssl=true
|
142
155
|
headers = {
|
143
156
|
"X-NCMB-Application-Key" => @application_key,
|
@@ -145,8 +158,11 @@ module NCMB
|
|
145
158
|
"X-NCMB-Timestamp" => now,
|
146
159
|
"Content-Type" => 'application/json'
|
147
160
|
}
|
161
|
+
Array(addHeaders || {}).each do |name, value|
|
162
|
+
headers[name] = value
|
163
|
+
end
|
148
164
|
if NCMB.CurrentUser
|
149
|
-
headers['X-NCMB-Apps-Session-Token'] = NCMB.CurrentUser
|
165
|
+
headers['X-NCMB-Apps-Session-Token'] = NCMB.CurrentUser[:sessionToken]
|
150
166
|
end
|
151
167
|
# queries = hash2query(queries)
|
152
168
|
json = nil
|
@@ -157,10 +173,15 @@ module NCMB
|
|
157
173
|
"#{key}=#{value}"
|
158
174
|
end.join("&")
|
159
175
|
path = path + (query == '' ? "" : "?"+query)
|
160
|
-
|
176
|
+
rp = Regexp.new "/#{NCMB::API_VERSION}/files/.*"
|
177
|
+
if path =~ rp
|
178
|
+
json = http.get(path, headers).body
|
179
|
+
else
|
180
|
+
json = JSON.parse(http.get(path, headers).body, symbolize_names: true)
|
181
|
+
end
|
161
182
|
when :post
|
162
183
|
req = Net::HTTP::Post.new(path)
|
163
|
-
if
|
184
|
+
if path.include? "/2013-09-01/files"
|
164
185
|
boundary = SecureRandom.uuid
|
165
186
|
req.body = make_boundary(boundary, queries)
|
166
187
|
headers["Content-Type"] = "multipart/form-data; boundary=#{boundary}"
|
@@ -195,7 +216,7 @@ module NCMB
|
|
195
216
|
@@last_error = e
|
196
217
|
raise NCMB::APIError.new(e.to_s)
|
197
218
|
end
|
198
|
-
if json[:error] != nil
|
219
|
+
if json.is_a?(Hash) && json[:error] != nil
|
199
220
|
raise NCMB::APIError.new(json[:error])
|
200
221
|
end
|
201
222
|
json
|
data/lib/ncmb/data_store.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module NCMB
|
2
4
|
class DataStore
|
3
5
|
include NCMB
|
@@ -74,11 +76,19 @@ module NCMB
|
|
74
76
|
|
75
77
|
def path
|
76
78
|
return @path if @path
|
77
|
-
|
79
|
+
if ["file", "user", "push", "installation"].include? @name
|
80
|
+
if @name == "push"
|
81
|
+
"/#{@@client.api_version}/#{@name}"
|
82
|
+
else
|
83
|
+
"/#{@@client.api_version}/#{@name}s"
|
84
|
+
end
|
85
|
+
else
|
86
|
+
"/#{@@client.api_version}/classes/#{@name}"
|
87
|
+
end
|
78
88
|
end
|
79
89
|
|
80
90
|
def get
|
81
|
-
return @items unless @items.nil?
|
91
|
+
# return @items unless @items.nil?
|
82
92
|
results = @@client.get path, @queries
|
83
93
|
return [] unless results
|
84
94
|
if results[:error] && results[:error] != ""
|
data/lib/ncmb/device.rb
CHANGED
data/lib/ncmb/error.rb
CHANGED
data/lib/ncmb/file.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'mime/types'
|
2
4
|
module NCMB
|
3
5
|
class NFile < NCMB::Object
|
@@ -8,14 +10,19 @@ module NCMB
|
|
8
10
|
@fields[:fileName] = File.basename(file_path)
|
9
11
|
@fields['mime-type'.to_sym] = MIME::Types.type_for(file_path)[0]
|
10
12
|
end
|
13
|
+
@content = nil
|
11
14
|
end
|
12
15
|
|
13
16
|
def save
|
14
|
-
@fields[:file] =
|
17
|
+
@fields[:file] = ::OpenURI.open_uri(self.file)
|
15
18
|
super
|
16
19
|
end
|
17
20
|
alias :update :save
|
18
21
|
|
22
|
+
def get
|
23
|
+
@content = @@client.get path
|
24
|
+
end
|
25
|
+
|
19
26
|
def path
|
20
27
|
"#{base_path}/#{@fields[:fileName]}"
|
21
28
|
end
|
data/lib/ncmb/geo_point.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module NCMB
|
2
4
|
class GeoPoint
|
3
5
|
include NCMB
|
@@ -7,11 +9,11 @@ module NCMB
|
|
7
9
|
@longitude = longitude
|
8
10
|
end
|
9
11
|
|
10
|
-
def to_json(a =
|
12
|
+
def to_json(a = '')
|
11
13
|
{
|
12
|
-
|
13
|
-
|
14
|
-
|
14
|
+
'__type': 'GeoPoint',
|
15
|
+
'longitude': @longitude,
|
16
|
+
'latitude': @latitude
|
15
17
|
}.to_json
|
16
18
|
end
|
17
19
|
|
data/lib/ncmb/increment.rb
CHANGED
data/lib/ncmb/object.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module NCMB
|
2
4
|
class Object
|
3
5
|
include NCMB
|
@@ -43,7 +45,7 @@ module NCMB
|
|
43
45
|
end
|
44
46
|
|
45
47
|
def deletable?
|
46
|
-
if self.acl[
|
48
|
+
if self.acl.fields[:*][:write] == true
|
47
49
|
return true
|
48
50
|
end
|
49
51
|
return false unless NCMB.CurrentUser
|
@@ -64,12 +66,12 @@ module NCMB
|
|
64
66
|
@fields[:objectId] != nil
|
65
67
|
end
|
66
68
|
|
67
|
-
def
|
69
|
+
def convert_params
|
68
70
|
@fields.each do |key, field|
|
69
71
|
if field.is_a?(NCMB::Object)
|
70
72
|
field.save unless field.saved?
|
71
73
|
@fields[key] = {
|
72
|
-
__type:
|
74
|
+
__type: 'Pointer',
|
73
75
|
className: field.ClassName,
|
74
76
|
objectId: field.objectId
|
75
77
|
}
|
@@ -83,6 +85,11 @@ module NCMB
|
|
83
85
|
@fields[key] = relation
|
84
86
|
end
|
85
87
|
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def post
|
91
|
+
return self.put if saved?
|
92
|
+
convert_params
|
86
93
|
result = @@client.post path, @fields
|
87
94
|
@fields.merge!(result)
|
88
95
|
self
|
@@ -90,6 +97,8 @@ module NCMB
|
|
90
97
|
alias :save :post
|
91
98
|
|
92
99
|
def put
|
100
|
+
return self.post unless saved?
|
101
|
+
convert_params
|
93
102
|
put_path = path
|
94
103
|
params = @fields
|
95
104
|
params.delete :objectId
|