ncmb-ruby-client 0.0.9 → 0.1.0

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: a99591b3222464ef82634322a71414dfc6663465
4
- data.tar.gz: 995375ed8c9a7ef1d3fce4cb4ae2304bfd0b9cea
3
+ metadata.gz: 5070337bf5759d8e8612db60a27a99fbf846071c
4
+ data.tar.gz: 8e3cc58ab2a7076b00a1ae606cf7d8916e0ff1e9
5
5
  SHA512:
6
- metadata.gz: d59a07ef9b8c75191ece14db9bfc5930017f4e706af983b56b245a4b9486ce9d22bb96147680ce076ec027499570aeaac338df71289e91dce0d49e2768149c0f
7
- data.tar.gz: 7d66392148b933ebdeb52061a49122001d744c3fb98aae5d77d52bad2117bf8bb7156fac2a9bbcdee3130b90ecf703261f77c654a14ad7fc07b42b4887a929a1
6
+ metadata.gz: 2ef149bd509da1aa9453ca2a7f19a5a736a9857f9ed0880286f0276040ade20484bf19f1cb151466802bb6c9f5dd816fa437a0c122de6d53b93f80c4438c88e8
7
+ data.tar.gz: c19ea27d7910c912e68fde7b9be91bbbaf53659a3a7f89e469026377ac888cc63fa326ac54619c8d07ba507dd0682e9be64ef707bc1d62e1533590c468686aa2
@@ -0,0 +1,49 @@
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
+ @users = []
10
+
11
+ @ids = [
12
+ {id: 'testUser1', password: 'testPassword1'},
13
+ {id: 'testUser2', password: 'testPassword2'}
14
+ ]
15
+ @ids.each do |hash|
16
+ @user = NCMB::User.login(hash[:id], hash[:password])
17
+ if @user
18
+ else
19
+ @user = NCMB::User.new
20
+ @user.set('userName', hash[:id])
21
+ @user.set('password', hash[:password])
22
+ if @user.signUp
23
+ else
24
+ puts "User create failed. #{@user.error.message}"
25
+ exit
26
+ end
27
+ end
28
+ @users << @user
29
+ end
30
+
31
+ @testData = NCMB::DataStore.new 'testData'
32
+ @testData.delete_all
33
+
34
+ @item = @testData.new
35
+ @item.Message = 'World'
36
+ @item.acl.public('read', true)
37
+ @item.acl.public('write', false)
38
+ @item.acl.user(@users[0], 'read', true)
39
+ @item.acl.user(@users[0], 'write', true)
40
+ @role = NCMB::Role.find_or_create("manager2")
41
+
42
+ @item.acl.role(@role, 'read', true)
43
+ @item.acl.role(@role, 'write', true)
44
+ @item.save
45
+
46
+ @data = @testData.where('objectId', @item.objectId).limit(1).get
47
+
48
+ @user = NCMB::User.login(@ids[0][:id], @ids[0][:password])
49
+ @testData.delete_all
@@ -9,7 +9,7 @@ NCMB.initialize application_key: yaml['application_key'], client_key: yaml['cli
9
9
  example = NCMB::DataStore.new 'Example'
10
10
  example.delete_all
11
11
 
12
- 10.times do |i|
12
+ 9.times do |i|
13
13
  item = example.new
14
14
  item.set('String', "テスト#{i}00")
15
15
  item.set('Integer', i)
@@ -26,7 +26,3 @@ if @user.signUp
26
26
  else
27
27
  puts "User create failed. #{@user.error.message}"
28
28
  end
29
-
30
-
31
-
32
-
data/lib/ncmb/acl.rb ADDED
@@ -0,0 +1,41 @@
1
+ module NCMB
2
+ class Acl < NCMB::Object
3
+ include NCMB
4
+
5
+ def initialize(params = nil)
6
+ @fields = {'*': {
7
+ read: true,
8
+ write: true
9
+ }
10
+ }
11
+ if params
12
+ @fields = @fields.merge(params)
13
+ end
14
+ end
15
+
16
+ def to_json(a = "")
17
+ params = {}
18
+ @fields.each do |key, value|
19
+ params[key.to_sym] = {} if value[:read] || value[:write]
20
+ [:read, :write].each do |name|
21
+ params[key.to_sym][name] = true if value[name]
22
+ end
23
+ end
24
+ params.to_json
25
+ end
26
+
27
+ def public(read_or_write, value = true)
28
+ @fields['*'.to_sym][read_or_write.to_sym] = value
29
+ end
30
+
31
+ def user(user, read_or_write, value = true)
32
+ @fields[user.objectId.to_sym] = {read: true, write: true} unless @fields[user.objectId.to_sym]
33
+ @fields[user.objectId.to_sym][read_or_write.to_sym] = value
34
+ end
35
+
36
+ def role(role, read_or_write, value = true)
37
+ @fields[role.name.to_sym] = {read: true, write: true} unless @fields[role.name.to_sym]
38
+ @fields[role.name.to_sym][read_or_write.to_sym] = value
39
+ end
40
+ end
41
+ end
data/lib/ncmb/client.rb CHANGED
@@ -24,20 +24,20 @@ module NCMB
24
24
  @client_key = params[:client_key]
25
25
  end
26
26
 
27
- def get(path, params = {}, session_key = nil)
28
- request :get, path, params, session_key
27
+ def get(path, params = {})
28
+ request :get, path, params
29
29
  end
30
30
 
31
- def post(path, params = {}, session_key = nil)
32
- request :post, path, params, session_key
31
+ def post(path, params = {})
32
+ request :post, path, params
33
33
  end
34
34
 
35
- def put(path, params = {}, session_key = nil)
36
- request :put, path, params, session_key
35
+ def put(path, params = {})
36
+ request :put, path, params
37
37
  end
38
38
 
39
- def delete(path, params = {}, session_key = nil)
40
- request :delete, path, params, session_key
39
+ def delete(path, params = {})
40
+ request :delete, path, params
41
41
  end
42
42
 
43
43
  def array2hash(ary)
@@ -118,7 +118,7 @@ module NCMB
118
118
  signature = Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), @client_key, signature_base.join("\n"))).strip()
