show_for 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ .bundle/
data/CHANGELOG.rdoc ADDED
@@ -0,0 +1,67 @@
1
+ == 0.2.4
2
+
3
+ * enhancements
4
+ * Do not add separator if label is not present (by github.com/eugenebolshakov)
5
+ * Add method for output value only (by github.com/jenkek)
6
+
7
+ * bug fix
8
+ * Fix empty labels to be html_safe (label => false) (by github.com/eugenebolshakov)
9
+
10
+ == 0.2.3
11
+
12
+ * enhancements
13
+ * added :attributes method to generate all attributes given
14
+ * update generator to use the new syntax show_for:install
15
+
16
+ * bug fix
17
+ * fix numeric types
18
+
19
+ == 0.2.2
20
+
21
+ * bug fix
22
+ * allow show_for to work with AR association proxies
23
+
24
+ * enhancements
25
+ * improvements on html safe and output buffers
26
+
27
+ == 0.2.1
28
+
29
+ * enhancements
30
+ * added label_proc
31
+ * compatibility with latest Rails
32
+
33
+ == 0.2.0
34
+
35
+ * enhancements
36
+ * Rails 3 compatibility
37
+
38
+ == 0.1.4
39
+
40
+ * bug fix
41
+ * allow show_for to work with AR association proxies
42
+
43
+ == 0.1.3
44
+
45
+ * enhancements
46
+ * allow builder to be given to show_for
47
+
48
+ * bugfix
49
+ * Fix typo in yaml
50
+
51
+ == 0.1.2
52
+
53
+ * enhancements
54
+ * allow f.attribute :nickname, :in => :profile as association shortcut
55
+
56
+ * deprecations
57
+ * :method now becomes :using
58
+
59
+ == 0.1.1
60
+
61
+ * enhancements
62
+ * HAML compatibility (by github.com/grimen)
63
+ * blank_content support (by github.com/grimen)
64
+
65
+ == 0.1
66
+
67
+ * First release
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'rails', '~> 3.0.0'
4
+
5
+ if RUBY_VERSION < "1.9"
6
+ gem "ruby-debug"
7
+ else
8
+ gem "test-unit"
9
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,79 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ abstract (1.0.0)
5
+ actionmailer (3.0.3)
6
+ actionpack (= 3.0.3)
7
+ mail (~> 2.2.9)
8
+ actionpack (3.0.3)
9
+ activemodel (= 3.0.3)
10
+ activesupport (= 3.0.3)
11
+ builder (~> 2.1.2)
12
+ erubis (~> 2.6.6)
13
+ i18n (~> 0.4)
14
+ rack (~> 1.2.1)
15
+ rack-mount (~> 0.6.13)
16
+ rack-test (~> 0.5.6)
17
+ tzinfo (~> 0.3.23)
18
+ activemodel (3.0.3)
19
+ activesupport (= 3.0.3)
20
+ builder (~> 2.1.2)
21
+ i18n (~> 0.4)
22
+ activerecord (3.0.3)
23
+ activemodel (= 3.0.3)
24
+ activesupport (= 3.0.3)
25
+ arel (~> 2.0.2)
26
+ tzinfo (~> 0.3.23)
27
+ activeresource (3.0.3)
28
+ activemodel (= 3.0.3)
29
+ activesupport (= 3.0.3)
30
+ activesupport (3.0.3)
31
+ arel (2.0.4)
32
+ builder (2.1.2)
33
+ columnize (0.3.1)
34
+ erubis (2.6.6)
35
+ abstract (>= 1.0.0)
36
+ i18n (0.4.2)
37
+ linecache (0.43)
38
+ mail (2.2.10)
39
+ activesupport (>= 2.3.6)
40
+ i18n (~> 0.4.1)
41
+ mime-types (~> 1.16)
42
+ treetop (~> 1.4.8)
43
+ mime-types (1.16)
44
+ polyglot (0.3.1)
45
+ rack (1.2.1)
46
+ rack-mount (0.6.13)
47
+ rack (>= 1.0.0)
48
+ rack-test (0.5.6)
49
+ rack (>= 1.0)
50
+ rails (3.0.3)
51
+ actionmailer (= 3.0.3)
52
+ actionpack (= 3.0.3)
53
+ activerecord (= 3.0.3)
54
+ activeresource (= 3.0.3)
55
+ activesupport (= 3.0.3)
56
+ bundler (~> 1.0)
57
+ railties (= 3.0.3)
58
+ railties (3.0.3)
59
+ actionpack (= 3.0.3)
60
+ activesupport (= 3.0.3)
61
+ rake (>= 0.8.7)
62
+ thor (~> 0.14.4)
63
+ rake (0.8.7)
64
+ ruby-debug (0.10.3)
65
+ columnize (>= 0.1)
66
+ ruby-debug-base (~> 0.10.3.0)
67
+ ruby-debug-base (0.10.3)
68
+ linecache (>= 0.3)
69
+ thor (0.14.6)
70
+ treetop (1.4.9)
71
+ polyglot (>= 0.3.1)
72
+ tzinfo (0.3.23)
73
+
74
+ PLATFORMS
75
+ ruby
76
+
77
+ DEPENDENCIES
78
+ rails (~> 3.0.0)
79
+ ruby-debug
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 PlataformaTec http://blog.plataformatec.com.br/
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc CHANGED
@@ -24,9 +24,13 @@ Install the gem:
24
24
 
