rhoconnect-rb 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -31,7 +31,7 @@ Or, if you are using DataMapper:
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
 
34
- * :app - No unique key will be used, a shared dataset is synchronzied for all users.
34
+ * :app - No unique key will be used, a shared dataset is synchronized for all users.
35
35
  * lambda { some lambda } - Execute a lambda which returns the unique key string.
36
36
 
37
37
  For example, the `Product` model above might have a `belongs_to :user` relationship. This provides us a simple way to organize the `Product` dataset for rhoconnect by reusing this relationship. The partition identifying a username would be declared as:
@@ -41,12 +41,16 @@ For example, the `Product` model above might have a `belongs_to :user` relations
41
41
 
42
42
  belongs_to :user
43
43
 
44
- partition lambda { self.user.username }
44
+ def partition
45
+ lambda { self.user.username }
46
+ end
45
47
  end
46
48
 
47
49
  Now all of the `Product` data synchronized by rhoconnect will organized by `self.user.username`. Note: You can also used a fixed key if the dataset doesn't require a dynamic value:
48
50
 
49
- partition lambda { :app }
51
+ def partition
52
+ :app
53
+ end
50
54
 
51
55
  For more information about Rhoconnect partitions, please refer to the [Rhoconnect docs](http://docs.rhomobile.com/rhosync/source-adapters#data-partitioning).
52
56
 
@@ -59,7 +63,9 @@ For more information about Rhoconnect partitions, please refer to the [Rhoconnec
59
63
 
60
64
  belongs_to :user
61
65
 
62
- partition lambda { self.user.username }
66
+ def partition
67
+ lambda { self.user.username }
68
+ end
63
69
 
64
70
  def self.rhoconnect_query(partition)
65
71
  Product.where(:user_id => partition)
@@ -70,24 +76,30 @@ In this example, `self.rhoconnect_query` returns a list of products where the pa
70
76
 
71
77
  ### Configuration and Authentication
72
78
 
73
- Configure Rhoconnect in an initializer like `config/initializers/rhoconnect.rb` (for Rails), or directly in your application (i.e. Sinatra):
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):
80
+
74
81
 
75
- # Setup the Rhoconnect uri and api token.
76
82
  # Use rhoconnect:get_token to get the token value.
77
83
 
78
84
  config.uri = "http://myrhoconnect.com"
79
85
  config.token = "secrettoken"
86
+ config.app_endpoint = "http://myapp.heroku.com"
87
+
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:
89
+
90
+ POST http://myapp.heroku.com/rhoconnect/query
80
91
 
81
92
  Example:
82
93
 
83
94
  Rhoconnect.configure do |config|
84
- config.uri = "http://myrhoconnect-server.com"
85
- config.token = "secrettoken"
95
+ config.uri = "http://myrhoconnect-server.com"
96
+ config.token = "secrettoken"
97
+ config.app_endpoint = "http://myapp.heroku.com"
86
98
  end
87
99
 
88
100
  Example with authentication:
89
101
 
90
- Rhoconnect installs a `/rhoconnect/authenticate` route into your application which will receive credentials from the client. Add block which handles the credentials:
102
+ `rhoconnect-rb` installs a `/rhoconnect/authenticate` route into your application which will receive credentials from the client. Add block which handles the credentials:
91
103
 
92
104
  Rhoconnect.configure do |config|
93
105
  config.uri = "http://myrhoconnect-server.com"
@@ -96,6 +108,7 @@ Rhoconnect installs a `/rhoconnect/authenticate` route into your application whi
96
108
  User.authenticate(credentials[:login], credentials[:password])
97
109
  }
98
110
  end
111
+
99
112
 
100
113
  ## Meta
101
114
  Created and maintained by Lucas Campbell-Rossen, Vladimir Tarasov and Lars Burgess.
@@ -11,14 +11,6 @@ module Rhoconnect
11
11
 
12
12
 
13
13
  module ClassMethods
14
- def partition(p)
15
- @partition = p
16
- end
17
-
18
- def get_partition
19
- @partition.is_a?(Proc) ? @partition.call : @partition
20
- end
21
-
22
14
  def rhoconnect_receive_create(partition, attributes)
23
15
  instance = self.send(:new)
24
16
  instance.send(:rhoconnect_apply_attributes, partition, attributes)
@@ -47,6 +39,11 @@ module Rhoconnect
47
39
 
48
40
  module InstanceMethods
49
41
  attr_accessor :skip_rhoconnect_callbacks
42
+
43
+ def get_partition
44
+ @partition = partition
45
+ @partition.is_a?(Proc) ? @partition.call : @partition
46
+ end
50
47
 
51
48
  def rhoconnect_create
52
49
  call_client_method(:create)
@@ -76,7 +73,7 @@ module Rhoconnect
76
73
  attribs.each do |key,value|
77
74
  attribs[key] = Time.parse(value.to_s).to_i.to_s if value.is_a?(Time) or value.is_a?(DateTime)
78
75
  end if Rhoconnect.configuration.sync_time_as_int
79
- attribs
76
+ attribs
80
77
  end
81
78
 
82
79
  private
@@ -85,7 +82,7 @@ module Rhoconnect
85
82
  unless self.skip_rhoconnect_callbacks
86
83
  attribs = self.normalized_attributes
87
84
  begin
88
- Rhoconnect::Client.new.send(action, self.class.to_s, self.class.get_partition, attribs)
85
+ Rhoconnect::Client.new.send(action, self.class.to_s, self.get_partition, attribs)
89
86
  rescue RestClient::Exception => re
90
87
  warn "#{self.class.to_s}: rhoconnect_#{action} returned error: #{re.message} - #{re.http_body}"
91
88
  rescue Exception => e
@@ -1,3 +1,3 @@
1
1
  module Rhoconnect
2
- VERSION = "0.2.5"
2
+ VERSION = "0.2.6"
3
3
  end
@@ -7,20 +7,24 @@ describe Rhoconnect::Resource do
7
7
  class TestModel1 < ActiveRecord::Base
8
8
  include Rhoconnect::Resource
9
9
 
10
- partition :app
10
+ def partition
11
+ :app
12
+ end
11
13
  end
12
14
 
13
- TestModel1.get_partition.should == :app
15
+ TestModel1.new.get_partition.should == :app
14
16
  end
15
17
 
16
18
  it "should set resource partition with lambda" do
17
19
  class TestModel2 < ActiveRecord::Base
18
20
  include Rhoconnect::Resource
19
21
 
20
- partition lambda{ 'helloworld' }
22
+ def partition
23
+ lambda{ 'helloworld' }
24
+ end
21
25
  end
22
26
 
23
- TestModel2.get_partition.should == 'helloworld'
27
+ TestModel2.new.get_partition.should == 'helloworld'
24
28
  end
25
29
  end
26
30
 
@@ -70,7 +74,9 @@ describe Rhoconnect::Resource do
70
74
  it "should call create update delete hook" do
71
75
  class TestModel7 < ActiveRecord::Base
72
76
  include Rhoconnect::Resource
73
- partition :app
77
+ def partition
78
+ :app
79
+ end
74
80
  end
75
81
  client = mock('Rhoconnect::Client')
76
82
  client.stub!(:send)
@@ -86,7 +92,9 @@ describe Rhoconnect::Resource do
86
92
  it "should warn on RestClient::Exception" do
87
93
  class TestModel8 < ActiveRecord::Base
88
94
  include Rhoconnect::Resource
89
- partition :app
95
+ def partition
96
+ :app
97
+ end
90
98
  end
91
99
  client = mock('Rhoconnect::Client')
92
100
  exception = RestClient::Exception.new(
@@ -105,7 +113,9 @@ describe Rhoconnect::Resource do
105
113
  it "should warn on Exception" do
106
114
  class TestModel8 < ActiveRecord::Base
107
115
  include Rhoconnect::Resource
108
- partition :app
116
+ def partition
117
+ :app
118
+ end
109
119
  end
110
120
  client = mock('Rhoconnect::Client')
111
121
  client.stub!(:send).and_return { raise Exception.new("error connecting to server") }
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rhoconnect-rb
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 5
10
- version: 0.2.5
9
+ - 6
10
+ version: 0.2.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Rhomobile
@@ -15,10 +15,11 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-07 00:00:00 -07:00
19
- default_executable:
18
+ date: 2011-08-09 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
21
+ name: rest-client
22
+ prerelease: false
22
23
  version_requirements: &id001 !ruby/object:Gem::Requirement
23
24
  none: false
24
25
  requirements:
@@ -30,11 +31,11 @@ dependencies:
30
31
  - 6
31
32
  - 1
32
33
  version: 1.6.1
33
- requirement: *id001
34
- prerelease: false
35
- name: rest-client
36
34
  type: :runtime
35
+ requirement: *id001
37
36
  - !ruby/object:Gem::Dependency
37
+ name: json
38
+ prerelease: false
38
39
  version_requirements: &id002 !ruby/object:Gem::Requirement
39
40
  none: false
40
41
  requirements:
@@ -46,10 +47,8 @@ dependencies:
46
47
  - 4
47
48
  - 6
48
49
  version: 1.4.6
49
- requirement: *id002
50
- prerelease: false
51
- name: json
52
50
  type: :runtime
51
+ requirement: *id002
53
52
  description: Rhoconnect rails plugin
54
53
  email:
55
54
  - support@rhomobile.com
@@ -79,7 +78,6 @@ files:
79
78
  - spec/endpoints_spec.rb
80
79
  - spec/resource_spec.rb
81
80
  - spec/spec_helper.rb
82
- has_rdoc: true
83
81
  homepage: http://rhomobile.com
84
82
  licenses: []
85
83
 
@@ -109,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
107
  requirements: []
110
108
 
111
109
  rubyforge_project:
112
- rubygems_version: 1.5.3
110
+ rubygems_version: 1.8.6
113
111
  signing_key:
114
112
  specification_version: 3
115
113
  summary: Rhoconnect rails plugin