usergrid_iron 0.0.4 → 0.0.5

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.
data/README.md CHANGED
@@ -47,7 +47,7 @@ application = Usergrid::Application.new "#{usergrid_api}/#{organization}/#{appli
47
47
  application.login username, password
48
48
 
49
49
  # create and store a dog in the 'dogs' collection on the server
50
- response = application.create_entity 'dogs', { breed: 'Black Mouth Cur', name: 'Old Yeller' }
50
+ response = application.create_dog breed: 'Black Mouth Cur', name: 'Old Yeller'
51
51
 
52
52
  # let's get the dog from the response and grab its persistent id
53
53
  dog = response.entity
@@ -89,7 +89,7 @@ you shouldn't need to do anything!)
89
89
  new_application = organization.create_application app_name
90
90
 
91
91
  # create an user for our application
92
- new_application.create_user 'username', 'password'
92
+ new_application.create_user username: 'username', password: 'password'
93
93
 
94
94
 
95
95
  ## now we can play with the puppies! ##
@@ -99,10 +99,11 @@ you shouldn't need to do anything!)
99
99
  application.login 'username', 'password'
100
100
 
101
101
  # we can start with our dog again
102
- application.create_entity 'dogs', { breed: 'Black Mouth Cur', name: 'Old Yeller' }
102
+ application.create_dog breed: 'Black Mouth Cur', name: 'Old Yeller'
103
103
 
104
104
  # but this time let's create several more dogs at once
105
- application.create_entities 'dogs', [{ breed: 'Catalan sheepdog', name: 'Einstein' },
105
+ application.create_dogs [
106
+ { breed: 'Catalan sheepdog', name: 'Einstein' },
106
107
  { breed: 'Cocker Spaniel', name: 'Lady' },
107
108
  { breed: 'Mixed', name: 'Benji' }]
108
109
 
@@ -122,7 +123,7 @@ you shouldn't need to do anything!)
122
123
 
123
124
  # query for the dogs that are home (should just be Benji)
124
125
  dogs = application['dogs'].query("select * where location = 'home'").collection
125
- if dogs.size == 1 && dogs.first == 'home'
126
+ if dogs.size == 1 && dogs.first.location == 'home'
126
127
  puts "Benji's home!"
127
128
  end
128
129
 
@@ -154,7 +155,24 @@ usergrid_iron/spec/spec_settings.yaml to match.)
154
155
 
155
156
  ## Release notes
156
157
 
157
- ### 0.0.3
158
+ ### 0.0.5
159
+ * New features
160
+ 1. added create_* method for application
161
+ * Backend changes
162
+ 1. eliminated serialization of reserved attributes
163
+ * Incompatible changes
164
+ 1. deprecated `Application::create_user username, password, ...`, use `create_user username: 'user', password: 'password'`
165
+
166
+ ### 0.0.4
167
+ * New features
168
+ 1. empty? check for collection
169
+ 2. update queries (batch update)
170
+ * Backend changes
171
+ 1. Additional data sanity checks
172
+ 2. Additional flexibility in concat_urls
173
+ 3. Cleanup
174
+
175
+ ### 0.0.3
158
176
  * New features
159
177
  1. Support for lists returned when making parameterized queries:
160
178
  <pre>select username, email where…</pre>
@@ -7,51 +7,24 @@ module Usergrid
7
7
  super url, api_url, options
8
8
  end
9
9
 
10
- def create_user(username, password, email=nil, name=nil, invite=false)
11
- user_hash = { username: username,
12
- password: password,
13
- email: email,
14
- name: name,
15
- invite: invite }
16
- create_entity 'users', user_hash
17
- end
18
-
19
- # note: collection_name s/b plural!
10
+ # note: collection_name s/b plural, but the server will change it if not
20
11
  def create_entity(collection_name, entity_data)
21
12
  self[collection_name].post entity_data
22
13
  end
23
14
  alias_method :create_entities, :create_entity
24
15
 
25
- def users(query=nil, options={})
26
- self[__method__].query(query, options)
27
- end
28
-
29
- def groups(query=nil, options={})
30
- self[__method__].query(query, options)
31
- end
32
-
33
- def activities(query=nil, options={})
34
- self[__method__].query(query, options)
35
- end
36
-
37
- def devices(query=nil, options={})
38
- self[__method__].query(query, options)
39
- end
40
-
41
- def assets(query=nil, options={})
42
- self[__method__].query(query, options)
43
- end
44
-
45
- def folders(query=nil, options={})
46
- self[__method__].query(query, options)
47
- end
48
-
49
- def events(query=nil, options={})
50
- self[__method__].query(query, options)
51
- end
52
-
53
- def roles(query=nil, options={})
54
- self[__method__].query(query, options)
16
+ # allow create_something(hash_or_array) method
17
+ def method_missing(method, *args, &block)
18
+ method_s = method.to_s
19
+ if method_s.start_with? 'create_'
20
+ entity = method_s.split('_')[1]
21
+ return _create_user *args if entity == 'user' && args[0].is_a?(String) # backwards compatibility
22
+ create_entity entity, *args
23
+ elsif method_s.end_with? 's' # shortcut for retrieving collections
24
+ self[method].query(*args)
25
+ else
26
+ super method, args, block
27
+ end
55
28
  end
56
29
 
57
30
  def counter_names
@@ -64,5 +37,17 @@ module Usergrid
64
37
  self['counters'].get({params: options})
65
38
  end
66
39
 
40
+ private
41
+
42
+ def _create_user(username, password, email=nil, name=nil, invite=false)
43
+ LOG.warn "create_user(username, password, ...) is deprecated"
44
+ user_hash = { username: username,
45
+ password: password,
46
+ email: email,
47
+ name: name,
48
+ invite: invite }
49
+ create_entity 'users', user_hash
50
+ end
51
+
67
52
  end
68
53
  end
@@ -40,6 +40,12 @@ module Usergrid
40
40
  "resource: #{url}\ndata: #{data}"
41
41
  end
42
42
 
43
+ def to_json(*args)
44
+ data.except(RESERVED).to_json *args
45
+ end
46
+ alias :encode :to_json
47
+ alias :dump :to_json
48
+
43
49
  private
44
50
 
45
51
  def method_missing(method, *args, &block)
@@ -3,8 +3,9 @@ require 'rest_client'
3
3
  module Usergrid
4
4
  class Resource < RestClient::Resource
5
5
 
6
+ RESERVED = %w( created modified metadata uri )
6
7
  DEFAULT_API_URL = 'https://api.usergrid.com'
7
- TYPE_HEADERS = { :content_type => :json, :accept => :json }
8
+ TYPE_HEADERS = { content_type: :json, accept: :json }
8
9
 
9
10
  attr_reader :current_user, :api_url
10
11
 
@@ -59,10 +60,17 @@ module Usergrid
59
60
  end
60
61
 
61
62
  def entity
63
+ get unless response
62
64
  response.entity
63
65
  end
64
66
 
67
+ def entities
68
+ get unless response
69
+ response.entities
70
+ end
71
+
65
72
  def collection
73
+ get unless response
66
74
  Collection.new url, api_url, options, response
67
75
  end
68
76
 
@@ -85,12 +93,12 @@ module Usergrid
85
93
  end
86
94
 
87
95
  def post(payload, additional_headers={}, &block)
88
- payload = MultiJson.dump(payload) if payload.is_a?(Hash) || payload.is_a?(Array)
96
+ payload = MultiJson.dump(payload) unless payload.is_a? String
89
97
  self.response = super payload, additional_headers, &block
90
98
  end
91
99
 
92
100
  def put(payload, additional_headers={}, &block)
93
- payload = MultiJson.dump(payload) if payload.is_a?(Hash) || payload.is_a?(Array)
101
+ payload = MultiJson.dump(payload) unless payload.is_a? String
94
102
  self.response = super payload, additional_headers, &block
95
103
  end
96
104
 
@@ -1,10 +1,5 @@
1
1
  class Hash
2
2
 
3
- # recursive
4
- def add_dot_notation!
5
- add_dot_notation_recurse! self
6
- end
7
-
8
3
  # not recursive
9
4
  def symbolize_keys
10
5
  inject({}) do |options, (key, value)|
@@ -13,15 +8,23 @@ class Hash
13
8
  end
14
9
  end
15
10
 
16
- private
11
+ def except(*keys)
12
+ dup.except! *keys
13
+ end
17
14
 
18
- def add_dot_notation_recurse!(_hash)
15
+ def except!(*keys)
16
+ keys.each { |key| key.is_a?(Array) ? except!(*key) : delete(key) }
17
+ self
18
+ end
19
+
20
+ # recursive
21
+ def add_dot_notation!(_hash=self)
19
22
  _hash.each do |k,v|
20
23
  getter = k.to_sym; setter = "#{k}=".to_sym
21
24
  _hash.define_singleton_method getter, lambda { _hash[k] } unless _hash.respond_to? getter
22
25
  _hash.define_singleton_method setter, lambda { |v| _hash[k] = v } unless _hash.respond_to? setter
23
- add_dot_notation_recurse!(v) if v.is_a? Hash
24
- v.each { |e| add_dot_notation_recurse!(e) if e.is_a? Hash } if v.is_a? Array
26
+ add_dot_notation!(v) if v.is_a? Hash
27
+ v.each { |e| add_dot_notation!(e) if e.is_a? Hash } if v.is_a? Array
25
28
  end
