storage_room 0.3.18 → 0.3.19

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/History.txt CHANGED
@@ -1,3 +1,6 @@
1
+ == Version 0.3.19
2
+ * Add eql?, == and hash methods to Resources to compare them
3
+
1
4
  == Version 0.3.18
2
5
  * Rescue NameErrors when finding classes
3
6
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.18
1
+ 0.3.19
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby -rubygems
2
+
3
+ require File.join(File.dirname(__FILE__), 'authentication')
4
+
5
+ # define the class that's used for Collection with entry_type "Restaurant"
6
+ class Restaurant < StorageRoom::Entry
7
+ key :name
8
+ key :body
9
+ key :rating
10
+
11
+ one :location # A LocationField, any embedded Resource or a To-One Association
12
+
13
+ many :tags # ArrayField, or a To-Many Association
14
+ end
@@ -91,10 +91,7 @@ module StorageRoom
91
91
 
92
92
  hash
93
93
  end
94
- end# ==========
95
- # = Banner =
96
- # ==========
97
-
94
+ end
98
95
 
99
96
  # Optionally pass attributes to set up the object
100
97
  def initialize(hash={})
@@ -177,6 +174,17 @@ module StorageRoom
177
174
  false
178
175
  end
179
176
 
177
+ # Compare Resources by comparing their attributes
178
+ def eql?(object)
179
+ self.class.equal?(object.class) && attributes == object.attributes
180
+ end
181
+
182
+ alias == eql?
183
+
184
+ def hash
185
+ self.class.hash ^ self.attributes.hash
186
+ end
187
+
180
188
  protected
181
189
  # Helper to not call to_hash with the wrong number of arguments
182
190
  def call_method_with_optional_parameters(object, method_name, parameters)
@@ -10,7 +10,16 @@
10
10
  "@updated_at": "2011-07-14T18:25:42Z",
11
11
  "@url": "http:\/\/api.storageroomapp.com\/accounts\/4e1e9c234250712eba000052\/collections\/4e1e9c234250712eba000062\/entries\/4e1f3259425071435e00004a",
12
12
  "@version": 2,
13
- "text": "WEBHOOK TEST"
13
+ "text": "WEBHOOK TEST",
14
+ "location": {
15
+ "@type": "Location",
16
+ "lat": 1.2,
17
+ "lng": 2.3
18
+ },
19
+ "shop": {
20
+ "@type": "Shop",
21
+ "url": "http:\/\/api.storageroomapp.com\/accounts\/4e1e9c234250712eba000052\/collections\/4e1e9c234250712eba000063\/entries\/4e1f3259425071435e000099"
22
+ }
14
23
  },
15
24
  "@event": "update",
16
25
  "@last_attempt_at": null,
@@ -0,0 +1,13 @@
1
+ {
2
+ "entry": {
3
+ "@created_at": "2011-07-14T18:25:42Z",
4
+ "@collection_url": "http:\/\/api.storageroomapp.com\/accounts\/4e1e9c234250712eba000052\/collections\/4e1e9c234250712eba000063",
5
+ "@created_at": "2011-07-14T18:15:53Z",
6
+ "@type": "Shop",
7
+ "@trash": false,
8
+ "@updated_at": "2011-07-14T18:25:42Z",
9
+ "@url": "http:\/\/api.storageroomapp.com\/accounts\/4e1e9c234250712eba000052\/collections\/4e1e9c234250712eba000063\/entries\/4e1f3259425071435e000099",
10
+ "@version": 2,
11
+ "name": "SHOP"
12
+ }
13
+ }
@@ -164,6 +164,54 @@ describe StorageRoom::TestAccessors do
164
164
  end
165
165
  end
166
166
 
167
+ describe "#eql?" do
168
+ it "should return true for same class and same attributes but different object ids" do
169
+ one = StorageRoom::TestAccessors3.new(:test => 1, :test2 => '2', :test3 => ['tag1', 'tag2'], :test4 => nil, :test5 => {:key => 'value'})
170
+ two = StorageRoom::TestAccessors3.new(:test => 1, :test2 => '2', :test3 => ['tag1', 'tag2'], :test4 => nil, :test5 => {:key => 'value'})
171
+
172
+ one.eql?(two).should be_true
173
+ end
174
+
175
+ it "should return false for same class and different attributes" do
176
+ one = StorageRoom::TestAccessors3.new(:test => 1, :test2 => '2', :test3 => ['tag1', 'tag2'], :test4 => nil, :test5 => {:key => 'value'})
177
+ two = StorageRoom::TestAccessors3.new(:test => 1, :test2 => '2', :test3 => ['tag1', 'tag2'], :test4 => 1, :test5 => {:key => 'value'})
178
+
179
+ one.eql?(two).should be_false
180
+ end
181
+
182
+ it "should return false for different classes" do
183
+ one = StorageRoom::TestAccessors3.new(:test => 1, :test2 => '2', :test3 => ['tag1', 'tag2'], :test4 => nil, :test5 => {:key => 'value'})
184
+ two = StorageRoom::TestAccessors2.new(:test => 1, :test2 => '2', :test3 => ['tag1', 'tag2'], :test4 => nil, :test5 => {:key => 'value'})
185
+
186
+ one.eql?(two).should be_false
187
+ one.eql?('asdf').should be_false
188
+ end
189
+ end
190
+
191
+ describe "#hash" do
192
+ it "should return same hash for same class and same attributes" do
193
+ one = StorageRoom::TestAccessors3.new(:test => 1, :test2 => '2', :test3 => ['tag1', 'tag2'], :test4 => nil, :test5 => {:key => 'value'})
194
+ two = StorageRoom::TestAccessors3.new(:test => 1, :test2 => '2', :test3 => ['tag1', 'tag2'], :test4 => nil, :test5 => {:key => 'value'})
195
+
196
+ one.hash.should == two.hash
197
+ end
198
+
199
+ it "should return different hash for same class and different attributes" do
200
+ one = StorageRoom::TestAccessors3.new(:test => 1, :test2 => '2', :test3 => ['tag1', 'tag2'], :test4 => nil, :test5 => {:key => 'value'})
201
+ two = StorageRoom::TestAccessors3.new(:test => 1, :test2 => '2', :test3 => ['tag1', 'tag2'], :test4 => 1, :test5 => {:key => 'value'})
202
+
203
+ one.hash.should_not == two.hash
204
+ end
205
+
206
+ it "should return different hash for different classes" do
207
+ one = StorageRoom::TestAccessors3.new(:test => 1, :test2 => '2', :test3 => ['tag1', 'tag2'], :test4 => nil, :test5 => {:key => 'value'})
208
+ two = StorageRoom::TestAccessors2.new(:test => 1, :test2 => '2', :test3 => ['tag1', 'tag2'], :test4 => nil, :test5 => {:key => 'value'})
209
+
210
+ one.hash.should_not == two.hash
211
+ one.hash.should_not == 'asdf'.hash
212
+ end
213
+ end
214
+
167
215
  describe "#reset!" do
168
216
  it "should reset" do
169
217
  @test.response_data = {'test' => 1}
@@ -2,6 +2,13 @@ require 'spec_helper'
2
2
 
3
3
  class Announcement < StorageRoom::Entry
4
4
  key :text
5
+
6
+ one :location
7
+ one :shop
8
+ end
9
+
10
+ class Shop < StorageRoom::Entry
11
+ key :name
5
12
  end
6
13
 
7
14
  describe StorageRoom::WebhookCall do
@@ -19,6 +26,20 @@ describe StorageRoom::WebhookCall do
19
26
  webhook_call[:@event].should == 'update'
20
27
  webhook_call.entry.should be_an_instance_of(Announcement)
21
28
  webhook_call.entry.text.should == 'WEBHOOK TEST'
