usergrid_iron 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/.rvmrc CHANGED
@@ -1,2 +1,2 @@
1
1
  rvm_gemset_create_on_use_flag=1
2
- rvm gemset use 'usergrid'
2
+ rvm gemset use 'usergrid_iron'
data/README.md CHANGED
@@ -1,8 +1,7 @@
1
1
  # Usergrid_iron
2
2
 
3
- Usergrid_iron enables simple, low-level Ruby access to Apigee's App Services (aka Usergrid) REST API with minimal
4
- dependencies.
5
-
3
+ Usergrid_iron enables simple, low-level Ruby access to Apigee's App Services (aka Usergrid)
4
+ REST API with minimal dependencies.
6
5
 
7
6
  ## Installation
8
7
 
@@ -21,16 +20,20 @@ Or install it yourself as:
21
20
 
22
21
  ## Usage
23
22
 
24
- 1. Not familiar with Usergrid / Apigee's App Services? It's great stuff! Check it out, here:
23
+ ### Not familiar with Usergrid / Apigee's App Services?
24
+
25
+ #### It's great stuff! Check it out, here:
26
+
27
+ Docs: <http://apigee.com/docs/usergrid/>
28
+ Open source: <https://github.com/apigee/usergrid-stack>
25
29
 
26
- Docs: http://apigee.com/docs/usergrid/
27
- Open source: https://github.com/apigee/usergrid-stack
30
+ ### Getting started with the Usergrid_iron SDK is simple!
28
31
 
29
- 2. Getting started with the Usergrid_iron SDK is simple! Let's start with the basics.
30
- I'll assume you've already set up an organization, application, and user - just fill in your
31
- own values in the code below.
32
+ #### Let's start with the basics.
33
+ For this example, we'll assume you've already set up an organization, application, and user -
34
+ just fill in your own values in the code below.
32
35
 
33
- <pre>
36
+ ```
34
37
  require 'usergrid_iron'
35
38
 
36
39
  # fill in your values here!
@@ -55,15 +58,18 @@ same_dog = application['dogs'][uuid].entity
55
58
 
56
59
  # is it our dog? well, he knows his name!
57
60
  puts "My dog's name is: #{same_dog.name}"
58
- </pre>
61
+ ```
59
62
 
