merb-action-args 1.0.15 → 1.1.0.pre
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/Rakefile +57 -66
- data/lib/merb-action-args/abstract_controller.rb +1 -1
- data/lib/merb-action-args/get_args.rb +6 -91
- data/lib/merb-action-args/jruby_args.rb +5 -15
- data/lib/merb-action-args/mri_args.rb +88 -0
- data/lib/merb-action-args/version.rb +5 -0
- data/lib/merb-action-args/vm_args.rb +27 -0
- data/spec/action_args_spec.rb +15 -3
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +13 -5
- metadata +27 -13
data/Rakefile
CHANGED
@@ -1,75 +1,66 @@
|
|
1
|
-
require
|
2
|
-
|
3
|
-
##############################################################################
|
4
|
-
# Package && release
|
5
|
-
##############################################################################
|
6
|
-
RUBY_FORGE_PROJECT = "merb"
|
7
|
-
PROJECT_URL = "http://merbivore.com"
|
8
|
-
PROJECT_SUMMARY = "Merb plugin that provides support for ActionArgs"
|
9
|
-
PROJECT_DESCRIPTION = PROJECT_SUMMARY
|
10
|
-
|
11
|
-
AUTHOR = "Yehuda Katz"
|
12
|
-
EMAIL = "ykatz@engineyard.com"
|
13
|
-
|
14
|
-
GEM_NAME = "merb-action-args"
|
15
|
-
PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
|
16
|
-
GEM_VERSION = Merb::VERSION + PKG_BUILD
|
17
|
-
|
18
|
-
RELEASE_NAME = "REL #{GEM_VERSION}"
|
19
|
-
|
20
|
-
require "extlib/tasks/release"
|
21
|
-
|
22
|
-
spec = Gem::Specification.new do |s|
|
23
|
-
s.rubyforge_project = RUBY_FORGE_PROJECT
|
24
|
-
s.name = GEM_NAME
|
25
|
-
s.version = GEM_VERSION
|
26
|
-
s.platform = Gem::Platform::RUBY
|
27
|
-
s.has_rdoc = true
|
28
|
-
s.extra_rdoc_files = ["README", "LICENSE", 'TODO']
|
29
|
-
s.summary = PROJECT_SUMMARY
|
30
|
-
s.description = PROJECT_DESCRIPTION
|
31
|
-
s.author = AUTHOR
|
32
|
-
s.email = EMAIL
|
33
|
-
s.homepage = PROJECT_URL
|
34
|
-
s.add_dependency('merb-core', "~> #{Merb::VERSION}")
|
35
|
-
s.add_dependency('ruby2ruby', '>= 1.1.9')
|
36
|
-
s.add_dependency('ParseTree', '>= 2.1.1')
|
37
|
-
s.require_path = 'lib'
|
38
|
-
s.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{lib,spec}/**/*")
|
39
|
-
end
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
40
3
|
|
41
|
-
|
42
|
-
|
43
|
-
end
|
4
|
+
# Assume a typical dev checkout to fetch the current merb-core version
|
5
|
+
require File.expand_path('../../merb-core/lib/merb-core/version', __FILE__)
|
44
6
|
|
45
|
-
|
46
|
-
|
47
|
-
Merb::RakeHelper.install(GEM_NAME, :version => GEM_VERSION)
|
48
|
-
end
|
7
|
+
# Load this library's version information
|
8
|
+
require File.expand_path('../lib/merb-action-args/version', __FILE__)
|
49
9
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
10
|
+
begin
|
11
|
+
|
12
|
+
gem 'jeweler', '~> 1.4'
|
13
|
+
require 'jeweler'
|
14
|
+
|
15
|
+
Jeweler::Tasks.new do |gemspec|
|
16
|
+
|
17
|
+
gemspec.version = Merb::ActionArgs::VERSION
|
18
|
+
|
19
|
+
gemspec.name = "merb-action-args"
|
20
|
+
gemspec.description = "Merb plugin that supports controller action arguments"
|
21
|
+
gemspec.summary = "Merb plugin that provides support for named parameters in your controller actions"
|
22
|
+
|
23
|
+
gemspec.authors = [ "Yehuda Katz" ]
|
24
|
+
gemspec.email = "ykatz@engineyard.com"
|
25
|
+
gemspec.homepage = "http://merbivore.com/"
|
26
|
+
|
27
|
+
gemspec.files = %w(LICENSE Rakefile README TODO) + Dir['{lib,spec}/**/*']
|
28
|
+
|
29
|
+
# Runtime dependencies
|
30
|
+
gemspec.add_dependency 'merb-core', "~> #{Merb::VERSION}"
|
31
|
+
gemspec.add_dependency 'ruby2ruby', '>= 1.1.9'
|
32
|
+
gemspec.add_dependency 'ParseTree', '>= 2.1.1'
|
33
|
+
|
34
|
+
# Development dependencies
|
35
|
+
gemspec.add_development_dependency 'rspec', '>= 1.2.9'
|
54
36
|
|
55
|
-
desc "Create a gemspec file"
|
56
|
-
task :gemspec do
|
57
|
-
File.open("#{GEM_NAME}.gemspec", "w") do |file|
|
58
|
-
file.puts spec.to_ruby
|
59
37
|
end
|
38
|
+
|
39
|
+
Jeweler::GemcutterTasks.new
|
40
|
+
|
41
|
+
rescue LoadError
|
42
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
60
43
|
end
|
61
44
|
|
62
|
-
|
63
|
-
Spec::Rake::SpecTask.new(
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
45
|
+
require 'spec/rake/spectask'
|
46
|
+
Spec::Rake::SpecTask.new(:spec) do |spec|
|
47
|
+
spec.spec_opts << '--options' << 'spec/spec.opts' if File.exists?('spec/spec.opts')
|
48
|
+
spec.libs << 'lib' << 'spec'
|
49
|
+
spec.spec_files = FileList['spec/**/*_spec.rb']
|
50
|
+
end
|
51
|
+
|
52
|
+
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
53
|
+
spec.libs << 'lib' << 'spec'
|
54
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
55
|
+
spec.rcov = true
|
72
56
|
end
|
73
57
|
|
74
|
-
|
75
|
-
|
58
|
+
task :default => :spec
|
59
|
+
|
60
|
+
require 'rake/rdoctask'
|
61
|
+
Rake::RDocTask.new do |rdoc|
|
62
|
+
rdoc.rdoc_dir = 'rdoc'
|
63
|
+
rdoc.title = "test_gem #{Merb::ActionArgs::VERSION}"
|
64
|
+
rdoc.rdoc_files.include('README*')
|
65
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
66
|
+
end
|
@@ -1,94 +1,9 @@
|
|
1
|
-
|
2
|
-
require 'parse_tree'
|
3
|
-
require 'ruby2ruby'
|
4
|
-
|
5
|
-
class ParseTreeArray < Array
|
6
|
-
R2R = Object.const_defined?(:Ruby2Ruby) ? Ruby2Ruby : RubyToRuby
|
7
|
-
|
8
|
-
def self.translate(*args)
|
9
|
-
sexp = ParseTree.translate(*args)
|
10
|
-
# ParseTree.translate returns [nil] if called on an inherited method, so walk
|
11
|
-
# up the inheritance chain to find the class that the method was defined in
|
12
|
-
unless sexp.first
|
13
|
-
klass = args.first.ancestors.detect do |klass|
|
14
|
-
klass.public_instance_methods(false).include?(args.last.to_s)
|
15
|
-
end
|
16
|
-
sexp = ParseTree.translate(klass, args.last) if klass
|
17
|
-
end
|
18
|
-
sexp = Unifier.new.process(sexp)
|
19
|
-
self.new(sexp)
|
20
|
-
end
|
21
|
-
|
22
|
-
def deep_array_node(type = nil)
|
23
|
-
each do |node|
|
24
|
-
return ParseTreeArray.new(node) if node.is_a?(Array) && (!type || node[0] == type)
|
25
|
-
next unless node.is_a?(Array)
|
26
|
-
return ParseTreeArray.new(node).deep_array_node(type)
|
27
|
-
end
|
28
|
-
nil
|
29
|
-
end
|
30
|
-
|
31
|
-
def arg_nodes
|
32
|
-
self[1..-1].inject([]) do |sum,item|
|
33
|
-
sum << [item] unless item.is_a?(Array)
|
34
|
-
sum
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def get_args
|
39
|
-
if arg_node = deep_array_node(:args)
|
40
|
-
# method defined with def keyword
|
41
|
-
args = arg_node.arg_nodes
|
42
|
-
default_node = arg_node.deep_array_node(:block)
|
43
|
-
return [args, []] unless default_node
|
44
|
-
else
|
45
|
-
# assuming method defined with Module#define_method
|
46
|
-
return [[],[]]
|
47
|
-
end
|
48
|
-
|
49
|
-
# if it was defined with def, and we found the default_node,
|
50
|
-
# that should bring us back to regularly scheduled programming..
|
51
|
-
lasgns = default_node[1..-1]
|
52
|
-
lasgns.each do |asgn|
|
53
|
-
args.assoc(asgn[1]) << eval(R2R.new.process(asgn[2]))
|
54
|
-
end
|
55
|
-
[args, (default_node[1..-1].map { |asgn| asgn[1] })]
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
59
|
-
|
60
|
-
# Used in mapping controller arguments to the params hash.
|
61
|
-
# NOTE: You must have the 'ruby2ruby' gem installed for this to work.
|
62
|
-
#
|
63
|
-
# ==== Examples
|
64
|
-
# # In PostsController
|
65
|
-
# def show(id) #=> id is the same as params[:id]
|
66
|
-
module GetArgs
|
67
|
-
|
68
|
-
# ==== Returns
|
69
|
-
# Array:: Method arguments and their default values.
|
70
|
-
#
|
71
|
-
# ==== Examples
|
72
|
-
# class Example
|
73
|
-
# def hello(one,two="two",three)
|
74
|
-
# end
|
75
|
-
#
|
76
|
-
# def goodbye
|
77
|
-
# end
|
78
|
-
# end
|
79
|
-
#
|
80
|
-
# Example.instance_method(:hello).get_args
|
81
|
-
# #=> [[:one], [:two, "two"], [:three, "three"]]
|
82
|
-
# Example.instance_method(:goodbye).get_args #=> nil
|
83
|
-
def get_args
|
84
|
-
klass, meth = self.to_s.split(/ /).to_a[1][0..-2].split("#")
|
85
|
-
# Remove stupidity for #<Method: Class(Object)#foo>
|
86
|
-
klass = $` if klass =~ /\(/
|
87
|
-
ParseTreeArray.translate(Object.full_const_get(klass), meth).get_args
|
88
|
-
end
|
89
|
-
end
|
90
|
-
else
|
1
|
+
if RUBY_PLATFORM == "java"
|
91
2
|
require File.dirname(__FILE__) / "jruby_args"
|
3
|
+
elsif RUBY_VERSION < "1.9"
|
4
|
+
require File.dirname(__FILE__) / "mri_args"
|
5
|
+
else
|
6
|
+
require File.dirname(__FILE__) / "vm_args"
|
92
7
|
end
|
93
8
|
|
94
9
|
class UnboundMethod
|
@@ -97,4 +12,4 @@ end
|
|
97
12
|
|
98
13
|
class Method
|
99
14
|
include GetArgs
|
100
|
-
end
|
15
|
+
end
|
@@ -29,12 +29,12 @@ module GetArgs
|
|
29
29
|
|
30
30
|
# required args
|
31
31
|
if (args_node.args && args_node.args.size > 0)
|
32
|
-
required
|
32
|
+
required = args_node.args.child_nodes.map { |arg| [arg.name.to_s.intern] }
|
33
33
|
end
|
34
34
|
|
35
35
|
# optional args
|
36
36
|
if (args_node.opt_args && args_node.opt_args.size > 0)
|
37
|
-
optional
|
37
|
+
optional = args_node.opt_args.child_nodes.map do |arg|
|
38
38
|
name = arg.name.to_s.intern
|
39
39
|
value_node = arg.value_node
|
40
40
|
case value_node
|
@@ -51,17 +51,7 @@ module GetArgs
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
-
|
55
|
-
optional.
|
56
|
-
|
57
|
-
args = [first_args]
|
58
|
-
|
59
|
-
rest = args_node.rest_arg_node
|
60
|
-
args << (rest ? rest.name.to_s.intern : nil)
|
61
|
-
|
62
|
-
block = args_node.block_arg_node
|
63
|
-
args << (block ? block.name.to_s.intern : nil)
|
64
|
-
|
65
|
-
args
|
54
|
+
args = required + optional
|
55
|
+
return [args, optional.map{|name,| name}]
|
66
56
|
end
|
67
|
-
end
|
57
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require 'parse_tree'
|
2
|
+
require 'ruby2ruby'
|
3
|
+
|
4
|
+
class ParseTreeArray < Array
|
5
|
+
R2R = Object.const_defined?(:Ruby2Ruby) ? Ruby2Ruby : RubyToRuby
|
6
|
+
|
7
|
+
def self.translate(*args)
|
8
|
+
sexp = ParseTree.translate(*args)
|
9
|
+
# ParseTree.translate returns [nil] if called on an inherited method, so walk
|
10
|
+
# up the inheritance chain to find the class that the method was defined in
|
11
|
+
unless sexp.first
|
12
|
+
klass = args.first.ancestors.detect do |klass|
|
13
|
+
klass.public_instance_methods(false).include?(args.last.to_s)
|
14
|
+
end
|
15
|
+
sexp = ParseTree.translate(klass, args.last) if klass
|
16
|
+
end
|
17
|
+
sexp = Unifier.new.process(sexp)
|
18
|
+
self.new(sexp)
|
19
|
+
end
|
20
|
+
|
21
|
+
def deep_array_node(type = nil)
|
22
|
+
each do |node|
|
23
|
+
return ParseTreeArray.new(node) if node.is_a?(Array) && (!type || node[0] == type)
|
24
|
+
next unless node.is_a?(Array)
|
25
|
+
return ParseTreeArray.new(node).deep_array_node(type)
|
26
|
+
end
|
27
|
+
nil
|
28
|
+
end
|
29
|
+
|
30
|
+
def arg_nodes
|
31
|
+
self[1..-1].inject([]) do |sum,item|
|
32
|
+
sum << [item] unless item.is_a?(Array)
|
33
|
+
sum
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def get_args
|
38
|
+
if arg_node = deep_array_node(:args)
|
39
|
+
# method defined with def keyword
|
40
|
+
args = arg_node.arg_nodes
|
41
|
+
default_node = arg_node.deep_array_node(:block)
|
42
|
+
return [args, []] unless default_node
|
43
|
+
else
|
44
|
+
# assuming method defined with Module#define_method
|
45
|
+
return [[],[]]
|
46
|
+
end
|
47
|
+
|
48
|
+
# if it was defined with def, and we found the default_node,
|
49
|
+
# that should bring us back to regularly scheduled programming..
|
50
|
+
lasgns = default_node[1..-1]
|
51
|
+
lasgns.each do |asgn|
|
52
|
+
args.assoc(asgn[1]) << eval(R2R.new.process(asgn[2]))
|
53
|
+
end
|
54
|
+
[args, (default_node[1..-1].map { |asgn| asgn[1] })]
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
# Used in mapping controller arguments to the params hash.
|
60
|
+
# NOTE: You must have the 'ruby2ruby' gem installed for this to work.
|
61
|
+
#
|
62
|
+
# ==== Examples
|
63
|
+
# # In PostsController
|
64
|
+
# def show(id) #=> id is the same as params[:id]
|
65
|
+
module GetArgs
|
66
|
+
|
67
|
+
# ==== Returns
|
68
|
+
# Array:: Method arguments and their default values.
|
69
|
+
#
|
70
|
+
# ==== Examples
|
71
|
+
# class Example
|
72
|
+
# def hello(one,two="two",three)
|
73
|
+
# end
|
74
|
+
#
|
75
|
+
# def goodbye
|
76
|
+
# end
|
77
|
+
# end
|
78
|
+
#
|
79
|
+
# Example.instance_method(:hello).get_args
|
80
|
+
# #=> [[:one], [:two, "two"], [:three, "three"]]
|
81
|
+
# Example.instance_method(:goodbye).get_args #=> nil
|
82
|
+
def get_args
|
83
|
+
klass, meth = self.to_s.split(/ /).to_a[1][0..-2].split("#")
|
84
|
+
# Remove stupidity for #<Method: Class(Object)#foo>
|
85
|
+
klass = $` if klass =~ /\(/
|
86
|
+
ParseTreeArray.translate(Object.full_const_get(klass), meth).get_args
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
begin
|
2
|
+
require "methopara"
|
3
|
+
rescue
|
4
|
+
puts "Make sure you have methopara http://github.com/genki/methopara installed if you want to use action args on Ruby 1.9"
|
5
|
+
end
|
6
|
+
|
7
|
+
module GetArgs
|
8
|
+
def get_args
|
9
|
+
unless respond_to?(:parameters)
|
10
|
+
raise NotImplementedError, "Ruby #{RUBY_VERSION} doesn't support #{self.class}#parameters"
|
11
|
+
end
|
12
|
+
|
13
|
+
required = []
|
14
|
+
optional = []
|
15
|
+
|
16
|
+
parameters.each do |(type, name)|
|
17
|
+
if type == :opt
|
18
|
+
required << [name, nil]
|
19
|
+
optional << name
|
20
|
+
else
|
21
|
+
required << [name]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
return [required, optional]
|
26
|
+
end
|
27
|
+
end
|
data/spec/action_args_spec.rb
CHANGED
@@ -1,11 +1,23 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe "ActionArgs" do
|
4
4
|
|
5
5
|
it "should not accidently introduce any methods as controller actions" do
|
6
6
|
Merb::Controller.callable_actions.should be_empty
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
|
+
it "should extract explicit one arg" do
|
10
|
+
ActionArgs.instance_method(:index).get_args.should == [[[:foo]], []]
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should extract explicit multi args" do
|
14
|
+
ActionArgs.instance_method(:multi).get_args.should == [[[:foo], [:bar]], []]
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should extract optional args" do
|
18
|
+
ActionArgs.instance_method(:with_default_nil).get_args.should == [[[:foo], [:bar, nil]], [:bar]]
|
19
|
+
end
|
20
|
+
|
9
21
|
end
|
10
22
|
|
11
23
|
describe Merb::AbstractController do
|
@@ -64,4 +76,4 @@ describe Merb::AbstractController do
|
|
64
76
|
Merb::ControllerExceptions::BadRequest, /were missing bar/)
|
65
77
|
end
|
66
78
|
|
67
|
-
end
|
79
|
+
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
CHANGED
@@ -1,10 +1,18 @@
|
|
1
|
-
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
-
|
3
1
|
require "rubygems"
|
4
|
-
|
2
|
+
|
3
|
+
# Use current merb-core sources if running from a typical dev checkout.
|
4
|
+
lib = File.expand_path('../../../merb-core/lib', __FILE__)
|
5
|
+
$LOAD_PATH.unshift(lib) if File.directory?(lib)
|
6
|
+
require 'merb-core'
|
7
|
+
|
8
|
+
# The lib under test
|
5
9
|
require "merb-action-args"
|
6
|
-
|
7
|
-
|
10
|
+
|
11
|
+
# Satisfies Autotest and anyone else not using the Rake tasks
|
12
|
+
require 'spec'
|
13
|
+
|
14
|
+
# Additional files required for specs
|
15
|
+
require "controllers/action-args"
|
8
16
|
|
9
17
|
Merb.start :environment => 'test'
|
10
18
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: merb-action-args
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.1.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yehuda Katz
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-02-20 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ~>
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 1.0.
|
23
|
+
version: 1.1.0.pre
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: ruby2ruby
|
@@ -42,35 +42,49 @@ dependencies:
|
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: 2.1.1
|
44
44
|
version:
|
45
|
-
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: rspec
|
47
|
+
type: :development
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.2.9
|
54
|
+
version:
|
55
|
+
description: Merb plugin that supports controller action arguments
|
46
56
|
email: ykatz@engineyard.com
|
47
57
|
executables: []
|
48
58
|
|
49
59
|
extensions: []
|
50
60
|
|
51
61
|
extra_rdoc_files:
|
52
|
-
- README
|
53
62
|
- LICENSE
|
63
|
+
- README
|
54
64
|
- TODO
|
55
65
|
files:
|
56
66
|
- LICENSE
|
57
67
|
- README
|
58
68
|
- Rakefile
|
59
69
|
- TODO
|
70
|
+
- lib/merb-action-args.rb
|
60
71
|
- lib/merb-action-args/abstract_controller.rb
|
61
72
|
- lib/merb-action-args/get_args.rb
|
62
73
|
- lib/merb-action-args/jruby_args.rb
|
63
|
-
- lib/merb-action-args.rb
|
74
|
+
- lib/merb-action-args/mri_args.rb
|
75
|
+
- lib/merb-action-args/version.rb
|
76
|
+
- lib/merb-action-args/vm_args.rb
|
64
77
|
- spec/action_args_spec.rb
|
65
78
|
- spec/controllers/action-args.rb
|
79
|
+
- spec/spec.opts
|
66
80
|
- spec/spec_helper.rb
|
67
81
|
has_rdoc: true
|
68
|
-
homepage: http://merbivore.com
|
82
|
+
homepage: http://merbivore.com/
|
69
83
|
licenses: []
|
70
84
|
|
71
85
|
post_install_message:
|
72
|
-
rdoc_options:
|
73
|
-
|
86
|
+
rdoc_options:
|
87
|
+
- --charset=UTF-8
|
74
88
|
require_paths:
|
75
89
|
- lib
|
76
90
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -81,16 +95,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
81
95
|
version:
|
82
96
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
97
|
requirements:
|
84
|
-
- - "
|
98
|
+
- - ">"
|
85
99
|
- !ruby/object:Gem::Version
|
86
|
-
version:
|
100
|
+
version: 1.3.1
|
87
101
|
version:
|
88
102
|
requirements: []
|
89
103
|
|
90
|
-
rubyforge_project:
|
104
|
+
rubyforge_project:
|
91
105
|
rubygems_version: 1.3.5
|
92
106
|
signing_key:
|
93
107
|
specification_version: 3
|
94
|
-
summary: Merb plugin that provides support for
|
108
|
+
summary: Merb plugin that provides support for named parameters in your controller actions
|
95
109
|
test_files: []
|
96
110
|
|