link_to_active_state 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -49,6 +49,11 @@ Or a proc:
49
49
  link_to "Account", account_path, active_on: lambda { request.fullpath == account_path }
50
50
  ```
51
51
 
52
+ Any other value will cause it to be matched against the URL supplied to the link_to helper:
53
+ ```ruby
54
+ link_to "Account", account_path, active_on: true
55
+ ```
56
+
52
57
  ### Custom options
53
58
 
54
59
  By default the class "active" will be added to the existing classes of the link. However you can specify your own:
@@ -1,3 +1,3 @@
1
1
  module LinkToActiveState
2
- VERSION = "1.0.3"
2
+ VERSION = "1.0.4"
3
3
  end
@@ -12,17 +12,19 @@ module LinkToActiveState
12
12
  def link_to_with_active_state(*args, &block)
13
13
  options = {}
14
14
 
15
- html_options = if block_given?
16
- args.second
15
+ link_options, html_options = if block_given?
16
+ [args.first, args.second]
17
17
  else
18
- args[2]
18
+ [args[1], args[2]]
19
19
  end
20
20
 
21
+ link_options ||= {}
22
+
21
23
  if html_options.present? && html_options[:active_on].present?
22
24
  active_on = html_options.delete(:active_on)
23
25
  active_state = html_options.delete(:active_state) || "active"
24
26
 
25
- if is_active?(active_on)
27
+ if is_active?(active_on, link_options)
26
28
  case active_state
27
29
  when Proc
28
30
  options = options.merge(active_state.call(html_options))
@@ -47,7 +49,7 @@ module LinkToActiveState
47
49
  end
48
50
 
49
51
  private
50
- def is_active?(active_on)
52
+ def is_active?(active_on, link_options = {})
51
53
  case active_on
52
54
  when String
53
55
  request.fullpath == active_on
@@ -57,6 +59,10 @@ module LinkToActiveState
57
59
  request.fullpath =~ active_on
58
60
  when Proc
59
61
  active_on.arity == 1 ? active_on.call(request) : active_on.call
62
+ else
63
+ # Anything else we'll take as a true argument, and match the link's URL
64
+ url = url_for(link_options)
65
+ request.fullpath == url
60
66
  end
61
67
  end
62
68
 
@@ -43,13 +43,18 @@ describe LinkToActiveState::ViewHelpers::UrlHelper do
43
43
  end
44
44
 
45
45
  context "when the current request path matches" do
46
-
47
46
  it "adds an active state" do
48
47
  request.stub!(:fullpath).and_return("/")
49
48
  lt = helper.link_to "Home", "/", :active_on => "/"
50
49
  lt.should match(/class=\"active\"/i)
51
50
  end
52
51
 
52
+ it "uses the link's URL by default" do
53
+ request.stub!(:fullpath).and_return("/")
54
+ lt = helper.link_to "Home", "/", :active_on => true
55
+ lt.should match(/class=\"active\"/i)
56
+ end
57
+
53
58
  it "encloses link in an element with active state if active_wrapper is true" do
54
59
  request.stub!(:fullpath).and_return("/")
55
60
  lt = helper.link_to "Home", "/", :active_on => "/", :active_wrapper => :li
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: link_to_active_state
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: