optparse-range 0.0.2 → 0.0.3

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.
@@ -45,35 +45,43 @@ When only one argument passed, it will be handled as both start and end:
45
45
  opts #=> {"port"=>8080..8080}
46
46
 
47
47
  You can replace `OptionParser::DecimalIntegerRange` in above example with other type of `Range`.
48
- Currently provided:
48
+ See below for types currently provided.
49
49
 
50
- ### `OptionParser::DecimalIntegerRange` ###
50
+ ### Supported Types ###
51
+
52
+ #### `OptionParser::DecimalIntegerRange` ####
51
53
 
52
54
  * decimal `Integer` range
53
55
  * `--number=1-5` => `1..5`
54
56
  * only zero or positive integers are supported currently
55
57
 
56
- ### `OptionParser::FloatRange` ###
58
+ #### `OptionParser::FloatRange` ####
57
59
 
58
60
  * `Float` range
59
61
  * `--ratio=1.2-1.5` => `1.2..1.5`
60
62
  * only zero or positive floats are supported currently
61
63
 
62
- ### `OptionParser::DateRange` ###
64
+ #### `OptionParser::DateRange` ####
63
65
  * `Date` range
64
66
  * `--trip=0810-0820` => `#<Date: 2012-08-10 ((2456150j,0s,0n),+0s,2299161j)>..#<Date: 2012-08-20 ((2456160j,0s,0n),+0s,2299161j)>`
67
+ * format including hyphen is not supported currently
68
+ * `--trip=2012-08-10-2012-08-20` => `OptionParser::AmbiguousArgument` raised
65
69
 
66
- ### `OptionParser::DateTimeRange` ###
70
+ #### `OptionParser::DateTimeRange` ####
67
71
 
68
72
  * `DateTime` range
69
73
  * `--flight=0810T10:00-0810T12:20` => `#<DateTime: 2012-08-10T10:00:00+00:00 ((2456150j,36000s,0n),+0s,2299161j)>..#<DateTime: 2012-08-10T12:20:00+00:00 ((2456150j,44400s,0n),+0s,2299161j)>`
74
+ * format including hyphen is not supported currently
75
+ * `--trip=2012-08-10T10:00:00-2012-08-20T19:30:00` => `OptionParser::AmbiguousArgument` raised
70
76
 
71
- ### `OptionParser::TimeRange` ###
77
+ #### `OptionParser::TimeRange` ####
72
78
 
73
79
  * `Time` range
74
80
  * `--flight=10:00-12:20` => `>2012-07-29 10:00:00 +0900..2012-07-29 12:20:00 +0900`
81
+ * format including hyphen is not supported currently
82
+ * `--trip=2012-08-10T10:00:00-2012-08-20T19:30:00` => `OptionParser::AmbiguousArgument` raised
75
83
 
76
- ### `OptionParser::StringRange` ###
84
+ #### `OptionParser::StringRange` ####
77
85
 
78
86
  * `String` range
79
87
  * `--password-chars=A-Z` => `"A".."Z"`
@@ -84,9 +92,13 @@ Adding Type of Rnage
84
92
  To add a type of range, use `OptionParser.accept_range`.
85
93
 
86
94
  1. Define class which can be used as points of `Range`(`MyClass` here).
87
- 2. Define class or `Regexp` which allows `OptionParser` to accept class above as the points of `Range`(`MyClassRange`). Class is recommended.
88
- 3. Pass the class and `Symbol` or `Proc` which converts a command line option(`String`) to an object of point(`MyClass`). `lambda` is used here. `to_proc` will be called when `Symbol` is passed.
89
- 4. Now, you can pass the class for range(`MyClassRange`) to `OptionParser#on` and use the option argument as `Range`.
95
+ 2. Define class or `Regexp` which allows `OptionParser` to accept class above
96
+ as the points of `Range`(`MyClassRange`). Class is recommended.
97
+ 3. Pass the class and block, `Symbol` or `Proc` which
98
+ converts a point in command line option(`String`) to an object of point(`MyClass`).
99
+ Block is used here. `to_proc` will be called when `Symbol` is passed.
100
+ 4. Now, you can pass the class for range(`MyClassRange`) to `OptionParser#on`
101
+ and use the option argument as `Range`.
90
102
 
91
103
  Example:
92
104
 
@@ -112,7 +124,9 @@ Example:
112
124
  end
113
125
 
114
126
  class MyClassRange; end
115
- OptionParser.accept_range MyClassRange, lambda {|range| MyClass.parse range}
127
+ OptionParser.accept_range MyClassRange do |point_of_range|
128
+ MyClass.parse point_of_range
129
+ end
116
130
 
117
131
  opts = OptionParser.new do |opti|
118
132
  opti.on '--myoption=MYSTART-MYEND', MyClassRange
@@ -134,6 +148,8 @@ Todos
134
148
  * List of range(--page=1-3,6-7)
135
149
  * API for `Range` excluding the end point(`1...5` in result)
136
150
  * Range with single point, such like --age=-18(under 18) or --page=192-(all after page 192)
151
+ * Alternate delimiters
152
+ * Parsing `Date` such like "2012-07-23"(including "-")
137
153
 
138
154
  Contributing
139
155
  ------------
@@ -148,7 +164,7 @@ Links
148
164
  -----
149
165
 
150
166
  * [Homepage and source code][repo]
151
- * [Referencees][rubydoc]
167
+ * [API Documentation][rubydoc]
152
168
 
153
169
  [optparse]: http://rubydoc.info/stdlib/optparse/frames
154
170
  [slop]: https://github.com/injekt/slop
