her 0.2.5 → 0.2.6

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.
@@ -91,21 +91,19 @@ describe Her::Model::Paths do
91
91
 
92
92
  context "making HTTP requests" do
93
93
  before do # {{{
94
- api = Her::API.new
95
- api.setup :base_uri => "https://api.example.com" do |builder|
94
+ Her::API.setup :url => "https://api.example.com" do |builder|
96
95
  builder.use Her::Middleware::FirstLevelParseJSON
97
96
  builder.use Faraday::Request::UrlEncoded
98
- builder.use Faraday::Adapter::NetHttp
97
+ builder.adapter :test do |stub|
98
+ stub.get("/organizations/2/users") { |env| [200, {}, [{ :id => 1, :fullname => "Tobias Fünke", :organization_id => 2 }, { :id => 2, :fullname => "Lindsay Fünke", :organization_id => 2 }].to_json] }
99
+ stub.post("/organizations/2/users") { |env| [200, {}, { :id => 1, :fullname => "Tobias Fünke", :organization_id => 2 }.to_json] }
100
+ stub.put("/organizations/2/users/1") { |env| [200, {}, { :id => 1, :fullname => "Lindsay Fünke", :organization_id => 2 }.to_json] }
101
+ stub.get("/organizations/2/users/1") { |env| [200, {}, { :id => 1, :fullname => "Tobias Fünke", :organization_id => 2, :active => true }.to_json] }
102
+ stub.delete("/organizations/2/users/1") { |env| [200, {}, { :id => 1, :fullname => "Lindsay Fünke", :organization_id => 2, :active => false }.to_json] }
103
+ end
99
104
  end
100
105
 
101
- FakeWeb.register_uri(:get, "https://api.example.com/organizations/2/users", :body => [{ :id => 1, :fullname => "Tobias Fünke", :organization_id => 2 }, { :id => 2, :fullname => "Lindsay Fünke", :organization_id => 2 }].to_json)
102
- FakeWeb.register_uri(:post, "https://api.example.com/organizations/2/users", :body => { :id => 1, :fullname => "Tobias Fünke", :organization_id => 2 }.to_json)
103
- FakeWeb.register_uri(:put, "https://api.example.com/organizations/2/users/1", :body => { :id => 1, :fullname => "Lindsay Fünke", :organization_id => 2 }.to_json)
104
- FakeWeb.register_uri(:get, "https://api.example.com/organizations/2/users/1", :body => { :id => 1, :fullname => "Tobias Fünke", :organization_id => 2, :active => true }.to_json)
105
- FakeWeb.register_uri(:delete, "https://api.example.com/organizations/2/users/1", :body => { :id => 1, :fullname => "Lindsay Fünke", :organization_id => 2, :active => false }.to_json)
106
-
107
106
  spawn_model :User do
108
- uses_api api
109
107
  collection_path "/organizations/:organization_id/users"
110
108
  end
111
109
  end # }}}
@@ -20,13 +20,13 @@ describe Her::Model::Relationships do
20
20
 
21
21
  it "handles a single 'has_one' relationship" do # {{{
22
22
  User.has_one :category
23
- User.relationships[:has_one].should == [{ :name => :category, :class_name => "Category", :foreign_key => "category_id" }]
23
+ User.relationships[:has_one].should == [{ :name => :category, :class_name => "Category" }]
24
24
  end # }}}
25
25
 
26
26
  it "handles multiples 'has_one' relationship" do # {{{
27
27
  User.has_one :category
28
28
  User.has_one :role
29
- User.relationships[:has_one].should == [{ :name => :category, :class_name => "Category", :foreign_key => "category_id" }, { :name => :role, :class_name => "Role", :foreign_key => "role_id" }]
29
+ User.relationships[:has_one].should == [{ :name => :category, :class_name => "Category" }, { :name => :role, :class_name => "Role" }]
30
30
  end # }}}
31
31
 
32
32
  it "handles a single belongs_to relationship" do # {{{
@@ -64,18 +64,18 @@ describe Her::Model::Relationships do
64
64
 
65
65
  context "handling relationships without details" do
66
66
  before do # {{{
67
- Her::API.setup :base_uri => "https://api.example.com" do |builder|
67
+ Her::API.setup :url => "https://api.example.com" do |builder|
68
68
  builder.use Her::Middleware::FirstLevelParseJSON
69
69
  builder.use Faraday::Request::UrlEncoded