29
+
30
+ webhook_call.entry.location.should be_an_instance_of(StorageRoom::Location)
31
+ webhook_call.entry.location.lat.should == 1.2
32
+ webhook_call.entry.location.lng.should == 2.3
33
+
34
+ stub_request(:get, "http://APPLICATION_API_KEY:X@api.storageroomapp.com/accounts/4e1e9c234250712eba000052/collections/4e1e9c234250712eba000063/entries/4e1f3259425071435e000099").
35
+ to_return(:status => 200, :body => fixture_file('webhook_call_association.json'))
36
+
37
+ shop = webhook_call.entry.shop
38
+ shop.loaded?.should be_false
39
+ shop.should be_an_instance_of(Shop)
40
+ shop.loaded?.should be_true
41
+ shop['@url'].should == 'http://api.storageroomapp.com/accounts/4e1e9c234250712eba000052/collections/4e1e9c234250712eba000063/entries/4e1f3259425071435e000099'
42
+ shop.name.should == 'SHOP'
22
43
  end
23
44
  end
24
45
  end
data/storage_room.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "storage_room"
8
- s.version = "0.3.18"
8
+ s.version = "0.3.19"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Sascha Konietzke"]
12
- s.date = "2012-02-02"
12
+ s.date = "2012-02-08"
13
13
  s.description = "StorageRoom is a CMS system for Mobile Applications (iPhone, Android, BlackBerry, ...). This library gives you an ActiveModel-like interface to your data."
14
14
  s.email = "sascha@thriventures.com"
