active_presenter 1.1.2 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +6 -0
- data/lib/active_presenter/base.rb +12 -4
- data/lib/active_presenter/version.rb +2 -2
- data/test/base_test.rb +10 -0
- data/test/test_helper.rb +4 -0
- metadata +2 -2
data/README
CHANGED
@@ -28,6 +28,12 @@ Creating a presenter is as simple as subclassing ActivePresenter::Base. Use the
|
|
28
28
|
presents :user, :account
|
29
29
|
end
|
30
30
|
|
31
|
+
In the above example, :user will (predictably) become User. If you want to override this behaviour, specify the desired types in a hash, as so:
|
32
|
+
|
33
|
+
class PresenterWithTwoAddresses < ActivePresenter::Base
|
34
|
+
presents :primary_address => Address, :secondary_address => Address
|
35
|
+
end
|
36
|
+
|
31
37
|
=== Instantiation
|
32
38
|
|
33
39
|
Then, you can instantiate the presenter using either, or both of two forms.
|
@@ -14,17 +14,25 @@ module ActivePresenter
|
|
14
14
|
# class SignupPresenter < ActivePresenter::Base
|
15
15
|
# presents :user, :account
|
16
16
|
# end
|
17
|
+
#
|
18
|
+
# In the above example, :user will (predictably) become User. If you want to override this behaviour, specify the desired types in a hash, as so:
|
17
19
|
#
|
20
|
+
# class PresenterWithTwoAddresses < ActivePresenter::Base
|
21
|
+
# presents :primary_address => Address, :secondary_address => Address
|
22
|
+
# end
|
18
23
|
#
|
19
24
|
def self.presents(*types)
|
20
|
-
|
25
|
+
types_and_classes = types.extract_options!
|
26
|
+
types.each { |t| types_and_classes[t] = t.to_s.tableize.classify.constantize }
|
27
|
+
|
28
|
+
attr_accessor *types_and_classes.keys
|
21
29
|
|
22
|
-
|
30
|
+
types_and_classes.keys.each do |t|
|
23
31
|
define_method("#{t}_errors") do
|
24
32
|
send(t).errors
|
25
33
|
end
|
26
34
|
|
27
|
-
presented[t] = t
|
35
|
+
presented[t] = types_and_classes[t]
|
28
36
|
end
|
29
37
|
end
|
30
38
|
|
@@ -222,7 +230,7 @@ module ActivePresenter
|
|
222
230
|
presentable = presentable_for(name)
|
223
231
|
return false unless presentable
|
224
232
|
flat_attribute = {flatten_attribute_name(name, presentable) => ''} #remove_att... normally takes a hash, so we use a ''
|
225
|
-
presentable.
|
233
|
+
presented[presentable].new.send(:remove_attributes_protected_from_mass_assignment, flat_attribute).empty?
|
226
234
|
end
|
227
235
|
|
228
236
|
def run_callbacks_with_halt(callback)
|
data/test/base_test.rb
CHANGED
@@ -277,4 +277,14 @@ Expectations do
|
|
277
277
|
expect true do
|
278
278
|
SignupNoNilPresenter.new(:user => nil, :account => Account.new).save!
|
279
279
|
end
|
280
|
+
|
281
|
+
expect Address do
|
282
|
+
PresenterWithTwoAddresses.new.secondary_address
|
283
|
+
end
|
284
|
+
|
285
|
+
expect "123 awesome st" do
|
286
|
+
p = PresenterWithTwoAddresses.new(:secondary_address_street => "123 awesome st")
|
287
|
+
p.save
|
288
|
+
p.secondary_address_street
|
289
|
+
end
|
280
290
|
end
|
data/test/test_helper.rb
CHANGED
@@ -39,6 +39,10 @@ class Account < ActiveRecord::Base; end
|
|
39
39
|
class Address < ActiveRecord::Base; end
|
40
40
|
class AccountInfo < ActiveRecord::Base; end
|
41
41
|
|
42
|
+
class PresenterWithTwoAddresses < ActivePresenter::Base
|
43
|
+
presents :address, :secondary_address => Address
|
44
|
+
end
|
45
|
+
|
42
46
|
class SignupPresenter < ActivePresenter::Base
|
43
47
|
presents :account, :user
|
44
48
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_presenter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Golick & Daniel Haran
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-05-17 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|