70
- builder.use Faraday::Adapter::NetHttp
70
+ builder.adapter :test do |stub|
71
+ stub.get("/users/1") { |env| [200, {}, { :id => 1, :name => "Tobias Fünke", :comments => [{ :id => 2, :body => "Tobias, you blow hard!" }, { :id => 3, :body => "I wouldn't mind kissing that man between the cheeks, so to speak" }], :role => { :id => 1, :body => "Admin" }, :organization => { :id => 1, :name => "Bluth Company" }, :organization_id => 1 }.to_json] }
72
+ stub.get("/users/2") { |env| [200, {}, { :id => 2, :name => "Lindsay Fünke", :organization_id => 1 }.to_json] }
73
+ stub.get("/users/2/comments") { |env| [200, {}, [{ :id => 4, :body => "They're having a FIRESALE?" }, { :id => 5, :body => "Is this the tiny town from Footloose?" }].to_json] }
74
+ stub.get("/users/2/role") { |env| [200, {}, { :id => 2, :body => "User" }.to_json] }
75
+ stub.get("/organizations/1") { |env| [200, {}, { :id => 1, :name => "Bluth Company" }.to_json] }
76
+ end
71
77
  end
72
78
 
73
- FakeWeb.register_uri(:get, "https://api.example.com/users/1", :body => { :id => 1, :name => "Tobias Fünke", :comments => [{ :id => 2, :body => "Tobias, you blow hard!" }, { :id => 3, :body => "I wouldn't mind kissing that man between the cheeks, so to speak" }], :role => { :id => 1, :body => "Admin" }, :organization => { :id => 1, :name => "Bluth Company" }, :organization_id => 1 }.to_json)
74
- FakeWeb.register_uri(:get, "https://api.example.com/users/2", :body => { :id => 2, :name => "Lindsay Fünke", :organization_id => 1 }.to_json)
75
- FakeWeb.register_uri(:get, "https://api.example.com/users/2/comments", :body => [{ :id => 4, :body => "They're having a FIRESALE?" }, { :id => 5, :body => "Is this the tiny town from Footloose?" }].to_json)
76
- FakeWeb.register_uri(:get, "https://api.example.com/users/2/role", :body => { :id => 2, :body => "User" }.to_json)
77
- FakeWeb.register_uri(:get, "https://api.example.com/organizations/1", :body => { :id => 1, :name => "Bluth Company" }.to_json)
78
-
79
79
  spawn_model :User do
80
80
  has_many :comments
81
81
  has_one :role
@@ -128,4 +128,48 @@ describe Her::Model::Relationships do
128
128
  @user_without_included_data.organization.name.should == "Bluth Company"
129
129
  end # }}}
130
130
  end
131
+
132
+ context "handling relationships with details" do
133
+ before do # {{{
134
+ Her::API.setup :url => "https://api.example.com" do |builder|
135
+ builder.use Her::Middleware::FirstLevelParseJSON
136
+ builder.use Faraday::Request::UrlEncoded
137
+ builder.adapter :test do |stub|
138
+ stub.get("/users/1") { |env| [200, {}, { :id => 1, :name => "Tobias Fünke", :organization => { :id => 1, :name => "Bluth Company" }, :organization_id => 1 }.to_json] }
139
+ stub.get("/users/2") { |env| [200, {}, { :id => 2, :name => "Lindsay Fünke", :organization_id => 1 }.to_json] }
140
+ stub.get("/users/3") { |env| [200, {}, { :id => 2, :name => "Lindsay Fünke", :organization => nil }.to_json] }
141
+ stub.get("/organizations/1") { |env| [200, {}, { :id => 1, :name => "Bluth Company" }.to_json] }
142
+ end
143
+ end
144
+
145
+
146
+ spawn_model :User do
147
+ belongs_to :organization, :class_name => "Business"
148
+ end
149
+
150
+ spawn_model :Business do
151
+ collection_path "/organizations"
152
+ end
153
+
154
+ @user_with_included_data = User.find(1)
155
+ @user_without_included_data = User.find(2)
156
+ @user_with_included_nil_data = User.find(3)
157
+ end # }}}
158
+
159
+ it "maps an array of included data through belongs_to" do # {{{
160
+ @user_with_included_data.organization.class.should == Business
161
+ @user_with_included_data.organization.id.should == 1
162
+ @user_with_included_data.organization.name.should == "Bluth Company"
163
+ end # }}}
164
+
165
+ it "does not map included data if it’s nil" do # {{{
166
+ @user_with_included_nil_data.organization.should be_nil
167
+ end # }}}
168
+
169
+ it "fetches data that was not included through belongs_to" do # {{{
170
+ @user_without_included_data.organization.class.should == Business
171
+ @user_without_included_data.organization.id.should == 1
172
+ @user_without_included_data.organization.name.should == "Bluth Company"
173
+ end # }}}
174
+ end
131
175
  end
@@ -1,7 +1,6 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
2
2
 
3
3
  require "her"
4
- require "fakeweb"
5
4
  require "mocha"
6
5
 