25
25
  sudo gem install show_for
26
26
 
27
+ Or add ShowFor to your Gemfile and bundle it up:
28
+
29
+ gem 'show_for'
30
+
27
31
  Run the generator:
28
32
 
29
- rails generate show_for_install
33
+ rails generate show_for:install
30
34
 
31
35
  And you are ready to go. Since this branch is aims Rails 3 support,
32
36
  if you want to use it with Rails 2.3 you should check this branch:
@@ -47,6 +51,8 @@ ShowFor allows you to quickly show a model information with I18n features.
47
51
  <% a.attribute :photo do %>
48
52
  <%= image_tag(@admin.photo_url) %>
49
53
  <% end %>
54
+
55
+ <% a.value :biography %>
50
56
  <% end %>
51
57
 
52
58
  Will generate something like:
@@ -72,6 +78,11 @@ Will generate something like:
72
78
  <strong class="label">Photo</strong><br />
73
79
  <img src="path/to/photo" />
74
80
  </p>
81
+ <p class="wrapper admin_biography">
82
+ Etiam porttitor eros ut diam vestibulum et blandit lectus tempor. Donec venenatis fermentum nunc ac dignissim.
83
+ Pellentesque volutpat eros quis enim mollis bibendum. Ut cursus sem ac sem accumsan nec porttitor felis luctus.
84
+ Sed purus nunc, auctor vitae consectetur pharetra, tristique non nisi.
85
+ </p>
75
86
  </div>
76
87
 
77
88
  You also have the possibility to show a list of attributes, useful if you don't need to change any configuration:
@@ -168,3 +179,4 @@ If you discover any bugs or want to drop a line, feel free to create an issue on
168
179
  http://github.com/plataformatec/show_for/issues
169
180
 
170
181
  MIT License. Copyright 2010 Plataforma Tecnologia. http://blog.plataformatec.com.br
182
+
data/Rakefile ADDED
@@ -0,0 +1,27 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'bundler'
4
+ Bundler::GemHelper.install_tasks
5
+
6
+ require 'rake/testtask'
7
+ require 'rake/rdoctask'
8
+
9
+ desc 'Default: run unit tests.'
10
+ task :default => :test
11
+
12
+ desc 'Test the show_form plugin.'
13
+ Rake::TestTask.new(:test) do |t|
14
+ t.libs << 'lib'
15
+ t.libs << 'test'
16
+ t.pattern = 'test/**/*_test.rb'
17
+ t.verbose = true
18
+ end
19
+
20
+ desc 'Generate documentation for the show_for plugin.'
21
+ Rake::RDocTask.new(:rdoc) do |rdoc|
22
+ rdoc.rdoc_dir = 'rdoc'
23
+ rdoc.title = 'ShowFor'
24
+ rdoc.options << '--line-numbers' << '--inline-source'
25
+ rdoc.rdoc_files.include('README.rdoc')
26
+ rdoc.rdoc_files.include('lib/**/*.rb')
27
+ end
@@ -33,5 +33,5 @@ ShowFor.setup do |config|
33
33
 
34
34
  # If you want to wrap the text inside a label (e.g. to append a semicolon),
35
35
  # specify label_proc - it will be automatically called, passing in the label text.
36
- # config.label_proc = lambda { |l| c + ":" }
36
+ # config.label_proc = lambda { |l| l + ":" }
37
37
  end
@@ -15,10 +15,25 @@ module ShowFor
15
15
  wrap_label_and_content(attribute_name, value, options, &collection_block)
16
16
  end
17
17
 
18
+ def value(attribute_name, options={}, &block)
19
+ apply_default_options!(attribute_name, options)
20
+ collection_block, block = block, nil if collection_block?(block)
21
+
22
+ value = if block
23
+ block
24
+ elsif @object.respond_to?(:"human_#{attribute_name}")
25
+ @object.send :"human_#{attribute_name}"
26
+ else
27
+ @object.send(attribute_name)
28
+ end
29
+ wrap_content(attribute_name, value, options, &collection_block)
30
+ end
31
+
18
32
  def attributes(*attribute_names)
19
33
  attribute_names.map do |attribute_name|
20
34
  attribute(attribute_name)
21
35
  end.join.html_safe
22
36
  end
23
37
  end
24
- end
38
+ end
39
+
@@ -23,8 +23,13 @@ module ShowFor
23
23
  end
24
24
 
25
25
  def wrap_label_and_content(name, value, options, &block) #:nodoc:
26
- wrap_with(:wrapper, label(name, options, false) + ShowFor.separator.to_s.html_safe +
27
- content(value, options, false, &block), options)
26
+ label = label(name, options, false)
27
+ label += ShowFor.separator.to_s.html_safe if label.present?
28
+ wrap_with(:wrapper, label + content(value, options, false, &block), options)
29
+ end
30
+
31
+ def wrap_content(name, value, options, &block) #:nodoc:
32
+ wrap_with(:wrapper, content(value, options, false, &block), options)
28
33
  end
29
34
 
30
35
  # Set "#{object_name}_#{attribute_name}" as in the wrapper tag.
@@ -57,4 +62,5 @@ module ShowFor
57
62
  block && block.arity == 1
58
63
  end
59
64
  end
60
- end
65
+ end
66
+
@@ -9,7 +9,7 @@ module ShowFor
9
9
  human_attribute_name(text_or_attribute)
10
10
  end
11
11
 
12
- return "" if label == false
12
+ return nil.to_s if label == false
13
13
  options[:label_html] = options.dup if apply_options
14
14
 
15
15
  label = ShowFor.label_proc.call(label) if options.fetch(:wrap_label, true) && ShowFor.label_proc
@@ -22,4 +22,4 @@ module ShowFor
22
22
  @object.class.human_attribute_name(attribute.to_s)
23
23
  end
24
24
  end
25
- end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module ShowFor
2
- VERSION = "0.2.3".freeze
3
- end
2
+ VERSION = "0.2.4".freeze
3
+ end
data/lib/show_for.rb CHANGED
@@ -25,7 +25,7 @@ module ShowFor
25
25
  @@collection_tag = :ul
26
26
 
27
27
  mattr_accessor :default_collection_proc
28
- @@default_collection_proc = lambda { |value| "<li>#{value}</li>" }
28
+ @@default_collection_proc = lambda { |value| "<li>#{ERB::Util.html_escape(value)}</li>".html_safe }
29
29
 
30
30
  mattr_accessor :i18n_format
31
31
  @@i18n_format = :default
data/show_for.gemspec ADDED
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "show_for/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "show_for"
7
+ s.version = ShowFor::VERSION.dup
8
+ s.platform = Gem::Platform::RUBY
9
+ s.summary = "Wrap your objects with a helper to easily show them"
10
+ s.email = "contact@plataformatec.com.br"
11
+ s.homepage = "http://github.com/plataformatec/show_for"
12
+ s.description = "Wrap your objects with a helper to easily show them"
13
+ s.authors = ['José Valim']
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ s.rubyforge_project = "show_for"
21
+ end
data/test/builder_test.rb CHANGED
@@ -8,6 +8,12 @@ class BuilderTest < ActionView::TestCase
8
8
  end)
