show_for 0.2.5 → 0.2.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|