actionview-link_to_block 0.0.1 → 1.0.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5d6295941ba40f8c32a7d32a4c5b2b264fe96fce
4
- data.tar.gz: 1b5154468d99044d2f490d5d9bea124f55f5d345
3
+ metadata.gz: 7c59c5d3a44fdccf1396bff331de2d057e31d429
4
+ data.tar.gz: 94c77fc1da940bad5fa765ac6a5ca6753f611c99
5
5
  SHA512:
6
- metadata.gz: 0a647363849ac2aaabaa2c2b55b99e79dc43aa5bf5d87c9017aaba23a16450042a054aa5b6f3ed13a38f6823f24ce56769205b67a6fb0dfc76ed4dd50dd3153d
7
- data.tar.gz: b280ec1d96119422de3b18cfaed616d9e2a4f203786184281128232b82ac267b16687b343e6eb855c6ac62e1061fcbd0e7fbbf45946e418e5279bf33892bbd27
6
+ metadata.gz: 90ae3020ed3ce28558a35c765075af2232c338ea2a2fa6b2c2b543a3b5f70fea738f2b3c0a9647bdf5f8a523804a35ba77e9df7e27d17987a458aea091f825a4
7
+ data.tar.gz: 1fc0bd7d7655110b8cd96a0cd01ac38cf320bc8d654083d279e09ab8e50f909daec8cf352a0dc48f6913ca841eca876e8a529642a24dce42d328be385ac1dee8
data/.gitignore CHANGED
@@ -15,3 +15,6 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+
19
+ # Ignore generated gemfile.lock by appraisal
20
+ /gemfiles/*.gemfile.lock
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ gemfile:
6
+ - gemfiles/actionpack_3_2.gemfile
7
+ - gemfiles/actionpack_4_0.gemfile
8
+ - gemfiles/actionview_4_1.gemfile
9
+ branches:
10
+ only:
11
+ - master
data/Appraisals ADDED
@@ -0,0 +1,12 @@
1
+ appraise 'actionview_4_1' do
2
+ gem 'actionview', github: 'rails', branch: 'master'
3
+ gem 'actionpack', github: 'rails', branch: 'master'
4
+ end
5
+
6
+ appraise 'actionpack_4_0' do
7
+ gem 'actionpack', '>= 4.0.0'
8
+ end
9
+
10
+ appraise 'actionpack_3_2' do
11
+ gem 'actionpack', '>= 3.0', '< 4.0'
12
+ end
data/Gemfile CHANGED
@@ -5,4 +5,3 @@ gemspec
5
5
 
6
6
  gem 'pry'
7
7
  gem 'appraisal', github: 'thoughtbot/appraisal'
8
- gem 'actionview', github: 'rails/rails', branch: 'master'
data/README.md CHANGED
@@ -1,6 +1,36 @@
1
1
  # Actionview::LinkToBlock
2
2
 
3
- TODO: Write a gem description
3
+ [![Gem Version](https://badge.fury.io/rb/actionview-link_to_block.png)](http://badge.fury.io/rb/actionview-link_to_block)
4
+ [![Build Status](https://api.travis-ci.org/sanemat/actionview-link_to_block.png?branch=master)](https://travis-ci.org/sanemat/actionview-link_to_block)
5
+ [![Code Climate](https://codeclimate.com/github/sanemat/actionview-link_to_block.png)](https://codeclimate.com/github/sanemat/actionview-link_to_block)
6
+
7
+ Add helper method, `link_to_block`, `link_to_block_if`, `link_to_block_unless`, `link_to_block_unless_current`.
8
+ This is symmetrical to `link_to`, `link_to_if`, `link_to_unless`, `link_to_unless_current`.
9
+
10
+ `link_to_block*` always accepts block.
11
+
12
+ ## Usage
13
+
14
+ `link_to` accepts complex html as block, like below:
15
+
16
+ <%= link_to user_path(@user) do %>
17
+ <i class="icon-ok icon-white"></i> Do it@
18
+ <% end %>
19
+ # http://stackoverflow.com/questions/9401942/using-link-to-with-embedded-html
20
+
21
+ But `link_to_if` with block behavior is below:
22
+
23
+ <%= link_to_if condition, user_path(@user) do %>
24
+ Appear if condition falsy
25
+ <% end %>
26
+
27
+ Then use `link_to_block_if` below:
28
+
29
+ <%= link_to_block_if condition, user_path(@user) do %>
30
+ <i class="icon-ok icon-white"></i> Do it@
31
+ <% end %>
32
+
33
+ #=> if condition truthy, then shows html and link, else if condition falsy, then show only html.
4
34
 
5
35
  ## Installation
6
36
 
@@ -16,9 +46,24 @@ Or install it yourself as:
16
46
 
17
47
  $ gem install actionview-link_to_block
18
48
 
19
- ## Usage
49
+ ## Requirement
50
+
51
+ `actionview-link_to_block` has no gem dependency in gemspec, but this is not correctly.
52
+ `actionview` extracts from `actionpack` on rails4.1.
53
+ You can see `Appraisals` file and `/gemfiles` directory.
54
+
55
+ actionview v4.1(rails v4.1)
56
+
57
+ gem 'actionview', github: 'rails', branch: 'master'
58
+ gem 'actionpack', github: 'rails', branch: 'master'
59
+
60
+ actionpack v4.0(rails v4.0)
61
+
62
+ gem 'actionpack', '>= 4.0.0'
63
+
64
+ actionpack v3.2(rails v3.2)
20
65
 
21
- TODO: Write usage instructions here
66
+ gem 'actionpack', '>= 3.0', '< 4.0'
22
67
 
23
68
  ## Contributing
24
69
 
data/Rakefile CHANGED
@@ -1 +1,11 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+ require 'appraisal'
4
+
5
+ desc 'Default Task'
6
+ task :default => :test
7
+
8
+ Rake::TestTask.new do |t|
9
+ t.libs << 'test'
10
+ t.pattern = 'test/test_*.rb'
11
+ end
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "pry"
6
+ gem "appraisal", :github=>"thoughtbot/appraisal"
7
+ gem "actionpack", ">= 3.0", "< 4.0"
8
+
9
+ gemspec :path=>".././"
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "pry"
6
+ gem "appraisal", :github=>"thoughtbot/appraisal"
7
+ gem "actionpack", ">= 4.0.0"
8
+
9
+ gemspec :path=>".././"
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "pry"
6
+ gem "appraisal", :github=>"thoughtbot/appraisal"
7
+ gem "actionview", :github=>"rails", :branch=>"master"
8
+ gem "actionpack", :github=>"rails", :branch=>"master"
9
+
10
+ gemspec :path=>".././"
@@ -3,6 +3,36 @@ module LinkToBlock
3
3
  module Helpers
4
4
  module UrlHelper
5
5
  alias_method :link_to_block, :link_to
6
+
7
+ def link_to_block_unless(condition, name = nil, options = {}, html_options = {}, &block)
8
+ if condition
9
+ if block_given?
10
+ capture(&block)
11
+ else
12
+ ERB::Util.html_escape(name)
13
+ end
14
+ else
15
+ if block_given?
16
+ html_options, options = options, name
17
+ link_to capture(&block), options, html_options
18
+ else
19
+ link_to name, options, html_options
20
+ end
21
+ end
22
+ end
23
+
24
+ def link_to_block_if(condition, name = nil, options = {}, html_options = {}, &block)
25
+ link_to_block_unless !condition, name, options, html_options, &block
26
+ end
27
+
28
+ def link_to_block_unless_current(name = nil, options = {}, html_options = {}, &block)
29
+ if block_given?
30
+ html_options, options = options, name
31
+ link_to_block_unless current_page?(options), options, html_options, &block
32
+ else
33
+ link_to_block_unless current_page?(options), name, options, html_options
34
+ end
35
+ end
6
36
  end
7
37
  end
8
38
  end
@@ -1,5 +1,5 @@
1
1
  module ActionView
2
2
  module LinkToBlock
3
- VERSION = "0.0.1"
3
+ VERSION = "1.0.0"
4
4
  end
5
5
  end
@@ -1,11 +1,197 @@
1
- require 'active_support/testing/autorun'
1
+ #coding: utf-8
2
+ require 'active_support/version'
3
+ autorun_path = ActiveSupport::VERSION::STRING.start_with?('3')\
4
+ ? 'minitest/autorun'
5
+ : 'active_support/testing/autorun'
6
+ require autorun_path
2
7
  require 'action_view'
3
8
  require 'action_view/link_to_block/link_to_block'
9
+ require 'action_dispatch'
10
+
11
+ # copy from action_view/test/abstract_unit.rb
12
+ module RenderERBUtils
13
+ def view
14
+ @view ||= begin
15
+ path = ActionView::FileSystemResolver.new(FIXTURE_LOAD_PATH)
16
+ view_paths = ActionView::PathSet.new([path])
17
+ ActionView::Base.new(view_paths)
18
+ end
19
+ end
20
+
21
+ def render_erb(string)
22
+ @virtual_path = nil
23
+
24
+ template = ActionView::Template.new(
25
+ string.strip,
26
+ "test template",
27
+ ActionView::Template::Handlers::ERB,
28
+ {})
29
+
30
+ template.render(self, {}).strip
31
+ end
32
+ end
4
33
 
5
34
  class LinkToBlockTest < ActiveSupport::TestCase
35
+ attr_accessor :controller, :request
36
+
37
+ routes = ActionDispatch::Routing::RouteSet.new
38
+ routes.draw do
39
+ get "/" => "foo#bar"
40
+ get "/other" => "foo#other"
41
+ get "/article/:id" => "foo#article", :as => :article
42
+ end
43
+
44
+ include ActionView::Helpers::UrlHelper
45
+ include routes.url_helpers
46
+
47
+ include ActionDispatch::Assertions::DomAssertions
48
+ include ActionView::Context
49
+ include RenderERBUtils
50
+
51
+ def hash_for(options = {})
52
+ { controller: "foo", action: "bar" }.merge!(options)
53
+ end
54
+ alias url_hash hash_for
55
+
6
56
  def test_initialization
7
57
  [:link_to_block].each do |method|
8
58
  assert_includes ActionView::Helpers::UrlHelper.instance_methods, method
9
59
  end
10
60
  end
61
+
62
+ def test_link_tag_with_straight_url
63
+ assert_dom_equal %{<a href="http://www.example.com">Hello</a>}, link_to_block("Hello", "http://www.example.com")
64
+ end
65
+
66
+ def test_link_tag_without_host_option
67
+ assert_dom_equal(%{<a href="/">Test Link</a>}, link_to_block('Test Link', url_hash))
68
+ end
69
+
70
+ def test_link_tag_with_host_option
71
+ hash = hash_for(host: "www.example.com")
72
+ expected = %{<a href="http://www.example.com/">Test Link</a>}
73
+ assert_dom_equal(expected, link_to_block('Test Link', hash))
74
+ end
75
+
76
+ def test_link_tag_with_query
77
+ expected = %{<a href="http://www.example.com?q1=v1&amp;q2=v2">Hello</a>}
78
+ assert_dom_equal expected, link_to_block("Hello", "http://www.example.com?q1=v1&q2=v2")
79
+ end
80
+
81
+ def test_link_tag_with_query_and_no_name
82
+ expected = %{<a href="http://www.example.com?q1=v1&amp;q2=v2">http://www.example.com?q1=v1&amp;q2=v2</a>}
83
+ assert_dom_equal expected, link_to_block(nil, "http://www.example.com?q1=v1&q2=v2")
84
+ end
85
+
86
+ def test_link_tag_with_block
87
+ assert_dom_equal %{<a href="/"><span>Example site</span></a>},
88
+ link_to_block('/') { content_tag(:span, 'Example site') }
89
+ end
90
+
91
+ def test_link_tag_with_block_and_html_options
92
+ assert_dom_equal %{<a class="special" href="/"><span>Example site</span></a>},
93
+ link_to_block('/', class: "special") { content_tag(:span, 'Example site') }
94
+ end
95
+
96
+ def test_link_tag_using_block_in_erb
97
+ out = render_erb %{<%= link_to_block('/') do %>Example site<% end %>}
98
+ assert_equal '<a href="/">Example site</a>', out
99
+ end
100
+
101
+ def test_link_tag_with_html_safe_string
102
+ assert_dom_equal(
103
+ %{<a href="/article/Gerd_M%C3%BCller">Gerd Müller</a>},
104
+ link_to_block("Gerd Müller", article_path("Gerd_Müller".html_safe))
105
+ )
106
+ end
107
+
108
+ def test_link_tag_escapes_content
109
+ assert_dom_equal %{<a href="/">Malicious &lt;script&gt;content&lt;/script&gt;</a>},
110
+ link_to_block("Malicious <script>content</script>", "/")
111
+ end
112
+
113
+ def test_link_tag_does_not_escape_html_safe_content
114
+ assert_dom_equal %{<a href="/">Malicious <script>content</script></a>},
115
+ link_to_block("Malicious <script>content</script>".html_safe, "/")
116
+ end
117
+
118
+ def test_link_to_unless
119
+ assert_equal "Showing", link_to_block_unless(true, "Showing", url_hash)
120
+
121
+ assert_dom_equal %{<a href="/">Listing</a>},
122
+ link_to_block_unless(false, "Listing", url_hash)
123
+ end
124
+
125
+ def test_link_tag_unless_with_block
126
+ assert_dom_equal %{<a href="/"><span>Example site</span></a>},
127
+ link_to_block_unless(false, '/') { content_tag(:span, 'Example site') }
128
+ end
129
+
130
+ def test_link_tag_unless_with_block_and_html_options
131
+ assert_dom_equal %{<a class="special" href="/"><span>Example site</span></a>},
132
+ link_to_block_unless(false, '/', class: "special") { content_tag(:span, 'Example site') }
133
+ end
134
+
135
+ def test_link_tag_unless_using_block_in_erb
136
+ out = render_erb %{<%= link_to_block_unless(false, '/') do %>Example site<% end %>}
137
+ assert_equal '<a href="/">Example site</a>', out
138
+ end
139
+
140
+ def test_link_to_block_if
141
+ assert_equal "Showing", link_to_block_if(false, "Showing", url_hash)
142
+ assert_dom_equal %{<a href="/">Listing</a>}, link_to_block_if(true, "Listing", url_hash)
143
+ end
144
+
145
+ def request_for_url(url, opts = {})
146
+ env = Rack::MockRequest.env_for("http://www.example.com#{url}", opts)
147
+ ActionDispatch::Request.new(env)
148
+ end
149
+
150
+ def test_link_unless_current
151
+ @request = request_for_url("/")
152
+
153
+ assert_equal "Showing",
154
+ link_to_block_unless_current("Showing", url_hash)
155
+ assert_equal "Showing",
156
+ link_to_block_unless_current("Showing", "http://www.example.com/")
157
+ assert_equal %{<span>Example site</span>},
158
+ link_to_block_unless_current(url_hash) { content_tag(:span, 'Example site') }
159
+
160
+ @request = request_for_url("/?order=desc")
161
+
162
+ assert_equal "Showing",
163
+ link_to_block_unless_current("Showing", url_hash)
164
+ assert_equal "Showing",
165
+ link_to_block_unless_current("Showing", "http://www.example.com/")
166
+
167
+ @request = request_for_url("/?order=desc&page=1")
168
+
169
+ assert_equal "Showing",
170
+ link_to_block_unless_current("Showing", hash_for(order: 'desc', page: '1'))
171
+ assert_equal "Showing",
172
+ link_to_block_unless_current("Showing", "http://www.example.com/?order=desc&page=1")
173
+
174
+ @request = request_for_url("/?order=desc")
175
+
176
+ assert_equal %{<a href="/?order=asc">Showing</a>},
177
+ link_to_block_unless_current("Showing", hash_for(order: :asc))
178
+ assert_equal %{<a href="http://www.example.com/?order=asc">Showing</a>},
179
+ link_to_block_unless_current("Showing", "http://www.example.com/?order=asc")
180
+
181
+ @request = request_for_url("/?order=desc")
182
+ assert_equal %{<a href="/?order=desc&amp;page=2\">Showing</a>},
183
+ link_to_block_unless_current("Showing", hash_for(order: "desc", page: 2))
184
+ assert_equal %{<a href="http://www.example.com/?order=desc&amp;page=2">Showing</a>},
185
+ link_to_block_unless_current("Showing", "http://www.example.com/?order=desc&page=2")
186
+
187
+ @request = request_for_url("/show")
188
+
189
+ assert_equal %{<a href="/">Listing</a>},
190
+ link_to_block_unless_current("Listing", url_hash)
191
+ assert_equal %{<a href="http://www.example.com/">Listing</a>},
192
+ link_to_block_unless_current("Listing", "http://www.example.com/")
193
+ assert_equal %{<a href="/"><span>Example site</span></a>},
194
+ link_to_block_unless_current(url_hash) { content_tag(:span, 'Example site') }
195
+ end
196
+
11
197
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: actionview-link_to_block
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - sanemat
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-06 00:00:00.000000000 Z
11
+ date: 2013-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -46,11 +46,16 @@ extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
48
  - .gitignore
49
+ - .travis.yml
50
+ - Appraisals
49
51
  - Gemfile
50
52
  - LICENSE.txt
51
53
  - README.md
52
54
  - Rakefile
53
55
  - actionview-link_to_block.gemspec
56
+ - gemfiles/actionpack_3_2.gemfile
57
+ - gemfiles/actionpack_4_0.gemfile
58
+ - gemfiles/actionview_4_1.gemfile
54
59
  - lib/action_view/link_to_block/link_to_block.rb
55
60
  - lib/action_view/link_to_block/railtie.rb
56
61
  - lib/action_view/link_to_block/version.rb