9
9
  end
10
10
 
11
+ def with_value_for(object, attribute, options={}, &block)
12
+ concat(show_for(object) do |o|
13
+ concat o.value(attribute, options, &block)
14
+ end)
15
+ end
16
+
11
17
  def with_association_for(object, association, options={}, &block)
12
18
  concat(show_for(object) do |o|
13
19
  concat o.association(association, options, &block)
@@ -72,6 +78,7 @@ class BuilderTest < ActionView::TestCase
72
78
  test "show_for skips label if requested" do
73
79
  with_attribute_for @user, :name, :label => false
74
80
  assert_no_select "div.show_for p.wrapper strong.label"
81
+ assert_no_select "div.show_for p.wrapper br"
75
82
  end
76
83
 
77
84
  test "show_for allows label to be configured globally" do
@@ -246,6 +253,93 @@ class BuilderTest < ActionView::TestCase
246
253
  end
247
254
  end
248
255
 
256
+ # VALUE
257
+ test "show_for allows content tag to be configured globally, without label and separator" do
258
+ swap ShowFor, :content_tag => :span do
259
+ with_value_for @user, :name
260
+ assert_no_select "div.show_for p.wrapper strong.label"
261
+ assert_no_select "div.show_for p.wrapper br"
262
+ assert_select "div.show_for p.wrapper span.content"
263
+ end
264
+ end
265
+
266
+ test "show_for allows content with tag to be changed by attribute, without label and separator" do
267
+ with_value_for @user, :name, :content_tag => :p
268
+ assert_no_select "div.show_for p.wrapper strong.label"
269
+ assert_no_select "div.show_for p.wrapper br"
270
+ assert_select "div.show_for p.wrapper p.content"
271
+ end
272
+
273
+ test "show_for allows content tag html to be configured by attribute, without label and separator" do
274
+ with_value_for @user, :name, :content_tag => :span, :content_html => { :id => "thecontent", :class => "special" }
275
+ assert_no_select "div.show_for p.wrapper strong.label"
276
+ assert_no_select "div.show_for p.wrapper br"
277
+ assert_select "div.show_for p.wrapper span#thecontent.special.content"
278
+ end
279
+
280
+ test "show_for accepts an attribute as string, without label and separator" do
281
+ with_value_for @user, :name
282
+ assert_no_select "div.show_for p.wrapper strong.label"
283
+ assert_no_select "div.show_for p.wrapper br"
284
+ assert_select "div.show_for p.wrapper", /ShowFor/
285
+ end
286
+
287
+ test "show_for accepts an attribute as time, without label and separator" do
288
+ with_value_for @user, :created_at
289
+ assert_no_select "div.show_for p.wrapper strong.label"
290
+ assert_no_select "div.show_for p.wrapper br"
291
+ assert_select "div.show_for p.wrapper", /#{Regexp.escape(I18n.l(@user.created_at))}/
292
+ end
293
+
294
+ test "show_for accepts an attribute as date, without label and separator" do
295
+ with_value_for @user, :updated_at
296
+ assert_no_select "div.show_for p.wrapper strong.label"
297
+ assert_no_select "div.show_for p.wrapper br"
298
+ assert_select "div.show_for p.wrapper", /#{Regexp.escape(I18n.l(@user.updated_at))}/
299
+ end
300
+
301
+ test "show_for accepts an attribute as time with format options, without label and separator" do
302
+ with_value_for @user, :created_at, :format => :long
303
+ assert_select "div.show_for p.wrapper", /#{Regexp.escape(I18n.l(@user.created_at, :format => :long))}/
304
+ end
305
+
306
+ test "show_for accepts an attribute as nil, without label and separator" do
307
+ c = with_value_for @user, :birthday
308
+ assert_no_select "div.show_for p.wrapper strong.label"
309
+ assert_no_select "div.show_for p.wrapper br"
310
+ assert_select "div.show_for p.wrapper", /Not specified/
311
+ end
312
+
313
+ test "show_for accepts blank attributes, without label and separator" do
314
+ with_value_for @user, :description
315
+ assert_no_select "div.show_for p.wrapper strong.label"
316
+ assert_no_select "div.show_for p.wrapper br"
317
+ assert_select "div.show_for p.wrapper", /Not specified/
318
+ end
319
+
320
+ test "show_for uses :if_blank if attribute is nil, without label and separator" do
321
+ with_value_for @user, :birthday, :if_blank => "No description provided"
322
+ assert_no_select "div.show_for p.wrapper strong.label"
323
+ assert_no_select "div.show_for p.wrapper br"
324
+ assert_select "div.show_for p.wrapper", /No description provided/
325
+ end
326
+
327
+ test "show_for uses :if_blank if attribute is blank, without label and separator" do
328
+ with_value_for @user, :description, :if_blank => "No description provided"
329
+ assert_no_select "div.show_for p.wrapper strong.label"
330
+ assert_no_select "div.show_for p.wrapper br"
331
+ assert_select "div.show_for p.wrapper", /No description provided/
332
+ end
333
+
334
+ test "show_for escapes content by default, without label and separator" do
335
+ @user.name = "<b>hack you!</b>"
336
+ with_value_for @user, :name
337
+ assert_no_select "div.show_for p.wrapper strong.label"
338
+ assert_no_select "div.show_for p.wrapper br"
339
+ assert_no_select "div.show_for p.wrapper b"
340
+ assert_select "div.show_for p.wrapper", /&lt;b&gt;/
341
+ end
342
+
249
343
  # COLLECTIONS
250
344
  test "show_for accepts an attribute as a collection" do
251
345
  with_attribute_for @user, :scopes
@@ -356,4 +450,5 @@ class BuilderTest < ActionView::TestCase
356
450
  assert_select "div.show_for p.user_email.wrapper", /Not specified/
357
451
  assert_select "p.user_email strong.label", "Email"
358
452
  end
359
- end
453
+ end
454
+
data/test/test_helper.rb CHANGED
@@ -31,8 +31,10 @@ class ActionView::TestCase
31
31
  :active => true,
32
32
  :invalid => false,
33
33
  :scopes => ["admin", "manager", "visitor"],
34
+ :birthday => nil,
34
35
  :created_at => Time.now,
35
36
  :updated_at => Date.today
36
37
  }.merge(options))