60
- That was really easy. So let's try something slightly more complex.
61
- Let's say we've registered for an organization, but we don't have an application yet (or
62
- want to create a new one to work on). No worries, just fill in your organization and
63
- superuser credentials below, and follow along! (Better yet: If you used the Usergrid launcher
64
- and let it initialize your database, you shouldn't need to do anything!)
63
+ Well that was really easy.
65
64
 
66
- <pre>
65
+ #### Let's try something slightly more complex.
66
+ Let's say you've registered for an organization, but you don't have an application yet
67
+ (or want to create a new one to work on). No worries, just fill in your organization and
68
+ superuser credentials below, and follow along!
69
+ (Better yet: If you used the Usergrid launcher and let it initialize your database,
70
+ you shouldn't need to do anything!)
71
+
72
+ ```
67
73
  require 'usergrid_iron'
68
74
 
69
75
  usergrid_api = 'http://localhost:8080'
@@ -83,7 +89,7 @@ and let it initialize your database, you shouldn't need to do anything!)
83
89
  new_application = organization.create_application app_name
84
90
 
85
91
  # create an user for our application
86
- new_application.create_user 'username', 'name', 'email@test.com', 'password'
92
+ new_application.create_user 'username', 'password'
87
93
 
88
94
 
89
95
  ## now we can play with the puppies! ##
@@ -107,7 +113,7 @@ and let it initialize your database, you shouldn't need to do anything!)
107
113
  end
108
114
 
109
115
  # "Benji, come!"
110
- benji = dogs.query("select * where name = 'Benji'").entity # shortcut: entity will return the first in the collection
116
+ benji = dogs.query("select * where name = 'Benji'").entity # shortcut: entity() returns the first
111
117
 
112
118
  # modify Benji's attributes & save
113
119
  benji.location = 'home' # use attribute access
@@ -120,7 +126,7 @@ and let it initialize your database, you shouldn't need to do anything!)
120
126
  puts "Benji's home!"
121
127
  end
122
128
 
123
- </pre>
129
+ ```
124
130
 
125
131
  Whew. That's enough for now. But looking for a specific feature? Check out the rspecs,
126
132
  there are examples of nearly everything!
@@ -146,6 +152,23 @@ In order to run the tests, check out the Usergrid open source project
146
152
  usergrid_iron/spec/spec_settings.yaml to match.)
147
153
 
148
154
 
155
+ ## Release notes
156
+
157
+ ### 0.0.3
158
+ * New features
159
+ 1. Support for lists returned when making parameterized queries:
160
+ <pre>select username, email where…</pre>
161
+ or replacement queries:
162
+ <pre>select { user:username, email:email } where…
163
+ * Incompatible changes
164
+ 1. Application.create_user parameter change from:
165
+ <pre>create_user(username, name, email, password, invite=false)</pre>
166
+ to:
167
+ <pre>create_user(username, password, email=nil, name=nil, invite=false)</pre>
168
+ * Backend changes
169
+ 1. Replaced json_pure dependency with multi_json
170
+
171
+
149
172
  ## Notes
150
173
 
151
174
  The following features are not currently implemented on the server:
@@ -156,17 +179,16 @@ The following features are not currently implemented on the server:
156
179
 
157
180
 
158
181
  ## Copyright
182
+ Copyright (c) 2012 Scott Ganyo
183
+
184
+ Licensed under the Apache License, Version 2.0 (the "License");
185
+ you may not use the included files except in compliance with the License.
186
+
187
+ You may obtain a copy of the License at
159
188
 
160
- * Copyright (c) 2012 Scott Ganyo
161
- *
162
- * Licensed under the Apache License, Version 2.0 (the "License");
163
- * you may not use the included files except in compliance with the License.
164
- * You may obtain a copy of the License at
165
- *
166
- * http://www.apache.org/licenses/LICENSE-2.0
167
- *
168
- * Unless required by applicable law or agreed to in writing, software
169
- * distributed under the License is distributed on an "AS IS" BASIS,
170
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
171
- * See the License for the specific language governing permissions and
172
- * limitations under the License.
189
+ <http://www.apache.org/licenses/LICENSE-2.0>
190
+
191
+ Unless required by applicable law or agreed to in writing, software distributed under
192
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
193
+ either express or implied. See the License for the specific language governing permissions and
194
+ limitations under the License.
@@ -7,13 +7,13 @@ module Usergrid
7
7
  super url, api_url, options
8
8
  end
9
9
 
10
- def create_user(username, name, email, password, invite=false)
11
- data = { username: username,
12
- name: name,
13
- email: email,
14
- password: password,
15
- invite: invite }
16
- create_entity 'users', data
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
17
  end
18
18
 
19
19
  # note: collection_name s/b plural!
@@ -78,12 +78,12 @@ module Usergrid
78
78
  end
79
79
 
80
80
  def post(payload, additional_headers={}, &block)
81
- payload = payload.to_json if payload.is_a?(Hash) || payload.is_a?(Array)
81
+ payload = MultiJson.dump(payload) if payload.is_a?(Hash) || payload.is_a?(Array)
82
82
  self.response = super payload, additional_headers, &block
83
83
  end
84
84
 
85
85
  def put(payload, additional_headers={}, &block)
86
- payload = payload.to_json if payload.is_a?(Hash) || payload.is_a?(Array)
86
+ payload = MultiJson.dump(payload) if payload.is_a?(Hash) || payload.is_a?(Array)
87
87
  self.response = super payload, additional_headers, &block
88
88
  end
89
89
 
@@ -10,7 +10,7 @@ module RestClient
10
10
  end
11
11
 
12
12
  def data
13
- @data = JSON.parse(self).add_dot_notation! unless @data
13
+ @data = MultiJson.load(self).add_dot_notation! unless @data
14
14
  @data
15
15
  end
16
16
 
@@ -25,10 +25,10 @@ module RestClient
25
25
 
26
26
  def entities_data
27
27
  return @entities_data if @entities_data
28
- entities_data = data['entities'] || data['data'] || data['messages']
28
+ entities_data = data['entities'] || data['data'] || data['messages'] || data['list']
29
29
  raise "unable to determine entities from: #{data}" unless entities_data.is_a?(Array)
30
30
  entities_data.each do |e|
31
- e['uri'] = resource.concat_urls(data['uri'], e['uuid']) if e['uuid']
31
+ e['uri'] = resource.concat_urls(data['uri'], e['uuid']) if e.is_a?(Hash) && e['uuid']
32
32
  end
33
33
  @entities_data = entities_data
34
34
  end
@@ -37,7 +37,11 @@ module RestClient
37
37
  return @entities if @entities
38
38
  index = -1
39
39
  @entities = entities_data.collect do |e|
40
- Usergrid::Entity.new e['uri'], resource.api_url, resource.options, self, index+=1
40
+ if e.is_a? Array
41
+ e
42
+ else
43
+ Usergrid::Entity.new e['uri'], resource.api_url, resource.options, self, index+=1
44
+ end
41
45
  end
42
46
  end
43
47
 
@@ -1,3 +1,3 @@
1
1
  module Usergrid
2
- VERSION = "0.0.2"
2
+ VERSION = '0.0.3'
3
3
  end
data/lib/usergrid_iron.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'logger'
2
- require 'json'
2
+ require 'multi_json'
3
+
3
4
 
4
5
  module Usergrid
5
6
 
data/spec/spec_helper.rb CHANGED
@@ -29,7 +29,7 @@ begin
29
29
  SPEC_SETTINGS[:organization][:password])
30
30
  LOG.info "created organization with user #{SPEC_SETTINGS[:organization][:username]}@email.com"
31
31
  rescue
