weppos-tabs_on_rails 0.1.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 +5 -0
- data/LICENSE.rdoc +20 -0
- data/README.rdoc +10 -0
- data/Rakefile +52 -0
- data/init.rb +1 -0
- data/install.rb +1 -0
- data/lib/tabs_on_rails/controller_mixin.rb +61 -0
- data/lib/tabs_on_rails/tabs.rb +131 -0
- data/lib/tabs_on_rails/version.rb +31 -0
- data/lib/tabs_on_rails.rb +28 -0
- data/tabs_on_rails.gemspec +37 -0
- data/tasks/tabs_on_rails_tasks.rake +4 -0
- data/test/builder_test.rb +32 -0
- data/test/controller_mixin_helpers_test.rb +55 -0
- data/test/controller_mixin_test.rb +56 -0
- data/test/fixtures/mixin/standard.html.erb +4 -0
- data/test/tabs_builder_test.rb +32 -0
- data/test/tabs_on_rails_test.rb +9 -0
- data/test/test_helper.rb +25 -0
- data/uninstall.rb +1 -0
- metadata +108 -0
data/CHANGELOG.rdoc
ADDED
data/LICENSE.rdoc
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Simone Carletti
|
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
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
= TabsOnRails
|
2
|
+
|
3
|
+
TabsOnRails is a simple Rails plugin for creating and managing Tabs.
|
4
|
+
It provides helpers for creating tabs with a flexible interface.
|
5
|
+
|
6
|
+
*WARNING*: This library has not been released yet.
|
7
|
+
This package seems stable, but should be considered a development release.
|
8
|
+
|
9
|
+
|
10
|
+
Copyright (c) 2009 Simone Carletti, released under the MIT license
|
data/Rakefile
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'echoe'
|
4
|
+
|
5
|
+
$:.unshift(File.dirname(__FILE__) + "/lib")
|
6
|
+
require 'tabs_on_rails'
|
7
|
+
|
8
|
+
|
9
|
+
PKG_NAME = ENV['PKG_NAME'] || TabsOnRails::GEM
|
10
|
+
PKG_VERSION = ENV['PKG_VERSION'] || TabsOnRails::VERSION
|
11
|
+
PKG_SUMMARY = "Simple Rails plugin for creating and managing Tabs."
|
12
|
+
PKG_FILES = FileList.new("{lib,tasks,test}/**/*") do |files|
|
13
|
+
files.include %w(*.{rdoc,rb})
|
14
|
+
files.include %w(Rakefile)
|
15
|
+
end
|
16
|
+
RUBYFORGE_PROJECT = nil
|
17
|
+
|
18
|
+
if ENV['SNAPSHOT'].to_i == 1
|
19
|
+
PKG_VERSION << "." << Time.now.utc.strftime("%Y%m%d%H%M%S")
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
Echoe.new(PKG_NAME, PKG_VERSION) do |p|
|
24
|
+
p.author = "Simone Carletti"
|
25
|
+
p.email = "weppos@weppos.net"
|
26
|
+
p.summary = PKG_SUMMARY
|
27
|
+
p.description = <<-EOD
|
28
|
+
TabsOnRails is a simple Rails plugin for creating and managing Tabs. \
|
29
|
+
It provides helpers for creating tabs with a flexible interface.
|
30
|
+
EOD
|
31
|
+
p.url = "http://code.simonecarletti.com/tabs_on_rails"
|
32
|
+
p.project = RUBYFORGE_PROJECT
|
33
|
+
|
34
|
+
p.need_zip = true
|
35
|
+
p.rcov_options = ["--main << README.rdoc -x Rakefile -x rcov"]
|
36
|
+
p.rdoc_pattern = /^(lib|CHANGELOG.rdoc|README.rdoc|LICENSE.rdoc)/
|
37
|
+
|
38
|
+
p.development_dependencies += ["rake >=0.8",
|
39
|
+
"echoe >=3.1"]
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
begin
|
44
|
+
require 'code_statistics'
|
45
|
+
desc "Show library's code statistics"
|
46
|
+
task :stats do
|
47
|
+
CodeStatistics.new(["WWW::Delicious", "lib"],
|
48
|
+
["Tests", "test"]).to_s
|
49
|
+
end
|
50
|
+
rescue LoadError
|
51
|
+
puts "CodeStatistics (Rails) is not available"
|
52
|
+
end
|
data/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ActionController::Base.send :include, TabsOnRails::ControllerMixin
|
data/install.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
# Install hook code here
|
@@ -0,0 +1,61 @@
|
|
1
|
+
#
|
2
|
+
# = Tabs on Rails
|
3
|
+
#
|
4
|
+
# Simple 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
|
+
# SVN: $Id$
|
14
|
+
#++
|
15
|
+
|
16
|
+
|
17
|
+
module TabsOnRails
|
18
|
+
|
19
|
+
module ControllerMixin
|
20
|
+
|
21
|
+
def self.included(base)
|
22
|
+
base.extend ClassMethods
|
23
|
+
base.send :helper, HelperMethods
|
24
|
+
base.class_eval do
|
25
|
+
attr_accessor :current_tab
|
26
|
+
helper_method :current_tab
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
module ClassMethods
|
31
|
+
|
32
|
+
# Sets +name+ as +current_tab+.
|
33
|
+
#
|
34
|
+
# ==== Examples
|
35
|
+
#
|
36
|
+
# tab :foo
|
37
|
+
# tab :foo, :except => :new
|
38
|
+
# tab :foo, :only => [ :index, :show ]
|
39
|
+
#
|
40
|
+
def current_tab(name, options = {})
|
41
|
+
before_filter(options) do |controller|
|
42
|
+
controller.current_tab = name
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
module HelperMethods
|
49
|
+
|
50
|
+
def tabs_tag(builder = nil, &block)
|
51
|
+
raise LocalJumpError, "no block given" unless block_given?
|
52
|
+
tabs = Tabs.new(self, builder)
|
53
|
+
|
54
|
+
concat(tabs.open_tabs.to_s)
|
55
|
+
yield tabs
|
56
|
+
concat(tabs.close_tabs.to_s)
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
#
|
2
|
+
# = Tabs on Rails
|
3
|
+
#
|
4
|
+
# Simple 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
|
+
# SVN: $Id$
|
14
|
+
#++
|
15
|
+
|
16
|
+
|
17
|
+
module TabsOnRails
|
18
|
+
|
19
|
+
class Tabs
|
20
|
+
|
21
|
+
#
|
22
|
+
# = Builder
|
23
|
+
#
|
24
|
+
# The Builder class represents the interface for any custom Builder.
|
25
|
+
#
|
26
|
+
# To create a custom Builder extend this class
|
27
|
+
# and implement the following abstract methods:
|
28
|
+
#
|
29
|
+
# * tab_for(args)
|
30
|
+
#
|
31
|
+
class Builder
|
32
|
+
|
33
|
+
# Initializes a new builder with +context+.
|
34
|
+
def initialize(context)
|
35
|
+
@context = context
|
36
|
+
end
|
37
|
+
|
38
|
+
# Returns true if +tab+ is the +current_tab+.
|
39
|
+
#
|
40
|
+
# ==== Examples
|
41
|
+
#
|
42
|
+
# class MyController < ApplicationController
|
43
|
+
# tab :foo
|
44
|
+
# end
|
45
|
+
#
|
46
|
+
# current_tab? :foo # => true
|
47
|
+
# current_tab? 'foo' # => true
|
48
|
+
# current_tab? :bar # => false
|
49
|
+
# current_tab? 'bar' # => false
|
50
|
+
#
|
51
|
+
def current_tab?(tab)
|
52
|
+
tab.to_s == @context.current_tab.to_s
|
53
|
+
end
|
54
|
+
|
55
|
+
# Creates and returns a tab with given +args+.
|
56
|
+
#
|
57
|
+
# ==== Raises
|
58
|
+
#
|
59
|
+
# NotImplemented:: you should implement this method in your custom Builder.
|
60
|
+
#
|
61
|
+
def tab_for(*args)
|
62
|
+
raise NotImplementedError
|
63
|
+
end
|
64
|
+
|
65
|
+
# Overwrite this method to use a custom open tag for your tabs.
|
66
|
+
def open_tabs
|
67
|
+
end
|
68
|
+
|
69
|
+
# Overwrite this method to use a custom close tag for your tabs.
|
70
|
+
def close_tabs
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
#
|
76
|
+
# = Tabs Builder
|
77
|
+
#
|
78
|
+
# The TabsBuilder is and example of custom Builder.
|
79
|
+
# It creates a new tab
|
80
|
+
#
|
81
|
+
class TabsBuilder < Builder
|
82
|
+
|
83
|
+
# Implements Builder#tab_for.
|
84
|
+
# Returns a link_to +tab+ with +name+ and +options+ if +tab+ is not the current tab,
|
85
|
+
# a simple tab name wrapped by a span tag otherwise.
|
86
|
+
#
|
87
|
+
# current_tab? :foo # => true
|
88
|
+
#
|
89
|
+
# tab_for :foo, 'Foo', foo_path
|
90
|
+
# # => <li><span>Foo</span></li>
|
91
|
+
#
|
92
|
+
# tab_for :bar, 'Bar', bar_path
|
93
|
+
# # => <li><a href="/link/to/bar">Bar</a></li>
|
94
|
+
#
|
95
|
+
def tab_for(tab, name, options)
|
96
|
+
content = @context.link_to_unless(current_tab?(tab), name, options) do
|
97
|
+
@context.content_tag(:span, name)
|
98
|
+
end
|
99
|
+
@context.content_tag(:li, content)
|
100
|
+
end
|
101
|
+
|
102
|
+
# Implements Builder#open_tabs.
|
103
|
+
def open_tabs
|
104
|
+
'<ul>'
|
105
|
+
end
|
106
|
+
|
107
|
+
# Implements Builder#close_tabs.
|
108
|
+
def close_tabs
|
109
|
+
'</ul>'
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
def initialize(context, builder = nil, &block)
|
115
|
+
@context = context
|
116
|
+
@builder = (builder || TabsBuilder).new(@context)
|
117
|
+
end
|
118
|
+
|
119
|
+
%w(open_tabs close_tabs).each do |method|
|
120
|
+
define_method(method) do
|
121
|
+
@builder.send(method)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def method_missing(*args)
|
126
|
+
@builder.tab_for(*args)
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#
|
2
|
+
# = Tabs on Rails
|
3
|
+
#
|
4
|
+
# Simple 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
|
+
# SVN: $Id$
|
14
|
+
#++
|
15
|
+
|
16
|
+
|
17
|
+
module TabsOnRails
|
18
|
+
|
19
|
+
module Version
|
20
|
+
MAJOR = 0
|
21
|
+
MINOR = 1
|
22
|
+
TINY = 0
|
23
|
+
|
24
|
+
STRING = [MAJOR, MINOR, TINY].join('.')
|
25
|
+
end
|
26
|
+
|
27
|
+
VERSION = Version::STRING
|
28
|
+
STATUS = 'alpha'
|
29
|
+
BUILD = ''.match(/(\d+)/).to_a.first
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#
|
2
|
+
# = Tabs on Rails
|
3
|
+
#
|
4
|
+
# Simple 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
|
+
# SVN: $Id$
|
14
|
+
#++
|
15
|
+
|
16
|
+
|
17
|
+
require 'tabs_on_rails/controller_mixin'
|
18
|
+
require 'tabs_on_rails/tabs'
|
19
|
+
require 'tabs_on_rails/version'
|
20
|
+
|
21
|
+
|
22
|
+
module TabsOnRails
|
23
|
+
|
24
|
+
NAME = 'Tabs on Rails'
|
25
|
+
GEM = 'tabs_on_rails'
|
26
|
+
AUTHOR = 'Simone Carletti <weppos@weppos.net>'
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{tabs_on_rails}
|
5
|
+
s.version = "0.1.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Simone Carletti"]
|
9
|
+
s.date = %q{2009-02-15}
|
10
|
+
s.description = %q{TabsOnRails is a simple Rails plugin for creating and managing Tabs. It provides helpers for creating tabs with a flexible interface.}
|
11
|
+
s.email = %q{weppos@weppos.net}
|
12
|
+
s.extra_rdoc_files = ["CHANGELOG.rdoc", "lib/tabs_on_rails/controller_mixin.rb", "lib/tabs_on_rails/tabs.rb", "lib/tabs_on_rails/version.rb", "lib/tabs_on_rails.rb", "LICENSE.rdoc", "README.rdoc"]
|
13
|
+
s.files = ["CHANGELOG.rdoc", "init.rb", "install.rb", "lib/tabs_on_rails/controller_mixin.rb", "lib/tabs_on_rails/tabs.rb", "lib/tabs_on_rails/version.rb", "lib/tabs_on_rails.rb", "LICENSE.rdoc", "Manifest", "Rakefile", "README.rdoc", "tasks/tabs_on_rails_tasks.rake", "test/builder_test.rb", "test/controller_mixin_helpers_test.rb", "test/controller_mixin_test.rb", "test/fixtures/mixin/standard.html.erb", "test/tabs_builder_test.rb", "test/tabs_on_rails_test.rb", "test/test_helper.rb", "uninstall.rb", "tabs_on_rails.gemspec"]
|
14
|
+
s.has_rdoc = true
|
15
|
+
s.homepage = %q{http://code.simonecarletti.com/tabs_on_rails}
|
16
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Tabs_on_rails", "--main", "README.rdoc"]
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
s.rubygems_version = %q{1.3.1}
|
19
|
+
s.summary = %q{Simple Rails plugin for creating and managing Tabs.}
|
20
|
+
s.test_files = ["test/builder_test.rb", "test/controller_mixin_helpers_test.rb", "test/controller_mixin_test.rb", "test/tabs_builder_test.rb", "test/tabs_on_rails_test.rb", "test/test_helper.rb"]
|
21
|
+
|
22
|
+
if s.respond_to? :specification_version then
|
23
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
24
|
+
s.specification_version = 2
|
25
|
+
|
26
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
27
|
+
s.add_development_dependency(%q<rake>, [">= 0.8"])
|
28
|
+
s.add_development_dependency(%q<echoe>, [">= 3.1"])
|
29
|
+
else
|
30
|
+
s.add_dependency(%q<rake>, [">= 0.8"])
|
31
|
+
s.add_dependency(%q<echoe>, [">= 3.1"])
|
32
|
+
end
|
33
|
+
else
|
34
|
+
s.add_dependency(%q<rake>, [">= 0.8"])
|
35
|
+
s.add_dependency(%q<echoe>, [">= 3.1"])
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class BuilderTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@template = Template.new
|
7
|
+
@builder = TabsOnRails::Tabs::Builder.new(@template)
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_initialize_should_require_context
|
11
|
+
assert_raise(ArgumentError) { TabsOnRails::Tabs::Builder.new }
|
12
|
+
assert_nothing_raised { TabsOnRails::Tabs::Builder.new(@template) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_initialize_should_set_context
|
16
|
+
assert_equal(@template, @builder.instance_variable_get(:'@context'))
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_current_tab_question_should_return_true_if_tab_matches_current_tab
|
20
|
+
assert( @builder.current_tab?(:dashboard))
|
21
|
+
assert( @builder.current_tab?('dashboard'))
|
22
|
+
assert(!@builder.current_tab?(:welcome))
|
23
|
+
assert(!@builder.current_tab?('welcome'))
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_tab_for_should_raise_not_implemented_error
|
27
|
+
assert_raise(NotImplementedError) { @builder.tab_for }
|
28
|
+
assert_raise(NotImplementedError) { @builder.tab_for('foo') }
|
29
|
+
assert_raise(NotImplementedError) { @builder.tab_for('foo', 'bar') }
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class NilBoundariesBuilder < TabsOnRails::Tabs::Builder
|
4
|
+
def tab_for(tab, name, *args)
|
5
|
+
@context.content_tag(:span, name)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class NilOpenBoundaryBuilder < NilBoundariesBuilder
|
10
|
+
def close_tabs
|
11
|
+
'<br />'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class NilCloseBoundaryBuilder < NilBoundariesBuilder
|
16
|
+
def open_tabs
|
17
|
+
'<br />'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
class ControllerMixinHelpersTest < ActionView::TestCase
|
23
|
+
include ActionView::Helpers::TagHelper
|
24
|
+
include ActionView::Helpers::UrlHelper
|
25
|
+
include TabsOnRails::ControllerMixin::HelperMethods
|
26
|
+
|
27
|
+
def test_tabs_tag_should_raise_local_jump_error_without_block
|
28
|
+
assert_raise(LocalJumpError) { tabs_tag }
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_tabs_tag_should_not_concat_open_close_tabs_when_nil
|
32
|
+
content = tabs_tag(NilBoundariesBuilder) do |t|
|
33
|
+
concat t.single('Single', '#')
|
34
|
+
end
|
35
|
+
|
36
|
+
assert_dom_equal('<span>Single</span>', content)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_tabs_tag_should_not_concat_open_tabs_when_nil
|
40
|
+
content = tabs_tag(NilOpenBoundaryBuilder) do |t|
|
41
|
+
concat t.single('Single', '#')
|
42
|
+
end
|
43
|
+
|
44
|
+
assert_dom_equal('<span>Single</span><br />', content)
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_tabs_tag_should_not_concat_close_tabs_when_nil
|
48
|
+
content = tabs_tag(NilCloseBoundaryBuilder) do |t|
|
49
|
+
concat t.single('Single', '#')
|
50
|
+
end
|
51
|
+
|
52
|
+
assert_dom_equal('<br /><span>Single</span>', content)
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class MixinController < ActionController::Base
|
4
|
+
def self.controller_name; "mixin"; end
|
5
|
+
def self.controller_path; "mixin"; end
|
6
|
+
|
7
|
+
layout false
|
8
|
+
|
9
|
+
current_tab :dashboard
|
10
|
+
current_tab :welcome, :only => [ :action_welcome ]
|
11
|
+
|
12
|
+
def method_missing(method, *args)
|
13
|
+
if method =~ /^action_(.*)/
|
14
|
+
render :action => (params[:template] || $1)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def rescue_action(e) raise end
|
19
|
+
end
|
20
|
+
|
21
|
+
MixinController.view_paths = [ File.dirname(__FILE__) + "/fixtures/" ]
|
22
|
+
|
23
|
+
|
24
|
+
class ControllerMixinTest < ActiveSupport::TestCase
|
25
|
+
|
26
|
+
def setup
|
27
|
+
@controller = MixinController.new
|
28
|
+
@request = ActionController::TestRequest.new
|
29
|
+
@response = ActionController::TestResponse.new
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_controller_should_include_current_tab_accessors
|
33
|
+
assert_equal(nil, @controller.current_tab)
|
34
|
+
@controller.current_tab = :footab
|
35
|
+
assert_equal(:footab, @controller.current_tab)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_current_tab_should_be_dashboard
|
39
|
+
get :action_dashboard, :template => 'standard'
|
40
|
+
assert_equal(:dashboard, @controller.current_tab)
|
41
|
+
assert_equal(%Q{<ul>
|
42
|
+
<li><span>Dashboard</span></li>
|
43
|
+
<li><a href="/w">Welcome</a></li>
|
44
|
+
</ul>}, @response.body)
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_current_tab_should_be_welcome_only_for_action_welcone
|
48
|
+
get :action_welcome, :template => 'standard'
|
49
|
+
assert_equal(:welcome, @controller.current_tab)
|
50
|
+
assert_equal(%Q{<ul>
|
51
|
+
<li><a href="/d">Dashboard</a></li>
|
52
|
+
<li><span>Welcome</span></li>
|
53
|
+
</ul>}, @response.body)
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Template
|
4
|
+
include ActionView::Helpers::TagHelper
|
5
|
+
include ActionView::Helpers::UrlHelper
|
6
|
+
|
7
|
+
def current_tab; :dashboard; end
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
class TabBuilderTest < ActiveSupport::TestCase
|
12
|
+
|
13
|
+
def setup
|
14
|
+
@template = Template.new
|
15
|
+
@builder = TabsOnRails::Tabs::TabsBuilder.new(@template)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_should_implement_builder
|
19
|
+
assert_equal(TabsOnRails::Tabs::Builder, TabsOnRails::Tabs::TabsBuilder.superclass)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_tab_for_should_return_link_to_unless_current_tab
|
23
|
+
assert_dom_equal('<li><a href="#">Welcome</a></li>', @builder.tab_for(:welcome, 'Welcome', '#'))
|
24
|
+
assert_dom_equal('<li><a href="http://foobar.com/">Foo Bar</a></li>', @builder.tab_for(:welcome, 'Foo Bar', 'http://foobar.com/'))
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_tab_for_should_return_span_if_current_tab
|
28
|
+
assert_dom_equal('<li><span>Dashboard</span></li>', @builder.tab_for(:dashboard, 'Dashboard', '#'))
|
29
|
+
assert_dom_equal('<li><span>Foo Bar</span></li>', @builder.tab_for(:dashboard, 'Foo Bar', '#'))
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'mocha'
|
4
|
+
|
5
|
+
require 'active_support'
|
6
|
+
require 'active_support/test_case'
|
7
|
+
require 'action_controller'
|
8
|
+
require 'action_controller/cgi_ext'
|
9
|
+
require 'action_controller/test_process'
|
10
|
+
require 'action_view/test_case'
|
11
|
+
|
12
|
+
$:.unshift File.dirname(__FILE__) + '/../lib'
|
13
|
+
|
14
|
+
# simulate the inclusion as Rails does loading the init.rb file.
|
15
|
+
require 'tabs_on_rails'
|
16
|
+
require File.dirname(__FILE__) + '/../init.rb'
|
17
|
+
|
18
|
+
RAILS_ROOT = '.' unless defined? RAILS_ROOT
|
19
|
+
RAILS_ENV = 'test' unless defined? RAILS_ENV
|
20
|
+
|
21
|
+
ActionController::Base.logger = nil
|
22
|
+
ActionController::Routing::Routes.reload rescue nil
|
23
|
+
|
24
|
+
# Unit tests for Helpers are based on unit tests created and developed by Rails core team.
|
25
|
+
# See action_pack/test/abstract_unit for more details.
|
data/uninstall.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
# Uninstall hook code here
|
metadata
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: weppos-tabs_on_rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Simone Carletti
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-02-15 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rake
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0.8"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: echoe
|
27
|
+
type: :development
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "3.1"
|
34
|
+
version:
|
35
|
+
description: TabsOnRails is a simple Rails plugin for creating and managing Tabs. It provides helpers for creating tabs with a flexible interface.
|
36
|
+
email: weppos@weppos.net
|
37
|
+
executables: []
|
38
|
+
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files:
|
42
|
+
- CHANGELOG.rdoc
|
43
|
+
- lib/tabs_on_rails/controller_mixin.rb
|
44
|
+
- lib/tabs_on_rails/tabs.rb
|
45
|
+
- lib/tabs_on_rails/version.rb
|
46
|
+
- lib/tabs_on_rails.rb
|
47
|
+
- LICENSE.rdoc
|
48
|
+
- README.rdoc
|
49
|
+
files:
|
50
|
+
- CHANGELOG.rdoc
|
51
|
+
- init.rb
|
52
|
+
- install.rb
|
53
|
+
- lib/tabs_on_rails/controller_mixin.rb
|
54
|
+
- lib/tabs_on_rails/tabs.rb
|
55
|
+
- lib/tabs_on_rails/version.rb
|
56
|
+
- lib/tabs_on_rails.rb
|
57
|
+
- LICENSE.rdoc
|
58
|
+
- Manifest
|
59
|
+
- Rakefile
|
60
|
+
- README.rdoc
|
61
|
+
- tasks/tabs_on_rails_tasks.rake
|
62
|
+
- test/builder_test.rb
|
63
|
+
- test/controller_mixin_helpers_test.rb
|
64
|
+
- test/controller_mixin_test.rb
|
65
|
+
- test/fixtures/mixin/standard.html.erb
|
66
|
+
- test/tabs_builder_test.rb
|
67
|
+
- test/tabs_on_rails_test.rb
|
68
|
+
- test/test_helper.rb
|
69
|
+
- uninstall.rb
|
70
|
+
- tabs_on_rails.gemspec
|
71
|
+
has_rdoc: true
|
72
|
+
homepage: http://code.simonecarletti.com/tabs_on_rails
|
73
|
+
post_install_message:
|
74
|
+
rdoc_options:
|
75
|
+
- --line-numbers
|
76
|
+
- --inline-source
|
77
|
+
- --title
|
78
|
+
- Tabs_on_rails
|
79
|
+
- --main
|
80
|
+
- README.rdoc
|
81
|
+
require_paths:
|
82
|
+
- lib
|
83
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: "0"
|
88
|
+
version:
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: "1.2"
|
94
|
+
version:
|
95
|
+
requirements: []
|
96
|
+
|
97
|
+
rubyforge_project:
|
98
|
+
rubygems_version: 1.2.0
|
99
|
+
signing_key:
|
100
|
+
specification_version: 2
|
101
|
+
summary: Simple Rails plugin for creating and managing Tabs.
|
102
|
+
test_files:
|
103
|
+
- test/builder_test.rb
|
104
|
+
- test/controller_mixin_helpers_test.rb
|
105
|
+
- test/controller_mixin_test.rb
|
106
|
+
- test/tabs_builder_test.rb
|
107
|
+
- test/tabs_on_rails_test.rb
|
108
|
+
- test/test_helper.rb
|