show_for 0.1.1 → 0.1.2
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.rdoc +4 -2
- data/lib/show_for/association.rb +52 -0
- data/lib/show_for/attribute.rb +18 -0
- data/lib/show_for/builder.rb +8 -45
- data/lib/show_for/content.rb +0 -6
- data/lib/show_for/helper.rb +1 -1
- data/lib/show_for/version.rb +1 -1
- data/test/builder_test.rb +23 -12
- data/test/helper_test.rb +6 -6
- metadata +3 -1
data/README.rdoc
CHANGED
@@ -4,6 +4,7 @@ ShowFor allows you to quickly show a model information with I18n features.
|
|
4
4
|
|
5
5
|
<% show_for @user do |u| %>
|
6
6
|
<%= u.attribute :name %>
|
7
|
+
<%= u.attribute :nickname, :in => :profile %>
|
7
8
|
<%= u.attribute :confirmed? %>
|
8
9
|
<%= u.attribute :created_at, :format => :short %>
|
9
10
|
<%= u.attribute :last_sign_in_at, :if_blank => "User did not access yet"
|
@@ -109,7 +110,8 @@ show_for also supports associations.
|
|
109
110
|
|
110
111
|
<% show_for @artwork do |a| %>
|
111
112
|
<%= a.association :artist %>
|
112
|
-
<%= a.association :artist, :
|
113
|
+
<%= a.association :artist, :using => :name_with_title %>
|
114
|
+
<%= a.attribute :name_with_title, :in => :artist %>
|
113
115
|
|
114
116
|
<%= a.association :tags %>
|
115
117
|
<%= a.association :tags, :to_sentence => true %>
|
@@ -125,7 +127,7 @@ show_for also supports associations.
|
|
125
127
|
The first is a has_one or belongs_to association, which works like an attribute
|
126
128
|
to show_for, except it will retrieve the artist association and try to find a
|
127
129
|
proper method from ShowFor.association_methods to be used. You can pass
|
128
|
-
the option :
|
130
|
+
the option :using to tell (and not guess) which method from the association
|
129
131
|
to use.
|
130
132
|
|
131
133
|
:tags is a has_and_belongs_to_many association which will return a collection.
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module ShowFor
|
2
|
+
module Association
|
3
|
+
def attribute(attribute_name, options={}, &block)
|
4
|
+
if association_name = options.delete(:in)
|
5
|
+
options[:using] = attribute_name
|
6
|
+
association(association_name, options, &block)
|
7
|
+
else
|
8
|
+
super
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def association(association_name, options={}, &block)
|
13
|
+
apply_default_options!(association_name, options)
|
14
|
+
|
15
|
+
# If a block with an iterator was given, no need to calculate the labels
|
16
|
+
# since we want the collection to be yielded. Otherwise, calculate the values.
|
17
|
+
value = if collection_block?(block)
|
18
|
+
collection_block = block
|
19
|
+
@object.send(association_name)
|
20
|
+
elsif block
|
21
|
+
block
|
22
|
+
else
|
23
|
+
association = @object.send(association_name)
|
24
|
+
values = retrieve_values_from_association(association, options)
|
25
|
+
|
26
|
+
if options.delete(:to_sentence)
|
27
|
+
values.to_sentence
|
28
|
+
elsif joiner = options.delete(:join)
|
29
|
+
values.join(joiner)
|
30
|
+
else
|
31
|
+
values
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
wrap_label_and_content(association_name, value, options, &collection_block)
|
36
|
+
end
|
37
|
+
|
38
|
+
protected
|
39
|
+
|
40
|
+
def retrieve_values_from_association(association, options) #:nodoc:
|
41
|
+
sample = association.is_a?(Array) ? association.first : association
|
42
|
+
|
43
|
+
if options[:method]
|
44
|
+
options[:using] = options.delete(:method)
|
45
|
+
ActiveSupport::Deprecation.warn ":method is deprecated. Please use :using instead", caller
|
46
|
+
end
|
47
|
+
|
48
|
+
method = options.delete(:using) || ShowFor.association_methods.find { |m| sample.respond_to?(m) }
|
49
|
+
association.is_a?(Array) ? association.map(&method) : association.try(method)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module ShowFor
|
2
|
+
module Attribute
|
3
|
+
def attribute(attribute_name, options={}, &block)
|
4
|
+
apply_default_options!(attribute_name, options)
|
5
|
+
collection_block, block = block, nil if collection_block?(block)
|
6
|
+
|
7
|
+
value = if block
|
8
|
+
block
|
9
|
+
elsif @object.respond_to?(:"human_#{attribute_name}")
|
10
|
+
@object.send :"human_#{attribute_name}"
|
11
|
+
else
|
12
|
+
@object.send(attribute_name)
|
13
|
+
end
|
14
|
+
|
15
|
+
wrap_label_and_content(attribute_name, value, options, &collection_block)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/show_for/builder.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
|
+
require 'show_for/attribute'
|
2
|
+
require 'show_for/association'
|
1
3
|
require 'show_for/content'
|
2
4
|
require 'show_for/label'
|
3
5
|
|
4
6
|
module ShowFor
|
5
7
|
class Builder
|
8
|
+
include ShowFor::Attribute
|
9
|
+
include ShowFor::Association
|
6
10
|
include ShowFor::Content
|
7
11
|
include ShowFor::Label
|
8
12
|
|
@@ -12,47 +16,6 @@ module ShowFor
|
|
12
16
|
@object, @template = object, template
|
13
17
|
end
|
14
18
|
|
15
|
-
def attribute(attribute_name, options={}, &block)
|
16
|
-
apply_default_options!(attribute_name, options)
|
17
|
-
collection_block, block = block, nil if collection_block?(block)
|
18
|
-
|
19
|
-
value = if block
|
20
|
-
block
|
21
|
-
elsif @object.respond_to?(:"human_#{attribute_name}")
|
22
|
-
@object.send :"human_#{attribute_name}"
|
23
|
-
else
|
24
|
-
@object.send(attribute_name)
|
25
|
-
end
|
26
|
-
|
27
|
-
wrap_label_and_content(attribute_name, value, options, &collection_block)
|
28
|
-
end
|
29
|
-
|
30
|
-
def association(association_name, options={}, &block)
|
31
|
-
apply_default_options!(association_name, options)
|
32
|
-
|
33
|
-
# If a block with an iterator was given, no need to calculate the labels
|
34
|
-
# since we want the collection to be yielded. Otherwise, calculate the values.
|
35
|
-
value = if collection_block?(block)
|
36
|
-
collection_block = block
|
37
|
-
@object.send(association_name)
|
38
|
-
elsif block
|
39
|
-
block
|
40
|
-
else
|
41
|
-
association = @object.send(association_name)
|
42
|
-
values = retrieve_values_from_association(association, options)
|
43
|
-
|
44
|
-
if options.delete(:to_sentence)
|
45
|
-
values.to_sentence
|
46
|
-
elsif joiner = options.delete(:join)
|
47
|
-
values.join(joiner)
|
48
|
-
else
|
49
|
-
values
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
wrap_label_and_content(association_name, value, options, &collection_block)
|
54
|
-
end
|
55
|
-
|
56
19
|
protected
|
57
20
|
|
58
21
|
def object_name #:nodoc:
|
@@ -89,10 +52,10 @@ module ShowFor
|
|
89
52
|
concat ? @template.concat(html) : html
|
90
53
|
end
|
91
54
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
55
|
+
# Returns true if the block is supposed to iterate through a collection,
|
56
|
+
# i.e. it has arity equals to one.
|
57
|
+
def collection_block?(block) #:nodoc:
|
58
|
+
block && block.arity == 1
|
96
59
|
end
|
97
60
|
end
|
98
61
|
end
|
data/lib/show_for/content.rb
CHANGED
@@ -42,11 +42,5 @@ module ShowFor
|
|
42
42
|
|
43
43
|
wrap_with(:collection, response, options)
|
44
44
|
end
|
45
|
-
|
46
|
-
# Returns true if the block is supposed to iterate through a collection,
|
47
|
-
# i.e. it has arity equals to one.
|
48
|
-
def collection_block?(block) #:nodoc:
|
49
|
-
block && block.arity == 1
|
50
|
-
end
|
51
45
|
end
|
52
46
|
end
|
data/lib/show_for/helper.rb
CHANGED
@@ -15,7 +15,7 @@ module ShowFor
|
|
15
15
|
html_options[:id] ||= dom_id(object)
|
16
16
|
html_options[:class] = "show_for #{dom_class(object)} #{html_options[:class]}".strip
|
17
17
|
|
18
|
-
content_tag(tag,
|
18
|
+
concat content_tag(tag, capture(ShowFor::Builder.new(object, self), &block), html_options)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
data/lib/show_for/version.rb
CHANGED
data/test/builder_test.rb
CHANGED
@@ -3,27 +3,27 @@ require 'test_helper'
|
|
3
3
|
class BuilderTest < ActionView::TestCase
|
4
4
|
|
5
5
|
def with_attribute_for(object, attribute, options={}, &block)
|
6
|
-
|
6
|
+
show_for(object) do |o|
|
7
7
|
o.attribute(attribute, options, &block)
|
8
|
-
end
|
8
|
+
end
|
9
9
|
end
|
10
10
|
|
11
11
|
def with_association_for(object, association, options={}, &block)
|
12
|
-
|
12
|
+
show_for(object) do |o|
|
13
13
|
o.association(association, options, &block)
|
14
|
-
end
|
14
|
+
end
|
15
15
|
end
|
16
16
|
|
17
17
|
def with_label_for(object, attribute, options={})
|
18
|
-
|
18
|
+
show_for(object) do |o|
|
19
19
|
o.label attribute, options
|
20
|
-
end
|
20
|
+
end
|
21
21
|
end
|
22
22
|
|
23
23
|
def with_content_for(object, value, options={})
|
24
|
-
|
24
|
+
show_for(object) do |o|
|
25
25
|
o.content value, options
|
26
|
-
end
|
26
|
+
end
|
27
27
|
end
|
28
28
|
|
29
29
|
# WRAPPER
|
@@ -271,11 +271,22 @@ class BuilderTest < ActionView::TestCase
|
|
271
271
|
assert_select "div.show_for p.wrapper", /PlataformaTec/
|
272
272
|
end
|
273
273
|
|
274
|
-
test "show_for accepts :
|
275
|
-
with_association_for @user, :company, :
|
274
|
+
test "show_for accepts :using as option to tell how to retrieve association value" do
|
275
|
+
with_association_for @user, :company, :using => :alternate_name
|
276
276
|
assert_select "div.show_for p.wrapper", /Alternate PlataformaTec/
|
277
277
|
end
|
278
278
|
|
279
|
+
test "show_for accepts :in to tell to retrieve an attribute from association" do
|
280
|
+
with_attribute_for @user, :alternate_name, :in => :company
|
281
|
+
assert_select "div.show_for p.wrapper", /Alternate PlataformaTec/
|
282
|
+
end
|
283
|
+
|
284
|
+
test "show_for forwards all options send with :in to association" do
|
285
|
+
with_attribute_for @user, :alternate_name, :in => :tags, :to_sentence => true
|
286
|
+
assert_no_select "div.show_for p.wrapper ul.collection"
|
287
|
+
assert_select "div.show_for p.wrapper", /Alternate Tag 1, Alternate Tag 2, and Alternate Tag 3/
|
288
|
+
end
|
289
|
+
|
279
290
|
test "show_for works with has_many/has_and_belongs_to_many associations" do
|
280
291
|
with_association_for @user, :tags
|
281
292
|
assert_select "div.show_for p.wrapper ul.collection"
|
@@ -284,8 +295,8 @@ class BuilderTest < ActionView::TestCase
|
|
284
295
|
assert_select "div.show_for p.wrapper ul.collection li", "Tag 3"
|
285
296
|
end
|
286
297
|
|
287
|
-
test "show_for accepts :
|
288
|
-
with_association_for @user, :tags, :
|
298
|
+
test "show_for accepts :using as option to tell how to retrieve association values" do
|
299
|
+
with_association_for @user, :tags, :using => :alternate_name
|
289
300
|
assert_select "div.show_for p.wrapper ul.collection"
|
290
301
|
assert_select "div.show_for p.wrapper ul.collection li", "Alternate Tag 1"
|
291
302
|
assert_select "div.show_for p.wrapper ul.collection li", "Alternate Tag 2"
|
data/test/helper_test.rb
CHANGED
@@ -2,29 +2,29 @@ require "test_helper"
|
|
2
2
|
|
3
3
|
class HelperTest < ActionView::TestCase
|
4
4
|
test "show for yields an instance of ShowFor::Builder" do
|
5
|
-
|
5
|
+
show_for(@user) do |f|
|
6
6
|
assert f.instance_of?(ShowFor::Builder)
|
7
|
-
end
|
7
|
+
end
|
8
8
|
end
|
9
9
|
|
10
10
|
test "show for should add default class to form" do
|
11
|
-
|
11
|
+
show_for(@user) do |f| end
|
12
12
|
assert_select "div.show_for"
|
13
13
|
end
|
14
14
|
|
15
15
|
test "show for should add object class name as css class to form" do
|
16
|
-
|
16
|
+
show_for(@user) do |f| end
|
17
17
|
assert_select "div.show_for.user"
|
18
18
|
end
|
19
19
|
|
20
20
|
test "show for should pass options" do
|
21
|
-
|
21
|
+
show_for(@user, :id => "my_div", :class => "common") do |f| end
|
22
22
|
assert_select "div#my_div.show_for.user.common"
|
23
23
|
end
|
24
24
|
|
25
25
|
test "show for tag should be configurable" do
|
26
26
|
swap ShowFor, :show_for_tag => :p do
|
27
|
-
|
27
|
+
show_for(@user) do |f| end
|
28
28
|
assert_select "p.show_for"
|
29
29
|
end
|
30
30
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: show_for
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "Jos\xC3\xA9 Valim"
|
@@ -27,6 +27,8 @@ files:
|
|
27
27
|
- generators/show_for_install/templates/show_for.rb
|
28
28
|
- init.rb
|
29
29
|
- lib/show_for.rb
|
30
|
+
- lib/show_for/association.rb
|
31
|
+
- lib/show_for/attribute.rb
|
30
32
|
- lib/show_for/builder.rb
|
31
33
|
- lib/show_for/content.rb
|
32
34
|
- lib/show_for/helper.rb
|