32
- if JSON($!.response)['error'] == "duplicate_unique_property_exists"
32
+ if MultiJson.load($!.response)['error'] == "duplicate_unique_property_exists"
33
33
  LOG.debug "test organization exists"
34
34
  else
35
35
  raise $!
@@ -62,9 +62,9 @@ end
62
62
  def create_random_user(application, login=false)
63
63
  random = SecureRandom.hex
64
64
  user_hash = {username: "username_#{random}",
65
- name: "#{random} name",
65
+ password: random,
66
66
  email: "#{random}@email.com",
67
- password: random}
67
+ name: "#{random} name" }
68
68
  entity = application['users'].post(user_hash).entity
69
69
  application.login user_hash[:username], user_hash[:password] if login
70
70
  entity
@@ -10,18 +10,23 @@ describe Usergrid::Application do
10
10
  delete_application @application
11
11
  end
12
12
 
13
- it "should be able to create and delete a user" do
13
+ it "should be able to create, login, and delete a user" do
14
14
  random = SecureRandom.hex
15
- response = @application.create_user("username_#{random}", "#{random} name", "#{random}@email.com", random)
15
+ application = Usergrid::Application.new @application.url # create application resource that's not logged in
16
+ response = application.create_user "username_#{random}", 'password'
16
17
  entity = response.entity
18
+ application.login "username_#{random}", 'password'
17
19
  begin
18
20
  response.code.should eq 200
19
21
  response.entities.size.should eq 1
20
22
  entity.uuid.should_not be_nil
21
- response = @application["users/#{entity.uuid}"].get
23
+ response = application["users/#{entity.uuid}"].get
22
24
  response.code.should eq 200
23
25
  ensure
24
26
  entity.delete
27
+ # deleted user shouldn't be able to access anything now
28
+ expect { application["users/#{entity.uuid}"].get }.to raise_error(RestClient::Unauthorized)
29
+ # use original application - logged in under existing user
25
30
  expect { @application["users/#{entity.uuid}"].get }.to raise_error(RestClient::ResourceNotFound)
26
31
  end
27
32
  end
@@ -7,7 +7,7 @@ describe Usergrid::Collection do
7
7
  @collection = @application['tests'].collection
8
8
  @entity_data = []
9
9
  (1..10).each do |i|
10
- test = { name: "test_#{i}" }
10
+ test = { name: "name_#{i}", value: "value_#{i+1}" }
11
11
  @entity_data << test
12
12
  end
13
13
  @collection.create_entities @entity_data
@@ -18,11 +18,29 @@ describe Usergrid::Collection do
18
18
  delete_application @application
19
19
  end
20
20
 
21
- it "should be able to query a collection" do
21
+ it "should be able to do a simple query" do
22
22
  @collection.query "select * where name = \'#{@entity_data[0][:name]}\'"
23
23
  @collection.size.should eq 1
24
24
  end
25
25
 
26
+ it "should be able to select data elements" do
27
+ @collection.query "select name, value where name = \'#{@entity_data[0][:name]}\'"
28
+ @collection.size.should eq 1
29
+ # note: not Usergrid::Entity objects: it is an Array for this kind of query
30
+ values = @collection.entities.first
31
+ values[0].should eq @entity_data[0][:name]
32
+ values[1].should eq @entity_data[0][:value]
33
+ end
34
+
35
+ it "should be able to select redefined data elements" do
36
+ @collection.query "select { test1: name, test2 : value } where name = \'#{@entity_data[0][:name]}\'"
37
+ @collection.size.should eq 1
38
+ # note: not Usergrid::Entity objects: it is a Hash for this kind of query
39
+ values = @collection.entities.first
40
+ values.test1.should eq @entity_data[0][:name]
41
+ values.test2.should eq @entity_data[0][:value]
42
+ end
43
+
26
44
  it "should be able to find an entity" do
27
45
  @collection.query
28
46
  entity = @collection.detect { |e| e.name == @entity_data[5][:name] }
@@ -17,7 +17,7 @@ Gem::Specification.new do |gem|
17
17
  gem.version = Usergrid::VERSION
18
18
 
19
19
  gem.add_dependency 'rest-client'
20
- gem.add_dependency 'json_pure'
20
+ gem.add_dependency 'multi_json'
21
21
 
22
22
  gem.add_development_dependency 'rake'
23
23
  gem.add_development_dependency 'rspec'
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.2
4
+ version: 0.0.3
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-09-22 00:00:00.000000000 Z
12
+ date: 2012-09-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -28,7 +28,7 @@ dependencies:
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
30
  - !ruby/object:Gem::Dependency
31
- name: json_pure
31
+ name: multi_json
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
@@ -149,7 +149,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
149
149
  version: '0'
150
150
  segments:
151
151
  - 0
152
- hash: -4175816790877245614
152
+ hash: -270819572663973399
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: -4175816790877245614
161
+ hash: -270819572663973399
162
162
  requirements: []
163
163
  rubyforge_project:
164
164
  rubygems_version: 1.8.24