119
119
  end
120
120
 
121
- def request(method, path, queries = {}, session_key = nil)
121
+ def request(method, path, queries = {})
122
122
  now = Time.now.utc.iso8601
123
123
  signature = generate_signature(method, path, now, queries)
124
124
  http = Net::HTTP.new(@domain, 443)
@@ -129,12 +129,11 @@ module NCMB
129
129
  "X-NCMB-Timestamp" => now,
130
130
  "Content-Type" => 'application/json'
131
131
  }
132
- if session_key
133
- headers['X-NCMB-Apps-Session-Token'] = session_key
132
+ if NCMB.CurrentUser
133
+ headers['X-NCMB-Apps-Session-Token'] = NCMB.CurrentUser.sessionToken
134
134
  end
135
135
  # queries = hash2query(queries)
136
136
  json = nil
137
- begin
138
137
  case method
139
138
  when :get
140
139
  query = encode_query(queries).map do |key, value|
@@ -152,6 +151,7 @@ module NCMB
152
151
  return true if response == ""
153
152
  json = JSON.parse(response, symbolize_names: true)
154
153
  end
154
+ begin
155
155
  rescue => e
156
156
  @@last_error = e
157
157
  raise NCMB::APIError.new(e.to_s)
@@ -8,7 +8,9 @@ module NCMB
8
8
  @fields = fields
9
9
  @queries = {where: []}
10
10
  @items = nil
11
+ @path = nil
11
12
  end
13
+ attr_accessor :path
12
14
 
13
15
  def error
14
16
  @error
@@ -131,9 +133,13 @@ module NCMB
131
133
  get[count]
132
134
  end
133
135
 
136
+ def path
137
+ return @path if @path
138
+ path = "/#{@@client.api_version}/classes/#{@name}"
139
+ end
140
+
134
141
  def get
135
142
  return @items unless @items.nil?
136
- path = "/#{@@client.api_version}/classes/#{@name}"
137
143
  results = @@client.get path, @queries
138
144
  return [] unless results