@@ -2,12 +2,13 @@ require 'optparse'
2
2
 
3
3
  class OptionParser
4
4
  class << self
5
- def accept_range(accepter, converter)
5
+ def accept_range(accepter, converter=nil, &block)
6
6
  accept accepter do |range,|
7
7
  return range unless range
8
8
  points = range.split('-')
9
9
  raise AmbiguousArgument if points.length > 2
10
10
  points << points.first if points.length == 1
11
+ converter = block if block
11
12
  Range.new *points.map(&converter)
12
13
  end
13
14
  end
@@ -21,57 +22,39 @@ class OptionParser
21
22
  FloatRange = /#{float}-#{float}/io
22
23
  accept_range FloatRange, :to_f
23
24
 
24
- class DateRange
25
- class << self
26
- attr_reader :converter
25
+ class StringRange; end
26
+ accept_range StringRange, :to_s
27
+
28
+ class DateRange; end
29
+ accept_range DateRange do |date|
30
+ begin
31
+ Date.parse date
32
+ rescue NameError
33
+ retry if require 'date'
34
+ rescue ArgumentError
35
+ raise InvalidArgument, date
27
36
  end
28
- @converter = lambda {|date|
29
- begin
30
- Date.parse date
31
- rescue NameError
32
- require 'date'
33
- retry
34
- rescue ArgumentError
35
- raise InvalidArgument, date
36
- end
37
- }
38
37
  end
39
- accept_range DateRange, DateRange.converter
40
38
 
41
- class DateTimeRange
42
- class << self
43
- attr_reader :converter
39
+ class DateTimeRange; end
40
+ accept_range DateTimeRange do |dt|
41
+ begin
42
+ DateTime.parse dt
43
+ rescue NameError
44
+ retry if require 'date'
45
+ rescue ArgumentError
46
+ raise InvalidArgument, dt
44
47
  end
45
- @converter = lambda {|dt|
46
- begin
47
- DateTime.parse dt
48
- rescue NameError
49
- require 'date'
50
- retry
51
- rescue ArgumentError
52
- raise InvalidArgument, dt
53
- end
54
- }
55
48
  end
56
- accept_range DateTimeRange, DateTimeRange.converter
57
49
 
58
- class TimeRange
59
- class << self
60
- attr_reader :converter
50
+ class TimeRange; end
51
+ accept_range TimeRange do |time|
52
+ begin
53
+ Time.httpdate(time) rescue Time.parse(time)
54
+ rescue NoMethodError
55
+ retry if require 'time'
56
+ rescue
57
+ raise InvalidArgument, time
61
58
  end
62
- @converter = lambda {|time|
63
- begin
64
- Time.httpdate(time) rescue Time.parse(time)
65
- rescue NoMethodError
66
- require 'time'
67
- retry
68
- rescue
69
- raise InvalidArgument, time
70
- end
71
- }
72
59
  end
73
- accept_range TimeRange, TimeRange.converter
74
-
75
- class StringRange; end
76
- accept_range StringRange, :to_s
77
60
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = "optparse-range"
3
- gem.version = '0.0.2'
3
+ gem.version = '0.0.3'
4
4
  gem.authors = ["KITAITI Makoto"]
5
5
  gem.email = ["KitaitiMakoto@gmail.com"]
6
6
  gem.description = %q{This RubyGem allows standard bundled `OptionParser` to accept option arguments as `Range` object.}
@@ -1,4 +1,3 @@
1
- $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
1
  require 'test/unit'
3
2
  require 'optparse/range'
4
3
 
@@ -41,6 +40,12 @@ class TestOptionParserRange < Test::Unit::TestCase
41
40
  assert_equal 'A'..'Z', parse_option(OptionParser::StringRange, 'A-Z')
42
41
  end
43
42
 
43
+ def test_ambiguous_argument
44
+ assert_raise OptionParser::AmbiguousArgument do
45
+ parse_option OptionParser::DateRange, '2012-07-31-2012-08-01'
46
+ end
47
+ end
48
+
44
49
  private
45
50
 
46
51
  def parse_option(accepter, arg)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: optparse-range
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-29 00:00:00.000000000Z
12
+ date: 2012-08-08 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &9890840 !ruby/object:Gem::Requirement
16
+ requirement: &15293440 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *9890840
24
+ version_requirements: *15293440
25
25
  description: This RubyGem allows standard bundled `OptionParser` to accept option
26
26
  arguments as `Range` object.
27
27
  email:
@@ -41,7 +41,6 @@ files:
41
41
  - lib/optparse/range.rb
42
42
  - optparse-range.gemspec
43
43
  - test/test_range.rb
44
- - test/test_range.rb~
45
44
  homepage: https://github.com/KitaitiMakoto/optparse-range
46
45
  licenses:
47
46
  - Ruby
@@ -58,7 +57,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
58
57
  version: '0'
59
58
  segments:
60
59
  - 0
61
- hash: -3406969379377498209
60
+ hash: -114764199510757300
62
61
  required_rubygems_version: !ruby/object:Gem::Requirement
63
62
  none: false
64
63
  requirements:
@@ -67,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
67
66
  version: '0'
68
67
  segments:
69
68
  - 0
70
- hash: -3406969379377498209
69
+ hash: -114764199510757300
71
70
  requirements: []
72
71
  rubyforge_project:
73
72
  rubygems_version: 1.8.8
@@ -76,4 +75,3 @@ specification_version: 3
76
75
  summary: Range command line arguments handling
77
76
  test_files:
78
77
  - test/test_range.rb
79
- - test/test_range.rb~
@@ -1 +0,0 @@
1
- require 'test/unit'