youthtree-controller-ext 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/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +27 -0
- data/README.md +30 -0
- data/Rakefile +56 -0
- data/lib/youth_tree/controller_ext.rb +70 -0
- data/lib/youth_tree/controller_ext/almost_happy_ext.rb +9 -0
- data/lib/youth_tree/controller_ext/authlogic_helpers_ext.rb +49 -0
- data/lib/youth_tree/controller_ext/authorization_helpers_ext.rb +26 -0
- data/lib/youth_tree/controller_ext/pseudocephalopod_resource_ext.rb +9 -0
- data/lib/youth_tree/controller_ext/ssl_requirement_ext.rb +25 -0
- data/lib/youth_tree/controller_ext/title_estuary_ext.rb +33 -0
- data/lib/youth_tree/controller_ext/translation_ext.rb +24 -0
- data/lib/youthtree-controller-ext.rb +1 -0
- data/youthtree-controller-ext.gemspec +55 -0
- metadata +98 -0
data/.document
ADDED
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
Copyright (c) 2010, Youth Tree
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
5
|
+
modification, are permitted provided that the following conditions are met:
|
6
|
+
1. Redistributions of source code must retain the above copyright
|
7
|
+
notice, this list of conditions and the following disclaimer.
|
8
|
+
2. Redistributions in binary form must reproduce the above copyright
|
9
|
+
notice, this list of conditions and the following disclaimer in the
|
10
|
+
documentation and/or other materials provided with the distribution.
|
11
|
+
3. All advertising materials mentioning features or use of this software
|
12
|
+
must display the following acknowledgement:
|
13
|
+
This product includes software developed by the Youth Tree.
|
14
|
+
4. Neither the name of the Youth Tree nor the
|
15
|
+
names of its contributors may be used to endorse or promote products
|
16
|
+
derived from this software without specific prior written permission.
|
17
|
+
|
18
|
+
THIS SOFTWARE IS PROVIDED BY YOUTH TREE ''AS IS'' AND ANY
|
19
|
+
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
20
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
21
|
+
DISCLAIMED. IN NO EVENT SHALL YOUTH TREE BE LIABLE FOR ANY
|
22
|
+
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
23
|
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
24
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
25
|
+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
26
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
27
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# YouthTree Controller Ext #
|
2
|
+
|
3
|
+
## Installation ##
|
4
|
+
|
5
|
+
1. Add "gem 'youthtree-controller-ext' to your Gemfile"
|
6
|
+
2. Run bundle install
|
7
|
+
|
8
|
+
## Usage ##
|
9
|
+
|
10
|
+
Use `use_controller_ext` / `use_controller_exts` on a class with one of the named controller extensions.
|
11
|
+
By default, it provides:
|
12
|
+
|
13
|
+
* `:almost_happy` - InheritedResources collection tweak
|
14
|
+
* `:authlogic_helpers` - Base authlogic helpers
|
15
|
+
* `:pseudocephalopod_resource` - use slugged find in InheritedResource
|
16
|
+
* `:ssl_requirement` - Tie in with `youthtree-settings` to make it easier to do ssl in certain environments.
|
17
|
+
* `:title_estuary` - adds controller methods for `title_estuary`.
|
18
|
+
* `:translation` - adds support for `tu` and `tf` for flash and ui methods.
|
19
|
+
|
20
|
+
## Note on Patches/Pull Requests ##
|
21
|
+
|
22
|
+
1. Fork the project.
|
23
|
+
2. Make your feature addition or bug fix.
|
24
|
+
3. Add tests for it. This is important so I don't break it in a future version unintentionally.
|
25
|
+
4. Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
26
|
+
5. Send me a pull request. Bonus points for topic branches.
|
27
|
+
|
28
|
+
## Copyright ##
|
29
|
+
|
30
|
+
Copyright (c) 2010 Youth Tree. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
require 'active_support'
|
5
|
+
require 'active_support/core_ext'
|
6
|
+
require File.expand_path('lib/youth_tree/controller_ext', File.dirname(__FILE__))
|
7
|
+
|
8
|
+
begin
|
9
|
+
require 'jeweler'
|
10
|
+
Jeweler::Tasks.new do |gem|
|
11
|
+
gem.name = "youthtree-controller-ext"
|
12
|
+
gem.summary = "Simple controller mixin support for rails 3. Including some common extensions."
|
13
|
+
gem.description = "Provides uses_controller_extension and a set of common mixins."
|
14
|
+
gem.email = "sutto@sutto.net"
|
15
|
+
gem.homepage = "http://github.com/YouthTree/youthtree-controller-ext"
|
16
|
+
gem.authors = ["Darcy Laycock"]
|
17
|
+
gem.version = YouthTree::ControllerExt::VERSION
|
18
|
+
gem.add_dependency "activesupport", ">= 3.0.0.beta4"
|
19
|
+
end
|
20
|
+
Jeweler::GemcutterTasks.new
|
21
|
+
rescue LoadError
|
22
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
23
|
+
end
|
24
|
+
|
25
|
+
require 'rake/testtask'
|
26
|
+
Rake::TestTask.new(:test) do |test|
|
27
|
+
test.libs << 'lib' << 'test'
|
28
|
+
test.pattern = 'test/**/*_test.rb'
|
29
|
+
test.verbose = true
|
30
|
+
end
|
31
|
+
|
32
|
+
begin
|
33
|
+
require 'rcov/rcovtask'
|
34
|
+
Rcov::RcovTask.new do |test|
|
35
|
+
test.libs << 'test'
|
36
|
+
test.pattern = 'test/**/*_test.rb'
|
37
|
+
test.verbose = true
|
38
|
+
end
|
39
|
+
rescue LoadError
|
40
|
+
task :rcov do
|
41
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
task :test => :check_dependencies
|
46
|
+
|
47
|
+
task :default => :test
|
48
|
+
|
49
|
+
require 'rake/rdoctask'
|
50
|
+
Rake::RDocTask.new do |rdoc|
|
51
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
52
|
+
rdoc.rdoc_dir = 'rdoc'
|
53
|
+
rdoc.title = "youthtree-settings #{version}"
|
54
|
+
rdoc.rdoc_files.include('README*')
|
55
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
56
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
|
3
|
+
module YouthTree
|
4
|
+
module ControllerExt
|
5
|
+
|
6
|
+
VERSION = "0.1.0".freeze
|
7
|
+
|
8
|
+
mattr_accessor :known_extensions
|
9
|
+
self.known_extensions ||= {}
|
10
|
+
|
11
|
+
def self.load_default!
|
12
|
+
dir = File.expand_path("controller_ext", File.dirname(__FILE__))
|
13
|
+
Dir[File.join(dir, "*.rb")].each do |f|
|
14
|
+
require f
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# Lookup controller extensions.
|
19
|
+
def self.[](name)
|
20
|
+
name = name.to_sym
|
21
|
+
if known_extensions.has_key?(name)
|
22
|
+
return known_extensions[name]
|
23
|
+
else
|
24
|
+
constant_name = "#{name.to_s.classify}Ext"
|
25
|
+
[nil, "YouthTree::ControllerExt", "YouthTree"].each do |namespace|
|
26
|
+
full = [namespace, constant_name].compact.join("::")
|
27
|
+
begin
|
28
|
+
constant = full.constantize
|
29
|
+
known_extensions[name] = constant
|
30
|
+
return constant
|
31
|
+
rescue NameError
|
32
|
+
end
|
33
|
+
end
|
34
|
+
nil
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.for(name, &blk)
|
39
|
+
constant_name = "#{name.to_s.classify}Ext"
|
40
|
+
const_set(constant_name, Module.new) unless const_defined?(constant_name)
|
41
|
+
const_get(constant_name).tap do |m|
|
42
|
+
m.module_eval(&blk) if blk.present?
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
module ClassMethods
|
47
|
+
|
48
|
+
def use_controller_exts(*args)
|
49
|
+
args.each do |k|
|
50
|
+
mod = YouthTree::ControllerExt[k]
|
51
|
+
include mod if mod.present?
|
52
|
+
end
|
53
|
+
end
|
54
|
+
alias uses_controller_exts use_controller_exts
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
# Include the mixin in action controller.
|
59
|
+
ActionController::Base.extend(ClassMethods) if defined?(ActionController::Base)
|
60
|
+
|
61
|
+
if defined?(Rails::Railtie)
|
62
|
+
class Railtie < Rails::Railtie
|
63
|
+
initializer "youthtree.controller-ext" do
|
64
|
+
YouthTree::ControllerExt.load_default!
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
YouthTree::ControllerExt.for(:authlogic_helpers) do
|
2
|
+
|
3
|
+
def self.included(parent)
|
4
|
+
parent.class_eval do
|
5
|
+
helper_method :current_user, :current_user_session, :logged_in?
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
protected
|
10
|
+
|
11
|
+
def logged_in?
|
12
|
+
current_user.present?
|
13
|
+
end
|
14
|
+
|
15
|
+
def current_user_session
|
16
|
+
@current_user_session ||= UserSession.find
|
17
|
+
end
|
18
|
+
|
19
|
+
def current_user
|
20
|
+
@current_user ||= current_user_session && current_user_session.record
|
21
|
+
end
|
22
|
+
|
23
|
+
def require_user
|
24
|
+
unless logged_in?
|
25
|
+
store_location
|
26
|
+
redirect_to sign_in_path, :notice => "To view this page, you must first log in."
|
27
|
+
return false
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def require_no_user
|
32
|
+
if logged_in?
|
33
|
+
store_location
|
34
|
+
redirect_to users_path(:current), :notice => "You must be logged out to access this page"
|
35
|
+
return false
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def store_location
|
40
|
+
session[:return_to] = request.request_uri if request.get?
|
41
|
+
end
|
42
|
+
|
43
|
+
def redirect_back_or_default(default, options = {})
|
44
|
+
redirect_to(session[:return_to] || default, options)
|
45
|
+
session[:return_to] = nil
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
YouthTree::ControllerExt.for(:authorization_helpers) do
|
2
|
+
|
3
|
+
def self.included(klass)
|
4
|
+
klass.class_eval do
|
5
|
+
helper_method :can?
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
protected
|
10
|
+
|
11
|
+
def can?(action, object)
|
12
|
+
logged_in? && current_user.can?(action, object)
|
13
|
+
end
|
14
|
+
|
15
|
+
def unauthorized!(message = nil)
|
16
|
+
respond_to do |format|
|
17
|
+
format.html do
|
18
|
+
message = ["I'm sorry, you don't have the correct permissions to do that", message].compact.join(" - ")
|
19
|
+
redirect_to :root, :alert => message
|
20
|
+
end
|
21
|
+
format.json { head :forbidden }
|
22
|
+
format.xml { head :forbidden }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
YouthTree::ControllerExt.for(:ssl_requirement) do
|
2
|
+
|
3
|
+
def self.included(parent)
|
4
|
+
if defined?(Settings)
|
5
|
+
(class << parent; self; end).class_eval do
|
6
|
+
include ClassMethods
|
7
|
+
alias_method_chain :ssl_required, :env_check
|
8
|
+
alias_method_chain :ssl_allowed, :env_check
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
module ClassMethods
|
14
|
+
|
15
|
+
def ssl_required_with_env_check(*actions)
|
16
|
+
ssl_required_without_env_check(*actions) if Settings.ssl?
|
17
|
+
end
|
18
|
+
|
19
|
+
def ssl_allowed_with_env_check(*actions)
|
20
|
+
ssl_allowed_without_env_check(*actions) if Settings.ssl?
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
YouthTree::ControllerExt.for(:title_estuary) do
|
2
|
+
|
3
|
+
def self.included(p)
|
4
|
+
p.helper_method(:page_title_is, :hide_title?)
|
5
|
+
end
|
6
|
+
|
7
|
+
protected
|
8
|
+
|
9
|
+
def hide_title?
|
10
|
+
instance_variable_defined?(:@hide_title) && @hide_title
|
11
|
+
end
|
12
|
+
|
13
|
+
def hide_title!
|
14
|
+
@hide_title = true
|
15
|
+
end
|
16
|
+
|
17
|
+
def show_title!
|
18
|
+
@hide_title = false
|
19
|
+
end
|
20
|
+
|
21
|
+
def page_title_is(title)
|
22
|
+
self.page_title = title
|
23
|
+
end
|
24
|
+
|
25
|
+
def interpolation_options
|
26
|
+
@__interpolation_options ||= {}
|
27
|
+
end
|
28
|
+
|
29
|
+
def add_title_variables!(mapping = {})
|
30
|
+
interpolation_options.merge!(mapping)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
YouthTree::ControllerExt.for(:translation) do
|
2
|
+
|
3
|
+
def self.included(parent)
|
4
|
+
parent.send :include, InstanceMethods
|
5
|
+
parent.send :helper_method ,:tf, :tu
|
6
|
+
end
|
7
|
+
|
8
|
+
|
9
|
+
module InstanceMethods
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
def tf(key)
|
14
|
+
I18n.t(key.to_sym, :scope => :flash)
|
15
|
+
end
|
16
|
+
|
17
|
+
def tu(name, options = {})
|
18
|
+
scope = [:ui, options.delete(:scope)].compact.join(".").to_sym
|
19
|
+
I18n.t(name, options.merge(:scope => scope))
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'youth_tree/controller_ext'
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{youthtree-controller-ext}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Darcy Laycock"]
|
12
|
+
s.date = %q{2010-07-08}
|
13
|
+
s.description = %q{Provides uses_controller_extension and a set of common mixins.}
|
14
|
+
s.email = %q{sutto@sutto.net}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.md"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".gitignore",
|
22
|
+
"LICENSE",
|
23
|
+
"README.md",
|
24
|
+
"Rakefile",
|
25
|
+
"lib/youth_tree/controller_ext.rb",
|
26
|
+
"lib/youth_tree/controller_ext/almost_happy_ext.rb",
|
27
|
+
"lib/youth_tree/controller_ext/authlogic_helpers_ext.rb",
|
28
|
+
"lib/youth_tree/controller_ext/authorization_helpers_ext.rb",
|
29
|
+
"lib/youth_tree/controller_ext/pseudocephalopod_resource_ext.rb",
|
30
|
+
"lib/youth_tree/controller_ext/ssl_requirement_ext.rb",
|
31
|
+
"lib/youth_tree/controller_ext/title_estuary_ext.rb",
|
32
|
+
"lib/youth_tree/controller_ext/translation_ext.rb",
|
33
|
+
"lib/youthtree-controller-ext.rb",
|
34
|
+
"youthtree-controller-ext.gemspec"
|
35
|
+
]
|
36
|
+
s.homepage = %q{http://github.com/YouthTree/youthtree-controller-ext}
|
37
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
38
|
+
s.require_paths = ["lib"]
|
39
|
+
s.rubygems_version = %q{1.3.7}
|
40
|
+
s.summary = %q{Simple controller mixin support for rails 3. Including some common extensions.}
|
41
|
+
|
42
|
+
if s.respond_to? :specification_version then
|
43
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
44
|
+
s.specification_version = 3
|
45
|
+
|
46
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
47
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 3.0.0.beta4"])
|
48
|
+
else
|
49
|
+
s.add_dependency(%q<activesupport>, [">= 3.0.0.beta4"])
|
50
|
+
end
|
51
|
+
else
|
52
|
+
s.add_dependency(%q<activesupport>, [">= 3.0.0.beta4"])
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
metadata
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: youthtree-controller-ext
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Darcy Laycock
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-07-08 00:00:00 +08:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: activesupport
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: -1848230024
|
30
|
+
segments:
|
31
|
+
- 3
|
32
|
+
- 0
|
33
|
+
- 0
|
34
|
+
- beta4
|
35
|
+
version: 3.0.0.beta4
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id001
|
38
|
+
description: Provides uses_controller_extension and a set of common mixins.
|
39
|
+
email: sutto@sutto.net
|
40
|
+
executables: []
|
41
|
+
|
42
|
+
extensions: []
|
43
|
+
|
44
|
+
extra_rdoc_files:
|
45
|
+
- LICENSE
|
46
|
+
- README.md
|
47
|
+
files:
|
48
|
+
- .document
|
49
|
+
- .gitignore
|
50
|
+
- LICENSE
|
51
|
+
- README.md
|
52
|
+
- Rakefile
|
53
|
+
- lib/youth_tree/controller_ext.rb
|
54
|
+
- lib/youth_tree/controller_ext/almost_happy_ext.rb
|
55
|
+
- lib/youth_tree/controller_ext/authlogic_helpers_ext.rb
|
56
|
+
- lib/youth_tree/controller_ext/authorization_helpers_ext.rb
|
57
|
+
- lib/youth_tree/controller_ext/pseudocephalopod_resource_ext.rb
|
58
|
+
- lib/youth_tree/controller_ext/ssl_requirement_ext.rb
|
59
|
+
- lib/youth_tree/controller_ext/title_estuary_ext.rb
|
60
|
+
- lib/youth_tree/controller_ext/translation_ext.rb
|
61
|
+
- lib/youthtree-controller-ext.rb
|
62
|
+
- youthtree-controller-ext.gemspec
|
63
|
+
has_rdoc: true
|
64
|
+
homepage: http://github.com/YouthTree/youthtree-controller-ext
|
65
|
+
licenses: []
|
66
|
+
|
67
|
+
post_install_message:
|
68
|
+
rdoc_options:
|
69
|
+
- --charset=UTF-8
|
70
|
+
require_paths:
|
71
|
+
- lib
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
hash: 3
|
78
|
+
segments:
|
79
|
+
- 0
|
80
|
+
version: "0"
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
hash: 3
|
87
|
+
segments:
|
88
|
+
- 0
|
89
|
+
version: "0"
|
90
|
+
requirements: []
|
91
|
+
|
92
|
+
rubyforge_project:
|
93
|
+
rubygems_version: 1.3.7
|
94
|
+
signing_key:
|
95
|
+
specification_version: 3
|
96
|
+
summary: Simple controller mixin support for rails 3. Including some common extensions.
|
97
|
+
test_files: []
|
98
|
+
|