7
6
  module Helpers
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: her
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,216 +9,200 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-05 00:00:00.000000000Z
12
+ date: 2012-07-12 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - '='
19
+ - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 0.9.2.2
21
+ version: 0.9.2
22
22
  type: :development
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
- - - '='
27
+ - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: 0.9.2.2
29
+ version: 0.9.2
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: rspec
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
- - - '='
35
+ - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: 2.9.0
37
+ version: '2.10'
38
38
  type: :development
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
- - - '='
43
+ - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: 2.9.0
45
+ version: '2.10'
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: yard
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  none: false
50
50
  requirements:
51
- - - '='
51
+ - - ~>
52
52
  - !ruby/object:Gem::Version
53
- version: 0.7.5
53
+ version: '0.8'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  none: false
58
58
  requirements:
59
- - - '='
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: 0.7.5
61
+ version: '0.8'
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: redcarpet
64
64
  requirement: !ruby/object:Gem::Requirement
65
65
  none: false
66
66
  requirements:
67
- - - '='
67
+ - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: 1.17.2
69
+ version: '2.1'
70
70
  type: :development
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
- - - '='
75
+ - - ~>
76
76
  - !ruby/object:Gem::Version
77
- version: 1.17.2
77
+ version: '2.1'
78
78
  - !ruby/object:Gem::Dependency
79
79
  name: mocha
80
80
  requirement: !ruby/object:Gem::Requirement
81
81
  none: false
82
82
  requirements:
83
- - - '='
83
+ - - ~>
84
84
  - !ruby/object:Gem::Version
85
- version: 0.11.3
85
+ version: '0.11'
86
86
  type: :development
87
87
  prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
89
89
  none: false
90
90
  requirements:
91
- - - '='
91
+ - - ~>
92
92
  - !ruby/object:Gem::Version
93
- version: 0.11.3
94
- - !ruby/object:Gem::Dependency
95
- name: fakeweb
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - '='
100
- - !ruby/object:Gem::Version
101
- version: 1.3.0
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - '='
108
- - !ruby/object:Gem::Version
109
- version: 1.3.0
93
+ version: '0.11'
110
94
  - !ruby/object:Gem::Dependency
111
95
  name: guard
112
96
  requirement: !ruby/object:Gem::Requirement
113
97
  none: false
114
98
  requirements:
115
- - - '='
99
+ - - ~>
116
100
  - !ruby/object:Gem::Version
117
- version: 1.0.1
101
+ version: '1.0'
118
102
  type: :development
119
103
  prerelease: false
120
104
  version_requirements: !ruby/object:Gem::Requirement
121
105
  none: false
122
106
  requirements:
123
- - - '='
107
+ - - ~>
124
108
  - !ruby/object:Gem::Version
125
- version: 1.0.1
109
+ version: '1.0'
126
110
  - !ruby/object:Gem::Dependency
127
111
  name: guard-rspec
128
112
  requirement: !ruby/object:Gem::Requirement
129
113
  none: false
130
114
  requirements:
131
- - - '='
115
+ - - ~>
132
116
  - !ruby/object:Gem::Version
133
- version: 0.7.0
117
+ version: '0.7'
134
118
  type: :development
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
121
  none: false
138
122
  requirements:
139
- - - '='
123
+ - - ~>
140
124
  - !ruby/object:Gem::Version
141
- version: 0.7.0
125
+ version: '0.7'
142
126
  - !ruby/object:Gem::Dependency
143
127
  name: rb-fsevent
144
128
  requirement: !ruby/object:Gem::Requirement
145
129
  none: false
146
130
  requirements:
147
- - - '='
131
+ - - ~>
148
132
  - !ruby/object:Gem::Version
149
- version: 0.9.1
133
+ version: '0.9'
150
134
  type: :development
151
135
  prerelease: false
152
136
  version_requirements: !ruby/object:Gem::Requirement
153
137
  none: false
154
138
  requirements:
155
- - - '='
139
+ - - ~>
156
140
  - !ruby/object:Gem::Version
157
- version: 0.9.1
141
+ version: '0.9'
158
142
  - !ruby/object:Gem::Dependency
159
143
  name: growl
160
144
  requirement: !ruby/object:Gem::Requirement
161
145
  none: false
162
146
  requirements:
163
- - - '='
147
+ - - ~>
164
148
  - !ruby/object:Gem::Version
165
- version: 1.0.3
149
+ version: '1.0'
166
150
  type: :development
167
151
  prerelease: false
168
152
  version_requirements: !ruby/object:Gem::Requirement
169
153
  none: false
170
154
  requirements:
171
- - - '='
155
+ - - ~>
172
156
  - !ruby/object:Gem::Version
173
- version: 1.0.3
157
+ version: '1.0'
174
158
  - !ruby/object:Gem::Dependency
175
159
  name: activesupport
