rhoconnect-rb 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
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