parameters 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +8 -0
- data/Manifest.txt +2 -0
- data/README.txt +1 -1
- data/lib/parameters/exceptions/missing_param.rb +1 -1
- data/lib/parameters/exceptions/param_not_found.rb +1 -1
- data/lib/parameters/instance_param.rb +2 -2
- data/lib/parameters/parameters.rb +6 -6
- data/lib/parameters/parser.rb +73 -0
- data/lib/parameters/version.rb +1 -1
- data/spec/parameters_spec.rb +2 -2
- data/spec/parser_spec.rb +40 -0
- metadata +5 -3
data/History.txt
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
=== 0.1.5 / 2009-05-06
|
2
|
+
|
3
|
+
* Added Parameters::Parser for parsing parameter values passed in from
|
4
|
+
the command-line or the web.
|
5
|
+
* Changed Parameters::MissingParam and Parameters::ParamNotFound to
|
6
|
+
inherit from StandardError.
|
7
|
+
* All specs pass on Ruby 1.9.1-p0.
|
8
|
+
|
1
9
|
=== 0.1.4 / 2009-01-17
|
2
10
|
|
3
11
|
* All specs now pass with RSpec 1.1.12.
|
data/Manifest.txt
CHANGED
@@ -9,6 +9,7 @@ lib/parameters/exceptions/param_not_found.rb
|
|
9
9
|
lib/parameters/extensions.rb
|
10
10
|
lib/parameters/extensions/meta.rb
|
11
11
|
lib/parameters/extensions/meta/object.rb
|
12
|
+
lib/parameters/parser.rb
|
12
13
|
lib/parameters/class_param.rb
|
13
14
|
lib/parameters/instance_param.rb
|
14
15
|
lib/parameters/param.rb
|
@@ -18,4 +19,5 @@ tasks/spec.rb
|
|
18
19
|
spec/spec_helper.rb
|
19
20
|
spec/helpers/test_parameters.rb
|
20
21
|
spec/helpers/inherited_parameters.rb
|
22
|
+
spec/parser_spec.rb
|
21
23
|
spec/parameters_spec.rb
|
data/README.txt
CHANGED
@@ -18,14 +18,14 @@ module Parameters
|
|
18
18
|
# Returns the value of the instance param.
|
19
19
|
#
|
20
20
|
def value
|
21
|
-
@object.instance_variable_get("@#{@name}")
|
21
|
+
@object.instance_variable_get("@#{@name}".to_sym)
|
22
22
|
end
|
23
23
|
|
24
24
|
#
|
25
25
|
# Sets the value of the instance param.
|
26
26
|
#
|
27
27
|
def value=(value)
|
28
|
-
@object.instance_variable_set("@#{@name}",value)
|
28
|
+
@object.instance_variable_set("@#{@name}".to_sym,value)
|
29
29
|
end
|
30
30
|
|
31
31
|
#
|
@@ -147,7 +147,7 @@ module Parameters
|
|
147
147
|
def initialize_parameters
|
148
148
|
self.class.each_param do |param|
|
149
149
|
# do not override existing instance value if present
|
150
|
-
unless instance_variable_get("@#{param.name}")
|
150
|
+
unless instance_variable_get("@#{param.name}".to_sym)
|
151
151
|
begin
|
152
152
|
if param.value.kind_of?(Proc)
|
153
153
|
value = param.value.call()
|
@@ -158,7 +158,7 @@ module Parameters
|
|
158
158
|
value = param.value
|
159
159
|
end
|
160
160
|
|
161
|
-
instance_variable_set("@#{param.name}",value)
|
161
|
+
instance_variable_set("@#{param.name}".to_sym,value)
|
162
162
|
end
|
163
163
|
|
164
164
|
self.params[param.name] = InstanceParam.new(self,param.name,param.description)
|
@@ -196,7 +196,7 @@ module Parameters
|
|
196
196
|
name = name.to_sym
|
197
197
|
|
198
198
|
# set the instance variable
|
199
|
-
instance_variable_set("@#{name}",options[:default])
|
199
|
+
instance_variable_set("@#{name}".to_sym,options[:default])
|
200
200
|
|
201
201
|
# add the new parameter
|
202
202
|
self.params[name] = InstanceParam.new(self,name,options[:description])
|
@@ -204,12 +204,12 @@ module Parameters
|
|
204
204
|
instance_eval %{
|
205
205
|
# define the reader method for the parameter
|
206
206
|
def #{name}
|
207
|
-
instance_variable_get("@#{name}")
|
207
|
+
instance_variable_get("@#{name}".to_sym)
|
208
208
|
end
|
209
209
|
|
210
210
|
# define the writer method for the parameter
|
211
211
|
def #{name}=(value)
|
212
|
-
instance_variable_set("@#{name}",value)
|
212
|
+
instance_variable_set("@#{name}".to_sym,value)
|
213
213
|
end
|
214
214
|
}
|
215
215
|
|
@@ -318,7 +318,7 @@ module Parameters
|
|
318
318
|
names.each do |name|
|
319
319
|
name = name.to_s
|
320
320
|
|
321
|
-
unless instance_variable_get("@#{name}")
|
321
|
+
unless instance_variable_get("@#{name}".to_sym)
|
322
322
|
raise(Parameters::MissingParam,"parameter #{name.dump} has no value",caller)
|
323
323
|
end
|
324
324
|
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
3
|
+
module Parameters
|
4
|
+
module Parser
|
5
|
+
#
|
6
|
+
# The Array of parameter patterns and their parsers.
|
7
|
+
#
|
8
|
+
def Parser.formats
|
9
|
+
@@parameters_parser_formats ||= []
|
10
|
+
end
|
11
|
+
|
12
|
+
#
|
13
|
+
# Itereates over each parameter pattern and parser, passing them to the
|
14
|
+
# specified _block_.
|
15
|
+
#
|
16
|
+
def Parser.each_format(&block)
|
17
|
+
Parser.formats.each do |format|
|
18
|
+
block.call(format[:pattern],format[:parser])
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
#
|
23
|
+
# Adds a new parameter _pattern_ using the specified _block_ as the
|
24
|
+
# parser.
|
25
|
+
#
|
26
|
+
def Parser.recognize(pattern,&block)
|
27
|
+
Parser.formats.unshift({
|
28
|
+
:pattern => pattern,
|
29
|
+
:parser => block
|
30
|
+
})
|
31
|
+
end
|
32
|
+
|
33
|
+
#
|
34
|
+
# Parses the specified _value_ string and returns the native Ruby value.
|
35
|
+
# If the _value_ matches one of the patterns within +FORMATS+,
|
36
|
+
# then the associated parser will be used to parse the _value_.
|
37
|
+
#
|
38
|
+
def Parser.parse_value(value)
|
39
|
+
Parser.each_format do |pattern,parser|
|
40
|
+
if value.match(pattern)
|
41
|
+
return parser.call(value)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
return value
|
46
|
+
end
|
47
|
+
|
48
|
+
#
|
49
|
+
# Parses the specified _name_and_value_ string of the form
|
50
|
+
# "name=value" and extracts both the _name_ and the _value_, saving
|
51
|
+
# both the _name_ and _value_ within the +params+ Hash. If the
|
52
|
+
# extracted _value_ matches one of the patterns within +FORMATS+,
|
53
|
+
# then the associated parser will first parse the _value_.
|
54
|
+
#
|
55
|
+
def Parser.parse_param(name_and_value)
|
56
|
+
name, value = name_and_value.split('=',2)
|
57
|
+
|
58
|
+
value = Parser.parse_value(value) if value
|
59
|
+
return {name.to_sym => value}
|
60
|
+
end
|
61
|
+
|
62
|
+
Parser.recognize(/^'(\\'|[^'])+'/) { |value|
|
63
|
+
value[1...-1].gsub("\\'","'")
|
64
|
+
}
|
65
|
+
Parser.recognize(/^[a-zA-Z][a-zA-Z0-9]*:\/\//) { |value| URI(value) }
|
66
|
+
Parser.recognize('false') { |value| false }
|
67
|
+
Parser.recognize('true') { |value| true }
|
68
|
+
Parser.recognize(/^[0-9]+$/) { |value| value.to_i }
|
69
|
+
Parser.recognize(/^0[0-7]+$/) { |value| value.oct }
|
70
|
+
Parser.recognize(/^0x[0-9a-fA-F]+$/) { |value| value.hex }
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
data/lib/parameters/version.rb
CHANGED
data/spec/parameters_spec.rb
CHANGED
@@ -77,10 +77,10 @@ describe Parameters do
|
|
77
77
|
end
|
78
78
|
|
79
79
|
it "should set instance variables for paramters" do
|
80
|
-
@test.instance_variable_get(
|
80
|
+
@test.instance_variable_get(:@var_with_default).should == 'thing'
|
81
81
|
|
82
82
|
@test.var = 3
|
83
|
-
@test.instance_variable_get(
|
83
|
+
@test.instance_variable_get(:@var).should == 3
|
84
84
|
end
|
85
85
|
|
86
86
|
it "should allow using lambdas for the default values of parameters" do
|
data/spec/parser_spec.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'parameters/parser'
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Parameters::Parser do
|
6
|
+
it "should parse string values" do
|
7
|
+
Parameters::Parser.parse_value("'bla \\' \\\" bla'").should == "bla ' \\\" bla"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should parse decimal values" do
|
11
|
+
Parameters::Parser.parse_value("100").should == 100
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should parse octal values" do
|
15
|
+
Parameters::Parser.parse_value("012").should == 10
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should parse hexadecimal values" do
|
19
|
+
Parameters::Parser.parse_value("0xff").should == 0xff
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should parse boolean values" do
|
23
|
+
Parameters::Parser.parse_value('true').should == true
|
24
|
+
Parameters::Parser.parse_value('false').should == false
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should parse URI values" do
|
28
|
+
url = 'http://example.com/'
|
29
|
+
|
30
|
+
Parameters::Parser.parse_value(url).should == URI(url)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should parse params of the form 'name'" do
|
34
|
+
Parameters::Parser.parse_param('var').should == {:var => nil}
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should parse params of the form 'name=value'" do
|
38
|
+
Parameters::Parser.parse_param('var1=test').should == {:var1 => 'test'}
|
39
|
+
end
|
40
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parameters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Postmodern
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-05-06 00:00:00 -07: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.
|
23
|
+
version: 1.12.2
|
24
24
|
version:
|
25
25
|
description: Parameters allows you to add annotated variables to your classes which may have configurable default values.
|
26
26
|
email:
|
@@ -45,6 +45,7 @@ files:
|
|
45
45
|
- lib/parameters/extensions.rb
|
46
46
|
- lib/parameters/extensions/meta.rb
|
47
47
|
- lib/parameters/extensions/meta/object.rb
|
48
|
+
- lib/parameters/parser.rb
|
48
49
|
- lib/parameters/class_param.rb
|
49
50
|
- lib/parameters/instance_param.rb
|
50
51
|
- lib/parameters/param.rb
|
@@ -54,6 +55,7 @@ files:
|
|
54
55
|
- spec/spec_helper.rb
|
55
56
|
- spec/helpers/test_parameters.rb
|
56
57
|
- spec/helpers/inherited_parameters.rb
|
58
|
+
- spec/parser_spec.rb
|
57
59
|
- spec/parameters_spec.rb
|
58
60
|
has_rdoc: true
|
59
61
|
homepage: http://parameters.rubyforge.org/
|