tabs_on_rails 1.1.0 → 1.2.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.
- data/CHANGELOG.rdoc +9 -0
- data/README.rdoc +24 -10
- data/Rakefile +8 -2
- data/init.rb +1 -1
- data/lib/tabs_on_rails/controller_mixin.rb +74 -22
- data/lib/tabs_on_rails/railtie.rb +44 -0
- data/lib/tabs_on_rails/tabs/builder.rb +18 -13
- data/lib/tabs_on_rails/tabs/tabs_builder.rb +13 -11
- data/lib/tabs_on_rails/tabs.rb +24 -3
- data/lib/tabs_on_rails/version.rb +1 -1
- data/lib/tabs_on_rails.rb +5 -5
- data/rails/init.rb +19 -2
- data/tabs_on_rails.gemspec +1 -1
- data/test/tabs/builder_test.rb +40 -23
- data/test/tabs/tabs_builder_test.rb +18 -13
- metadata +5 -4
data/CHANGELOG.rdoc
CHANGED
@@ -1,6 +1,15 @@
|
|
1
1
|
= Changelog
|
2
2
|
|
3
3
|
|
4
|
+
== Release 1.2.0
|
5
|
+
|
6
|
+
* ADDED: Rails 3 compatibility.
|
7
|
+
|
8
|
+
* CHANGED: Simplified tabs_tag helper by moving the rendering logic into TabsOnRails::Tabs#render.
|
9
|
+
|
10
|
+
* CHANGED: TabsOnRails::Tabs::Builder (and all child classes) now has full access to @options hash.
|
11
|
+
|
12
|
+
|
4
13
|
== Release 1.1.0
|
5
14
|
|
6
15
|
* FIXED: Incompatibility with release < 1.0.0 caused by open_tabs and close_tabs methods changes compared to 0.8.0.
|
data/README.rdoc
CHANGED
@@ -9,19 +9,26 @@ It provides helpers for creating tabs with a flexible interface.
|
|
9
9
|
* Ruby >= 1.8.6
|
10
10
|
* Rails >= 2.2
|
11
11
|
|
12
|
-
|
12
|
+
or
|
13
13
|
|
14
|
+
* Rails 3
|
14
15
|
|
15
|
-
|
16
|
+
Warning: TabsOnRails doesn't work with Rails 2.1 or previous versions
|
17
|
+
(see {this comment}[http://www.simonecarletti.com/blog/2009/04/tabsonrails/#comment-2901]
|
18
|
+
and {this commit}[http://github.com/weppos/tabs_on_rails/commit/d5ae9f401e3d0acc87251fa8957a8625e90ba4b3]).
|
16
19
|
|
17
|
-
=== As a Gem
|
18
20
|
|
19
|
-
|
21
|
+
== Installation
|
22
|
+
|
23
|
+
=== As a Gem (Rails 2)
|
24
|
+
|
25
|
+
RubyGems is the preferred way to install TabsOnRails and the best way if you want install a stable version.
|
20
26
|
The GEM is hosted on {RubyGems}[http://rubygems.org/gems/tabs_on_rails].
|
21
27
|
|
22
28
|
$ gem install tabs_on_rails
|
23
29
|
|
24
|
-
With Rails >= 2.2,
|
30
|
+
With Rails >= 2.2, specify the Gem dependency in your environment.rb file so that Rails
|
31
|
+
will automatically check the requirement on startup.
|
25
32
|
|
26
33
|
Rails::Initializer.run do |config|
|
27
34
|
|
@@ -32,12 +39,19 @@ With Rails >= 2.2, you can specify the GEM dependency in your environment.rb fil
|
|
32
39
|
|
33
40
|
end
|
34
41
|
|
35
|
-
|
42
|
+
With Rails 3, specify the Gem dependency in the {Bundler}[http://gembundler.com/] Gemfile.
|
43
|
+
|
44
|
+
gem "tabs_on_rails"
|
36
45
|
|
37
|
-
|
46
|
+
|
47
|
+
=== As a Plugin
|
38
48
|
|
39
49
|
$ script/plugin install git://github.com/weppos/tabs_on_rails.git
|
40
50
|
|
51
|
+
Warning: this method is deprecated and will be removed in a future version.
|
52
|
+
Use Bundler and the {:git option}[http://gembundler.com/v1.0/git.html]
|
53
|
+
if you want to grab the latest version from the Git repository.
|
54
|
+
|
41
55
|
|
42
56
|
== Usage
|
43
57
|
|
@@ -67,7 +81,7 @@ when you want to mark a tab as the current tab.
|
|
67
81
|
set_tab :dashboard
|
68
82
|
end
|
69
83
|
|
70
|
-
Now, if the action belongs to DashboardController
|
84
|
+
Now, if the action belongs to <tt>DashboardController</tt>, the template will automatically render the following HTML code.
|
71
85
|
|
72
86
|
<ul>
|
73
87
|
<li><a href="/">Homepage</a></li>
|
@@ -84,7 +98,7 @@ Use the <tt>current_tab</tt> helper method if you need to access the value of cu
|
|
84
98
|
# In your view
|
85
99
|
<p>The name of current tab is <%= current_tab %>.</p>
|
86
100
|
|
87
|
-
The open_tag can be customized with the
|
101
|
+
The open_tag can be customized with the <tt>:open_tabs</tt> option.
|
88
102
|
|
89
103
|
<% tabs_tag :open_tabs => { :id => "tabs", :class => "cool" } do |tab| %>
|
90
104
|
<%= tab.home 'Homepage', root_path %>
|
@@ -98,7 +112,7 @@ The open_tag can be customized with the `:open_tabs` option.
|
|
98
112
|
<li><a href="/account">Account</a></li>
|
99
113
|
</ul>
|
100
114
|
|
101
|
-
Further customizations require a custom Builder (see below).
|
115
|
+
Further customizations require a custom <tt>Builder</tt> (see below).
|
102
116
|
|
103
117
|
|
104
118
|
== Restricting set_tab scope
|
data/Rakefile
CHANGED
@@ -82,7 +82,7 @@ task :gemspec do
|
|
82
82
|
File.open(file, "w") {|f| f << spec.to_ruby }
|
83
83
|
end
|
84
84
|
|
85
|
-
desc "Remove any temporary products, including gemspec
|
85
|
+
desc "Remove any temporary products, including gemspec"
|
86
86
|
task :clean => [:clobber] do
|
87
87
|
rm "#{spec.name}.gemspec"
|
88
88
|
end
|
@@ -96,7 +96,7 @@ task :package => [:gemspec]
|
|
96
96
|
begin
|
97
97
|
require "rcov/rcovtask"
|
98
98
|
|
99
|
-
desc "Create a code coverage report
|
99
|
+
desc "Create a code coverage report"
|
100
100
|
Rcov::RcovTask.new do |t|
|
101
101
|
t.test_files = FileList["test/**/*_test.rb"]
|
102
102
|
t.ruby_opts << "-Itest -x mocha,rcov,Rakefile"
|
@@ -118,3 +118,9 @@ begin
|
|
118
118
|
rescue LoadError
|
119
119
|
puts "CodeStatistics (Rails) is not available"
|
120
120
|
end
|
121
|
+
|
122
|
+
desc "Publish documentation to the site"
|
123
|
+
task :publish_rdoc => [:clobber_rdoc, :rdoc] do
|
124
|
+
ENV["username"] || raise(ArgumentError, "Missing ssh username")
|
125
|
+
sh "rsync -avz --delete rdoc/ #{ENV["username"]}@code:/var/www/apps/code/#{PKG_NAME}/api"
|
126
|
+
end
|
data/init.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__),
|
1
|
+
require File.join(File.dirname(__FILE__), "rails", "init")
|
@@ -1,8 +1,8 @@
|
|
1
|
-
#
|
1
|
+
#
|
2
2
|
# = Tabs on Rails
|
3
3
|
#
|
4
4
|
# A simple Ruby on Rails plugin for creating and managing Tabs.
|
5
|
-
#
|
5
|
+
#
|
6
6
|
#
|
7
7
|
# Category:: Rails
|
8
8
|
# Package:: TabsOnRails
|
@@ -10,16 +10,16 @@
|
|
10
10
|
# License:: MIT License
|
11
11
|
#
|
12
12
|
#--
|
13
|
-
#
|
13
|
+
#
|
14
14
|
#++
|
15
15
|
|
16
16
|
|
17
17
|
module TabsOnRails
|
18
|
-
|
18
|
+
|
19
19
|
module ControllerMixin
|
20
|
-
|
20
|
+
|
21
21
|
def self.included(base)
|
22
|
-
base.extend
|
22
|
+
base.extend ClassMethods
|
23
23
|
base.class_eval do
|
24
24
|
include InstanceMethods
|
25
25
|
helper HelperMethods
|
@@ -43,8 +43,8 @@ module TabsOnRails
|
|
43
43
|
# For example, you can set the tab only for a restricted group of actions in the same controller
|
44
44
|
# using the <tt>:only</tt> and <tt>:except</tt> options.
|
45
45
|
#
|
46
|
-
#
|
47
|
-
#
|
46
|
+
# Examples
|
47
|
+
#
|
48
48
|
# set_tab :foo
|
49
49
|
# set_tab :foo, :except => :new
|
50
50
|
# set_tab :foo, :only => [ :index, :show ]
|
@@ -55,7 +55,7 @@ module TabsOnRails
|
|
55
55
|
def set_tab(*args)
|
56
56
|
options = args.extract_options!
|
57
57
|
name, namespace = args
|
58
|
-
|
58
|
+
|
59
59
|
before_filter(options) do |controller|
|
60
60
|
controller.send(:set_tab, name, namespace)
|
61
61
|
end
|
@@ -69,7 +69,7 @@ module TabsOnRails
|
|
69
69
|
# Sets the value for current tab to given name.
|
70
70
|
# If you need to manage multiple tabs, then you can pass an optional namespace.
|
71
71
|
#
|
72
|
-
#
|
72
|
+
# Examples
|
73
73
|
#
|
74
74
|
# set_tab :homepage
|
75
75
|
# set_tab :dashboard, :menu
|
@@ -82,7 +82,7 @@ module TabsOnRails
|
|
82
82
|
# or nil if no tab has been set before.
|
83
83
|
# You can pass <tt>namespace</tt> to get the value of current tab for a different namespace.
|
84
84
|
#
|
85
|
-
#
|
85
|
+
# Examples
|
86
86
|
#
|
87
87
|
# current_tab # => nil
|
88
88
|
# current_tab :menu # => nil
|
@@ -113,19 +113,71 @@ module TabsOnRails
|
|
113
113
|
|
114
114
|
module HelperMethods
|
115
115
|
|
116
|
+
# In your template use the <tt>tabs_tag</tt> helper to create your tab.
|
117
|
+
#
|
118
|
+
# <% tabs_tag do |tab| %>
|
119
|
+
# <%= tab.home 'Homepage', root_path %>
|
120
|
+
# <%= tab.dashboard 'Dashboard', dashboard_path %>
|
121
|
+
# <%= tab.account 'Account', account_path %>
|
122
|
+
# <% end %>
|
123
|
+
#
|
124
|
+
# The example above produces the following HTML output.
|
125
|
+
#
|
126
|
+
# <ul>
|
127
|
+
# <li><a href="/">Homepage</a></li>
|
128
|
+
# <li><a href="/dashboard">Dashboard</a></li>
|
129
|
+
# <li><a href="/account">Account</a></li>
|
130
|
+
# </ul>
|
131
|
+
#
|
132
|
+
# The usage is similar to the Rails route file.
|
133
|
+
# You create named tabs with the syntax <tt>tab.name_of_tab</tt>.
|
134
|
+
#
|
135
|
+
# The name you use creating a tab is the same you're going to refer to in your controller
|
136
|
+
# when you want to mark a tab as the current tab.
|
137
|
+
#
|
138
|
+
# class DashboardController < ApplicationController
|
139
|
+
# set_tab :dashboard
|
140
|
+
# end
|
141
|
+
#
|
142
|
+
# Now, if the action belongs to <tt>DashboardController</tt>,
|
143
|
+
# the template will automatically render the following HTML code.
|
144
|
+
#
|
145
|
+
# <ul>
|
146
|
+
# <li><a href="/">Homepage</a></li>
|
147
|
+
# <li><span>Dashboard</span></li>
|
148
|
+
# <li><a href="/account">Account</a></li>
|
149
|
+
# </ul>
|
150
|
+
#
|
151
|
+
# Use the <tt>current_tab</tt> helper method if you need to access
|
152
|
+
# the value of current tab in your controller or template.
|
153
|
+
#
|
154
|
+
# class DashboardController < ApplicationController
|
155
|
+
# set_tab :dashboard
|
156
|
+
# end
|
157
|
+
#
|
158
|
+
# # In your view
|
159
|
+
# <p>The name of current tab is <%= current_tab %>.</p>
|
160
|
+
#
|
161
|
+
# The open_tag can be customized with the <tt>:open_tabs</tt> option.
|
162
|
+
#
|
163
|
+
# <% tabs_tag :open_tabs => { :id => "tabs", :class => "cool" } do |tab| %>
|
164
|
+
# <%= tab.home 'Homepage', root_path %>
|
165
|
+
# <%= tab.dashboard 'Dashboard', dashboard_path %>
|
166
|
+
# <%= tab.account 'Account', account_path %>
|
167
|
+
# <% end %>
|
168
|
+
#
|
169
|
+
# <ul id="tabs" class="cool">
|
170
|
+
# <li><a href="/">Homepage</a></li>
|
171
|
+
# <li><a href="/dashboard">Dashboard</a></li>
|
172
|
+
# <li><a href="/account">Account</a></li>
|
173
|
+
# </ul>
|
174
|
+
#
|
175
|
+
# Further customizations require a custom <tt>Builder</tt>.
|
176
|
+
#
|
116
177
|
def tabs_tag(options = {}, &block)
|
117
|
-
|
118
|
-
|
119
|
-
options = options.dup
|
120
|
-
open_tabs_options = options.delete(:open_tabs) || {}
|
121
|
-
close_tabs_options = options.delete(:close_tabs) || {}
|
122
|
-
tabs = Tabs.new(self, { :namespace => :default }.merge(options))
|
123
|
-
|
124
|
-
concat(tabs.open_tabs(open_tabs_options).to_s)
|
125
|
-
yield tabs
|
126
|
-
concat(tabs.close_tabs(close_tabs_options).to_s)
|
178
|
+
Tabs.new(self, { :namespace => :default }.merge(options)).render(&block)
|
127
179
|
end
|
128
180
|
|
129
181
|
end
|
130
182
|
end
|
131
|
-
end
|
183
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
#
|
2
|
+
# = Tabs on Rails
|
3
|
+
#
|
4
|
+
# A simple Ruby on Rails plugin for creating and managing Tabs.
|
5
|
+
#
|
6
|
+
#
|
7
|
+
# Category:: Rails
|
8
|
+
# Package:: TabsOnRails
|
9
|
+
# Author:: Simone Carletti <weppos@weppos.net>
|
10
|
+
# License:: MIT License
|
11
|
+
#
|
12
|
+
#--
|
13
|
+
#
|
14
|
+
#++
|
15
|
+
|
16
|
+
|
17
|
+
module TabsOnRails
|
18
|
+
|
19
|
+
if defined? Rails::Railtie
|
20
|
+
require "rails"
|
21
|
+
|
22
|
+
class Railtie < Rails::Railtie
|
23
|
+
initializer "tabs_on_rails.initialize" do
|
24
|
+
ActiveSupport.on_load :action_controller do
|
25
|
+
TabsOnRails::Railtie.init
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
class Railtie
|
33
|
+
|
34
|
+
def self.rails_version
|
35
|
+
@@rails_version ||= Rails::VERSION::STRING rescue "2.2"
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.init
|
39
|
+
ActionController::Base.send :include, TabsOnRails::ControllerMixin
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -22,24 +22,32 @@ module TabsOnRails
|
|
22
22
|
#
|
23
23
|
# The Builder class represents the interface for any custom Builder.
|
24
24
|
#
|
25
|
-
# To create a custom Builder extend this class
|
25
|
+
# To create a custom Builder, extend this class
|
26
26
|
# and implement the following abstract methods:
|
27
27
|
#
|
28
|
-
# * tab_for
|
28
|
+
# * <tt>tab_for</tt>
|
29
|
+
#
|
30
|
+
# Optionally, you can override the following methods to customize
|
31
|
+
# the Builder behavior:
|
32
|
+
#
|
33
|
+
# * <tt>open_tabs</tt>
|
34
|
+
# * <tt>close_tabs</tt>
|
29
35
|
#
|
30
36
|
class Builder
|
31
37
|
|
32
|
-
# Initializes a new builder with
|
38
|
+
# Initializes a new builder with the given hash of <tt>options</tt>,
|
39
|
+
# providing the current Rails template as <tt>context</tt>.
|
33
40
|
#
|
34
|
-
#
|
41
|
+
# Warning: You should not override this method to prevent incompatibility with future versions.
|
35
42
|
def initialize(context, options = {})
|
36
43
|
@context = context
|
37
44
|
@namespace = options.delete(:namespace) || :default
|
45
|
+
@options = options
|
38
46
|
end
|
39
47
|
|
40
48
|
# Returns true if +tab+ is the +current_tab+.
|
41
49
|
#
|
42
|
-
#
|
50
|
+
# Examples
|
43
51
|
#
|
44
52
|
# class MyController < ApplicationController
|
45
53
|
# tab :foo
|
@@ -56,24 +64,21 @@ module TabsOnRails
|
|
56
64
|
|
57
65
|
|
58
66
|
# Creates and returns a tab with given +args+.
|
59
|
-
#
|
60
|
-
#
|
61
|
-
#
|
62
|
-
# NotImplemented:: you should implement this method in your custom Builder.
|
63
|
-
#
|
67
|
+
#
|
68
|
+
# Raises NotImplemented: you should implement this method in your custom Builder.
|
64
69
|
def tab_for(*args)
|
65
70
|
raise NotImplementedError
|
66
71
|
end
|
67
72
|
|
68
|
-
#
|
73
|
+
# Override this method to use a custom open tag for your tabs.
|
69
74
|
def open_tabs(*args)
|
70
75
|
end
|
71
76
|
|
72
|
-
#
|
77
|
+
# Override this method to use a custom close tag for your tabs.
|
73
78
|
def close_tabs(*args)
|
74
79
|
end
|
75
80
|
|
76
81
|
end
|
77
82
|
|
78
83
|
end
|
79
|
-
end
|
84
|
+
end
|
@@ -21,11 +21,9 @@ module TabsOnRails
|
|
21
21
|
# = Tabs Builder
|
22
22
|
#
|
23
23
|
# The TabsBuilder is and example of custom Builder.
|
24
|
-
# It creates a new tab
|
25
24
|
#
|
26
25
|
class TabsBuilder < Builder
|
27
26
|
|
28
|
-
# Implements Builder#tab_for.
|
29
27
|
# Returns a link_to +tab+ with +name+ and +options+ if +tab+ is not the current tab,
|
30
28
|
# a simple tab name wrapped by a span tag otherwise.
|
31
29
|
#
|
@@ -37,6 +35,8 @@ module TabsOnRails
|
|
37
35
|
# tab_for :bar, 'Bar', bar_path
|
38
36
|
# # => <li><a href="/link/to/bar">Bar</a></li>
|
39
37
|
#
|
38
|
+
# Implements Builder#tab_for.
|
39
|
+
#
|
40
40
|
def tab_for(tab, name, options)
|
41
41
|
content = @context.link_to_unless(current_tab?(tab), name, options) do
|
42
42
|
@context.content_tag(:span, name)
|
@@ -44,10 +44,9 @@ module TabsOnRails
|
|
44
44
|
@context.content_tag(:li, content)
|
45
45
|
end
|
46
46
|
|
47
|
-
# Implements Builder#open_tabs.
|
48
|
-
#
|
49
47
|
# Returns an unordered list open tag.
|
50
|
-
#
|
48
|
+
#
|
49
|
+
# The <tt>options</tt> hash is used to customize the HTML attributes of the tag.
|
51
50
|
#
|
52
51
|
# open_tag
|
53
52
|
# # => "<ul>"
|
@@ -55,15 +54,16 @@ module TabsOnRails
|
|
55
54
|
# open_tag :class => "centered"
|
56
55
|
# # => "<ul class=\"centered\">"
|
57
56
|
#
|
57
|
+
# Implements Builder#open_tabs.
|
58
|
+
#
|
58
59
|
def open_tabs(options = {})
|
59
60
|
@context.tag("ul", options, open = true)
|
60
61
|
end
|
61
62
|
|
62
|
-
# Implements Builder#close_tabs.
|
63
|
-
#
|
64
63
|
# Returns an unordered list close tag.
|
65
|
-
#
|
66
|
-
#
|
64
|
+
#
|
65
|
+
# The <tt>options</tt> hash is ignored here.
|
66
|
+
# It exists only for coherence with the parent Builder API.
|
67
67
|
#
|
68
68
|
# close_tag
|
69
69
|
# # => "</ul>"
|
@@ -71,11 +71,13 @@ module TabsOnRails
|
|
71
71
|
# close_tag :class => "centered"
|
72
72
|
# # => "</ul>"
|
73
73
|
#
|
74
|
+
# Implements Builder#close_tabs.
|
75
|
+
#
|
74
76
|
def close_tabs(options = {})
|
75
|
-
"</ul>"
|
77
|
+
"</ul>".try(:html_safe)
|
76
78
|
end
|
77
79
|
|
78
80
|
end
|
79
81
|
|
80
82
|
end
|
81
|
-
end
|
83
|
+
end
|
data/lib/tabs_on_rails/tabs.rb
CHANGED
@@ -22,9 +22,10 @@ module TabsOnRails
|
|
22
22
|
|
23
23
|
class Tabs
|
24
24
|
|
25
|
-
def initialize(context, options = {}
|
25
|
+
def initialize(context, options = {})
|
26
26
|
@context = context
|
27
27
|
@builder = (options.delete(:builder) || TabsBuilder).new(@context, options)
|
28
|
+
@options = options
|
28
29
|
end
|
29
30
|
|
30
31
|
%w(open_tabs close_tabs).each do |name|
|
@@ -45,7 +46,27 @@ module TabsOnRails
|
|
45
46
|
def method_missing(*args)
|
46
47
|
@builder.tab_for(*args)
|
47
48
|
end
|
48
|
-
|
49
|
+
|
50
|
+
def render(&block)
|
51
|
+
raise LocalJumpError, "no block given" unless block_given?
|
52
|
+
|
53
|
+
options = @options.dup
|
54
|
+
open_tabs_options = options.delete(:open_tabs) || {}
|
55
|
+
close_tabs_options = options.delete(:close_tabs) || {}
|
56
|
+
|
57
|
+
if Railtie.rails_version < "3"
|
58
|
+
@context.concat(open_tabs(open_tabs_options).to_s)
|
59
|
+
yield self
|
60
|
+
@context.concat(close_tabs(close_tabs_options).to_s)
|
61
|
+
else
|
62
|
+
"".tap do |html|
|
63
|
+
html << open_tabs(open_tabs_options).to_s
|
64
|
+
html << capture(self, &block)
|
65
|
+
html << close_tabs(close_tabs_options).to_s
|
66
|
+
end.html_safe
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
49
70
|
end
|
50
71
|
|
51
|
-
end
|
72
|
+
end
|
data/lib/tabs_on_rails.rb
CHANGED
@@ -16,13 +16,13 @@
|
|
16
16
|
|
17
17
|
require 'tabs_on_rails/controller_mixin'
|
18
18
|
require 'tabs_on_rails/tabs'
|
19
|
+
require 'tabs_on_rails/railtie'
|
19
20
|
require 'tabs_on_rails/version'
|
20
21
|
|
21
22
|
|
22
23
|
module TabsOnRails
|
23
24
|
|
24
|
-
NAME =
|
25
|
-
GEM =
|
26
|
-
|
27
|
-
|
28
|
-
end
|
25
|
+
NAME = "Tabs on Rails"
|
26
|
+
GEM = "tabs_on_rails"
|
27
|
+
|
28
|
+
end
|
data/rails/init.rb
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
-
|
1
|
+
#
|
2
|
+
# = Tabs on Rails
|
3
|
+
#
|
4
|
+
# A simple Ruby on Rails plugin for creating and managing Tabs.
|
5
|
+
#
|
6
|
+
#
|
7
|
+
# Category:: Rails
|
8
|
+
# Package:: TabsOnRails
|
9
|
+
# Author:: Simone Carletti <weppos@weppos.net>
|
10
|
+
# License:: MIT License
|
11
|
+
#
|
12
|
+
#--
|
13
|
+
#
|
14
|
+
#++
|
2
15
|
|
3
|
-
|
16
|
+
|
17
|
+
require "tabs_on_rails"
|
18
|
+
|
19
|
+
|
20
|
+
TabsOnRails::Railtie.init
|
data/tabs_on_rails.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
|
|
11
11
|
}
|
12
12
|
s.email = %q{weppos@weppos.net}
|
13
13
|
s.extra_rdoc_files = ["CHANGELOG.rdoc", "LICENSE.rdoc", "README.rdoc"]
|
14
|
-
s.files = ["Rakefile", "init.rb", "CHANGELOG.rdoc", "LICENSE.rdoc", "README.rdoc", "tabs_on_rails.gemspec", "test/controller_mixin_test.rb", "test/fixtures
|
14
|
+
s.files = ["Rakefile", "init.rb", "CHANGELOG.rdoc", "LICENSE.rdoc", "README.rdoc", "tabs_on_rails.gemspec", "test/controller_mixin_test.rb", "test/fixtures/mixin/default.html.erb", "test/fixtures/mixin/with_open_close_tabs.html.erb", "test/tabs/builder_test.rb", "test/tabs/tabs_builder_test.rb", "test/tabs_test.rb", "test/test_helper.rb", "lib/tabs_on_rails/controller_mixin.rb", "lib/tabs_on_rails/tabs/builder.rb", "lib/tabs_on_rails/tabs/tabs_builder.rb", "lib/tabs_on_rails/tabs.rb", "lib/tabs_on_rails/version.rb", "lib/tabs_on_rails.rb", "rails/init.rb"]
|
15
15
|
s.homepage = %q{http://www.simonecarletti.com/code/tabs_on_rails}
|
16
16
|
s.rdoc_options = ["--main", "README.rdoc"]
|
17
17
|
s.require_paths = ["lib"]
|
data/test/tabs/builder_test.rb
CHANGED
@@ -24,42 +24,59 @@ class BuilderTest < ActiveSupport::TestCase
|
|
24
24
|
end
|
25
25
|
|
26
26
|
|
27
|
-
def
|
27
|
+
def test_initialize_without_context
|
28
28
|
assert_raise(ArgumentError) { TabsOnRails::Tabs::Builder.new }
|
29
|
-
assert_nothing_raised { TabsOnRails::Tabs::Builder.new(@template) }
|
30
29
|
end
|
31
30
|
|
32
|
-
def
|
33
|
-
assert_nothing_raised { TabsOnRails::Tabs::Builder.new(@template
|
31
|
+
def test_initialize_with_context
|
32
|
+
assert_nothing_raised { TabsOnRails::Tabs::Builder.new(@template) }
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_initialize_with_options
|
36
|
+
assert_nothing_raised { TabsOnRails::Tabs::Builder.new(@template, { :namespace => "foonamespace" }) }
|
34
37
|
end
|
35
38
|
|
36
39
|
def test_initialize_should_set_context
|
37
|
-
assert_equal
|
40
|
+
assert_equal @template, @builder.instance_variable_get(:"@context")
|
38
41
|
end
|
39
42
|
|
40
43
|
def test_initialize_should_set_namespace
|
41
|
-
@builder
|
42
|
-
assert_equal
|
44
|
+
@builder = TabsOnRails::Tabs::Builder.new(@template)
|
45
|
+
assert_equal :default, @builder.instance_variable_get(:"@namespace")
|
43
46
|
|
44
|
-
@builder
|
45
|
-
assert_equal
|
47
|
+
@builder = TabsOnRails::Tabs::Builder.new(@template, :namespace => :foobar)
|
48
|
+
assert_equal :foobar, @builder.instance_variable_get(:"@namespace")
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_initialize_should_set_options
|
52
|
+
@builder = TabsOnRails::Tabs::Builder.new(@template)
|
53
|
+
assert_equal({}, @builder.instance_variable_get(:"@options"))
|
54
|
+
|
55
|
+
@builder = TabsOnRails::Tabs::Builder.new(@template, :weather => :sunny)
|
56
|
+
assert_equal({ :weather => :sunny }, @builder.instance_variable_get(:"@options"))
|
57
|
+
|
58
|
+
@builder = TabsOnRails::Tabs::Builder.new(@template, :namespace => :foobar, :weather => :sunny)
|
59
|
+
assert_equal({ :weather => :sunny }, @builder.instance_variable_get(:"@options"))
|
60
|
+
|
61
|
+
@builder = TabsOnRails::Tabs::Builder.new(@template, :namespace => :foobar)
|
62
|
+
assert_equal({}, @builder.instance_variable_get(:"@options"))
|
46
63
|
end
|
47
64
|
|
48
65
|
|
49
66
|
def test_current_tab
|
50
|
-
@builder
|
51
|
-
assert
|
52
|
-
assert
|
53
|
-
assert
|
54
|
-
assert
|
67
|
+
@builder = TabsOnRails::Tabs::Builder.new(@template)
|
68
|
+
assert @builder.current_tab?(:dashboard)
|
69
|
+
assert @builder.current_tab?("dashboard")
|
70
|
+
assert !@builder.current_tab?(:welcome)
|
71
|
+
assert !@builder.current_tab?("welcome")
|
55
72
|
end
|
56
73
|
|
57
74
|
def test_current_tab_with_namespace
|
58
|
-
@builder
|
59
|
-
assert
|
60
|
-
assert
|
61
|
-
assert
|
62
|
-
assert
|
75
|
+
@builder = TabsOnRails::Tabs::Builder.new(@template, :namespace => :foospace)
|
76
|
+
assert @builder.current_tab?(:footab)
|
77
|
+
assert @builder.current_tab?("footab")
|
78
|
+
assert !@builder.current_tab?(:dashboard)
|
79
|
+
assert !@builder.current_tab?("dashboard")
|
63
80
|
end
|
64
81
|
|
65
82
|
|
@@ -82,8 +99,8 @@ class BuilderTest < ActiveSupport::TestCase
|
|
82
99
|
|
83
100
|
def test_tab_for_should_raise_not_implemented_error
|
84
101
|
assert_raise(NotImplementedError) { @builder.tab_for }
|
85
|
-
assert_raise(NotImplementedError) { @builder.tab_for(
|
86
|
-
assert_raise(NotImplementedError) { @builder.tab_for(
|
102
|
+
assert_raise(NotImplementedError) { @builder.tab_for("foo") }
|
103
|
+
assert_raise(NotImplementedError) { @builder.tab_for("foo", "bar") }
|
87
104
|
end
|
88
|
-
|
89
|
-
end
|
105
|
+
|
106
|
+
end
|
@@ -20,39 +20,44 @@ class TabsBuilderTest < ActionView::TestCase
|
|
20
20
|
|
21
21
|
def setup
|
22
22
|
@template = Template.new
|
23
|
-
@
|
23
|
+
@klass = TabsOnRails::Tabs::TabsBuilder
|
24
|
+
@builder = @klass.new(@template)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_should_extend_builder
|
28
|
+
assert_equal TabsOnRails::Tabs::Builder, @klass.superclass
|
24
29
|
end
|
25
30
|
|
26
31
|
|
27
32
|
def test_open_tabs
|
28
|
-
|
33
|
+
assert_dom_equal %Q{<ul>}, @builder.open_tabs
|
29
34
|
end
|
30
35
|
|
31
36
|
def test_open_tabs_with_options
|
32
|
-
|
37
|
+
assert_dom_equal %Q{<ul style="foo">}, @builder.open_tabs(:style => "foo")
|
33
38
|
end
|
34
39
|
|
35
40
|
def test_close_tabs
|
36
|
-
|
41
|
+
assert_dom_equal %Q{</ul>}, @builder.close_tabs
|
37
42
|
end
|
38
43
|
|
39
44
|
def test_close_tabs_with_options
|
40
|
-
|
45
|
+
assert_dom_equal %Q{</ul>}, @builder.close_tabs(:foo => "bar")
|
41
46
|
end
|
42
47
|
|
43
48
|
|
44
|
-
def test_should_implement_builder
|
45
|
-
assert_equal(TabsOnRails::Tabs::Builder, TabsOnRails::Tabs::TabsBuilder.superclass)
|
46
|
-
end
|
47
|
-
|
48
49
|
def test_tab_for_should_return_link_to_unless_current_tab
|
49
|
-
assert_dom_equal
|
50
|
-
|
50
|
+
assert_dom_equal %Q{<li><a href="#">Welcome</a></li>},
|
51
|
+
@builder.tab_for(:welcome, 'Welcome', '#')
|
52
|
+
assert_dom_equal %Q{<li><a href="http://foobar.com/">Foo Bar</a></li>},
|
53
|
+
@builder.tab_for(:welcome, 'Foo Bar', 'http://foobar.com/')
|
51
54
|
end
|
52
55
|
|
53
56
|
def test_tab_for_should_return_span_if_current_tab
|
54
|
-
assert_dom_equal
|
55
|
-
|
57
|
+
assert_dom_equal %Q{<li><span>Dashboard</span></li>},
|
58
|
+
@builder.tab_for(:dashboard, 'Dashboard', '#')
|
59
|
+
assert_dom_equal %Q{<li><span>Foo Bar</span></li>},
|
60
|
+
@builder.tab_for(:dashboard, 'Foo Bar', '#')
|
56
61
|
end
|
57
62
|
|
58
63
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tabs_on_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
8
|
+
- 2
|
9
9
|
- 0
|
10
|
-
version: 1.
|
10
|
+
version: 1.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Simone Carletti
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-08-
|
18
|
+
date: 2010-08-10 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -44,6 +44,7 @@ files:
|
|
44
44
|
- test/tabs_test.rb
|
45
45
|
- test/test_helper.rb
|
46
46
|
- lib/tabs_on_rails/controller_mixin.rb
|
47
|
+
- lib/tabs_on_rails/railtie.rb
|
47
48
|
- lib/tabs_on_rails/tabs/builder.rb
|
48
49
|
- lib/tabs_on_rails/tabs/tabs_builder.rb
|
49
50
|
- lib/tabs_on_rails/tabs.rb
|