139
145
  if results[:error] && results[:error] != ""
@@ -153,9 +159,7 @@ module NCMB
153
159
  result[key] = Time.parse(field[:iso])
154
160
  end
155
161
  end
156
- alc = result[:acl]
157
- result.delete(:acl)
158
- @items << NCMB::Object.new(@name, result, alc)
162
+ @items << NCMB::Object.new(@name, result)
159
163
  end
160
164
  @items
161
165
  end
@@ -174,7 +178,11 @@ module NCMB
174
178
  end
175
179
  dataStore.queries.delete :count
176
180
  dataStore.each do |item|
177
- item.delete
181
+ begin
182
+ item.delete if item.deletable?
183
+ rescue
184
+ puts "Can't delete #{item.objectId}"
185
+ end
178
186
  end
179
187
  if count > max
180
188
  return delete_all
@@ -8,7 +8,11 @@ module NCMB
8
8
  end
9
9
 
10
10
  def to_json(a = "")
11
- "{\"__type\": \"GeoPoint\", \"longitude\": #{@longitude}, \"latitude\": #{@latitude}}"
11
+ {
12
+ "__type": "GeoPoint",
13
+ "longitude": @longitude,
14
+ "latitude": @latitude
15
+ }.to_json
12
16
  end
13
17
 
14
18
  def to_s
data/lib/ncmb/object.rb CHANGED
@@ -2,9 +2,9 @@ module NCMB
2
2
  class Object
3
3
  include NCMB
4
4
 
5
- def initialize(name, fields = {}, alc = "")
5
+ def initialize(name, fields = {})
6
6
  @name = name
7
- @alc = alc
7
+ fields[:acl] = NCMB::Acl.new(fields[:acl])
8
8
  @fields = fields
9
9
  end
10
10
 
@@ -12,12 +12,17 @@ module NCMB
12
12
  @fields
13
13
  end
14
14
 
15
- def method_missing(name)
16
- sym = name.to_sym
17
- if @fields.has_key?(sym)
18
- return @fields[sym]
15
+ def method_missing(name, value = nil)
16
+ if name =~ /.*=$/
17
+ sym = name.to_s.gsub(/(.*?)=$/, '\1').to_sym
18
+ @fields[sym] = value
19
19
  else
20
- raise NoMethodError, "#{name} is not found"
20
+ sym = name.to_sym
21
+ if @fields.has_key?(sym)
22
+ return @fields[sym]
23
+ else
24
+ raise NoMethodError, "#{name} is not found"
25
+ end
21
26
  end
22
27
  end
23
28
 
@@ -32,9 +37,26 @@ module NCMB
32
37
  def [](key)
33
38
  @fields[key]
34
39
  end
35
-
40
+
41
+ def deletable?
42
+ if self.acl['*'.to_sym][:write] == true
43
+ return true
44
+ end
45
+ return false unless NCMB.CurrentUser
46
+ return false unless self.acl[NCMB.CurrentUser.objectId.to_sym]
47
+ return false unless self.acl[NCMB.CurrentUser.objectId.to_sym][:write]
48
+ true
49
+ end
50
+
51
+ def base_path
52
+ "/#{@@client.api_version}/classes/#{@name}"
53
+ end
54
+
55
+ def path
56
+ "#{base_path}/#{@fields[:objectId] || '' }"
57
+ end
58
+
36
59
  def post
37
- path = "/#{@@client.api_version}/classes/#{@name}"
38
60
  result = @@client.post path, @fields
39
61
  @fields.merge!(result)
40
62
  self
@@ -42,7 +64,6 @@ module NCMB
42
64
  alias :save :post
43
65
 
44
66
  def put
45
- path = "/#{@@client.api_version}/classes/#{@name}/#{@fields[:objectId]}"
46
67
  params = @fields
47
68
  params.delete :objectId
48
69
  params.delete :createDate
@@ -54,7 +75,6 @@ module NCMB
54
75
  alias :update :put
55
76
 
56
77
  def delete
57
- path = "/#{@@client.api_version}/classes/#{@name}/#{@fields[:objectId]}"
58
78
  response = @@client.delete path, {}
