option_list 1.1.1 → 1.1.2
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.
- checksums.yaml +8 -8
- data/.gitignore +20 -0
- data/Gemfile +4 -0
- data/README.md +65 -0
- data/docs/OL_UG.odt +0 -0
- data/docs/OL_UG.pdf +0 -0
- data/docs/OL_UG_Version_1_1_1.pdf +0 -0
- data/lib/option_list/version.rb +3 -0
- data/lib/option_list.rb +33 -33
- data/option_list.gemspec +35 -0
- data/rakefile.rb +14 -2
- data/sire.rb +51 -0
- metadata +51 -15
- data/README +0 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NzA5ZjFjNWY2ZDQ0NTQxN2Q3MTIxYTU1N2VmYjMwYTE3YjAzYTdlYw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NzE3MmExNWM1ZDZmZDUxYjhhMTY2YmMwMDhiMzk0M2UzZGYwMWRiNg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NWQzOTA3YTgyYjkyZTUyNWNjYTE2NDg0MDZmNzQwM2I0NWQzMmNiOTc4ZTNh
|
10
|
+
ZjUyN2I5NTM1MDFlOWE0NzY3NmYxMmMxZDhiNTQ3OGZkY2JjN2I3NjhjZjlm
|
11
|
+
NjMyYjNiM2Q1NGNjOTZkYjRlMzAzNDhlYjNhMGE1ZGY5NzMxZDk=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
M2JiOWFhNDgyZWJiY2UwYWFmMzI0ZjE4YWMyZDE4MzgzNzAxOTA3NWI4Yzk0
|
14
|
+
MTE4ZjFlYmZmMmNkMDdjZDk2MjljZmY1ZGMxYTgyNWE3YWFiMThlYWY2OWRj
|
15
|
+
NjVlMDlkNzBjZWFlZGYwYTk2OGJjYjhlNTRhNjU5OTlhMDg1ZjU=
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
# The Option List gem.
|
2
|
+
|
3
|
+
This gem implements the concept that parameter validation is long and
|
4
|
+
tedious and something needed to be done about that. This gem implements
|
5
|
+
the idea that parameters be described separately and validated in a
|
6
|
+
single line of client method code.
|
7
|
+
|
8
|
+
This gem was my first effort in the area of gem creation, and if I'm
|
9
|
+
honest, it is rather doubtful that it brings much to the table. Most
|
10
|
+
of what it does has been subsumed by the Ruby Language itself, starting
|
11
|
+
with version 1.9 and further through versions 2.0, 2.1, and 2.2.
|
12
|
+
|
13
|
+
Add this line to your application's Gemfile:
|
14
|
+
|
15
|
+
gem 'option_list'
|
16
|
+
|
17
|
+
And then execute:
|
18
|
+
|
19
|
+
$ bundle
|
20
|
+
|
21
|
+
Or install it yourself as:
|
22
|
+
|
23
|
+
$ gem install option_list
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
The use of option_list oocurs in three phases: Describing the Parameters,
|
28
|
+
Passing in Parameters and Validating/Accessing the Parameters. This can be
|
29
|
+
seen in the following example:
|
30
|
+
|
31
|
+
module ReadLine
|
32
|
+
#Create the parameter specification (simplified for brevity)
|
33
|
+
@spec = OptionList.new([:buffer, :history, :no_history], {:depth => 50}) do |options|
|
34
|
+
fail "Depth must be an integer" unless options.depth.is_a(Integer)
|
35
|
+
fail "Depth must be positive" if options.depth < 1
|
36
|
+
end
|
37
|
+
|
38
|
+
class << self
|
39
|
+
attr_reader :spec
|
40
|
+
end
|
41
|
+
|
42
|
+
def read_line(prompt, *options)
|
43
|
+
@options = ReadLine.spec.select(options)
|
44
|
+
#Further code deleted for brevity.
|
45
|
+
#Somewhere along the line it records the last line.
|
46
|
+
buffer_line(current_line)
|
47
|
+
current_line
|
48
|
+
end
|
49
|
+
|
50
|
+
def buffer_line(line)
|
51
|
+
@line_buffer << line if @options.history?
|
52
|
+
@line_buffer.delete_at(0) if @line_buffer.length > @options.depth
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
The option_list gem is described in the The option_list User's Guide
|
57
|
+
which covers version 1.1.1 which has no material change from 1.1.2
|
58
|
+
|
59
|
+
## Contributing
|
60
|
+
|
61
|
+
1. Fork it
|
62
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
63
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
64
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
65
|
+
5. Create new Pull Request
|
data/docs/OL_UG.odt
ADDED
Binary file
|
data/docs/OL_UG.pdf
ADDED
Binary file
|
Binary file
|
data/lib/option_list.rb
CHANGED
@@ -11,24 +11,24 @@ require 'set'
|
|
11
11
|
#Embraced reek and git and created the user's guide to pair down rdoc mark up
|
12
12
|
#to be less obtrusive to the code.
|
13
13
|
#=== Version 1.1.0
|
14
|
-
#Added a default value of false to signify that no default exists for a
|
14
|
+
#Added a default value of false to signify that no default exists for a
|
15
15
|
#mandatory parameter.
|
16
16
|
#Modified processing of array specs to avoid side effects in the parameters.
|
17
17
|
class OptionList
|
18
18
|
|
19
19
|
#The option list code version.
|
20
20
|
def self.version
|
21
|
-
|
21
|
+
OptionList::VERSION
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
#The option list code version. This is a redirect to the class method.
|
25
25
|
def version
|
26
|
-
|
26
|
+
OptionList::VERSION
|
27
27
|
end
|
28
28
|
|
29
|
-
#Create an option list from an array of option specifications.
|
29
|
+
#Create an option list from an array of option specifications.
|
30
30
|
#==== Parameters:
|
31
|
-
#* option_specs - The comma separated option specifications, made into an
|
31
|
+
#* option_specs - The comma separated option specifications, made into an
|
32
32
|
# array by the splat operator.
|
33
33
|
#* select_block - An optional block of code that is called when selections
|
34
34
|
# have been made. This allows for custom validations to be applied at that
|
@@ -41,7 +41,7 @@ class OptionList
|
|
41
41
|
@mandatory = Array.new
|
42
42
|
@categories = Hash.new
|
43
43
|
@default = Hash.new
|
44
|
-
|
44
|
+
|
45
45
|
option_specs.each do |spec|
|
46
46
|
if spec.is_a?(Hash)
|
47
47
|
hash_spec(spec)
|
@@ -51,7 +51,7 @@ class OptionList
|
|
51
51
|
error "Found #{spec.class} instead of Hash or Array."
|
52
52
|
end
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
@select_block = select_block
|
56
56
|
end
|
57
57
|
|
@@ -66,26 +66,26 @@ class OptionList
|
|
66
66
|
#==== Exceptions:
|
67
67
|
#* ArgumentError for a number of invalid argument conditions.
|
68
68
|
#==== Notes:
|
69
|
-
#After processing the selections, the selection validation block is called
|
69
|
+
#After processing the selections, the selection validation block is called
|
70
70
|
#if one was defined for the constructor.
|
71
71
|
def select(selections=[])
|
72
72
|
selections = [selections] unless selections.is_a?(Array)
|
73
73
|
selected = process_selections(selections)
|
74
|
-
|
74
|
+
|
75
75
|
@mandatory.each do |cat|
|
76
76
|
error "Missing mandatory setting #{cat}" unless selected[cat]
|
77
77
|
end
|
78
|
-
|
78
|
+
|
79
79
|
@select_block.call(selected) if @select_block
|
80
80
|
selected
|
81
81
|
end
|
82
|
-
|
82
|
+
|
83
83
|
private #Private stuff follows.
|
84
84
|
|
85
85
|
#Process a list of option selections.
|
86
86
|
def process_selections(selections)
|
87
87
|
selected, dup = @default.clone, Set.new
|
88
|
-
|
88
|
+
|
89
89
|
selections.each do |opt|
|
90
90
|
if opt.is_a?(Symbol)
|
91
91
|
symbolic_selection(opt, selected, dup)
|
@@ -95,15 +95,15 @@ class OptionList
|
|
95
95
|
error "Found #{opt.class} instead of Hash or Symbol."
|
96
96
|
end
|
97
97
|
end
|
98
|
-
|
98
|
+
|
99
99
|
selected
|
100
100
|
end
|
101
|
-
|
101
|
+
|
102
102
|
#Return a internal category marker constant for value entries.
|
103
103
|
def value_entry
|
104
104
|
'A value entry.'
|
105
105
|
end
|
106
|
-
|
106
|
+
|
107
107
|
#Process an array spec that lists all the valid values for an option. See
|
108
108
|
#the new method for more information on these specs.
|
109
109
|
def array_spec(spec)
|
@@ -113,15 +113,15 @@ class OptionList
|
|
113
113
|
array_spec_default(category, default)
|
114
114
|
array_spec_tail_rest(category, spec[2...spec_len])
|
115
115
|
end
|
116
|
-
|
117
|
-
#Process the first element of the array spec tail.
|
116
|
+
|
117
|
+
#Process the first element of the array spec tail.
|
118
118
|
def array_spec_default(category, opt)
|
119
119
|
opt && array_spec_single(category, opt)
|
120
120
|
@default[category] = opt
|
121
121
|
@mandatory << category if opt == false
|
122
122
|
end
|
123
|
-
|
124
|
-
#Process the rest of the array spec tail.
|
123
|
+
|
124
|
+
#Process the rest of the array spec tail.
|
125
125
|
def array_spec_tail_rest(category, spec_tail_rest)
|
126
126
|
spec_tail_rest.each do |opt|
|
127
127
|
if opt
|
@@ -131,14 +131,14 @@ class OptionList
|
|
131
131
|
end
|
132
132
|
end
|
133
133
|
end
|
134
|
-
|
134
|
+
|
135
135
|
#Process a single array spec option
|
136
136
|
def array_spec_single(category, opt)
|
137
137
|
duplicate_entry_check(@categories, opt, 'option')
|
138
138
|
@categories[opt] = category
|
139
139
|
add_option_tester(category, opt)
|
140
140
|
end
|
141
|
-
|
141
|
+
|
142
142
|
#Process a hash spec that lists only the default value for an option. See
|
143
143
|
#the new method for more information on these specs.
|
144
144
|
def hash_spec(spec)
|
@@ -150,13 +150,13 @@ class OptionList
|
|
150
150
|
@mandatory << category if value == false
|
151
151
|
end
|
152
152
|
end
|
153
|
-
|
153
|
+
|
154
154
|
#Set the default value of a value entry.
|
155
155
|
def set_default_option_value(category, value)
|
156
156
|
@categories[category] = value_entry
|
157
|
-
@default[category] = value
|
157
|
+
@default[category] = value
|
158
158
|
end
|
159
|
-
|
159
|
+
|
160
160
|
#Process a symbolic option selection.
|
161
161
|
#==== Parameters:
|
162
162
|
#* option - a symbol to process.
|
@@ -168,7 +168,7 @@ class OptionList
|
|
168
168
|
hash_option_dup_check(category, dup)
|
169
169
|
selected[category] = symbol_option
|
170
170
|
end
|
171
|
-
|
171
|
+
|
172
172
|
#Process a hash of option selection values.
|
173
173
|
#==== Parameters:
|
174
174
|
#* options - a hash of options to process.
|
@@ -183,7 +183,7 @@ class OptionList
|
|
183
183
|
selected[category] = value
|
184
184
|
end
|
185
185
|
end
|
186
|
-
|
186
|
+
|
187
187
|
#Validate a hash option value.
|
188
188
|
def hash_option_value_check(value_category, value)
|
189
189
|
if (@categories[value_category] != value_entry) && value
|
@@ -191,12 +191,12 @@ class OptionList
|
|
191
191
|
error "Invalid option: #{value}." unless @categories[value] == value_category
|
192
192
|
end
|
193
193
|
end
|
194
|
-
|
195
|
-
#Add to set with no duplicates allowed.
|
194
|
+
|
195
|
+
#Add to set with no duplicates allowed.
|
196
196
|
def hash_option_dup_check(category, dup)
|
197
197
|
error "Category #{category} has multiple values." unless dup.add?(category)
|
198
198
|
end
|
199
|
-
|
199
|
+
|
200
200
|
#Add query method for the selected category.
|
201
201
|
def add_option_reader(name)
|
202
202
|
duplicate_entry_check(@default, name, 'category')
|
@@ -208,13 +208,13 @@ class OptionList
|
|
208
208
|
qry = (value.to_s + '?').to_sym
|
209
209
|
@default.define_singleton_method(qry) { self[target] == value}
|
210
210
|
end
|
211
|
-
|
211
|
+
|
212
212
|
#Flag any duplicate entry errors.
|
213
213
|
def duplicate_entry_check(target, entry, detail)
|
214
|
-
error "Found #{entry.class}, expected Symbol." unless entry.is_a?(Symbol)
|
214
|
+
error "Found #{entry.class}, expected Symbol." unless entry.is_a?(Symbol)
|
215
215
|
error "Duplicate #{detail}: #{entry}" if target.has_key?(entry)
|
216
216
|
end
|
217
|
-
|
217
|
+
|
218
218
|
#Flag any missing entry errors.
|
219
219
|
def missing_entry_check(target, entry, detail)
|
220
220
|
error "Unknown #{detail}: #{entry}" unless target.has_key?(entry)
|
data/option_list.gemspec
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
#Specify the building of the option_list gem.
|
4
|
+
|
5
|
+
lib = File.expand_path('../lib', __FILE__)
|
6
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
7
|
+
require 'option_list/version'
|
8
|
+
|
9
|
+
Gem::Specification.new do |s|
|
10
|
+
s.name = "option_list"
|
11
|
+
s.summary = "Flexible, Easy Function Parameters with Validation."
|
12
|
+
s.description = 'Flexible, Easy Function Parameters with Validation. '
|
13
|
+
s.version = OptionList::VERSION
|
14
|
+
s.author = ["Peter Camilleri"]
|
15
|
+
s.email = "peter.c.camilleri@gmail.com"
|
16
|
+
s.homepage = "http://teuthida-technologies.com/"
|
17
|
+
s.platform = Gem::Platform::RUBY
|
18
|
+
s.required_ruby_version = '>=1.9.3'
|
19
|
+
|
20
|
+
s.add_development_dependency "bundler", "~> 1.3"
|
21
|
+
s.add_development_dependency 'rake'
|
22
|
+
s.add_development_dependency 'reek', "~> 1.3.8"
|
23
|
+
s.add_development_dependency 'minitest', "~> 4.7.5"
|
24
|
+
s.add_development_dependency 'rdoc', "~> 4.0.1"
|
25
|
+
s.add_development_dependency 'awesome_print'
|
26
|
+
|
27
|
+
s.files = `git ls-files`.split($/)
|
28
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
29
|
+
s.extra_rdoc_files = ['license.txt']
|
30
|
+
|
31
|
+
s.license = 'MIT'
|
32
|
+
s.has_rdoc = true
|
33
|
+
s.require_path = 'lib'
|
34
|
+
end
|
35
|
+
|
data/rakefile.rb
CHANGED
@@ -1,11 +1,16 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
|
+
# coding: utf-8
|
3
|
+
|
2
4
|
require 'rake/testtask'
|
3
5
|
require 'rdoc/task'
|
6
|
+
require "bundler/gem_tasks"
|
4
7
|
|
5
8
|
RDoc::Task.new do |rdoc|
|
6
9
|
rdoc.rdoc_dir = "rdoc"
|
7
|
-
|
8
|
-
|
10
|
+
|
11
|
+
#List out all the files to be documented.
|
12
|
+
rdoc.rdoc_files.include("lib/**/*.rb", "license.txt", "README.md")
|
13
|
+
|
9
14
|
rdoc.options << '--visibility' << 'private'
|
10
15
|
end
|
11
16
|
|
@@ -14,6 +19,13 @@ Rake::TestTask.new do |t|
|
|
14
19
|
t.verbose = false
|
15
20
|
end
|
16
21
|
|
22
|
+
desc "Run a scan for smelly code!"
|
17
23
|
task :reek do |t|
|
18
24
|
`reek lib\\*.rb > reek.txt`
|
19
25
|
end
|
26
|
+
|
27
|
+
desc "What version of option_list is this?"
|
28
|
+
task :vers do |t|
|
29
|
+
puts
|
30
|
+
puts "option_list version = #{OptionList::VERSION}"
|
31
|
+
end
|
data/sire.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# Really simple program # 3
|
2
|
+
# A Simple Interactive Ruby Environment
|
3
|
+
# SIRE Version 0.2.6
|
4
|
+
|
5
|
+
require 'readline'
|
6
|
+
require 'awesome_print'
|
7
|
+
require_relative 'lib/option_list'
|
8
|
+
include Readline
|
9
|
+
|
10
|
+
class Object
|
11
|
+
def classes
|
12
|
+
begin
|
13
|
+
klass = self
|
14
|
+
|
15
|
+
begin
|
16
|
+
klass = klass.class unless klass.instance_of?(Class)
|
17
|
+
print klass
|
18
|
+
klass = klass.superclass
|
19
|
+
print " < " if klass
|
20
|
+
end while klass
|
21
|
+
|
22
|
+
puts
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def show_args(*args)
|
28
|
+
args
|
29
|
+
end
|
30
|
+
|
31
|
+
puts "Welcome to SIRE Version 0.2.6"
|
32
|
+
puts "Simple Interactive Ruby Environment"
|
33
|
+
done = false
|
34
|
+
|
35
|
+
until done
|
36
|
+
begin
|
37
|
+
line = readline('SIRE>', true)
|
38
|
+
result = eval line
|
39
|
+
ap result unless result.nil?
|
40
|
+
rescue Interrupt
|
41
|
+
done = true
|
42
|
+
rescue Exception => e
|
43
|
+
puts "#{e.class} detected: #{e}"
|
44
|
+
puts e.backtrace
|
45
|
+
puts
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
puts
|
50
|
+
puts "Bye bye for now!"
|
51
|
+
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: option_list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Camilleri
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: rake
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -28,30 +42,44 @@ dependencies:
|
|
28
42
|
name: reek
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
|
-
- -
|
45
|
+
- - ~>
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
47
|
+
version: 1.3.8
|
34
48
|
type: :development
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
|
-
- -
|
52
|
+
- - ~>
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
54
|
+
version: 1.3.8
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: minitest
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
|
-
- -
|
59
|
+
- - ~>
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
61
|
+
version: 4.7.5
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
|
-
- -
|
66
|
+
- - ~>
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
68
|
+
version: 4.7.5
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rdoc
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 4.0.1
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 4.0.1
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
84
|
name: awesome_print
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -73,12 +101,20 @@ extensions: []
|
|
73
101
|
extra_rdoc_files:
|
74
102
|
- license.txt
|
75
103
|
files:
|
104
|
+
- .gitignore
|
105
|
+
- Gemfile
|
106
|
+
- README.md
|
107
|
+
- docs/OL_UG.odt
|
108
|
+
- docs/OL_UG.pdf
|
109
|
+
- docs/OL_UG_Version_1_1_1.pdf
|
76
110
|
- lib/option_list.rb
|
77
|
-
-
|
78
|
-
- rakefile.rb
|
111
|
+
- lib/option_list/version.rb
|
79
112
|
- license.txt
|
80
|
-
-
|
113
|
+
- option_list.gemspec
|
114
|
+
- rakefile.rb
|
81
115
|
- reek.txt
|
116
|
+
- sire.rb
|
117
|
+
- tests/option_list_test.rb
|
82
118
|
homepage: http://teuthida-technologies.com/
|
83
119
|
licenses:
|
84
120
|
- MIT
|
@@ -103,5 +139,5 @@ rubygems_version: 2.1.4
|
|
103
139
|
signing_key:
|
104
140
|
specification_version: 4
|
105
141
|
summary: Flexible, Easy Function Parameters with Validation.
|
106
|
-
test_files:
|
107
|
-
|
142
|
+
test_files: []
|
143
|
+
has_rdoc: true
|
data/README
DELETED