rails_menu 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/.gitignore +4 -0
- data/Gemfile +3 -0
- data/README.md +120 -0
- data/Rakefile +16 -0
- data/lib/rails_menu.rb +15 -0
- data/lib/rails_menu/controller_helper.rb +21 -0
- data/lib/rails_menu/element.rb +14 -0
- data/lib/rails_menu/set.rb +35 -0
- data/lib/rails_menu/version.rb +3 -0
- data/lib/rails_menu/view_helper.rb +14 -0
- data/rails_menu.gemspec +21 -0
- data/test/controller_helper_test.rb +48 -0
- data/test/element_test.rb +13 -0
- data/test/set_test.rb +39 -0
- data/test/support/controllers.rb +6 -0
- data/test/test_helper.rb +12 -0
- data/test/view_helper_test.rb +38 -0
- metadata +88 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Rails Menu
|
|
2
|
+
|
|
3
|
+
This small app let you create menu in your app and seamlessly generate views for it later.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
In Gemfile
|
|
8
|
+
|
|
9
|
+
``` ruby
|
|
10
|
+
gem 'rails_menu'
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
And install bundle
|
|
14
|
+
|
|
15
|
+
``` bash
|
|
16
|
+
bundle install
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Setting up menu
|
|
20
|
+
|
|
21
|
+
Anywhere in your app add code like that:
|
|
22
|
+
|
|
23
|
+
``` ruby
|
|
24
|
+
RailsMenu::Set.new('default', [
|
|
25
|
+
[:home, root_path],
|
|
26
|
+
[:settings, settings_path]
|
|
27
|
+
])
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
This will create basic menu that will be accessible later. You can also split this to several independent lines:
|
|
31
|
+
|
|
32
|
+
``` ruby
|
|
33
|
+
menu = RailsMenu::Set.new
|
|
34
|
+
menu.add(:home, root_path)
|
|
35
|
+
menu.add(:settings, root_path)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
and even specify custom options:
|
|
39
|
+
|
|
40
|
+
``` ruby
|
|
41
|
+
menu = RailsMenu::Set.new
|
|
42
|
+
menu.add(:home, root_path, :label => "Homepage")
|
|
43
|
+
menu.add(:settings, root_path, :label => "My Settings")
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Configuring which menu is currently active
|
|
47
|
+
|
|
48
|
+
In your controller you can use method "set_meny" to inform RailsMenu that you can set one of menus to default. Menu id is first parameter that was provided on creating menu.
|
|
49
|
+
|
|
50
|
+
``` ruby
|
|
51
|
+
class Settings < ApplicationController
|
|
52
|
+
set_menu :settings
|
|
53
|
+
end
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
You can also add any options that are acceptable by before_filter:
|
|
57
|
+
|
|
58
|
+
``` ruby
|
|
59
|
+
class Settings < ApplicationController
|
|
60
|
+
set_menu :settings, :except => :some_action
|
|
61
|
+
end
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
If you think that it's easier to provide current menu directly in action then you are free to do so:
|
|
65
|
+
|
|
66
|
+
``` ruby
|
|
67
|
+
class Settings < ApplicationController
|
|
68
|
+
def index
|
|
69
|
+
set_menu :settings
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Displaying menu
|
|
75
|
+
|
|
76
|
+
In you view you can call helper "menu" to receive table of active menus. Each element will have following elements:
|
|
77
|
+
|
|
78
|
+
- id - this is id set as first argument on creating menu. Usually needed only internal
|
|
79
|
+
- url - url provided to menu
|
|
80
|
+
- options - hash that was passed as last argument on creation
|
|
81
|
+
- active - true or false depending on current set menu
|
|
82
|
+
|
|
83
|
+
``` erb
|
|
84
|
+
<p>My menu:</p>
|
|
85
|
+
<ul>
|
|
86
|
+
<% menu.each do |menu_element| %>
|
|
87
|
+
<li id="menu-<%= menu_element.id %>" class="<%= menu.active ? 'active' : nil %>">
|
|
88
|
+
<%= link_to menu_element.options[:label], menu_element.url %>
|
|
89
|
+
</li>
|
|
90
|
+
<% end %>
|
|
91
|
+
</ul>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Creating multiple different menus
|
|
95
|
+
|
|
96
|
+
Both RailsMenu::Set.new and menu helper can receive menu name as first parameter. At defualt it's set to "default", but if you want to create multiple menus then you should provide different names. Example:
|
|
97
|
+
|
|
98
|
+
``` ruby
|
|
99
|
+
menu = RailsMenu::Set.new('admin')
|
|
100
|
+
menu.add(:home, root_path, :label => "Homepage")
|
|
101
|
+
menu.add(:users, users_path, :label => "Users")
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
``` erb
|
|
105
|
+
<% menu('admin').each do |menu_element| %>
|
|
106
|
+
...
|
|
107
|
+
<% end %>
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## License
|
|
111
|
+
|
|
112
|
+
(The MIT License)
|
|
113
|
+
|
|
114
|
+
Copyright (c) 2011 Bernard Potocki
|
|
115
|
+
|
|
116
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
117
|
+
|
|
118
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
119
|
+
|
|
120
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'bundler'
|
|
2
|
+
Bundler::GemHelper.install_tasks
|
|
3
|
+
|
|
4
|
+
require 'rake'
|
|
5
|
+
require 'rake/testtask'
|
|
6
|
+
require 'rake/rdoctask'
|
|
7
|
+
|
|
8
|
+
desc 'Default: run unit tests.'
|
|
9
|
+
task :default => :test
|
|
10
|
+
|
|
11
|
+
desc 'Test the semantic_menu plugin.'
|
|
12
|
+
Rake::TestTask.new(:test) do |t|
|
|
13
|
+
t.libs << 'lib'
|
|
14
|
+
t.pattern = 'test/**/*_test.rb'
|
|
15
|
+
t.verbose = true
|
|
16
|
+
end
|
data/lib/rails_menu.rb
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'action_controller'
|
|
2
|
+
require 'action_view'
|
|
3
|
+
|
|
4
|
+
module RailsMenu
|
|
5
|
+
ROOT = File.expand_path(File.dirname(__FILE__))
|
|
6
|
+
|
|
7
|
+
autoload :Element, "#{ROOT}/rails_menu/element"
|
|
8
|
+
autoload :Set, "#{ROOT}/rails_menu/set"
|
|
9
|
+
|
|
10
|
+
autoload :ControllerHelper, "#{ROOT}/rails_menu/controller_helper"
|
|
11
|
+
autoload :ViewHelper, "#{ROOT}/rails_menu/view_helper"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
ActionController::Base.send(:include, RailsMenu::ControllerHelper)
|
|
15
|
+
ActionView::Base.send(:include, RailsMenu::ViewHelper)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module RailsMenu
|
|
2
|
+
module ControllerHelper
|
|
3
|
+
|
|
4
|
+
def self.included(base)
|
|
5
|
+
base.extend ClassMethods
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def set_menu(id)
|
|
9
|
+
@rails_menu_active = id
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
module ClassMethods
|
|
13
|
+
def set_menu(id, options = {})
|
|
14
|
+
before_filter(options) do
|
|
15
|
+
set_menu id
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module RailsMenu
|
|
2
|
+
class Set
|
|
3
|
+
|
|
4
|
+
class << self
|
|
5
|
+
def list
|
|
6
|
+
@list ||= {}
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def [](list_name)
|
|
10
|
+
list[list_name]
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
attr_accessor :name
|
|
15
|
+
|
|
16
|
+
def initialize(name = 'default', element_list = [])
|
|
17
|
+
@name = name
|
|
18
|
+
@element_list = []
|
|
19
|
+
element_list.each{ |elem| self.add(*elem) }
|
|
20
|
+
|
|
21
|
+
self.class.list[name] = self
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def add(id, url = '', options = {})
|
|
25
|
+
element = Element.new(id.to_s, url, options)
|
|
26
|
+
@element_list << element
|
|
27
|
+
element
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def elements
|
|
31
|
+
@element_list
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module RailsMenu
|
|
2
|
+
module ViewHelper
|
|
3
|
+
|
|
4
|
+
def menu(set_name = 'default')
|
|
5
|
+
set = RailsMenu::Set[set_name]
|
|
6
|
+
elements = set.nil? ? [] : set.elements
|
|
7
|
+
elements.each do |elem|
|
|
8
|
+
elem.active = (@rails_menu_active.to_s == elem.id ? true : false)
|
|
9
|
+
end
|
|
10
|
+
elements
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end
|
|
14
|
+
end
|
data/rails_menu.gemspec
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
|
3
|
+
require "rails_menu/version"
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |s|
|
|
6
|
+
s.name = "rails_menu"
|
|
7
|
+
s.version = RailsMenu::VERSION
|
|
8
|
+
s.platform = Gem::Platform::RUBY
|
|
9
|
+
s.authors = ["Bernard Potocki"]
|
|
10
|
+
s.email = ["bernard.potocki@imanel.org"]
|
|
11
|
+
s.homepage = ""
|
|
12
|
+
s.summary = %q{Simple menu generator for Ruby on Rails}
|
|
13
|
+
s.description = %q{Simple menu generator for Ruby on Rails}
|
|
14
|
+
|
|
15
|
+
s.add_dependency 'actionpack'
|
|
16
|
+
|
|
17
|
+
s.files = `git ls-files`.split("\n")
|
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
20
|
+
s.require_paths = ["lib"]
|
|
21
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require './test/test_helper'
|
|
2
|
+
|
|
3
|
+
class ActiveSupport::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@routes = RailsMenu::Routes
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
class BooksController < ApplicationController
|
|
10
|
+
set_menu :books
|
|
11
|
+
def index; end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class SettingsController < ApplicationController
|
|
15
|
+
set_menu :settings, :only => :index
|
|
16
|
+
|
|
17
|
+
def index; end
|
|
18
|
+
|
|
19
|
+
def other; end
|
|
20
|
+
|
|
21
|
+
def notifications
|
|
22
|
+
set_menu :notification
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class BooksControllerTest < ActionController::TestCase
|
|
27
|
+
test "assign global" do
|
|
28
|
+
get :index
|
|
29
|
+
assert_equal(:books, assigns(:rails_menu_active))
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class SettingsControllerTest < ActionController::TestCase
|
|
34
|
+
test "assign specific action" do
|
|
35
|
+
get :index
|
|
36
|
+
assert_equal(:settings, assigns(:rails_menu_active))
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
test "ignore specific action" do
|
|
40
|
+
get :other
|
|
41
|
+
assert_equal(nil, assigns(:rails_menu_active))
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
test "override specific action" do
|
|
45
|
+
get :notifications
|
|
46
|
+
assert_equal(:notification, assigns(:rails_menu_active))
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require './test/test_helper'
|
|
2
|
+
|
|
3
|
+
class ElementTest < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_initialization
|
|
6
|
+
elem = RailsMenu::Element.new('my_id', 'my_url', :my => 'hash')
|
|
7
|
+
assert_equal 'my_id', elem.id
|
|
8
|
+
assert_equal 'my_url', elem.url
|
|
9
|
+
assert_equal({:my => 'hash'}, elem.options)
|
|
10
|
+
assert_equal false, elem.active
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end
|
data/test/set_test.rb
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require './test/test_helper'
|
|
2
|
+
|
|
3
|
+
class SetTest < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def teardown
|
|
6
|
+
RailsMenu::Set.list.keys.each { |key| RailsMenu::Set.list.delete(key) }
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def test_empty_list
|
|
10
|
+
assert_equal RailsMenu::Set.list, {}
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_adding_default
|
|
14
|
+
set = RailsMenu::Set.new
|
|
15
|
+
assert_equal RailsMenu::Set, set.class
|
|
16
|
+
assert_equal 'default', set.name
|
|
17
|
+
assert_equal [], set.elements
|
|
18
|
+
assert_equal set, RailsMenu::Set['default']
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_adding_custom
|
|
22
|
+
set = RailsMenu::Set.new('my_name', [
|
|
23
|
+
['first', '/first'],
|
|
24
|
+
['second', '/second']
|
|
25
|
+
])
|
|
26
|
+
assert_equal RailsMenu::Set, set.class
|
|
27
|
+
assert_equal 'my_name', set.name
|
|
28
|
+
assert_not_equal [], set.elements
|
|
29
|
+
assert_equal set, RailsMenu::Set['my_name']
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_adding_element
|
|
33
|
+
set = RailsMenu::Set.new('default')
|
|
34
|
+
assert_equal [], set.elements
|
|
35
|
+
element = set.add('my', 'url')
|
|
36
|
+
assert_equal [element], set.elements
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require 'test/unit'
|
|
2
|
+
require 'rails_menu'
|
|
3
|
+
|
|
4
|
+
Dir["#{File.dirname(__FILE__)}/support/*.rb"].each { |f| require f }
|
|
5
|
+
|
|
6
|
+
RailsMenu::Routes = ActionDispatch::Routing::RouteSet.new
|
|
7
|
+
RailsMenu::Routes.draw do
|
|
8
|
+
match ':controller(/:action(/:id(.:format)))'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class ApplicationController < ActionController::Base; end
|
|
12
|
+
ActionController::Base.send :include, RailsMenu::Routes.url_helpers
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require "./test/test_helper"
|
|
2
|
+
|
|
3
|
+
class ViewHelperTest < ActionView::TestCase
|
|
4
|
+
tests RailsMenu::ViewHelper
|
|
5
|
+
|
|
6
|
+
attr_accessor :controller, :request
|
|
7
|
+
|
|
8
|
+
def setup
|
|
9
|
+
@menu = RailsMenu::Set.new
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def teardown
|
|
13
|
+
RailsMenu::Set.list.keys.each { |key| RailsMenu::Set.list.delete(key) }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
test "default menu is empty" do
|
|
17
|
+
assert_equal [], menu("default")
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
test "unknown menu is empty" do
|
|
21
|
+
assert_equal [], menu("unknown")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
test "access elements in menu" do
|
|
25
|
+
element = @menu.add("my", "url", :my => "options")
|
|
26
|
+
assert_equal [element], menu("default")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
test "current element should be active" do
|
|
30
|
+
@rails_menu_active = "second"
|
|
31
|
+
first = @menu.add("first")
|
|
32
|
+
second = @menu.add("second")
|
|
33
|
+
assert_equal [first, second], menu("default")
|
|
34
|
+
assert_equal false, first.active
|
|
35
|
+
assert_equal true, second.active
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: rails_menu
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
prerelease:
|
|
5
|
+
version: 0.1.0
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Bernard Potocki
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
|
|
13
|
+
date: 2011-04-22 00:00:00 +02:00
|
|
14
|
+
default_executable:
|
|
15
|
+
dependencies:
|
|
16
|
+
- !ruby/object:Gem::Dependency
|
|
17
|
+
name: actionpack
|
|
18
|
+
prerelease: false
|
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
|
20
|
+
none: false
|
|
21
|
+
requirements:
|
|
22
|
+
- - ">="
|
|
23
|
+
- !ruby/object:Gem::Version
|
|
24
|
+
version: "0"
|
|
25
|
+
type: :runtime
|
|
26
|
+
version_requirements: *id001
|
|
27
|
+
description: Simple menu generator for Ruby on Rails
|
|
28
|
+
email:
|
|
29
|
+
- bernard.potocki@imanel.org
|
|
30
|
+
executables: []
|
|
31
|
+
|
|
32
|
+
extensions: []
|
|
33
|
+
|
|
34
|
+
extra_rdoc_files: []
|
|
35
|
+
|
|
36
|
+
files:
|
|
37
|
+
- .gitignore
|
|
38
|
+
- Gemfile
|
|
39
|
+
- README.md
|
|
40
|
+
- Rakefile
|
|
41
|
+
- lib/rails_menu.rb
|
|
42
|
+
- lib/rails_menu/controller_helper.rb
|
|
43
|
+
- lib/rails_menu/element.rb
|
|
44
|
+
- lib/rails_menu/set.rb
|
|
45
|
+
- lib/rails_menu/version.rb
|
|
46
|
+
- lib/rails_menu/view_helper.rb
|
|
47
|
+
- rails_menu.gemspec
|
|
48
|
+
- test/controller_helper_test.rb
|
|
49
|
+
- test/element_test.rb
|
|
50
|
+
- test/set_test.rb
|
|
51
|
+
- test/support/controllers.rb
|
|
52
|
+
- test/test_helper.rb
|
|
53
|
+
- test/view_helper_test.rb
|
|
54
|
+
has_rdoc: true
|
|
55
|
+
homepage: ""
|
|
56
|
+
licenses: []
|
|
57
|
+
|
|
58
|
+
post_install_message:
|
|
59
|
+
rdoc_options: []
|
|
60
|
+
|
|
61
|
+
require_paths:
|
|
62
|
+
- lib
|
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
64
|
+
none: false
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: "0"
|
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
70
|
+
none: false
|
|
71
|
+
requirements:
|
|
72
|
+
- - ">="
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: "0"
|
|
75
|
+
requirements: []
|
|
76
|
+
|
|
77
|
+
rubyforge_project:
|
|
78
|
+
rubygems_version: 1.6.1
|
|
79
|
+
signing_key:
|
|
80
|
+
specification_version: 3
|
|
81
|
+
summary: Simple menu generator for Ruby on Rails
|
|
82
|
+
test_files:
|
|
83
|
+
- test/controller_helper_test.rb
|
|
84
|
+
- test/element_test.rb
|
|
85
|
+
- test/set_test.rb
|
|
86
|
+
- test/support/controllers.rb
|
|
87
|
+
- test/test_helper.rb
|
|
88
|
+
- test/view_helper_test.rb
|