59
79
  if response == true
60
80
  return true
data/lib/ncmb/role.rb ADDED
@@ -0,0 +1,35 @@
1
+ module NCMB
2
+ class Role < NCMB::Object
3
+ include NCMB
4
+
5
+ def initialize(name)
6
+ if name.is_a? Hash
7
+ @fields = name
8
+ else
9
+ @fields = {
10
+ roleName: name
11
+ }
12
+ end
13
+ end
14
+
15
+ def self.find_or_create(name)
16
+ d = NCMB::DataStore.new('role')
17
+ d.path = NCMB::Role.new(name).base_path
18
+ role = d.where('roleName', name).limit(1).get.first
19
+ role ? NCMB::Role.new(role.fields) : NCMB::Role.new(name).save()
20
+ end
21
+
22
+ def name
23
+ "role:#{@fields[:roleName]}"
24
+ end
25
+
26
+ def to_json
27
+
28
+ end
29
+
30
+ def base_path
31
+ path = "/#{@@client.api_version}/roles"
32
+ end
33
+
34
+ end
35
+ end
data/lib/ncmb/user.rb CHANGED
@@ -2,12 +2,11 @@ module NCMB
2
2
  class User < NCMB::Object
3
3
  include NCMB
4
4
 
5
- def initialize(params = {}, alc = nil)
6
- super('users', params, alc)
5
+ def initialize(params = {})
6
+ super('users', params)
7
7
  end
8
8
 
9
9
  def signUp
10
- path = "/#{@@client.api_version}/#{@name}"
11
10
  begin
12
11
  result = @@client.post path, @fields
13
12
  rescue => e
@@ -19,8 +18,11 @@ module NCMB
19
18
  self
20
19
  end
21
20
 
21
+ def base_path
22
+ path = "/#{@@client.api_version}/#{@name}"
23
+ end
24
+
22
25
  def put
23
- path = "/#{@@client.api_version}/#{@name}/#{@fields[:objectId]}"
24
26
  params = @fields
25
27
  session_key = params[:sessionToken]
26
28
  [:objectId, :createDate, :updateDate, :sessionToken, :password].each do |name|
@@ -33,7 +35,6 @@ module NCMB
33
35
  alias :update :put
34
36
 
35
37
  def delete
36
- path = "/#{@@client.api_version}/#{@name}/#{@fields[:objectId]}"
37
38
  response = @@client.delete path, {}, @fields[:sessionToken]
38
39
  if response == true
39
40
  @@current_user = nil
data/lib/ncmb/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ncmb
2
- VERSION = "0.0.9"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/ncmb.rb CHANGED
@@ -17,4 +17,6 @@ require "ncmb/user"
17
17
  require "ncmb/push"
18
18
  require "ncmb/geo_point"
19
19
  require "ncmb/increment"
20
+ require "ncmb/acl"
21
+ require "ncmb/role"
20
22
  require "ncmb/error"
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.9
4
+ version: 0.1.0
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-09 00:00:00.000000000 Z
11
+ date: 2016-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -64,6 +64,7 @@ files:
64
64
  - LICENSE.txt
65
65
  - README.md
66
66
  - Rakefile
67
+ - examples/acl_test.rb
67
68
  - examples/csv_test.rb
68
69
  - examples/data_store.rb
69
70
  - examples/push.rb
@@ -72,6 +73,7 @@ files:
72
73
  - examples/venue_search.rb
73
74
  - examples/venues.json
74
75
  - lib/ncmb.rb
76
+ - lib/ncmb/acl.rb
75
77
  - lib/ncmb/client.rb
76
78
  - lib/ncmb/data_store.rb
77
79
  - lib/ncmb/device.rb
@@ -80,6 +82,7 @@ files:
80
82
  - lib/ncmb/increment.rb
81
83
  - lib/ncmb/object.rb
82
84
  - lib/ncmb/push.rb
85
+ - lib/ncmb/role.rb
83
86
  - lib/ncmb/user.rb
84
87
  - lib/ncmb/version.rb
85
88
  - ncmb-ruby-client.gemspec