37
38
  end
38
39
  end
40
+
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: show_for
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease: false
4
+ hash: 31
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 3
10
- version: 0.2.3
9
+ - 4
10
+ version: 0.2.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - "Jos\xC3\xA9 Valim"
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-07-25 00:00:00 +02:00
18
+ date: 2011-02-06 00:00:00 -02:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -25,9 +25,16 @@ executables: []
25
25
 
26
26
  extensions: []
27
27
 
28
- extra_rdoc_files:
29
- - README.rdoc
28
+ extra_rdoc_files: []
29
+
30
30
  files:
31
+ - .gitignore
32
+ - CHANGELOG.rdoc
33
+ - Gemfile
34
+ - Gemfile.lock
35
+ - MIT-LICENSE
36
+ - README.rdoc
37
+ - Rakefile
31
38
  - init.rb
32
39
  - lib/generators/show_for/USAGE
33
40
  - lib/generators/show_for/install_generator.rb
@@ -42,7 +49,7 @@ files:
42
49
  - lib/show_for/helper.rb
43
50
  - lib/show_for/label.rb
44
51
  - lib/show_for/version.rb
45
- - README.rdoc
52
+ - show_for.gemspec
46
53
  - test/builder_test.rb
47
54
  - test/helper_test.rb
48
55
  - test/support/misc_helpers.rb
@@ -53,8 +60,8 @@ homepage: http://github.com/plataformatec/show_for
53
60
  licenses: []
54
61
 
55
62
  post_install_message:
56
- rdoc_options:
57
- - --charset=UTF-8
63
+ rdoc_options: []
64
+
58
65
  require_paths:
59
66
  - lib
60
67
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -77,8 +84,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
77
84
  version: "0"
78
85
  requirements: []
79
86
 
80
- rubyforge_project:
81
- rubygems_version: 1.3.7
87
+ rubyforge_project: show_for
88
+ rubygems_version: 1.5.0
82
89
  signing_key:
83
90
  specification_version: 3
84
91
  summary: Wrap your objects with a helper to easily show them