176
160
  requirement: !ruby/object:Gem::Requirement
177
161
  none: false
178
162
  requirements:
179
- - - '='
163
+ - - ~>
180
164
  - !ruby/object:Gem::Version
181
- version: 3.2.3
165
+ version: '3.2'
182
166
  type: :runtime
183
167
  prerelease: false
184
168
  version_requirements: !ruby/object:Gem::Requirement
185
169
  none: false
186
170
  requirements:
187
- - - '='
171
+ - - ~>
188
172
  - !ruby/object:Gem::Version
189
- version: 3.2.3
173
+ version: '3.2'
190
174
  - !ruby/object:Gem::Dependency
191
175
  name: faraday
192
176
  requirement: !ruby/object:Gem::Requirement
193
177
  none: false
194
178
  requirements:
195
- - - '='
179
+ - - ~>
196
180
  - !ruby/object:Gem::Version
197
- version: 0.8.0
181
+ version: '0.8'
198
182
  type: :runtime
199
183
  prerelease: false
200
184
  version_requirements: !ruby/object:Gem::Requirement
201
185
  none: false
202
186
  requirements:
203
- - - '='
187
+ - - ~>
204
188
  - !ruby/object:Gem::Version
205
- version: 0.8.0
189
+ version: '0.8'
206
190
  - !ruby/object:Gem::Dependency
207
191
  name: multi_json
208
192
  requirement: !ruby/object:Gem::Requirement
209
193
  none: false
210
194
  requirements:
211
- - - '='
195
+ - - ~>
212
196
  - !ruby/object:Gem::Version
213
- version: 1.3.4
197
+ version: '1.3'
214
198
  type: :runtime
215
199
  prerelease: false
216
200
  version_requirements: !ruby/object:Gem::Requirement
217
201
  none: false
218
202
  requirements:
219
- - - '='
203
+ - - ~>
220
204
  - !ruby/object:Gem::Version
221
- version: 1.3.4
205
+ version: '1.3'
222
206
  description: Her is an ORM that maps REST resources and collections to Ruby objects
223
207
  email:
224
208
  - remi@exomel.com
@@ -227,6 +211,7 @@ extensions: []
227
211
  extra_rdoc_files: []
228
212
  files:
229
213
  - .gitignore
214
+ - .rspec
230
215
  - .travis.yml
231
216
  - Gemfile
232
217
  - Guardfile
@@ -245,8 +230,10 @@ files:
245
230
  - her.gemspec
246
231
  - lib/her.rb
247
232
  - lib/her/api.rb
233
+ - lib/her/collection.rb
248
234
  - lib/her/errors.rb
249
235
  - lib/her/middleware.rb
236
+ - lib/her/middleware/accept_json.rb
250
237
  - lib/her/middleware/first_level_parse_json.rb
251
238
  - lib/her/middleware/second_level_parse_json.rb
252
239
  - lib/her/model.rb
@@ -259,6 +246,7 @@ files:
259
246
  - lib/her/model/relationships.rb
260
247
  - lib/her/version.rb
261
248
  - spec/api_spec.rb
249
+ - spec/middleware/accept_json_spec.rb
262
250
  - spec/middleware/first_level_parse_json_spec.rb
263
251
  - spec/middleware/second_level_parse_json_spec.rb
264
252
  - spec/model/hooks_spec.rb
@@ -269,7 +257,8 @@ files:
269
257
  - spec/model/relationships_spec.rb
270
258
  - spec/spec_helper.rb
271
259
  homepage: http://remiprev.github.com/her
272
- licenses: []
260
+ licenses:
261
+ - MIT
273
262
  post_install_message:
274
263
  rdoc_options: []
275
264
  require_paths:
@@ -282,7 +271,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
282
271
  version: '0'
283
272
  segments:
284
273
  - 0
285
- hash: 112971381959523864
274
+ hash: -1476848547800206176
286
275
  required_rubygems_version: !ruby/object:Gem::Requirement
287
276
  none: false
288
277
  requirements:
@@ -291,7 +280,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
291
280
  version: '0'
292
281
  segments:
293
282
  - 0
294
- hash: 112971381959523864
283
+ hash: -1476848547800206176
295
284
  requirements: []
296
285
  rubyforge_project:
297
286
  rubygems_version: 1.8.18
@@ -301,6 +290,7 @@ summary: A simple Representational State Transfer-based Hypertext Transfer Proto
301
290
  Object Relational Mapper. Her?
302
291
  test_files:
303
292
  - spec/api_spec.rb
293
+ - spec/middleware/accept_json_spec.rb
304
294
  - spec/middleware/first_level_parse_json_spec.rb
305
295
  - spec/middleware/second_level_parse_json_spec.rb
306
296
  - spec/model/hooks_spec.rb