her 0.3.7 → 0.3.8
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/README.md +565 -10
- data/Rakefile +0 -16
- data/{CONTRIBUTING.md → docs/CONTRIBUTING.md} +0 -0
- data/{UPGRADE.md → docs/UPGRADE.md} +2 -0
- data/her.gemspec +3 -9
- data/lib/her/api.rb +1 -1
- data/lib/her/model/hooks.rb +8 -1
- data/lib/her/model/introspection.rb +1 -1
- data/lib/her/model/orm.rb +9 -2
- data/lib/her/version.rb +1 -1
- data/spec/api_spec.rb +6 -0
- data/spec/model/hooks_spec.rb +131 -0
- data/spec/model/introspection_spec.rb +10 -2
- data/spec/spec_helper.rb +1 -1
- metadata +12 -113
- data/FEATURES.md +0 -296
- data/Guardfile +0 -7
- data/MIDDLEWARE.md +0 -183
- data/TESTING.md +0 -88
data/Rakefile
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require "bundler"
|
2
2
|
require "rake"
|
3
|
-
require "yard"
|
4
3
|
require "bundler/gem_tasks"
|
5
4
|
require "rspec/core/rake_task"
|
6
5
|
|
@@ -10,18 +9,3 @@ desc "Run all specs"
|
|
10
9
|
RSpec::Core::RakeTask.new(:spec) do |task|
|
11
10
|
task.pattern = "spec/**/*_spec.rb"
|
12
11
|
end
|
13
|
-
|
14
|
-
desc "Generate YARD Documentation"
|
15
|
-
YARD::Rake::YardocTask.new do |task|
|
16
|
-
task.options = [
|
17
|
-
"-o", File.expand_path("../doc", __FILE__),
|
18
|
-
"--readme=README.md",
|
19
|
-
"--markup=markdown",
|
20
|
-
"--markup-provider=redcarpet",
|
21
|
-
"--no-private",
|
22
|
-
"--no-cache",
|
23
|
-
"--protected",
|
24
|
-
"--title=Her",
|
25
|
-
]
|
26
|
-
task.files = ["lib/**/*.rb"]
|
27
|
-
end
|
File without changes
|
data/her.gemspec
CHANGED
@@ -18,16 +18,10 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.require_paths = ["lib"]
|
19
19
|
|
20
20
|
s.add_development_dependency "rake", "~> 10.0"
|
21
|
-
s.add_development_dependency "rspec", "~> 2.
|
22
|
-
s.add_development_dependency "
|
23
|
-
s.add_development_dependency "redcarpet", "~> 2.1"
|
24
|
-
s.add_development_dependency "mocha", "~> 0.12"
|
25
|
-
s.add_development_dependency "guard", "~> 1.2"
|
26
|
-
s.add_development_dependency "guard-rspec", "~> 2.3"
|
27
|
-
s.add_development_dependency "rb-fsevent", "~> 0.9"
|
28
|
-
s.add_development_dependency "growl", "~> 1.0"
|
21
|
+
s.add_development_dependency "rspec", "~> 2.12"
|
22
|
+
s.add_development_dependency "mocha", "~> 0.13"
|
29
23
|
|
30
24
|
s.add_runtime_dependency "activesupport", ">= 3.0.0"
|
31
25
|
s.add_runtime_dependency "faraday", "~> 0.8"
|
32
|
-
s.add_runtime_dependency "multi_json", "~> 1.
|
26
|
+
s.add_runtime_dependency "multi_json", "~> 1.5"
|
33
27
|
end
|
data/lib/her/api.rb
CHANGED
@@ -53,7 +53,7 @@ module Her
|
|
53
53
|
attrs[:url] = attrs.delete(:base_uri) if attrs.include?(:base_uri) # Support legacy :base_uri option
|
54
54
|
@base_uri = attrs[:url]
|
55
55
|
@options = attrs
|
56
|
-
@connection = Faraday.new(
|
56
|
+
@connection = Faraday.new(@options) do |connection|
|
57
57
|
yield connection if block_given?
|
58
58
|
end
|
59
59
|
end
|
data/lib/her/model/hooks.rb
CHANGED
@@ -35,6 +35,9 @@ module Her
|
|
35
35
|
# @param [Symbol, &block] method A method or a block to be called
|
36
36
|
def before_destroy(method=nil, &block); set_hook(:before, :destroy, method || block); end
|
37
37
|
|
38
|
+
# Do not add a *before find* callback. Only *after find* is supported.
|
39
|
+
def before_find(method=nil, &block); raise NoMethodError, "undefined method `before_find' for #{self}"; end
|
40
|
+
|
38
41
|
# Add a *after save* callback. Triggered after a resource is created or updated.
|
39
42
|
# @param [Symbol, &block] method A method or a block to be called
|
40
43
|
def after_save(method=nil, &block); set_hook(:after, :save, method || block); end
|
@@ -51,11 +54,15 @@ module Her
|
|
51
54
|
# @param [Symbol, &block] method A method or a block to be called
|
52
55
|
def after_destroy(method=nil, &block); set_hook(:after, :destroy, method || block); end
|
53
56
|
|
57
|
+
# Add a *after find* callback. Triggered after a resource is found.
|
58
|
+
# @param [Symbol, &block] method A method or a block to be called
|
59
|
+
def after_find(method=nil, &block); set_hook(:after, :find, method || block); end
|
60
|
+
|
54
61
|
# Wrap a block between “before” and “after” hooks
|
55
62
|
# @private
|
56
63
|
def wrap_in_hooks(resource, *hooks)
|
57
64
|
perform_before_hooks(resource, *hooks)
|
58
|
-
yield(resource, resource.class)
|
65
|
+
yield(resource, resource.class) if block_given?
|
59
66
|
perform_after_hooks(resource, *hooks.reverse)
|
60
67
|
end
|
61
68
|
|
@@ -12,7 +12,7 @@ module Her
|
|
12
12
|
# @user = User.find(1)
|
13
13
|
# p @user # => #<User(/users/1) id=1 name="Tobias Fünke">
|
14
14
|
def inspect
|
15
|
-
"#<#{self.class}(#{request_path}) #{@data.
|
15
|
+
"#<#{self.class}(#{request_path}) #{@data.keys.map { |k| "#{k}=#{attribute_for_inspect(send(k))}" }.join(" ")}>"
|
16
16
|
end
|
17
17
|
|
18
18
|
private
|
data/lib/her/model/orm.rb
CHANGED
@@ -23,7 +23,11 @@ module Her
|
|
23
23
|
# Initialize a collection of resources
|
24
24
|
# @private
|
25
25
|
def self.initialize_collection(klass, parsed_data={})
|
26
|
-
collection_data = parsed_data[:data].map
|
26
|
+
collection_data = parsed_data[:data].map do |item_data|
|
27
|
+
resource = klass.new(item_data)
|
28
|
+
klass.wrap_in_hooks(resource, :find)
|
29
|
+
resource
|
30
|
+
end
|
27
31
|
Her::Collection.new(collection_data, parsed_data[:metadata], parsed_data[:errors])
|
28
32
|
end
|
29
33
|
|
@@ -204,9 +208,12 @@ module Her
|
|
204
208
|
def find(*ids)
|
205
209
|
params = ids.last.is_a?(Hash) ? ids.pop : {}
|
206
210
|
results = ids.flatten.compact.uniq.map do |id|
|
211
|
+
resource = nil
|
207
212
|
request(params.merge(:_method => :get, :_path => "#{build_request_path(params.merge(:id => id))}")) do |parsed_data|
|
208
|
-
new(parsed_data[:data].merge :_metadata => parsed_data[:data], :_errors => parsed_data[:errors])
|
213
|
+
resource = new(parsed_data[:data].merge :_metadata => parsed_data[:data], :_errors => parsed_data[:errors])
|
214
|
+
wrap_in_hooks(resource, :find)
|
209
215
|
end
|
216
|
+
resource
|
210
217
|
end
|
211
218
|
if ids.length > 1 || ids.first.kind_of?(Array)
|
212
219
|
results
|
data/lib/her/version.rb
CHANGED
data/spec/api_spec.rb
CHANGED
@@ -17,6 +17,12 @@ describe Her::API do
|
|
17
17
|
@api.base_uri.should == "https://api.example.com"
|
18
18
|
end
|
19
19
|
|
20
|
+
it "supports the base_uri legacy option" do
|
21
|
+
@api = Her::API.new
|
22
|
+
@api.setup :base_uri => "https://api.example.com"
|
23
|
+
@api.base_uri.should == "https://api.example.com"
|
24
|
+
end
|
25
|
+
|
20
26
|
it "sets custom middleware with #use" do
|
21
27
|
class Foo; end;
|
22
28
|
class Bar; end;
|
data/spec/model/hooks_spec.rb
CHANGED
@@ -32,6 +32,12 @@ describe Her::Model::Hooks do
|
|
32
32
|
Foo::User.hooks[:before_destroy].first.class.should == Symbol
|
33
33
|
end
|
34
34
|
|
35
|
+
it "does not handle “before find” method hooks" do
|
36
|
+
expect {
|
37
|
+
Foo::User.before_find :set_internal_id
|
38
|
+
}.should raise_error(NoMethodError)
|
39
|
+
end
|
40
|
+
|
35
41
|
it "handles “after save” method hooks" do
|
36
42
|
Foo::User.after_save :set_internal_id
|
37
43
|
Foo::User.hooks[:after_save].length.should == 1
|
@@ -55,6 +61,12 @@ describe Her::Model::Hooks do
|
|
55
61
|
Foo::User.hooks[:after_destroy].length.should == 1
|
56
62
|
Foo::User.hooks[:after_destroy].first.class.should == Symbol
|
57
63
|
end
|
64
|
+
|
65
|
+
it "handles “after find” method hooks" do
|
66
|
+
Foo::User.after_find :set_internal_id
|
67
|
+
Foo::User.hooks[:after_find].length.should == 1
|
68
|
+
Foo::User.hooks[:after_find].first.class.should == Symbol
|
69
|
+
end
|
58
70
|
end
|
59
71
|
|
60
72
|
describe "block hooks" do
|
@@ -82,6 +94,12 @@ describe Her::Model::Hooks do
|
|
82
94
|
Foo::User.hooks[:before_destroy].first.class.should == Proc
|
83
95
|
end
|
84
96
|
|
97
|
+
it "does not handle “before find” block hooks" do
|
98
|
+
expect {
|
99
|
+
Foo::User.before_find :set_internal_id
|
100
|
+
}.should raise_error(NoMethodError)
|
101
|
+
end
|
102
|
+
|
85
103
|
it "handles “after save” block hooks" do
|
86
104
|
Foo::User.after_save { |record| record.internal_id = 42 }
|
87
105
|
Foo::User.hooks[:after_save].length.should == 1
|
@@ -105,6 +123,12 @@ describe Her::Model::Hooks do
|
|
105
123
|
Foo::User.hooks[:after_destroy].length.should == 1
|
106
124
|
Foo::User.hooks[:after_destroy].first.class.should == Proc
|
107
125
|
end
|
126
|
+
|
127
|
+
it "handles “after find” block hooks" do
|
128
|
+
Foo::User.after_find { |record| record.internal_id = 42 }
|
129
|
+
Foo::User.hooks[:after_find].length.should == 1
|
130
|
+
Foo::User.hooks[:after_find].first.class.should == Proc
|
131
|
+
end
|
108
132
|
end
|
109
133
|
|
110
134
|
context "inheriting hooks from a superclass" do
|
@@ -125,8 +149,10 @@ describe Her::Model::Hooks do
|
|
125
149
|
builder.use Her::Middleware::FirstLevelParseJSON
|
126
150
|
builder.use Faraday::Request::UrlEncoded
|
127
151
|
builder.adapter :test do |stub|
|
152
|
+
stub.get("/users") { |env| [200, {}, [{ :id => 1, :name => "Tobias Fünke" }, { :id => 2, :name => "Lindsay Fünke" }].to_json] }
|
128
153
|
stub.post("/users") { |env| [200, {}, { :id => 1, :name => "Tobias Fünke" }.to_json] }
|
129
154
|
stub.get("/users/1") { |env| [200, {}, { :id => 1, :name => "Tobias Fünke" }.to_json] }
|
155
|
+
stub.get("/users/2") { |env| [200, {}, { :id => 2, :name => "Lindsay Fünke" }.to_json] }
|
130
156
|
stub.put("/users/1") { |env| [200, {}, { :id => 1, :name => "Tobias Fünke" }.to_json] }
|
131
157
|
stub.delete("/users/1") { |env| [200, {}, { :id => 1, :name => "Tobias Fünke" }.to_json] }
|
132
158
|
end
|
@@ -135,6 +161,7 @@ describe Her::Model::Hooks do
|
|
135
161
|
spawn_model "Foo::User" do
|
136
162
|
attr_accessor :internal_save_id, :internal_create_id, :internal_update_id, :internal_destroy_id
|
137
163
|
attr_accessor :internal_after_save_id, :internal_after_create_id, :internal_after_update_id, :internal_after_destroy_id
|
164
|
+
attr_accessor :internal_after_find_id
|
138
165
|
|
139
166
|
def change_internal_save_id; @internal_save_id = 100; end
|
140
167
|
def change_internal_create_id; @internal_create_id = 101; end
|
@@ -145,6 +172,8 @@ describe Her::Model::Hooks do
|
|
145
172
|
def change_internal_after_create_id; @internal_after_create_id = 101; end
|
146
173
|
def change_internal_after_update_id; @internal_after_update_id = 102; end
|
147
174
|
def change_internal_after_destroy_id; @internal_after_destroy_id = 103; end
|
175
|
+
|
176
|
+
def change_internal_after_find_id; @internal_after_find_id = 104; end
|
148
177
|
end
|
149
178
|
end
|
150
179
|
|
@@ -159,6 +188,8 @@ describe Her::Model::Hooks do
|
|
159
188
|
Foo::User.after_update :change_internal_after_update_id
|
160
189
|
Foo::User.after_create :change_internal_after_create_id
|
161
190
|
Foo::User.after_destroy :change_internal_after_destroy_id
|
191
|
+
|
192
|
+
Foo::User.after_find :change_internal_after_find_id
|
162
193
|
end
|
163
194
|
|
164
195
|
it "perform “before save” “before create” method hook on Model#save without an ID" do
|
@@ -167,6 +198,7 @@ describe Her::Model::Hooks do
|
|
167
198
|
@user.internal_save_id.should == 100
|
168
199
|
@user.internal_create_id.should == 101
|
169
200
|
@user.internal_update_id.should == nil
|
201
|
+
@user.internal_after_find_id.should == nil
|
170
202
|
end
|
171
203
|
|
172
204
|
it "perform “before save” and “before update” method hook on Model#save with an ID" do
|
@@ -175,6 +207,7 @@ describe Her::Model::Hooks do
|
|
175
207
|
@user.internal_save_id.should == 100
|
176
208
|
@user.internal_create_id.should == nil
|
177
209
|
@user.internal_update_id.should == 102
|
210
|
+
@user.internal_after_find_id.should == 104
|
178
211
|
end
|
179
212
|
|
180
213
|
it "perform “before destroy” method hook on Model#destroy" do
|
@@ -184,6 +217,7 @@ describe Her::Model::Hooks do
|
|
184
217
|
@user.internal_create_id.should == nil
|
185
218
|
@user.internal_update_id.should == nil
|
186
219
|
@user.internal_destroy_id.should == 103
|
220
|
+
@user.internal_after_find_id.should == 104
|
187
221
|
end
|
188
222
|
|
189
223
|
it "perform “after save” “after create” method hook on Model#save without an ID" do
|
@@ -192,6 +226,7 @@ describe Her::Model::Hooks do
|
|
192
226
|
@user.internal_after_save_id.should == 100
|
193
227
|
@user.internal_after_create_id.should == 101
|
194
228
|
@user.internal_after_update_id.should == nil
|
229
|
+
@user.internal_after_find_id.should == nil
|
195
230
|
end
|
196
231
|
|
197
232
|
it "perform “after save” “after update” method hook on Model#save with an ID" do
|
@@ -200,6 +235,7 @@ describe Her::Model::Hooks do
|
|
200
235
|
@user.internal_after_save_id.should == 100
|
201
236
|
@user.internal_after_create_id.should == nil
|
202
237
|
@user.internal_after_update_id.should == 102
|
238
|
+
@user.internal_after_find_id.should == 104
|
203
239
|
end
|
204
240
|
|
205
241
|
it "perform “after save” “after update” method hook on Model.save_existing" do
|
@@ -207,6 +243,7 @@ describe Her::Model::Hooks do
|
|
207
243
|
@user.internal_after_save_id.should == 100
|
208
244
|
@user.internal_after_create_id.should == nil
|
209
245
|
@user.internal_after_update_id.should == 102
|
246
|
+
@user.internal_after_find_id.should == nil
|
210
247
|
end
|
211
248
|
|
212
249
|
it "perform “after save” “after create” method hook on Model.create" do
|
@@ -214,6 +251,38 @@ describe Her::Model::Hooks do
|
|
214
251
|
@user.internal_after_save_id.should == 100
|
215
252
|
@user.internal_after_create_id.should == 101
|
216
253
|
@user.internal_after_update_id.should == nil
|
254
|
+
@user.internal_after_find_id.should == nil
|
255
|
+
end
|
256
|
+
|
257
|
+
it "perform “after find” method hook on Model.find" do
|
258
|
+
@user = Foo::User.find(1)
|
259
|
+
@user.internal_after_find_id.should == 104
|
260
|
+
@user.internal_save_id.should == nil
|
261
|
+
@user.internal_create_id.should == nil
|
262
|
+
@user.internal_update_id.should == nil
|
263
|
+
@user.internal_destroy_id.should == nil
|
264
|
+
end
|
265
|
+
|
266
|
+
it "perform “after find” method hook on Model#find with IDs" do
|
267
|
+
@users = Foo::User.find([1,2])
|
268
|
+
@users.each do |user|
|
269
|
+
user.internal_after_find_id.should == 104
|
270
|
+
user.internal_save_id.should == nil
|
271
|
+
user.internal_create_id.should == nil
|
272
|
+
user.internal_update_id.should == nil
|
273
|
+
user.internal_destroy_id.should == nil
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
it "perform “after find” method hook on Model.all" do
|
278
|
+
@users = Foo::User.all
|
279
|
+
@users.each do |user|
|
280
|
+
user.internal_after_find_id.should == 104
|
281
|
+
user.internal_save_id.should == nil
|
282
|
+
user.internal_create_id.should == nil
|
283
|
+
user.internal_update_id.should == nil
|
284
|
+
user.internal_destroy_id.should == nil
|
285
|
+
end
|
217
286
|
end
|
218
287
|
end
|
219
288
|
|
@@ -228,6 +297,7 @@ describe Her::Model::Hooks do
|
|
228
297
|
Foo::User.after_create { |record| record.internal_after_create_id = 201 }
|
229
298
|
Foo::User.after_update { |record| record.internal_after_update_id = 202 }
|
230
299
|
Foo::User.after_destroy { |record| record.internal_after_destroy_id = 203 }
|
300
|
+
Foo::User.after_find { |record| record.internal_after_find_id = 204 }
|
231
301
|
end
|
232
302
|
|
233
303
|
it "perform “before save” and “before create” block hook on Model#save without an ID" do
|
@@ -236,6 +306,7 @@ describe Her::Model::Hooks do
|
|
236
306
|
@user.internal_save_id.should == 200
|
237
307
|
@user.internal_create_id.should == 201
|
238
308
|
@user.internal_update_id.should == nil
|
309
|
+
@user.internal_after_find_id.should == nil
|
239
310
|
end
|
240
311
|
|
241
312
|
it "perform “before save” and “before update” block hook on Model#save with an ID" do
|
@@ -244,6 +315,7 @@ describe Her::Model::Hooks do
|
|
244
315
|
@user.internal_save_id.should == 200
|
245
316
|
@user.internal_create_id.should == nil
|
246
317
|
@user.internal_update_id.should == 202
|
318
|
+
@user.internal_after_find_id.should == 204
|
247
319
|
end
|
248
320
|
|
249
321
|
it "perform “before destroy” block hook on Model#destroy" do
|
@@ -253,6 +325,7 @@ describe Her::Model::Hooks do
|
|
253
325
|
@user.internal_create_id.should == nil
|
254
326
|
@user.internal_update_id.should == nil
|
255
327
|
@user.internal_destroy_id.should == 203
|
328
|
+
@user.internal_after_find_id.should == 204
|
256
329
|
end
|
257
330
|
|
258
331
|
it "perform “after save” “after create” block hook on Model#save without an ID" do
|
@@ -261,15 +334,73 @@ describe Her::Model::Hooks do
|
|
261
334
|
@user.internal_after_save_id.should == 200
|
262
335
|
@user.internal_after_create_id.should == 201
|
263
336
|
@user.internal_after_update_id.should == nil
|
337
|
+
@user.internal_after_find_id.should == nil
|
264
338
|
end
|
265
339
|
|
266
340
|
it "perform “after save” “after update” block hook on Model#save with an ID" do
|
267
341
|
@user = Foo::User.find(1)
|
268
342
|
@user.save
|
343
|
+
@user.internal_after_find_id.should == 204
|
269
344
|
@user.internal_after_save_id.should == 200
|
270
345
|
@user.internal_after_create_id.should == nil
|
271
346
|
@user.internal_after_update_id.should == 202
|
272
347
|
end
|
348
|
+
|
349
|
+
it "perform “after find” block hook on Model#find" do
|
350
|
+
@user = Foo::User.find(1)
|
351
|
+
@user.internal_after_find_id.should == 204
|
352
|
+
@user.internal_save_id.should == nil
|
353
|
+
@user.internal_create_id.should == nil
|
354
|
+
@user.internal_update_id.should == nil
|
355
|
+
end
|
356
|
+
|
357
|
+
it "perform “after find” method hook on Model#find with IDs" do
|
358
|
+
@users = Foo::User.find([1,2])
|
359
|
+
@users.each do |user|
|
360
|
+
user.internal_after_find_id.should == 204
|
361
|
+
user.internal_save_id.should == nil
|
362
|
+
user.internal_create_id.should == nil
|
363
|
+
user.internal_update_id.should == nil
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
it "perform “after find” method hook on Model.all" do
|
368
|
+
@users = Foo::User.all
|
369
|
+
@users.each do |user|
|
370
|
+
user.internal_after_find_id.should == 204
|
371
|
+
user.internal_save_id.should == nil
|
372
|
+
user.internal_create_id.should == nil
|
373
|
+
user.internal_update_id.should == nil
|
374
|
+
end
|
375
|
+
end
|
376
|
+
|
377
|
+
it "perform “after find” block hook on Model#find" do
|
378
|
+
@user = Foo::User.find(1)
|
379
|
+
@user.internal_after_find_id.should == 204
|
380
|
+
@user.internal_save_id.should == nil
|
381
|
+
@user.internal_create_id.should == nil
|
382
|
+
@user.internal_update_id.should == nil
|
383
|
+
end
|
384
|
+
|
385
|
+
it "perform “after find” method hook on Model#find with IDs" do
|
386
|
+
@users = Foo::User.find([1,2])
|
387
|
+
@users.each do |user|
|
388
|
+
user.internal_after_find_id.should == 204
|
389
|
+
user.internal_save_id.should == nil
|
390
|
+
user.internal_create_id.should == nil
|
391
|
+
user.internal_update_id.should == nil
|
392
|
+
end
|
393
|
+
end
|
394
|
+
|
395
|
+
it "perform “after find” method hook on Model.all" do
|
396
|
+
@users = Foo::User.all
|
397
|
+
@users.each do |user|
|
398
|
+
user.internal_after_find_id.should == 204
|
399
|
+
user.internal_save_id.should == nil
|
400
|
+
user.internal_create_id.should == nil
|
401
|
+
user.internal_update_id.should == nil
|
402
|
+
end
|
403
|
+
end
|
273
404
|
end
|
274
405
|
end
|
275
406
|
end
|
@@ -19,15 +19,23 @@ describe Her::Model::Introspection do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
describe "#inspect" do
|
22
|
-
it "outputs resource
|
22
|
+
it "outputs resource attributes for an existing resource" do
|
23
23
|
@user = Foo::User.find(1)
|
24
24
|
["#<Foo::User(users/1) name=\"Tobias Funke\" id=1>", "#<Foo::User(users/1) id=1 name=\"Tobias Funke\">"].should include(@user.inspect)
|
25
25
|
end
|
26
26
|
|
27
|
-
it "outputs resource
|
27
|
+
it "outputs resource attributes for an not-saved-yet resource" do
|
28
28
|
@user = Foo::User.new(:name => "Tobias Funke")
|
29
29
|
@user.inspect.should == "#<Foo::User(users) name=\"Tobias Funke\">"
|
30
30
|
end
|
31
|
+
|
32
|
+
it "outputs resource attributes using getters" do
|
33
|
+
@user = Foo::User.new(:name => "Tobias Funke", :password => "Funke")
|
34
|
+
@user.instance_eval {def password; 'filtered'; end}
|
35
|
+
@user.inspect.should include("name=\"Tobias Funke\"")
|
36
|
+
@user.inspect.should include("password=\"filtered\"")
|
37
|
+
@user.inspect.should_not include("password=\"Funke\"")
|
38
|
+
end
|
31
39
|
end
|
32
40
|
end
|
33
41
|
|