weppos-tabs_on_rails 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|