show_for 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.
- checksums.yaml +7 -0
- data/CHANGELOG.rdoc +13 -0
- data/lib/generators/show_for/install_generator.rb +4 -2
- data/lib/generators/show_for/templates/en.yml +2 -0
- data/lib/generators/show_for/templates/show.html.haml +8 -0
- data/lib/generators/show_for/templates/show_for.rb +3 -0
- data/lib/show_for/association.rb +5 -2
- data/lib/show_for/builder.rb +18 -3
- data/lib/show_for/content.rb +23 -4
- data/lib/show_for/helper.rb +9 -1
- data/lib/show_for/version.rb +1 -1
- data/lib/show_for.rb +3 -0
- data/test/association_test.rb +20 -0
- data/test/attribute_test.rb +23 -0
- data/test/builder_test.rb +9 -0
- data/test/generators/show_for_generator_test.rb +26 -0
- data/test/helper_test.rb +14 -0
- data/test/support/models.rb +5 -0
- data/test/test_helper.rb +3 -0
- metadata +22 -21
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0ec28a78975708c9329cdb9d30f82d98b713ab4f
|
4
|
+
data.tar.gz: 0c59a01bff303106a9a3adbe014ec55656f3b5a5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 655e5c23fc65094e2c833d985c9fdc4a8575c165d9bb969193ec8522f8efa5ac01f30235685a5cc112fc7b6f0a50220afbc560ba2bfcb40a0cce3544ff306072
|
7
|
+
data.tar.gz: 58ff69a4ffd41d8c628514b7e37064dad1b12a037011ca8b903e391dee776786f54145bfeb5b8a9988d6399d133556229f1ade3a3c12c20bc0f40d276035e4b0
|
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
== 0.2.6
|
2
|
+
|
3
|
+
* enhancements
|
4
|
+
* Ruby 2.0 support.
|
5
|
+
* Add Haml template. (by github.com/nashby) Closes #12.
|
6
|
+
* Add `blank_html` tanslation. (by github.com/nashby)
|
7
|
+
* Add `show_for_class` configuration option. (by github.com/nashby)
|
8
|
+
|
9
|
+
* bug fix
|
10
|
+
* Make show_for works with namespaced models. (by github.com/fabiokr)
|
11
|
+
* Add `blank_content_class` to the attributes. (by github.com/blakehilscher). Closes #24.
|
12
|
+
* Don't call `association.map` if association method is nil (by github.com/nashby). Closes #40.
|
13
|
+
|
1
14
|
== 0.2.5
|
2
15
|
|
3
16
|
* enhancements
|
@@ -2,6 +2,7 @@ module ShowFor
|
|
2
2
|
module Generators
|
3
3
|
class InstallGenerator < Rails::Generators::Base
|
4
4
|
desc "Copy ShowFor installation files"
|
5
|
+
class_option :template_engine, :desc => 'Template engine to be invoked (erb or haml or slim).'
|
5
6
|
source_root File.expand_path('../templates', __FILE__)
|
6
7
|
|
7
8
|
def copy_initializers
|
@@ -13,8 +14,9 @@ module ShowFor
|
|
13
14
|
end
|
14
15
|
|
15
16
|
def copy_generator_template
|
16
|
-
|
17
|
+
engine = options[:template_engine]
|
18
|
+
copy_file "show.html.#{engine}", "lib/templates/#{engine}/scaffold/show.html.#{engine}"
|
17
19
|
end
|
18
20
|
end
|
19
21
|
end
|
20
|
-
end
|
22
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
= show_for(@<%= singular_name %>) do |s|
|
2
|
+
<%- attributes.each do |attribute| -%>
|
3
|
+
= s.<%= attribute.reference? ? :association : :attribute %> :<%= attribute.name %>
|
4
|
+
<% end -%>
|
5
|
+
|
6
|
+
= link_to 'Edit', edit_<%= singular_name %>_path(@<%= singular_name %>)
|
7
|
+
|
|
8
|
+
= link_to 'Back', <%= plural_name %>_path
|
@@ -3,6 +3,9 @@ ShowFor.setup do |config|
|
|
3
3
|
# The tag which wraps show_for calls.
|
4
4
|
# config.show_for_tag = :div
|
5
5
|
|
6
|
+
# The DOM class set for show_for tag. Default is nil
|
7
|
+
# config.show_for_class = :custom
|
8
|
+
|
6
9
|
# The tag which wraps each attribute/association call. Default is :p.
|
7
10
|
# config.wrapper_tag = :dl
|
8
11
|
|
data/lib/show_for/association.rb
CHANGED
@@ -46,7 +46,10 @@ module ShowFor
|
|
46
46
|
end
|
47
47
|
|
48
48
|
method = options.delete(:using) || ShowFor.association_methods.find { |m| sample.respond_to?(m) }
|
49
|
-
|
49
|
+
|
50
|
+
if method
|
51
|
+
association.is_a?(Array) ? association.map(&method) : association.try(method)
|
52
|
+
end
|
50
53
|
end
|
51
54
|
end
|
52
|
-
end
|
55
|
+
end
|
data/lib/show_for/builder.rb
CHANGED
@@ -19,17 +19,26 @@ module ShowFor
|
|
19
19
|
protected
|
20
20
|
|
21
21
|
def object_name #:nodoc:
|
22
|
-
@object_name ||=
|
22
|
+
@object_name ||= begin
|
23
|
+
model_name = @object.class.model_name
|
24
|
+
|
25
|
+
# TODO Remove this check when we drop support to Rails 3.0
|
26
|
+
if model_name.respond_to?(:param_key)
|
27
|
+
model_name.param_key
|
28
|
+
else
|
29
|
+
model_name.singular
|
30
|
+
end
|
31
|
+
end
|
23
32
|
end
|
24
33
|
|
25
34
|
def wrap_label_and_content(name, value, options, &block) #:nodoc:
|
26
35
|
label = label(name, options, false)
|
27
36
|
label += ShowFor.separator.to_s.html_safe if label.present?
|
28
|
-
wrap_with(:wrapper, label + content(value, options, false, &block), options)
|
37
|
+
wrap_with(:wrapper, label + content(value, options, false, &block), apply_wrapper_options!(:wrapper, options, value))
|
29
38
|
end
|
30
39
|
|
31
40
|
def wrap_content(name, value, options, &block) #:nodoc:
|
32
|
-
wrap_with(:wrapper, content(value, options, false, &block), options)
|
41
|
+
wrap_with(:wrapper, content(value, options, false, &block), apply_wrapper_options!(:wrapper, options, value))
|
33
42
|
end
|
34
43
|
|
35
44
|
# Set "#{object_name}_#{attribute_name}" as in the wrapper tag.
|
@@ -39,6 +48,12 @@ module ShowFor
|
|
39
48
|
wrapper_html[:class] = "#{html_class} #{wrapper_html[:class]}".rstrip
|
40
49
|
end
|
41
50
|
|
51
|
+
def apply_wrapper_options!(type, options, value)
|
52
|
+
options[:"#{type}_html"] ||= {}
|
53
|
+
options[:"#{type}_html"][:class] = [options[:"#{type}_html"][:class], ShowFor.blank_content_class].join(' ') if value.blank? && value != false
|
54
|
+
options
|
55
|
+
end
|
56
|
+
|
42
57
|
# Gets the default tag set in ShowFor module and apply (if defined)
|
43
58
|
# around the given content. It also check for html_options in @options
|
44
59
|
# hash related to the current type.
|
data/lib/show_for/content.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
module ShowFor
|
2
2
|
module Content
|
3
3
|
def content(value, options={}, apply_options=true, &block)
|
4
|
+
|
5
|
+
# cache value for apply_wrapper_options!
|
6
|
+
sample_value = value
|
7
|
+
|
4
8
|
if value.blank? && value != false
|
5
|
-
value = options
|
6
|
-
options[:class] = [options[:class], ShowFor.blank_content_class].join(' ')
|
9
|
+
value = blank_value(options)
|
7
10
|
end
|
8
11
|
|
9
12
|
# We need to convert value to_a because when dealing with ActiveRecord
|
@@ -24,11 +27,15 @@ module ShowFor
|
|
24
27
|
when NilClass, Numeric
|
25
28
|
value.to_s
|
26
29
|
else
|
27
|
-
|
30
|
+
if block
|
31
|
+
template.capture(value, &block)
|
32
|
+
else
|
33
|
+
value
|
34
|
+
end
|
28
35
|
end
|
29
36
|
|
30
37
|
options[:content_html] = options.except(:content_tag) if apply_options
|
31
|
-
wrap_with(:content, content, options)
|
38
|
+
wrap_with(:content, content, apply_wrapper_options!(:content, options, sample_value) )
|
32
39
|
end
|
33
40
|
|
34
41
|
protected
|
@@ -42,5 +49,17 @@ module ShowFor
|
|
42
49
|
|
43
50
|
wrap_with(:collection, response, options)
|
44
51
|
end
|
52
|
+
|
53
|
+
def translate_blank_html
|
54
|
+
template.t(:'show_for.blank_html', :default => translate_blank_text)
|
55
|
+
end
|
56
|
+
|
57
|
+
def translate_blank_text
|
58
|
+
I18n.t(:'show_for.blank', :default => "Not specified")
|
59
|
+
end
|
60
|
+
|
61
|
+
def blank_value(options)
|
62
|
+
options.delete(:if_blank) || translate_blank_html
|
63
|
+
end
|
45
64
|
end
|
46
65
|
end
|
data/lib/show_for/helper.rb
CHANGED
@@ -10,16 +10,24 @@ module ShowFor
|
|
10
10
|
# end
|
11
11
|
#
|
12
12
|
def show_for(object, html_options={}, &block)
|
13
|
+
html_options = html_options.dup
|
14
|
+
|
13
15
|
tag = html_options.delete(:show_for_tag) || ShowFor.show_for_tag
|
14
16
|
|
15
17
|
html_options[:id] ||= dom_id(object)
|
16
|
-
html_options[:class] =
|
18
|
+
html_options[:class] = show_for_html_class(object, html_options)
|
17
19
|
|
18
20
|
builder = html_options.delete(:builder) || ShowFor::Builder
|
19
21
|
content = capture(builder.new(object, self), &block)
|
20
22
|
|
21
23
|
content_tag(tag, content, html_options)
|
22
24
|
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def show_for_html_class(object, html_options)
|
29
|
+
"show_for #{dom_class(object)} #{html_options[:class]} #{ShowFor.show_for_class}".squeeze(" ").rstrip
|
30
|
+
end
|
23
31
|
end
|
24
32
|
end
|
25
33
|
|
data/lib/show_for/version.rb
CHANGED
data/lib/show_for.rb
CHANGED
data/test/association_test.rb
CHANGED
@@ -30,6 +30,26 @@ class AssociationTest < ActionView::TestCase
|
|
30
30
|
assert_select "div.show_for p.wrapper ul.collection li", "Tag 3"
|
31
31
|
end
|
32
32
|
|
33
|
+
test "show_for works with has_many/has_and_belongs_to_many blank associations" do
|
34
|
+
def @user.tags
|
35
|
+
[]
|
36
|
+
end
|
37
|
+
|
38
|
+
swap ShowFor, :association_methods => [:name] do
|
39
|
+
with_association_for @user, :tags
|
40
|
+
assert_no_select "div.show_for p.wrapper ul.collection"
|
41
|
+
assert_no_select "div.show_for p.wrapper", /Enumerator/
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
test "show_for accepts a block with an argument in belongs_to associations" do
|
46
|
+
with_association_for @user, :company do |company|
|
47
|
+
company.name.upcase
|
48
|
+
end
|
49
|
+
|
50
|
+
assert_select "div.show_for p.wrapper", /PLATAFORMATEC/
|
51
|
+
end
|
52
|
+
|
33
53
|
test "show_for accepts :using as option to tell how to retrieve association values" do
|
34
54
|
with_association_for @user, :tags, :using => :alternate_name
|
35
55
|
assert_select "div.show_for p.wrapper ul.collection"
|
data/test/attribute_test.rb
CHANGED
@@ -114,6 +114,13 @@ class AttributeTest < ActionView::TestCase
|
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
117
|
+
test "show_for accepts not spcified message can be localized with html" do
|
118
|
+
store_translations(:en, :show_for => { :blank_html => "<span>OMG! It's blank!</span>" }) do
|
119
|
+
with_attribute_for @user, :description
|
120
|
+
assert_select "div.show_for p.wrapper span", "OMG! It's blank!"
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
117
124
|
test "show_for uses :if_blank if attribute is blank" do
|
118
125
|
with_attribute_for @user, :description, :if_blank => "No description provided"
|
119
126
|
assert_select "div.show_for p.wrapper", /No description provided/
|
@@ -126,6 +133,13 @@ class AttributeTest < ActionView::TestCase
|
|
126
133
|
assert_select "div.show_for p.wrapper", /This description/
|
127
134
|
end
|
128
135
|
|
136
|
+
test "show_for#content given a block should be wrapped in the result" do
|
137
|
+
with_attribute_for @user, :name do |name|
|
138
|
+
"<div class='block'>#{name}</div>".html_safe
|
139
|
+
end
|
140
|
+
assert_select "p.wrapper.user_name div.block", /ShowFor/
|
141
|
+
end
|
142
|
+
|
129
143
|
test "show_for escapes content by default" do
|
130
144
|
@user.name = "<b>hack you!</b>"
|
131
145
|
with_attribute_for @user, :name
|
@@ -164,4 +178,13 @@ class AttributeTest < ActionView::TestCase
|
|
164
178
|
assert_select "div.show_for p.user_email.wrapper", /Not specified/
|
165
179
|
assert_select "p.user_email strong.label", "Email"
|
166
180
|
end
|
181
|
+
|
182
|
+
test "show_for should wrap blank attributes with no_attribute" do
|
183
|
+
swap ShowFor, :blank_content_class => 'no_attribute' do
|
184
|
+
with_attributes_for @user, :name, :birthday
|
185
|
+
assert_select ".wrapper.user_birthday.no_attribute"
|
186
|
+
assert_select ".wrapper.user_name.no_attribute", false
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
167
190
|
end
|
data/test/builder_test.rb
CHANGED
@@ -18,6 +18,15 @@ class BuilderTest < ActionView::TestCase
|
|
18
18
|
assert_select "div.show_for p.wrapper"
|
19
19
|
end
|
20
20
|
|
21
|
+
test "show_for properly deals with namespaced models" do
|
22
|
+
@user = Namespaced::User.new(:id => 1, :name => "ShowFor")
|
23
|
+
|
24
|
+
with_attribute_for @user, :name
|
25
|
+
assert_select "div.show_for p.namespaced_user_name.wrapper"
|
26
|
+
assert_select "div.show_for p.wrapper strong.label"
|
27
|
+
assert_select "div.show_for p.wrapper"
|
28
|
+
end
|
29
|
+
|
21
30
|
test "show_for allows wrapper tag to be changed by attribute" do
|
22
31
|
with_attribute_for @user, :name, :wrapper_tag => :span
|
23
32
|
assert_select "div.show_for span.user_name.wrapper"
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ShowForGeneratorTest < Rails::Generators::TestCase
|
4
|
+
tests ShowFor::Generators::InstallGenerator
|
5
|
+
destination File.expand_path('../../tmp', __FILE__)
|
6
|
+
setup :prepare_destination
|
7
|
+
teardown { rm_rf(destination_root) }
|
8
|
+
|
9
|
+
test 'generates example locale file' do
|
10
|
+
run_generator
|
11
|
+
assert_file 'config/locales/show_for.en.yml'
|
12
|
+
end
|
13
|
+
|
14
|
+
test 'generates the show_for initializer' do
|
15
|
+
run_generator
|
16
|
+
assert_file 'config/initializers/show_for.rb',
|
17
|
+
/config.show_for_tag = :div/
|
18
|
+
end
|
19
|
+
|
20
|
+
%W(erb haml).each do |engine|
|
21
|
+
test "generates the scaffold template when using #{engine}" do
|
22
|
+
run_generator ['-e', engine]
|
23
|
+
assert_file "lib/templates/#{engine}/scaffold/show.html.#{engine}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/test/helper_test.rb
CHANGED
@@ -37,4 +37,18 @@ class HelperTest < ActionView::TestCase
|
|
37
37
|
assert_select "p.show_for"
|
38
38
|
end
|
39
39
|
end
|
40
|
+
|
41
|
+
test "show for class should be configurable" do
|
42
|
+
swap ShowFor, :show_for_class => :awesome do
|
43
|
+
concat(show_for(@user) do |f| end)
|
44
|
+
assert_select "div.show_for.user.awesome"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
test "show for options hash should not be modified" do
|
49
|
+
html_options = { :show_for_tag => :li }
|
50
|
+
concat(show_for(@user, html_options) do |f| end)
|
51
|
+
assert_equal({ :show_for_tag => :li }, html_options)
|
52
|
+
end
|
53
|
+
|
40
54
|
end
|
data/test/support/models.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -9,6 +9,9 @@ require 'action_view'
|
|
9
9
|
require 'action_view/template'
|
10
10
|
require 'action_view/test_case'
|
11
11
|
|
12
|
+
require "rails/generators/test_case"
|
13
|
+
require 'generators/show_for/install_generator'
|
14
|
+
|
12
15
|
$:.unshift File.expand_path("../../lib", __FILE__)
|
13
16
|
require 'show_for'
|
14
17
|
|
metadata
CHANGED
@@ -1,38 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: show_for
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.6
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- José Valim
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-05-08 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: activemodel
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '3.0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
25
27
|
- !ruby/object:Gem::Dependency
|
26
28
|
name: actionpack
|
27
|
-
requirement:
|
28
|
-
none: false
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
31
|
- - ~>
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: '3.0'
|
33
34
|
type: :runtime
|
34
35
|
prerelease: false
|
35
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.0'
|
36
41
|
description: Wrap your objects with a helper to easily show them
|
37
42
|
email: contact@plataformatec.com.br
|
38
43
|
executables: []
|
@@ -44,6 +49,7 @@ files:
|
|
44
49
|
- lib/generators/show_for/install_generator.rb
|
45
50
|
- lib/generators/show_for/templates/en.yml
|
46
51
|
- lib/generators/show_for/templates/show.html.erb
|
52
|
+
- lib/generators/show_for/templates/show.html.haml
|
47
53
|
- lib/generators/show_for/templates/show_for.rb
|
48
54
|
- lib/generators/show_for/USAGE
|
49
55
|
- lib/show_for/association.rb
|
@@ -58,6 +64,7 @@ files:
|
|
58
64
|
- test/attribute_test.rb
|
59
65
|
- test/builder_test.rb
|
60
66
|
- test/content_test.rb
|
67
|
+
- test/generators/show_for_generator_test.rb
|
61
68
|
- test/helper_test.rb
|
62
69
|
- test/label_test.rb
|
63
70
|
- test/support/misc_helpers.rb
|
@@ -66,39 +73,33 @@ files:
|
|
66
73
|
- test/value_test.rb
|
67
74
|
homepage: http://github.com/plataformatec/show_for
|
68
75
|
licenses: []
|
76
|
+
metadata: {}
|
69
77
|
post_install_message:
|
70
78
|
rdoc_options: []
|
71
79
|
require_paths:
|
72
80
|
- lib
|
73
81
|
required_ruby_version: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
82
|
requirements:
|
76
|
-
- -
|
83
|
+
- - '>='
|
77
84
|
- !ruby/object:Gem::Version
|
78
85
|
version: '0'
|
79
|
-
segments:
|
80
|
-
- 0
|
81
|
-
hash: -4500315708210946925
|
82
86
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
-
none: false
|
84
87
|
requirements:
|
85
|
-
- -
|
88
|
+
- - '>='
|
86
89
|
- !ruby/object:Gem::Version
|
87
90
|
version: '0'
|
88
|
-
segments:
|
89
|
-
- 0
|
90
|
-
hash: -4500315708210946925
|
91
91
|
requirements: []
|
92
92
|
rubyforge_project: show_for
|
93
|
-
rubygems_version:
|
93
|
+
rubygems_version: 2.0.3
|
94
94
|
signing_key:
|
95
|
-
specification_version:
|
95
|
+
specification_version: 4
|
96
96
|
summary: Wrap your objects with a helper to easily show them
|
97
97
|
test_files:
|
98
98
|
- test/association_test.rb
|
99
99
|
- test/attribute_test.rb
|
100
100
|
- test/builder_test.rb
|
101
101
|
- test/content_test.rb
|
102
|
+
- test/generators/show_for_generator_test.rb
|
102
103
|
- test/helper_test.rb
|
103
104
|
- test/label_test.rb
|
104
105
|
- test/support/misc_helpers.rb
|