rhoconnect-rb 0.3.1 → 0.3.2

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/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ script: "bundle exec rake spec"
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - ree
7
+ notifications:
8
+ email:
9
+ on_success: always
10
+ on_failure: always
data/Gemfile CHANGED
@@ -6,6 +6,6 @@ gem 'rails', '>= 3.0'
6
6
 
7
7
  group :test do
8
8
  gem 'rspec', '~>2.5.0', :require => 'spec'
9
- gem 'rcov', '~>0.9.8'
9
+ gem 'rcov', '~>0.9.8', :platforms => [:ruby_18]
10
10
  gem 'webmock'
11
11
  end
data/README.md CHANGED
@@ -1,9 +1,9 @@
1
- rhoconnect-rb
1
+ rhoconnect-rb ![Build Status](https://secure.travis-ci.org/rhomobile/rhoconnect-rb.png)
2
2
  ===
3
3
 
4
- A ruby library for the [Rhoconnect](http://rhomobile.com/products/rhosync) App Integration Server.
4
+ A ruby library for the [RhoConnect](http://rhomobile.com/products/rhoconnect) App Integration Server.
5
5
 
6
- Using rhoconnect-rb, your application's model data will transparently synchronize with a mobile application built on the [Rhodes framework](http://rhomobile.com/products/rhodes), or any of the available [Rhoconnect clients](http://rhomobile.com/products/rhosync/). This client includes built-in support for [ActiveRecord](http://ar.rubyonrails.org/) and [DataMapper](http://datamapper.org/) models.
6
+ Using rhoconnect-rb, your application's model data will transparently synchronize with a mobile application built on the [Rhodes framework](http://rhomobile.com/products/rhodes), or any of the available [RhoConnect clients](http://rhomobile.com/products/rhoconnect/). This client includes built-in support for [ActiveRecord](http://ar.rubyonrails.org/) and [DataMapper](http://datamapper.org/) models.
7
7
 
8
8
  ## Getting started
9
9
 
@@ -13,7 +13,7 @@ Load the `rhoconnect-rb` library:
13
13
 
14
14
  Note, if you are using datamapper, install the `dm-serializer` library and require it in your application. `rhoconnect-rb` depends on this utility to interact with Rhoconnect applications using JSON.
15
15
 
16
- ## Usage
16
+ ## Setup the Model
17
17
  Now include Rhoconnect::Resource in a model that you want to synchronize with your mobile application:
18
18
 
19
19
  class Product < ActiveRecord::Base
@@ -27,7 +27,7 @@ Or, if you are using DataMapper:
27
27
  include Rhoconnect::Resource
28
28
  end
29
29
 
30
- ### Partitioning Datasets
30
+ ## Partitioning Datasets
31
31
 
32
32
  Next, your models will need to declare a partition key for `rhoconnect-rb`. This partition key is used by `rhoconnect-rb` to uniquely identify the model dataset when it is stored in a rhoconnect instance. It is typically an attribute on the model or related model. `rhoconnect-rb` supports two types of partitions:
33
33
 
@@ -52,9 +52,9 @@ Now all of the `Product` data synchronized by rhoconnect will organized by `self
52
52
  :app
53
53
  end
54
54
 
55
- For more information about Rhoconnect partitions, please refer to the [Rhoconnect docs](http://docs.rhomobile.com/rhosync/source-adapters#data-partitioning).
55
+ For more information about Rhoconnect partitions, please refer to the [Rhoconnect docs](http://docs.rhomobile.com/rhoconnect/source-adapters#data-partitioning).
56
56
 
57
- ### Querying Datasets
57
+ ## Querying Datasets
58
58
 
59
59
  `rhoconnect-rb` installs a `/rhoconnect/query` route in your application which the Rhoconnect instance invokes to query the dataset for the dataset you want to synchronize. This route is mapped to a `rhoconnect_query` method in your model. This method should return a collection of objects:
60
60
 
@@ -67,25 +67,24 @@ For more information about Rhoconnect partitions, please refer to the [Rhoconnec
67
67
  lambda { self.user.username }
68
68
  end
69
69
 
70
- def self.rhoconnect_query(partition)
71
- Product.includes(:user).where("users.username = ?",partition)
70
+ def self.rhoconnect_query(partition, attributes = nil)
71
+ Product.includes(:user).where("users.username = ?", partition)
72
72
  end
73
73
  end
74
74
 
75
75
  In this example, `self.rhoconnect_query` returns a list of products where the partition string (provided by the rhoconnect instance) matches the `user_id` field in the products table.
76
76
 
77
- ### Configuration and Authentication
77
+ ## Configuration and Authentication
78
78
 
79
- Configure Rhoconnect in an initializer like `config/initializers/rhoconnect.rb` (for Rails), or directly in your application (i.e. Sinatra). Here you will setup the rhoconnect uri (the location of your rhoconnect instance), and app\_endpoint (the location of your ruby app):
79
+ ### Running RhoConnect Manually
80
80
 
81
+ Configure RhoConnect in an initializer like `config/initializers/rhoconnect.rb` (for Rails), or directly in your application (i.e. Sinatra). Here you will setup the rhoconnect uri (the location of your RhoConnect instance), the api\_token (see [rhoconnect:get_token](http://docs.rhomobile.com/rhoconnect/command-line#rake-tasks) rake task), and app\_endpoint (the location of your ruby app):
81
82
 
82
- # Use rhoconnect:get_token to get the token value.
83
-
84
83
  config.uri = "http://myrhoconnect.com"
85
84
  config.token = "secrettoken"
86
85
  config.app_endpoint = "http://myapp.heroku.com"
87
86
 
88
- If `app_endpoint` is defined, your Rhoconnect instance will be configured to query data from the endpoint using the rhoconnect_query method in your model. For example, if your `app_endpoint` is defined as "http://myapp.heroku.com", Rhoconnect will query data with:
87
+ If `app_endpoint` is defined, your Rhoconnect instance will be configured to query data from the endpoint using the rhoconnect_query method in your model. For example, if your `app_endpoint` is defined as "http://myapp.heroku.com", RhoConnect will query data with:
89
88
 
90
89
  POST http://myapp.heroku.com/rhoconnect/query
91
90
 
@@ -109,6 +108,16 @@ Example with authentication:
109
108
  }
110
109
  end
111
110
 
111
+ ### Using the [RhoConnect Heroku Addon](http://docs.rhomobile.com/rhoconnect/heroku-addon)
112
+
113
+ If you're using the [RhoConnect Heroku Addon](http://docs.rhomobile.com/rhoconnect/heroku-addon), then you can omit the config.uri and config.token (they are managed for you):
114
+
115
+ Rhoconnect.configure do |config|
116
+ config.authenticate = lambda { |credentials|
117
+ User.authenticate(credentials[:login], credentials[:password])
118
+ }
119
+ end
120
+
112
121
 
113
122
  ## Meta
114
123
  Created and maintained by Lucas Campbell-Rossen, Vladimir Tarasov and Lars Burgess.
data/Rakefile CHANGED
@@ -14,8 +14,8 @@ end
14
14
  desc "Run all specs with rcov"
15
15
  RSpec::Core::RakeTask.new(:rcov) do |t|
16
16
  t.rcov = true
17
- t.rspec_opts = ["-b", "-c", "-fd"]
18
17
  t.rcov_opts = ['--exclude', 'spec/*,gems/*']
18
+ t.rspec_opts = ["-b", "-c", "-fd"]
19
19
  end
20
20
 
21
21
  task :default => :spec
@@ -61,9 +61,8 @@ module Rhoconnect
61
61
  def send_objects(action, source_name, partition, obj = {}) # :nodoc:
62
62
  validate_args(source_name, partition, obj)
63
63
 
64
- process(:post, "/api/source/#{action}",
64
+ process(:post, "/app/v1/#{source_name}/#{action}",
65
65
  {
66
- :source_id => source_name,
67
66
  :user_id => partition,
68
67
  :objects => action == :push_deletes ? [obj['id'].to_s] : { obj['id'] => obj }
69
68
  }
@@ -77,8 +76,8 @@ module Rhoconnect
77
76
  def process(method, path, payload = nil) # :nodoc:
78
77
  headers = api_headers
79
78
  unless method == :get
80
- payload = payload.merge!(:api_token => @token).to_json
81
- headers = api_headers.merge(:content_type => 'application/json')
79
+ payload = payload.to_json
80
+ headers = api_headers.merge(:content_type => 'application/json', 'X-RhoConnect-API-TOKEN' => @token)
82
81
  end
83
82
  args = [method, payload, headers].compact
84
83
  response = resource(path).send(*args)
@@ -42,9 +42,9 @@ module Rhoconnect
42
42
  uri = uri.to_s
43
43
  end
44
44
  token ||= ENV['token'] || self.configuration.token
45
- Rhoconnect::Client.set_app_endpoint(:url => uri + "/api/source/save_adapter",
46
- :payload => {:attributes => {:adapter_url => endpoint_url}, :api_token => token}.to_json,
47
- :headers => {:content_type => 'application/json'}
45
+ Rhoconnect::Client.set_app_endpoint(:url => uri + "/rc/v1/system/appserver",
46
+ :payload => {:adapter_url => endpoint_url}.to_json,
47
+ :headers => {:content_type => 'application/json', 'X-RhoConnect-API-TOKEN' => token}
48
48
  ) if endpoint_url && uri && token
49
49
  end
50
50
  end
@@ -15,7 +15,7 @@ module Rhoconnect
15
15
  action, c_type, result, records = :rhoconnect_query, 'application/json', {}, []
16
16
  # Call resource rhoconnect_query class method
17
17
  code, error = get_rhoconnect_resource(params['resource'], action) do |klass|
18
- records = klass.send(action, params['partition'])
18
+ records = klass.send(action, params['partition'], params['attributes'])
19
19
  end
20
20
  if code == 200
21
21
  # Serialize records into hash of hashes
@@ -57,7 +57,7 @@ module Rhoconnect
57
57
  call_client_method(:update)
58
58
  end
59
59
 
60
- def rhoconnect_query(partition)
60
+ def rhoconnect_query(partition, attributes = nil)
61
61
  #return all objects for this partition
62
62
  end
63
63
 
@@ -1,3 +1,3 @@
1
1
  module Rhoconnect
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
data/spec/client_spec.rb CHANGED
@@ -58,7 +58,7 @@ describe Rhoconnect::Client do
58
58
  end
59
59
 
60
60
  it "should create an object" do
61
- stub_request(:post, "http://test.rhoconnect.com/api/source/push_objects").with(
61
+ stub_request(:post, "http://test.rhoconnect.com/app/v1/Person/push_objects").with(
62
62
  :headers => {"Content-Type" => "application/json"}
63
63
  ).to_return(:status => 200, :body => "done")
64
64
  resp = @client.create("Person", "user1",
@@ -72,7 +72,7 @@ describe Rhoconnect::Client do
72
72
  end
73
73
 
74
74
  it "should update an object" do
75
- stub_request(:post, "http://test.rhoconnect.com/api/source/push_objects").with(
75
+ stub_request(:post, "http://test.rhoconnect.com/app/v1/Person/push_objects").with(
76
76
  :headers => {"Content-Type" => "application/json"}
77
77
  ).to_return(:status => 200, :body => "done")
78
78
  resp = @client.update("Person", "user1",
@@ -86,7 +86,7 @@ describe Rhoconnect::Client do
86
86
  end
87
87
 
88
88
  it "should destroy an object" do
89
- stub_request(:post, "http://test.rhoconnect.com/api/source/push_deletes").with(
89
+ stub_request(:post, "http://test.rhoconnect.com/app/v1/Person/push_deletes").with(
90
90
  :headers => {"Content-Type" => "application/json"}
91
91
  ).to_return(:status => 200, :body => "done")
92
92
  resp = @client.destroy("Person", "user1",
@@ -11,7 +11,7 @@ describe Rhoconnect::EndpointHelpers do
11
11
  # Query stub class
12
12
  class Product < ActiveRecord::Base
13
13
  include Rhoconnect::Resource
14
- def self.rhoconnect_query(partition)
14
+ def self.rhoconnect_query(partition, attributes = nil)
15
15
  [self.new]
16
16
  end
17
17
  end
metadata CHANGED
@@ -1,67 +1,59 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rhoconnect-rb
3
- version: !ruby/object:Gem::Version
4
- hash: 17
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.2
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 3
9
- - 1
10
- version: 0.3.1
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Rhomobile
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-10-17 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- version_requirements: &id001 !ruby/object:Gem::Requirement
12
+ date: 2012-10-10 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rest-client
16
+ requirement: !ruby/object:Gem::Requirement
22
17
  none: false
23
- requirements:
18
+ requirements:
24
19
  - - ~>
25
- - !ruby/object:Gem::Version
26
- hash: 13
27
- segments:
28
- - 1
29
- - 6
30
- - 1
20
+ - !ruby/object:Gem::Version
31
21
  version: 1.6.1
32
- requirement: *id001
33
22
  type: :runtime
34
23
  prerelease: false
35
- name: rest-client
36
- - !ruby/object:Gem::Dependency
37
- version_requirements: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 1.6.1
30
+ - !ruby/object:Gem::Dependency
31
+ name: json
32
+ requirement: !ruby/object:Gem::Requirement
38
33
  none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 11
43
- segments:
44
- - 1
45
- - 4
46
- - 6
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
47
37
  version: 1.4.6
48
- requirement: *id002
49
38
  type: :runtime
50
39
  prerelease: false
51
- name: json
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.4.6
52
46
  description: Rhoconnect rails plugin
53
- email:
47
+ email:
54
48
  - support@rhomobile.com
55
49
  executables: []
56
-
57
50
  extensions: []
58
-
59
51
  extra_rdoc_files: []
60
-
61
- files:
52
+ files:
62
53
  - .autotest
63
54
  - .gitignore
64
55
  - .rspec
56
+ - .travis.yml
65
57
  - Gemfile
66
58
  - README.md
67
59
  - Rakefile
@@ -83,38 +75,32 @@ files:
83
75
  - templates/rhoconnect.rb
84
76
  homepage: http://rhomobile.com
85
77
  licenses: []
86
-
87
78
  post_install_message:
88
79
  rdoc_options: []
89
-
90
- require_paths:
80
+ require_paths:
91
81
  - lib
92
- required_ruby_version: !ruby/object:Gem::Requirement
82
+ required_ruby_version: !ruby/object:Gem::Requirement
93
83
  none: false
94
- requirements:
95
- - - ">="
96
- - !ruby/object:Gem::Version
97
- hash: 3
98
- segments:
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ segments:
99
89
  - 0
100
- version: "0"
101
- required_rubygems_version: !ruby/object:Gem::Requirement
90
+ hash: 2309536265588466998
91
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
92
  none: false
103
- requirements:
104
- - - ">="
105
- - !ruby/object:Gem::Version
106
- hash: 3
107
- segments:
108
- - 0
109
- version: "0"
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
110
97
  requirements: []
111
-
112
98
  rubyforge_project:
113
- rubygems_version: 1.8.11
99
+ rubygems_version: 1.8.24
114
100
  signing_key:
115
101
  specification_version: 3
116
102
  summary: Rhoconnect rails plugin
117
- test_files:
103
+ test_files:
118
104
  - spec/client_spec.rb
119
105
  - spec/endpoints_spec.rb
120
106
  - spec/resource_spec.rb