link_to_active_state 1.0.7 → 1.0.8
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/.travis.yml +1 -3
- data/README.md +1 -1
- data/lib/link_to_active_state/version.rb +1 -1
- data/lib/link_to_active_state/view_helpers/url_helper.rb +17 -15
- data/spec/link_to_active_state_spec.rb +34 -19
- metadata +14 -20
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 29ddfa2d41bf42590f15f13cd9855ad7d0975461
|
4
|
+
data.tar.gz: 64ffecdfbe4acd7be542c9deb3631fc807eb2542
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 643104f46becb061bacf9b052f7dcd6c0fe0421ae1140f4cd04987f15ae6326690a9c39ba76ae1173ec81e26e7a8f83e6bddff0682a0306fb4944436d25bf9ee
|
7
|
+
data.tar.gz: 3937bced3f91d5ef03ba0b8c855575e642d77ed4714b4fba5d7ecc0b0336286a45fb39b922d436b0dd9f6f100e58189d9c7c3724a342defbb9c8a2f92b0b1e2f
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -13,7 +13,7 @@ Add this line to your application's Gemfile:
|
|
13
13
|
|
14
14
|
Or install from the repository:
|
15
15
|
|
16
|
-
gem 'link_to_active_state', git: 'git://github.com/robotmay/link_to_active_state.git', tag: '
|
16
|
+
gem 'link_to_active_state', git: 'git://github.com/robotmay/link_to_active_state.git', tag: 'v1.0.5'
|
17
17
|
|
18
18
|
And then execute:
|
19
19
|
|
@@ -9,14 +9,13 @@ module LinkToActiveState
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def link_to_with_active_state(*args, &block)
|
12
|
-
options = {}
|
13
|
-
|
14
12
|
link_options, html_options = if block_given?
|
15
13
|
[args.first, args.second]
|
16
14
|
else
|
17
15
|
[args[1], args[2]]
|
18
16
|
end
|
19
17
|
|
18
|
+
options = {}
|
20
19
|
link_options ||= {}
|
21
20
|
html_options ||= {}
|
22
21
|
wrapper_options = html_options.delete(:active_wrapper_options) || {}
|
@@ -25,23 +24,20 @@ module LinkToActiveState
|
|
25
24
|
active_on = html_options.delete(:active_on)
|
26
25
|
active_state = html_options.delete(:active_state) || "active"
|
27
26
|
|
28
|
-
if is_active?(active_on, link_options)
|
27
|
+
if is_active?(active_on, link_options, html_options)
|
29
28
|
case active_state
|
30
29
|
when Proc
|
31
30
|
options = options.merge(active_state.call(html_options))
|
31
|
+
wrapper_options = wrapper_options.merge(active_state.call(html_options))
|
32
32
|
when String
|
33
33
|
options[:class] = merge_class(html_options[:class], active_state)
|
34
|
+
wrapper_options[:class] = merge_class(wrapper_options[:class], active_state)
|
34
35
|
end
|
35
36
|
end
|
36
37
|
end
|
37
38
|
|
38
39
|
if html_options.present? && html_options[:active_wrapper]
|
39
|
-
if wrapper_options[:class].present?
|
40
|
-
options[:class] = merge_class(wrapper_options[:class], options[:class])
|
41
|
-
end
|
42
|
-
|
43
40
|
element_or_proc = html_options.delete(:active_wrapper)
|
44
|
-
wrapper_options.merge!(options)
|
45
41
|
|
46
42
|
render_with_wrapper(element_or_proc, wrapper_options) do
|
47
43
|
link_to_without_active_state(*args, &block)
|
@@ -53,20 +49,26 @@ module LinkToActiveState
|
|
53
49
|
end
|
54
50
|
|
55
51
|
private
|
56
|
-
def is_active?(active_on, link_options = {})
|
52
|
+
def is_active?(active_on, link_options = {}, html_options = {})
|
53
|
+
if html_options.present? && html_options[:ignore_query]
|
54
|
+
path = request.fullpath.gsub( /\?.*/, "" )
|
55
|
+
else
|
56
|
+
path = request.fullpath
|
57
|
+
end
|
58
|
+
|
57
59
|
case active_on
|
58
60
|
when String
|
59
|
-
|
61
|
+
path == active_on
|
60
62
|
when Array
|
61
|
-
active_on.include?(
|
63
|
+
active_on.include?(path)
|
62
64
|
when Regexp
|
63
|
-
|
65
|
+
path =~ active_on
|
64
66
|
when Proc
|
65
67
|
active_on.arity == 1 ? active_on.call(request) : active_on.call
|
66
68
|
else
|
67
|
-
# Anything else we'll take as a true argument, and match the link's URL
|
69
|
+
# Anything else we'll take as a true argument, and match the link's URL (including any query string)
|
68
70
|
url = url_for(link_options)
|
69
|
-
|
71
|
+
path == url
|
70
72
|
end
|
71
73
|
end
|
72
74
|
|
@@ -74,7 +76,7 @@ module LinkToActiveState
|
|
74
76
|
original ||= ""
|
75
77
|
[original, new].delete_if(&:blank?).join(" ")
|
76
78
|
end
|
77
|
-
|
79
|
+
|
78
80
|
def render_with_wrapper(element_or_proc, wrapper_options, &block)
|
79
81
|
content = block.call
|
80
82
|
|
@@ -10,6 +10,19 @@ end
|
|
10
10
|
describe LinkToActiveState::ViewHelpers::UrlHelper do
|
11
11
|
let(:helper) { App::Helper.new }
|
12
12
|
|
13
|
+
let(:request) do
|
14
|
+
class Request
|
15
|
+
def fullpath
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Request.new
|
20
|
+
end
|
21
|
+
|
22
|
+
before(:each) do
|
23
|
+
helper.stub!(:request).and_return(request)
|
24
|
+
end
|
25
|
+
|
13
26
|
context "integration with ActionView" do
|
14
27
|
it "aliases the original link_to helper" do
|
15
28
|
helper.should respond_to(:link_to_without_active_state)
|
@@ -29,19 +42,6 @@ describe LinkToActiveState::ViewHelpers::UrlHelper do
|
|
29
42
|
end
|
30
43
|
|
31
44
|
context "active states on links" do
|
32
|
-
let(:request) do
|
33
|
-
class Request
|
34
|
-
def fullpath
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
Request.new
|
39
|
-
end
|
40
|
-
|
41
|
-
before(:each) do
|
42
|
-
helper.stub!(:request).and_return(request)
|
43
|
-
end
|
44
|
-
|
45
45
|
context "when the current request path matches" do
|
46
46
|
it "adds an active state" do
|
47
47
|
request.stub!(:fullpath).and_return("/")
|
@@ -66,6 +66,18 @@ describe LinkToActiveState::ViewHelpers::UrlHelper do
|
|
66
66
|
lt = helper.link_to "Home", "/", :active_on => "/"
|
67
67
|
lt.should_not match(/li class=\"active\"/i)
|
68
68
|
end
|
69
|
+
|
70
|
+
it "matches in spite of query string if ignore query is true" do
|
71
|
+
request.stub!(:fullpath).and_return("/wobble?test=true")
|
72
|
+
lt = helper.link_to "Madness", "/wobble", :active_on => true, :ignore_query => true
|
73
|
+
lt.should match(/class=\"active\"/i)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "doesn't match in spite of query string if ignore query is not specified" do
|
77
|
+
request.stub!(:fullpath).and_return("/wobble?test=true")
|
78
|
+
lt = helper.link_to "Madness", "/wobble", :active_on => true
|
79
|
+
lt.should_not match(/class=\"active\"/i)
|
80
|
+
end
|
69
81
|
end
|
70
82
|
|
71
83
|
context "when the current request doesn't match" do
|
@@ -82,29 +94,32 @@ describe LinkToActiveState::ViewHelpers::UrlHelper do
|
|
82
94
|
end
|
83
95
|
end
|
84
96
|
|
85
|
-
describe "wrapper element
|
97
|
+
describe "wrapper element" do
|
86
98
|
it "supports options for the wrapper element" do
|
87
|
-
li = helper.link_to "Home", "/",
|
99
|
+
li = helper.link_to "Home", "/",
|
100
|
+
:class => "wobble",
|
88
101
|
:active_on => "/",
|
89
102
|
:active_wrapper => :li,
|
90
|
-
:active_wrapper_options => { :class => "
|
91
|
-
li.should match(/class=\"
|
103
|
+
:active_wrapper_options => { :class => "wibble" }
|
104
|
+
li.should match(/class=\"wibble\"/i)
|
92
105
|
end
|
93
106
|
|
94
107
|
it "supports a proc as the wrapper element" do
|
95
108
|
request.stub!(:fullpath).and_return("/")
|
96
109
|
li = helper.link_to "Home", "/",
|
110
|
+
:class => "wobble",
|
97
111
|
:active_on => "/",
|
98
112
|
:active_wrapper => proc { |link, wrapper_options|
|
99
113
|
"<li class=\"#{wrapper_options[:class]}\">#{link}</li>"
|
100
114
|
}
|
101
115
|
li.should match(/<li class=\"active\">/i)
|
102
|
-
li.should match(/<a href/i)
|
116
|
+
li.should match(/<a class=\"wobble\" href/i)
|
103
117
|
end
|
104
|
-
|
118
|
+
|
105
119
|
it "supports options on proc wrapper elements" do
|
106
120
|
request.stub!(:fullpath).and_return("/")
|
107
121
|
li = helper.link_to "Home", "/",
|
122
|
+
:class => "wobble",
|
108
123
|
:active_on => "/",
|
109
124
|
:active_wrapper_options => { :class => "wibble" },
|
110
125
|
:active_wrapper => proc { |link, wrapper_options|
|
metadata
CHANGED
@@ -1,46 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: link_to_active_state
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.8
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Robert May
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2015-09-10 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rails
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 3.2.11
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 3.2.11
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rspec
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- - ~>
|
31
|
+
- - "~>"
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: 2.13.0
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- - ~>
|
38
|
+
- - "~>"
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: 2.13.0
|
46
41
|
description: A simple gem to implement active states on links using the standard Rails
|
@@ -51,9 +46,9 @@ executables: []
|
|
51
46
|
extensions: []
|
52
47
|
extra_rdoc_files: []
|
53
48
|
files:
|
54
|
-
- .gitignore
|
55
|
-
- .public_cert.pem
|
56
|
-
- .travis.yml
|
49
|
+
- ".gitignore"
|
50
|
+
- ".public_cert.pem"
|
51
|
+
- ".travis.yml"
|
57
52
|
- Gemfile
|
58
53
|
- LICENSE.txt
|
59
54
|
- README.md
|
@@ -68,27 +63,26 @@ files:
|
|
68
63
|
- spec/spec_helper.rb
|
69
64
|
homepage: ''
|
70
65
|
licenses: []
|
66
|
+
metadata: {}
|
71
67
|
post_install_message:
|
72
68
|
rdoc_options: []
|
73
69
|
require_paths:
|
74
70
|
- lib
|
75
71
|
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
-
none: false
|
77
72
|
requirements:
|
78
|
-
- -
|
73
|
+
- - ">="
|
79
74
|
- !ruby/object:Gem::Version
|
80
75
|
version: '0'
|
81
76
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
77
|
requirements:
|
84
|
-
- -
|
78
|
+
- - ">="
|
85
79
|
- !ruby/object:Gem::Version
|
86
80
|
version: '0'
|
87
81
|
requirements: []
|
88
82
|
rubyforge_project:
|
89
|
-
rubygems_version:
|
83
|
+
rubygems_version: 2.4.5.1
|
90
84
|
signing_key:
|
91
|
-
specification_version:
|
85
|
+
specification_version: 4
|
92
86
|
summary: Active states for links using the Rails link_to helper.
|
93
87
|
test_files:
|
94
88
|
- spec/link_to_active_state/view_helpers_spec.rb
|