26
29
  end
27
30
  end
@@ -1,3 +1,3 @@
1
1
  module Usergrid
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
3
3
  end
@@ -10,10 +10,16 @@ describe Usergrid::Application do
10
10
  delete_application @application
11
11
  end
12
12
 
13
+ it "should be able to create a user using deprecated syntax" do
14
+ random = SecureRandom.hex
15
+ response = @application.create_user "username_#{random}", 'password'
16
+ response.entity.uuid.should_not be_nil
17
+ end
18
+
13
19
  it "should be able to create, login, and delete a user" do
14
20
  random = SecureRandom.hex
15
21
  application = Usergrid::Application.new @application.url # create application resource that's not logged in
16
- response = application.create_user "username_#{random}", 'password'
22
+ response = application.create_user username: "username_#{random}", password: 'password'
17
23
  entity = response.entity
18
24
  application.login "username_#{random}", 'password'
19
25
  begin
@@ -201,7 +207,8 @@ describe Usergrid::Application do
201
207
  response = @application.counter 'test'
202
208
  counter = response.data.counters.first
203
209
  counter.name.should eq 'test'
204
- counter.values.last.first.value.should be > 0
210
+ # can't reliably test this - counters are batched on server
211
+ #counter.values.last.first.value.should be > 0
205
212
  end
206
213
 
207
214
  it "should be able to create, retrieve, and delete roles" do
@@ -251,13 +258,40 @@ describe Usergrid::Application do
251
258
  end
252
259
 
253
260
  it "should be able to create a new collection and access it" do
254
- entities = (1..4).collect do |i|
255
- { name: "test_#{i}" }
256
- end
261
+ entities = (1..4).collect { |i| { name: "test_#{i}" } }
257
262
  @application.create_entities 'tests', entities
258
263
  response = @application['tests'].get
259
264
  collection = response.collection
260
265
  collection.size.should eq 4
261
266
  end
262
267
 
268
+ it "should be able to create a new collection via create_ method and access it" do
269
+ entities = (1..4).collect { |i| { name: "test_#{i}" } }
270
+ @application.create_moretests entities
271
+ response = @application['tests'].get
272
+ collection = response.collection
273
+ collection.size.should eq 4
274
+ end
275
+
276
+ it "should be able to access a collection without calling get" do
277
+ entities = (1..4).collect { |i| { name: "test_#{i}" } }
278
+ @application.create_entities 'tests', entities
279
+ collection = @application['tests'].collection
280
+ collection.size.should eq 4
281
+ end
282
+
283
+ it "should be able to access entities without calling get" do
284
+ entities = (1..4).collect { |i| { name: "test_#{i}" } }
285
+ @application.create_entities 'tests', entities
286
+ entities = @application['tests'].entities
287
+ entities.size.should eq 4
288
+ end
289
+
290
+ it "should be able to query using dot notation" do
291
+ entities = (1..4).collect { |i| { name: "test_#{i}" } }
292
+ @application.create_btests entities
293
+ entities = @application.btests("name = 'test_1'").entities
294
+ entities.size.should eq 1
295
+ end
296
+
263
297
  end
@@ -46,4 +46,10 @@ describe Usergrid::Entity do
46
46
  @application['foobars'].get.entity.should be_nil
47
47
  end
48
48
 
49
+ it "should not serialize reserved attributes" do
50
+ dump = MultiJson.dump @user
51
+ hash = MultiJson.load dump
52
+ Usergrid::Resource::RESERVED.each { |a| hash.should_not have_key(a) }
53
+ end
54
+
49
55
  end
@@ -9,7 +9,7 @@ Gem::Specification.new do |gem|
9
9
  (aka Usergrid) REST API with minimal dependencies.}
10
10
  gem.homepage = "https://github.com/scottganyo/usergrid_iron"
11
11
 
12
- gem.files = `/usr/local/git/bin/git ls-files`.split($\)
12
+ gem.files = `git ls-files`.split($\)
13
13
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
14
14
  gem.test_files = gem.files.grep(%r{^(spec|spec|features)/})
15
15
  gem.name = "usergrid_iron"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: usergrid_iron
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-13 00:00:00.000000000 Z
12
+ date: 2012-11-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -149,7 +149,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
149
149
  version: '0'
150
150
  segments:
151
151
  - 0
152
- hash: 1515715500160031430
152
+ hash: -2026056560338254280
153
153
  required_rubygems_version: !ruby/object:Gem::Requirement
154
154
  none: false
155
155
  requirements:
@@ -158,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
158
158
  version: '0'
159
159
  segments:
160
160
  - 0
161
- hash: 1515715500160031430
161
+ hash: -2026056560338254280
162
162
  requirements: []
163
163
  rubyforge_project:
164
164
  rubygems_version: 1.8.24