slop 3.0.0.rc1 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES.md CHANGED
@@ -1,3 +1,34 @@
1
+ 3.0.0 (2012-01-24)
2
+ ------------------
3
+
4
+ * value_to_range returns an x..x range if the value looks like an integer.
5
+ * Lots of code refactoring
6
+ * Use TomDoc documentation
7
+ * Added `Slop::Commands` and removed existing command system
8
+ * Configuration options altered:
9
+ * `:optional` has been renamed to `:optional_argument`
10
+ * Added `:required` for mandatory options
11
+ * `:argument` now accepts an `:optional` symbol as well as boolean value
12
+ * Removed Slop instance methods:
13
+ * description=, description
14
+ * summary=, summary
15
+ * command
16
+ * on_empty
17
+ * on_noopts
18
+ * execute
19
+ * to_struct
20
+ * Added Slop instance methods:
21
+ * separator
22
+ * fetch_option
23
+ * add_callback
24
+
25
+ 2.4.3 (2012-01-16)
26
+ ------------------
27
+
28
+ * Allow the `:as` option to accept an object responding to :call for
29
+ custom type conversions (#45)
30
+ * Ensure negative integers are not parsed as possible options (#46)
31
+
1
32
  2.4.2 (2011-12-18)
2
33
  ------------------
3
34
 
data/README.md CHANGED
@@ -3,6 +3,8 @@ Slop
3
3
 
4
4
  Slop is a simple option parser with an easy to remember syntax and friendly API.
5
5
 
6
+ This README is targeted at Slop v3.
7
+
6
8
  Installation
7
9
  ------------
8
10
 
@@ -48,10 +50,6 @@ on :p, :password, 'Your password', :optional_argument => true
48
50
  on '-p', 'password=?', 'Your password'
49
51
  ```
50
52
 
51
- For more information about creating options, see the
52
- [Creating Options](https://github.com/injekt/slop/wiki/Creating-Options)
53
- wiki page.
54
-
55
53
  You can also return your options as a Hash:
56
54
 
57
55
  ```ruby
@@ -91,7 +89,6 @@ Check out the following wiki pages for more features:
91
89
 
92
90
  * [Ranges](https://github.com/injekt/slop/wiki/Ranges)
93
91
  * [Auto Create](https://github.com/injekt/slop/wiki/Auto-Create)
94
- * [Commands](https://github.com/injekt/slop/wiki/Commands)
95
92
 
96
93
  Woah woah, why you hating on OptionParser?
97
94
  ------------------------------------------
@@ -2,7 +2,9 @@ require 'slop/option'
2
2
  require 'slop/commands'
3
3
 
4
4
  class Slop
5
- VERSION = '3.0.0.rc1'
5
+ include Enumerable
6
+
7
+ VERSION = '3.0.0'
6
8
 
7
9
  # The main Error class, all Exception classes inherit from this class.
8
10
  class Error < StandardError; end
@@ -228,6 +230,11 @@ class Slop
228
230
  end
229
231
  alias to_h to_hash
230
232
 
233
+ # Enumerable interface. Yields each Slop::Option.
234
+ def each(&block)
235
+ options.each(&block)
236
+ end
237
+
231
238
  # Check for an options presence.
232
239
  #
233
240
  # Examples:
@@ -40,7 +40,7 @@ class Slop
40
40
  #
41
41
  # Returns the newly created Slop instance mapped to command.
42
42
  def on(command, config = {}, &block)
43
- commands[command] = Slop.new(@config.merge(config), &block)
43
+ commands[command.to_s] = Slop.new(@config.merge(config), &block)
44
44
  end
45
45
 
46
46
  # Add a Slop instance used when no other commands exist.
@@ -50,7 +50,7 @@ class Slop
50
50
  #
51
51
  # Returns the newly created Slop instance mapped to default.
52
52
  def default(config = {}, &block)
53
- commands['default'] = Slop.new(@config.merge(config), &block)
53
+ on('default', config, &block)
54
54
  end
55
55
 
56
56
  # Add a global Slop instance.
@@ -60,7 +60,7 @@ class Slop
60
60
  #
61
61
  # Returns the newly created Slop instance mapped to global.
62
62
  def global(config = {}, &block)
63
- commands['global'] = Slop.new(@config.merge(config), &block)
63
+ on('global', config, &block)
64
64
  end
65
65
 
66
66
  # Fetch the instance of Slop tied to a command.
@@ -129,19 +129,23 @@ class Slop
129
129
 
130
130
  private
131
131
 
132
- # Convert an object to a Range if possible. If this method is passed
133
- # what does *not* look like a Range, but looks like an Integer of some
134
- # sort, it will call #to_i on the Object and return the Integer
135
- # representation.
132
+ # Convert an object to a Range if possible.
136
133
  #
137
134
  # value - The Object we want to convert to a range.
138
135
  #
139
136
  # Returns the Range value if one could be found, else the original object.
140
137
  def value_to_range(value)
141
- if value.to_s =~ /\A(?:\-?\d+|(-?\d+?)(\.\.\.?|-|,)(-?\d+))\z/
142
- $1 ? Range.new($1.to_i, $3.to_i, $2 == '...') : value.to_i
138
+ case value.to_s
139
+ when /\A(\-?\d+)\z/
140
+ Range.new($1.to_i, $1.to_i)
141
+ when /\A(-?\d+?)(\.\.\.?|-|,)(-?\d+)\z/
142
+ Range.new($1.to_i, $3.to_i, $2 == '...')
143
143
  else
144
- value
144
+ if @slop.config[:strict]
145
+ raise InvalidArgumentError, "#{value} could not be coerced into Range"
146
+ else
147
+ value
148
+ end
145
149
  end
146
150
  end
147
151
 
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'slop'
3
- s.version = '3.0.0.rc1'
3
+ s.version = '3.0.0'
4
4
  s.summary = 'Option gathering made easy'
5
5
  s.description = 'A simple DSL for gathering options and parsing the command line'
6
6
  s.author = 'Lee Jarvis'
@@ -66,6 +66,10 @@ class OptionTest < TestCase
66
66
  assert_equal (1...10), option_value(%w/-r 1...10/, :r=, :as => Range)
67
67
  assert_equal (-1..10), option_value(%w/-r -1..10/, :r=, :as => Range)
68
68
  assert_equal (1..-10), option_value(%w/-r 1..-10/, :r=, :as => Range)
69
+ assert_equal (1..1), option_value(%w/-r 1/, :r=, :as => Range)
70
+
71
+ opts = Slop.new(:strict => true) { on :r=, :as => Range }
72
+ assert_raises(Slop::InvalidArgumentError) { opts.parse %w/-r abc/ }
69
73
  end
70
74
 
71
75
  test "array type cast" do
@@ -23,6 +23,14 @@ class SlopTest < TestCase
23
23
  $stderr = STDERR
24
24
  end
25
25
 
26
+ test "includes Enumerable" do
27
+ assert_includes Slop.included_modules, Enumerable
28
+ end
29
+
30
+ test "enumerates Slop::Option objects in #each" do
31
+ Slop.new { on :f; on :b; }.each { |o| assert_kind_of Slop::Option, o }
32
+ end
33
+
26
34
  test "build_option" do
27
35
  assert_equal ['f', nil, nil, {}], build_option(:f)
28
36
  assert_equal [nil, 'foo', nil, {}], build_option(:foo)
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slop
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.rc1
5
- prerelease: 6
4
+ version: 3.0.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Lee Jarvis
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-20 00:00:00.000000000 Z
12
+ date: 2012-01-24 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A simple DSL for gathering options and parsing the command line
15
15
  email: lee@jarvis.co
@@ -45,9 +45,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
45
45
  required_rubygems_version: !ruby/object:Gem::Requirement
46
46
  none: false
47
47
  requirements:
48
- - - ! '>'
48
+ - - ! '>='
49
49
  - !ruby/object:Gem::Version
50
- version: 1.3.1
50
+ version: '0'
51
51
  requirements: []
52
52
  rubyforge_project:
53
53
  rubygems_version: 1.8.11