Usergrid_iron
Usergrid_iron enables simple, low-level Ruby access to Apigee's App Services (aka Usergrid)
REST API with minimal dependencies.
Installation
Project
Add the gem to your project's Gemfile:
gem 'usergrid_iron'
Then rebuild your bundle:
$ bundle
Stand-alone script
Just manually install the gem:
$ gem install usergrid_iron
Usage
Prerequisite
You'll want to be at least a little bit familiar with Usergrid / Apigee's App Services before you jump in here - but it easy and it's great! Start here:
App Services docs: http://apigee.com/docs/usergrid/
Open source stack: https://github.com/apigee/usergrid-stack
Awesome. Let's go!
Getting started with the Usergrid_iron SDK is simple!
Let's start with the basics.
For this example, we'll assume you've already set up an organization, application, and user -
just fill in your own values in the code below.
require 'usergrid_iron'
usergrid_api = 'http://localhost:8080'
organization = ''
application = ''
username = ''
password = ''
application = Usergrid::Application.new "#{usergrid_api}/#{organization}/#{application}"
application.login username, password
response = application.create_dog breed: 'Black Mouth Cur', name: 'Old Yeller'
dog = response.entity
uuid = dog.uuid
response = application["dogs"][uuid].get
same_dog = response.entity
same_dog = application["dogs/#{dog.name}"].entity
puts "My dog's name is: #{same_dog.name} and his breed is #{same_dog['breed']}"
Well that was really easy. More comments than code! :)
Let's try something slightly more complex.
Let's say you've registered for an organization, but you don't have an application yet
(or want to create a new one to work on). No worries, just fill in your organization and
superuser credentials below, and follow along!
(Better yet: If you used the Usergrid launcher and let it initialize your database,
you shouldn't need to do anything!)
require 'usergrid_iron'
usergrid_api = 'http://localhost:8080'
org_name = 'test-organization'
username = 'test'
password = 'test'
app_name = 'dog_sitter'
management = Usergrid::Management.new usergrid_api
management.login username, password
organization = management.organization org_name
new_application = organization.create_application app_name
new_application.create_user username: 'username', password: 'password'
application = organization.application app_name
application.login 'username', 'password'
application.create_dog breed: 'Black Mouth Cur', name: 'Old Yeller'
application.create_dogs [
{ breed: 'Catalan sheepdog', name: 'Einstein' },
{ breed: 'Cocker Spaniel', name: 'Lady' },
{ breed: 'Mixed', name: 'Benji' }]
dogs = application['dogs'].collection
dogs.each do |dog|
puts "Hello, #{dog.name}!"
end
response = dogs.query "select * where name = 'Benji'"
benji = response.entity
benji.location = 'home'
benji['breed'] = 'American Cocker Spaniel'
benji.save
dogs = application['dogs'].query("select * where location = 'home'").collection
if dogs.size == 1 && dogs.first.location == 'home'
puts "Benji's home!"
end
Whew. That's enough for now. But looking for a specific feature? Check out the rspecs,
there are examples of nearly everything!
Contributing
We welcome your enhancements!
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Write some broken rspecs.
- Fix the rspecs with your new code.
- Commit your changes (
git commit -am 'Added some feature'
) - Push your changes to the upstream branch (
git push origin my-new-feature
) - Create new Pull Request
We've got 100% rspec coverage and we're looking to keep it that way!
In order to run the tests, check out the Usergrid open source project
(https://github.com/apigee/usergrid-stack), build, and launch it locally.
(Note: If you change your local Usergrid setting from the default, be sure to update
usergrid_iron/spec/spec_settings.yaml to match.)
Release notes
0.9.2
- New features
- delete_query (batch delete by query)
0.9.1
- New features
- may now login using credentials: application.login_credentials() or organization.login_credentials()
0.9.0
- Backend changes
- login function now uses POST instead of GET
0.0.9
- Backend changes
- made Resource::response accessor public to support ugc
0.0.8
- Bug fixes
- better handling of paging
0.0.7
- Bug fixes
- multiple_entities? should check data['list']
0.0.6
- New features
- iterators can now optionally cross page boundaries, eg.
collection.follow_cursor.each
- added facebook_login(fb_access_token) method to application
0.0.5
- New features
- added create_* method for application
- Backend changes
- eliminated serialization of reserved attributes
- Incompatible changes
- deprecated
Application::create_user username, password, ...
, use create_user username: 'user', password: 'password'
0.0.4
- New features
- empty? check for collection
- update queries (batch update)
- Backend changes
- Additional data sanity checks
- Additional flexibility in concat_urls
- Cleanup
0.0.3
- New features
- Support for lists returned when making parameterized queries:
select username, email where…
or replacement queries:
select { user:username, email:email } where…
- Incompatible changes
- Application.create_user parameter change from:
create_user(username, name, email, password, invite=false)
to:
create_user(username, password, email=nil, name=nil, invite=false)
- Backend changes
- Replaced json_pure dependency with multi_json
Notes
The following features are not currently implemented on the server:
- delete organization
- delete application
- delete user
Copyright
Copyright (c) 2012 Scott Ganyo
Licensed under the Apache License, Version 2.0 (the "License");
you may not use the included files except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under
the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
either express or implied. See the License for the specific language governing permissions and
limitations under the License.