15
15
  s.extra_rdoc_files = [
@@ -34,6 +34,7 @@ Gem::Specification.new do |s|
34
34
  "examples/get_collections.rb",
35
35
  "examples/guidebooks.csv",
36
36
  "examples/import_csv.rb",
37
+ "examples/manual_entry_definition.rb",
37
38
  "examples/pagination.rb",
38
39
  "examples/search_entries.rb",
39
40
  "examples/update_entry.rb",
@@ -84,6 +85,7 @@ Gem::Specification.new do |s|
84
85
  "spec/fixtures/image.png",
85
86
  "spec/fixtures/validation_error.json",
86
87
  "spec/fixtures/webhook_call.json",
88
+ "spec/fixtures/webhook_call_association.json",
87
89
  "spec/spec_helper.rb",
88
90
  "spec/storage_room/accessors_spec.rb",
89
91
  "spec/storage_room/array_spec.rb",
@@ -138,6 +140,8 @@ Gem::Specification.new do |s|
138
140
  s.add_development_dependency(%q<webmock>, [">= 0"])
139
141
  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
140
142
  s.add_development_dependency(%q<webmock>, [">= 0"])
143
+ s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
144
+ s.add_development_dependency(%q<webmock>, [">= 0"])
141
145
  s.add_runtime_dependency(%q<httparty>, [">= 0.6.1"])
142
146
  s.add_runtime_dependency(%q<activesupport>, [">= 3.0.0"])
143
147
  s.add_runtime_dependency(%q<activemodel>, [">= 3.0.0"])
@@ -148,6 +152,8 @@ Gem::Specification.new do |s|
148
152
  s.add_dependency(%q<webmock>, [">= 0"])
149
153
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
150
154
  s.add_dependency(%q<webmock>, [">= 0"])
155
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
156
+ s.add_dependency(%q<webmock>, [">= 0"])
151
157
  s.add_dependency(%q<httparty>, [">= 0.6.1"])
152
158
  s.add_dependency(%q<activesupport>, [">= 3.0.0"])
153
159
  s.add_dependency(%q<activemodel>, [">= 3.0.0"])
@@ -159,6 +165,8 @@ Gem::Specification.new do |s|
159
165
  s.add_dependency(%q<webmock>, [">= 0"])
160
166
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
161
167
  s.add_dependency(%q<webmock>, [">= 0"])
168
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
169
+ s.add_dependency(%q<webmock>, [">= 0"])
162
170
  s.add_dependency(%q<httparty>, [">= 0.6.1"])
163
171
  s.add_dependency(%q<activesupport>, [">= 3.0.0"])
164
172
  s.add_dependency(%q<activemodel>, [">= 3.0.0"])
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: storage_room
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.18
4
+ version: 0.3.19
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-02 00:00:00.000000000 Z
12
+ date: 2012-02-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: storage_room
16
- requirement: &70251337126420 !ruby/object:Gem::Requirement
16
+ requirement: &70319313153340 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70251337126420
24
+ version_requirements: *70319313153340
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70251337124560 !ruby/object:Gem::Requirement
27
+ requirement: &70319313152860 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.2.9
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70251337124560
35
+ version_requirements: *70319313152860
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: webmock
38
- requirement: &70251337139920 !ruby/object:Gem::Requirement
38
+ requirement: &70319313152380 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70251337139920
46
+ version_requirements: *70319313152380
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &70251337139260 !ruby/object:Gem::Requirement
49
+ requirement: &70319313151900 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.2.9
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70251337139260
57
+ version_requirements: *70319313151900
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: webmock
60
- requirement: &70251337138720 !ruby/object:Gem::Requirement
60
+ requirement: &70319313151420 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,32 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70251337138720
68
+ version_requirements: *70319313151420
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: &70319313150940 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: 1.2.9
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70319313150940
80
+ - !ruby/object:Gem::Dependency
81
+ name: webmock
82
+ requirement: &70319313150460 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70319313150460
69
91
  - !ruby/object:Gem::Dependency
70
92
  name: httparty
71
- requirement: &70251337138080 !ruby/object:Gem::Requirement
93
+ requirement: &70319313149980 !ruby/object:Gem::Requirement
72
94
  none: false
73
95
  requirements:
74
96
  - - ! '>='
@@ -76,10 +98,10 @@ dependencies:
76
98
  version: 0.6.1
77
99
  type: :runtime
78
100
  prerelease: false
79
- version_requirements: *70251337138080
101
+ version_requirements: *70319313149980
80
102
  - !ruby/object:Gem::Dependency
81
103
  name: activesupport
82
- requirement: &70251337137560 !ruby/object:Gem::Requirement
104
+ requirement: &70319313165860 !ruby/object:Gem::Requirement
83
105
  none: false
84
106
  requirements:
85
107
  - - ! '>='
@@ -87,10 +109,10 @@ dependencies:
87
109
  version: 3.0.0
88
110
  type: :runtime
89
111
  prerelease: false
90
- version_requirements: *70251337137560
112
+ version_requirements: *70319313165860
91
113
  - !ruby/object:Gem::Dependency
92
114
  name: activemodel
93
- requirement: &70251337137060 !ruby/object:Gem::Requirement
115
+ requirement: &70319313165380 !ruby/object:Gem::Requirement
94
116
  none: false
95
117
  requirements:
96
118
  - - ! '>='
@@ -98,10 +120,10 @@ dependencies:
98
120
  version: 3.0.0
99
121
  type: :runtime
100
122
  prerelease: false
101
- version_requirements: *70251337137060
123
+ version_requirements: *70319313165380
102
124
  - !ruby/object:Gem::Dependency
103
125
  name: mime-types
104
- requirement: &70251337136580 !ruby/object:Gem::Requirement
126
+ requirement: &70319313164900 !ruby/object:Gem::Requirement
105
127
  none: false
106
128
  requirements:
107
129
  - - ! '>='
@@ -109,7 +131,7 @@ dependencies:
109
131
  version: '0'
110
132
  type: :runtime
111
133
  prerelease: false
112
- version_requirements: *70251337136580
134
+ version_requirements: *70319313164900
113
135
  description: StorageRoom is a CMS system for Mobile Applications (iPhone, Android,
114
136
  BlackBerry, ...). This library gives you an ActiveModel-like interface to your data.
115
137
  email: sascha@thriventures.com
@@ -136,6 +158,7 @@ files:
136
158
  - examples/get_collections.rb
137
159
  - examples/guidebooks.csv
138
160
  - examples/import_csv.rb
161
+ - examples/manual_entry_definition.rb
139
162
  - examples/pagination.rb
140
163
  - examples/search_entries.rb
141
164
  - examples/update_entry.rb
@@ -186,6 +209,7 @@ files:
186
209
  - spec/fixtures/image.png
187
210
  - spec/fixtures/validation_error.json
188
211
  - spec/fixtures/webhook_call.json
212
+ - spec/fixtures/webhook_call_association.json
189
213
  - spec/spec_helper.rb
190
214
  - spec/storage_room/accessors_spec.rb
191
215
  - spec/storage_room/array_spec.rb