ropet 1.0.0.rc1

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/.autotest ADDED
@@ -0,0 +1 @@
1
+ require 'autotest/bundler'
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ doc/
2
+ .yardoc/
3
+ *.bak
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color --format documentation
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in ropet.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,30 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ ropet (0.1.0)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ diff-lcs (1.1.3)
10
+ metaclass (0.0.1)
11
+ mocha (0.10.0)
12
+ metaclass (~> 0.0.1)
13
+ rspec (2.7.0)
14
+ rspec-core (~> 2.7.0)
15
+ rspec-expectations (~> 2.7.0)
16
+ rspec-mocks (~> 2.7.0)
17
+ rspec-core (2.7.1)
18
+ rspec-expectations (2.7.0)
19
+ diff-lcs (~> 1.1.2)
20
+ rspec-mocks (2.7.0)
21
+ yard (0.7.4)
22
+
23
+ PLATFORMS
24
+ ruby
25
+
26
+ DEPENDENCIES
27
+ mocha (>= 0.10.0)
28
+ ropet!
29
+ rspec
30
+ yard (>= 0.7.4)
data/README.md ADDED
@@ -0,0 +1,78 @@
1
+ # Ropet
2
+
3
+ Ropet is a helper library for easy integration of options in methods.
4
+
5
+ ## Concept
6
+
7
+ An **option** can be a *flag*, for example:
8
+
9
+ :debug
10
+ :no_debug
11
+
12
+ or a standard *hash option*:
13
+
14
+ :debug
15
+ {threads: 3}
16
+ # or, if you prefer:
17
+ {:toolkit => :gcc}
18
+
19
+ ## Quick usage
20
+
21
+ In a method accepting `*options` as the last argument, you can use:
22
+
23
+ # remember to pass `*options` (with an asterisk), because it
24
+ # passes `options.length` instead of an array in one argument
25
+ # and #parser doesn't expect one array
26
+ Ropet.parser *options
27
+
28
+ # or manual options
29
+ parser = Ropet.parser :debug, threads: 2
30
+
31
+ parser[:debug] #=> true
32
+ parser[:threads]#=> 2
33
+
34
+ parser.inject *options
35
+ parser.inject :no_debug, toolkit: :gcc
36
+
37
+
38
+ ## Detailed usage
39
+
40
+ In addition to standard `*options` in `Ropet#parser`, you can also pass a block with configuration, which executes before injecting/interpreting options.
41
+
42
+ {Ropet::Config} provides a small *DSL* for basic configuration, like this:
43
+
44
+ parser = Ropet.parser :without_debug do
45
+ prefix 'without_' # flags starting with 'without_' will be interpreted
46
+ # as false booleans
47
+ default :library_path, './lib' # when `library_path` is not set,
48
+ # it will be taken from defaults list
49
+ end
50
+
51
+ parser[:debug] #=> false
52
+ parser[:library_path] #=> "./lib"
53
+
54
+ parser.inject library_path: "../library"
55
+ # `#inject` accepts the same kind of
56
+ # *options that `Ropet#parser`
57
+
58
+ parser[:library_path] #=> "../library"
59
+
60
+ parser.inject :without_without_templates
61
+ # for extreme cases, when key names include prefixes
62
+ # it is advisable to change false_prefix with dsl method
63
+ # but you probably won't have a key names no_no_*
64
+
65
+ parser.has_key? :without_templates #=> true
66
+
67
+ parser.settings #=> {:debug=>false, :library_path=>"../library", :without_templates=>false}
68
+
69
+ # you can also access defaults whenever you want,
70
+ # they're not treated in the same way as other options
71
+ # (which are overwritten in case of conflicts)
72
+ parser.config.defaults #=> {:library_path=>"./lib"}
73
+
74
+ ## Copyright
75
+
76
+ Copyright © 2012 Jakub Okoński
77
+
78
+ <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" /></a><br /><span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">Ropet</span> by <span xmlns:cc="http://creativecommons.org/ns#" property="cc:attributionName">Jakub Okoński</span> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0 Unported License</a>.
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require "yard"
4
+ require "yard/rake/yardoc_task"
5
+ YARD::Rake::YardocTask.new
data/lib/ropet.rb ADDED
@@ -0,0 +1,17 @@
1
+ require "ropet/version"
2
+ require 'ropet/parser'
3
+
4
+ # Top level module holding all objects
5
+ module Ropet
6
+ # Helper for easy creation of parsers
7
+ # @param options Arguments to parse after initializing
8
+ # @param block Block to pass for {Ropet::Config.from_dsl}
9
+ # @return [Parser]
10
+ def self.parser(*options, &block)
11
+ if block
12
+ Parser.new(Config.from_dsl(&block)).tap {|o| o.inject *options }
13
+ else
14
+ Parser.new(Config.new).tap {|o| o.inject *options }
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,46 @@
1
+ module Ropet
2
+ # Customizes parser settings
3
+ class Config
4
+ # Keeps all the defaults to use when
5
+ # there's no value assigned
6
+ # @return [Hash]
7
+ attr_reader :defaults
8
+
9
+ # Stores prefix to match false flags with
10
+ # @return [String]
11
+ attr_reader :false_prefix
12
+
13
+ # Sets @defaults and default @false_prefix
14
+ def initialize
15
+ @defaults = {}
16
+ @false_prefix = 'no_'
17
+ end
18
+
19
+ # Creates new instance of Config and executes
20
+ # dsl methods on it
21
+ # @param &block Block to execute
22
+ # @return [Config] Initialized config
23
+ def self.from_dsl(&block)
24
+ c = self.new
25
+ c.instance_exec(&block)
26
+ return c
27
+ end
28
+
29
+ # Adds a default `value` for `key`
30
+ # @param [#to_sym] Key for default
31
+ # @param [Object] Value to assign for default
32
+ # @return [nil]
33
+ def default(key, value)
34
+ @defaults[key.to_sym] = value
35
+ return nil
36
+ end
37
+
38
+ # Sets the false prefix for a parser
39
+ # @param [#to_s] Prefix
40
+ # @return [nil]
41
+ def prefix(prefix)
42
+ @false_prefix = prefix.to_s
43
+ return nil
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,89 @@
1
+ require 'ropet/config'
2
+
3
+ module Ropet
4
+ # Main class for Ropet, handles all injecting logic,
5
+ # parsing flags and setting options
6
+ class Parser
7
+ # @return [Hash] Assigned options
8
+ attr_reader :settings
9
+
10
+ # @return [Config] Config
11
+ attr_reader :config
12
+
13
+ # Initializes new parser
14
+ # Sets up @settings
15
+ # @param [Config, nil] Config to use for the parser
16
+ def initialize(config = nil)
17
+ @settings = {}
18
+ @config = config || Config.new
19
+
20
+ return self
21
+ end
22
+
23
+ # Creates new Parser with a block of dsl
24
+ # methods to pass for Config initialization
25
+ # @deprecated
26
+ # @param &block Block to pass
27
+ # @return [Parser] New parser created from initialized Config
28
+ def self.let(&block)
29
+ self.new(Config.from_dsl(&block))
30
+ end
31
+
32
+ # Main method of Ropet.
33
+ # Parses options and flags and stores them
34
+ # properly.
35
+ # @param [<Symbol,String>,Hash] *options Options to parse
36
+ # @example Injecting flags mixed with hash options
37
+ # parser.inject :debug, toolchain: 'gcc-4.0'
38
+ # @return [Parser] Self
39
+ def inject(*options)
40
+ options.each do |option|
41
+ if option.is_a?(Symbol) || option.is_a?(String)
42
+ flag = option.to_s
43
+ prefix_range = 0...(config.false_prefix.length)
44
+ if flag[prefix_range] == config.false_prefix
45
+ flag.slice! prefix_range # remove prefix from string if it exists there
46
+ @settings[flag.to_sym] = false
47
+ else
48
+ @settings[option] = true
49
+ end
50
+ elsif option.is_a? Hash
51
+ @settings.merge! option
52
+ end
53
+ end
54
+
55
+ return self
56
+ end
57
+
58
+ # Creates new Parser with default Config.
59
+ # Calls Parser#inject on `*options`.
60
+ # @param [<Symbol,String>,Hash] *options Options to parse
61
+ # @deprecated
62
+ # @return [Parser] New Parser
63
+ def self.inject(*options)
64
+ obj = self.new(Config.new)
65
+ obj.inject options
66
+ end
67
+
68
+ # Checks existence of `key` in defined settings
69
+ # or defaults.
70
+ # @param [String,Symbol] key Key to search for
71
+ # @return [Boolean] Boolean telling if Parser has this key
72
+ def has_key?(key)
73
+ key = key.to_sym
74
+ @settings.has_key?(key) or config.defaults.has_key?(key)
75
+ end
76
+
77
+ # Retrieves value for given `key`.
78
+ # @param [Symbol,String] index Key to search for
79
+ # @return [Object] Value stored for given key
80
+ def [](index)
81
+ index = index.to_sym
82
+ unless @settings[index] == nil
83
+ @settings[index]
84
+ else
85
+ config.defaults[index]
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,4 @@
1
+ module Ropet
2
+ # Stores version of the app
3
+ VERSION = "1.0.0.rc1"
4
+ end
data/opts.rb ADDED
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ class Options
4
+ attr_reader :settings, :config
5
+
6
+ class Config
7
+ attr_reader :defaults, :false_prefix
8
+
9
+ def initialize
10
+ @defaults = {}
11
+ @false_prefix = 'no'
12
+ end
13
+
14
+ def default(key, value)
15
+ @defaults[key.to_sym] = value
16
+ end
17
+
18
+ def prefix(prefix)
19
+ @false_prefix = prefix
20
+ end
21
+ end
22
+
23
+ def initialize(config)
24
+ @settings = {}
25
+ @config = config || Config.new
26
+
27
+ return self
28
+ end
29
+
30
+ def self.let(&block)
31
+ config = Config.new
32
+ config.instance_exec(&block)
33
+ self.new(config)
34
+ end
35
+
36
+ def inject(*options)
37
+ options.each do |option|
38
+ if option.is_a?(Symbol) || option.is_a?(String)
39
+ flag = option.to_s
40
+ prefix_range = 0...(config.false_prefix.length)
41
+ if flag[prefix_range] == config.false_prefix
42
+ flag.slice! prefix_range # remove prefix from string if it exists there
43
+ @settings[flag.to_sym] = false
44
+ else
45
+ @settings[option] = true
46
+ end
47
+ elsif option.is_a? Hash
48
+ @settings.merge! option
49
+ end
50
+ end
51
+
52
+ return self
53
+ end
54
+
55
+ def self.inject(*options)
56
+ obj = self.new(Config.new)
57
+ obj.inject options
58
+ end
59
+
60
+ def has_key?(key)
61
+ @settings.has_key?(key) or config.defaults.has_key?(key)
62
+ end
63
+
64
+ def [](index)
65
+ unless @settings[index] == nil
66
+ @settings[index]
67
+ else
68
+ config.defaults[index]
69
+ end
70
+ end
71
+ end
72
+
73
+ class Greeter
74
+ attr_reader :options
75
+
76
+ def initialize(*opts)
77
+ @options = Options.let{prefix 'without_'; default :name, 'Kot'}.inject(opts)
78
+
79
+ greet
80
+ end
81
+
82
+ def greet
83
+ return puts "Hello unknown" unless @options.has_key? :name
84
+ return puts "Hello noname" if @options[:name] == false
85
+ return puts "Hello #{@options[:name]}" if @options[:name].is_a? String
86
+ end
87
+ end
88
+
89
+ g = Greeter.new
90
+ g.options.inject :without_name; g.greet
91
+ g.options.inject :name => "Kuba"; g.greet
92
+
93
+ puts Options.inject(:nodebug).inject(threads: 3).inject(:debug => :gdb).settings ==
94
+ Options.inject(:nodebug, threads: 3, debug: :gdb).settings
data/ropet.gemspec ADDED
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "ropet/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "ropet"
7
+ s.version = Ropet::VERSION
8
+ s.authors = ["Jakub Okoński"]
9
+ s.email = ["jakub@okonski.org"]
10
+ s.homepage = "http://github.com/farnoy/ropet"
11
+ s.summary = %q{Parse your method options easily}
12
+ s.description = %q{Ropet parses options and provides easy API for developer}
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ["lib"]
18
+
19
+ s.add_development_dependency "rspec"
20
+ s.add_development_dependency "mocha", ">= 0.10.0"
21
+ s.add_development_dependency "yard", ">= 0.7.4"
22
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ropet::Config do
4
+ let :config do
5
+ Ropet::Config.new
6
+ end
7
+
8
+ describe "constructor" do
9
+ it "assigns @defaults hash" do
10
+ config.instance_variable_get(:@defaults).should eq({})
11
+ end
12
+
13
+ it "assigns @false_prefix to default `no`" do
14
+ config.instance_variable_get(:@false_prefix).should eq('no_')
15
+ end
16
+ end
17
+
18
+ describe "#default" do
19
+ it "assings default value for key" do
20
+ config.default :name, false
21
+ config.defaults.should include(name: false)
22
+ end
23
+ end
24
+
25
+ describe "#prefix" do
26
+ it "assings prefix for false flags" do
27
+ config.prefix :without_
28
+ config.false_prefix.should eq('without_')
29
+ end
30
+ end
31
+
32
+ describe "#from_dsl" do
33
+ it "provides simple dsl interface" do
34
+ config = Ropet::Config.from_dsl do
35
+ prefix 'without_'
36
+ default :name, false
37
+ default :age, 20
38
+ end
39
+
40
+ config.false_prefix.should == 'without_'
41
+ config.defaults.should include(name: false)
42
+ config.defaults.should include(age: 20)
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,139 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ropet::Parser do
4
+ let :vanilla_parser do
5
+ Ropet::Parser.new
6
+ end
7
+
8
+ let :config do
9
+ mock("Config")
10
+ end
11
+
12
+ describe "constructor" do
13
+ it "assigns empty hash to @settings" do
14
+ vanilla_parser.instance_variable_get(:@settings).should eq({})
15
+ end
16
+
17
+ it "assigns @config when passing argument" do
18
+ config = mock("Anything")
19
+ parser = Ropet::Parser.new(config)
20
+ parser.instance_variable_get(:@config).should be(config)
21
+ end
22
+
23
+ it "assings @config to default value without `config` argument" do
24
+ Ropet::Config.expects(:new).returns(config)
25
+ vanilla_parser.instance_variable_get(:@config).should be(config)
26
+ end
27
+ end
28
+
29
+ describe "let" do
30
+ let :block do
31
+ -> {prefix "test"}
32
+ end
33
+
34
+ it "creates Config from given block with #from_dsl" do
35
+ Ropet::Config.expects(:from_dsl)
36
+ Ropet::Parser.let(&block)
37
+ end
38
+
39
+ it "creates and returns new Parser" do
40
+ value = mock
41
+ Ropet::Config.expects(:from_dsl).returns(config)
42
+ Ropet::Parser.expects(:new).with(config).returns(value)
43
+ Ropet::Parser.let(&block).should be(value)
44
+ end
45
+ end
46
+
47
+ describe "static #inject" do
48
+ let :mock_parser do
49
+ mock_parser = mock
50
+ mock_parser.stubs :inject
51
+ mock_parser
52
+ end
53
+
54
+ before do
55
+ Ropet::Config.expects(:new).returns(config)
56
+ Ropet::Parser.expects(:new).with(config).returns(mock_parser)
57
+ end
58
+
59
+ it "creates Parser with default Config" do
60
+ Ropet::Parser.inject(:test)
61
+ end
62
+
63
+ it "triggers instanced #inject" do
64
+ mock_parser.expects(:inject).with([:test])
65
+ Ropet::Parser.inject(:test)
66
+ end
67
+ end
68
+
69
+ describe "instanced #inject" do
70
+ it "evaluates all arguments" do
71
+ first = mock().tap {|m| m.expects(:is_a?).times(3) }
72
+ second = first.dup
73
+ vanilla_parser.inject first, second
74
+ end
75
+
76
+ describe "flags parser" do
77
+ it "recognizes true flag" do
78
+ vanilla_parser.inject something: true
79
+ vanilla_parser.settings.should include(:something => true)
80
+ end
81
+
82
+ describe "with a false flag" do
83
+ it "correctly recognizes default prefix" do
84
+ vanilla_parser.inject :no_auto
85
+ vanilla_parser.settings[:auto].should eq(false)
86
+ end
87
+
88
+ it "correctly recognizes custom prefix" do
89
+ parser = Ropet::Parser.new(Ropet::Config.from_dsl {prefix 'without_'})
90
+ parser.inject :without_auto
91
+ parser.settings.should include(:auto => false)
92
+ end
93
+
94
+ it "assigns correct name as a key" do
95
+ vanilla_parser.inject :no_auto
96
+ vanilla_parser.settings.keys.should include(:auto)
97
+ end
98
+ end
99
+ end
100
+
101
+ describe "hash settings" do
102
+ it "merges them to existing ones" do
103
+ vanilla_parser.instance_variable_set(:@settings, {:first => false})
104
+ vanilla_parser.inject second: true
105
+ vanilla_parser.settings.should include(:first => false, :second => true)
106
+ end
107
+
108
+ it "merges hash settings overwriting them" do
109
+ vanilla_parser.inject something: false
110
+ vanilla_parser.inject something: true
111
+ vanilla_parser.settings.should include(:something => true)
112
+ end
113
+ end
114
+ end
115
+
116
+ describe "#has_key?" do
117
+ it "asks @settings for a key" do
118
+ vanilla_parser.settings.expects(:has_key?).once.with(:auto)
119
+ vanilla_parser.has_key? 'auto'
120
+ end
121
+
122
+ it "asks @config.defaults for a key" do
123
+ vanilla_parser.config.defaults.expects(:has_key?).once.with(:auto)
124
+ vanilla_parser.has_key? 'auto'
125
+ end
126
+ end
127
+
128
+ describe "#[]" do
129
+ it "asks parsed @settings when available" do
130
+ vanilla_parser.settings.expects(:[]).with(:auto)
131
+ vanilla_parser['auto']
132
+ end
133
+
134
+ it "falls back to @config.defaults otherwise" do
135
+ vanilla_parser.config.defaults.expects(:[]).with(:auto)
136
+ vanilla_parser['auto']
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Ropet Helpers' do
4
+ describe "#parser" do
5
+ let :options do
6
+ [:debug, threads: 5]
7
+ end
8
+
9
+ it "creates a proper config when providing a block" do
10
+ config = Ropet::Config.new.tap {|c| c.defaults[:name] = "Jakub"}
11
+ Ropet::Config.expects(:new).returns(
12
+ config.tap {|o| o.expects(:instance_exec).once }
13
+ )
14
+ Ropet.parser { default :name, "Jakub" }
15
+ end
16
+
17
+ it "creates a proper parser without a block" do
18
+ double = mock().tap {|o| o.expects(:tap).returns(o) }
19
+ [:Config, :Parser].each do |sym|
20
+ Ropet.const_get(sym).expects(:new).returns(double)
21
+ end
22
+ Ropet.parser.should eq(double)
23
+ end
24
+
25
+ it "evaluates options with a block" do
26
+ Ropet::Parser.any_instance.expects(:inject).with(*options)
27
+ Ropet.parser *options do
28
+ default :name, "Jakub"
29
+ end
30
+ end
31
+
32
+ it "evaluates options without a block" do
33
+ Ropet::Parser.any_instance.expects(:inject).with(*options)
34
+ Ropet.parser *options
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,7 @@
1
+ #require 'rspec/autorun'
2
+ require 'bundler/setup'
3
+ require 'ropet'
4
+
5
+ RSpec.configure do |config|
6
+ config.mock_with :mocha
7
+ end
metadata ADDED
@@ -0,0 +1,100 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ropet
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.rc1
5
+ prerelease: 6
6
+ platform: ruby
7
+ authors:
8
+ - Jakub Okoński
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &27968640 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *27968640
25
+ - !ruby/object:Gem::Dependency
26
+ name: mocha
27
+ requirement: &27967900 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 0.10.0
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *27967900
36
+ - !ruby/object:Gem::Dependency
37
+ name: yard
38
+ requirement: &27967400 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: 0.7.4
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *27967400
47
+ description: Ropet parses options and provides easy API for developer
48
+ email:
49
+ - jakub@okonski.org
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - .autotest
55
+ - .gitignore
56
+ - .rspec
57
+ - Gemfile
58
+ - Gemfile.lock
59
+ - README.md
60
+ - Rakefile
61
+ - lib/ropet.rb
62
+ - lib/ropet/config.rb
63
+ - lib/ropet/parser.rb
64
+ - lib/ropet/version.rb
65
+ - opts.rb
66
+ - ropet.gemspec
67
+ - spec/config_spec.rb
68
+ - spec/parser_spec.rb
69
+ - spec/ropet_helpers_spec.rb
70
+ - spec/spec_helper.rb
71
+ homepage: http://github.com/farnoy/ropet
72
+ licenses: []
73
+ post_install_message:
74
+ rdoc_options: []
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ! '>'
87
+ - !ruby/object:Gem::Version
88
+ version: 1.3.1
89
+ requirements: []
90
+ rubyforge_project:
91
+ rubygems_version: 1.8.12
92
+ signing_key:
93
+ specification_version: 3
94
+ summary: Parse your method options easily
95
+ test_files:
96
+ - spec/config_spec.rb
97
+ - spec/parser_spec.rb
98
+ - spec/ropet_helpers_spec.rb
99
+ - spec/spec_helper.rb
100
+ has_rdoc: