slop 0.1.6 → 0.1.7

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/README.md CHANGED
@@ -3,9 +3,6 @@ Slop
3
3
 
4
4
  Slop is a simple option collector with an easy to remember syntax and friendly API.
5
5
 
6
- **NOTE** This software is still unstable, it contains bugs and lacks core
7
- features
8
-
9
6
  Installation
10
7
  ------------
11
8
 
@@ -17,8 +14,14 @@ Installation
17
14
 
18
15
  git clone git://github.com/injekt/slop.git
19
16
  cd slop
20
- gem build slop.gemspec
21
- gem install slop-<version>.gem
17
+ rake install
18
+
19
+ Features Overview
20
+ -----------------
21
+
22
+ - Callbacks
23
+ - Casting
24
+ - Lists
22
25
 
23
26
  Usage
24
27
  -----
@@ -86,14 +89,6 @@ you can pass the `:as` attribute to your option.
86
89
  end
87
90
  s.value_for(:age) #=> 20 # not "20"
88
91
 
89
- Slop will also check your default attributes type to see if it can cast the new
90
- value to the same type.
91
-
92
- s = Slop.parse("--port 110") do
93
- opt(port, true, :default => 80)
94
- end
95
- s.value_for(:port) #=> 110
96
-
97
92
  Lists
98
93
  -----
99
94
 
@@ -3,7 +3,9 @@ require 'set'
3
3
  require 'slop/option'
4
4
 
5
5
  class Slop
6
- VERSION = '0.1.6'
6
+ include Enumerable
7
+
8
+ VERSION = '0.1.7'
7
9
 
8
10
  # Raised when an option expects an argument and none is given
9
11
  class MissingArgumentError < ArgumentError; end
@@ -36,16 +38,9 @@ class Slop
36
38
  raise ArgumentError, "Argument size must be no more than 4"
37
39
  end
38
40
 
39
- args.unshift nil if args.first.size > 1
40
- args.push nil if args.size == 2
41
- args.push false if args.size == 3
42
-
43
- args[2..3] = [nil, true] if args[2] == true
44
-
45
41
  attributes = [:flag, :option, :description, :argument]
46
- options = Hash[attributes.zip(args)]
42
+ options = Hash[attributes.zip(pad_options(args))]
47
43
  options.merge!(opts)
48
- options[:as] = options[:default].class if options.key?(:default)
49
44
  options[:callback] = blk if block_given?
50
45
 
51
46
  @options << Option.new(options)
@@ -127,7 +122,7 @@ class Slop
127
122
  #
128
123
  # @return [Option] the option flag or label
129
124
  def option_for(flag)
130
- @options.find do |opt|
125
+ find do |opt|
131
126
  opt.has_flag?(flag) || opt.has_option?(flag)
132
127
  end
133
128
  end
@@ -142,17 +137,31 @@ class Slop
142
137
  #
143
138
  # s.value_for(:name) #=> "Lee"
144
139
  #
145
- #
146
140
  def value_for(flag)
147
141
  return unless option = option_for(flag)
148
142
  option.argument_value
149
143
  end
150
144
  alias :[] :value_for
151
145
 
146
+ # Implement #each so our options set is enumerable
147
+ def each
148
+ return enum_for(:each) unless block_given?
149
+ @options.each { |opt| yield opt }
150
+ end
151
+
152
152
  private
153
153
 
154
154
  def flag_or_option?(flag)
155
155
  return unless flag
156
156
  flag[1, 2].include?('-')
157
157
  end
158
+
159
+ def pad_options(args)
160
+ args.unshift nil if args.first.nil? || args.first.size > 1
161
+ args.push nil if args.size < 2
162
+ args.push nil if args.size == 2
163
+ args.push false if args.size == 3
164
+ args[2..3] = [nil, true] if args[2] == true
165
+ args
166
+ end
158
167
  end
@@ -58,10 +58,10 @@ class Slop
58
58
  @argument_value ||= @default
59
59
  return unless @argument_value
60
60
 
61
- case @as.to_s
62
- when 'array', 'Array'; @argument_value.split(@delimiter, @limit)
63
- when 'integer', 'int', 'Integer'; @argument_value.to_i
64
- when 'symbol', 'sym', 'Symbol' ; @argument_value.to_sym
61
+ case @as.to_s.downcase[0, 3]
62
+ when 'arr'; @argument_value.split(@delimiter, @limit)
63
+ when 'int'; @argument_value.to_i
64
+ when 'sym'; @argument_value.to_sym
65
65
  else
66
66
  @argument_value
67
67
  end
@@ -7,6 +7,12 @@ describe Slop do
7
7
  end
8
8
  end
9
9
 
10
+ it "is enumerable" do
11
+ Enumerable.instance_methods.each do |meth|
12
+ @slop.respond_to?(meth).should be_true
13
+ end
14
+ end
15
+
10
16
  describe "::options" do
11
17
  it "should return the last set of options" do
12
18
  s = Slop.new { option(:f, :foo, "foo") }
@@ -116,4 +122,27 @@ describe Slop do
116
122
  end
117
123
  end
118
124
 
119
- end
125
+ describe "pad_options (private method)" do
126
+ before(:all) do
127
+ @args = [
128
+ [:n], [:n, :name], [:n, :name, "Desc"], [:n, :name, "Desc", true],
129
+ [:name], [:n, "Desc"], [:n, true], [:name, "Desc"], [:name, true]
130
+ ]
131
+ end
132
+
133
+ it "always returns an array of 4 elements" do
134
+ @args.each do |arr|
135
+ args = @slop.send(:pad_options, arr)
136
+ args.should be_kind_of(Array)
137
+ args.size.should == 4
138
+ end
139
+ end
140
+
141
+ it "ends with a true or false class object" do
142
+ @args.each do |arr|
143
+ [true, false].include?(@slop.send(:pad_options, arr).last).should be_true
144
+ end
145
+ end
146
+ end
147
+
148
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 6
9
- version: 0.1.6
8
+ - 7
9
+ version: 0.1.7
10
10
  platform: ruby
11
11
  authors:
12
12
  - Lee Jarvis
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-04 00:00:00 +00:00
17
+ date: 2010-12-09 00:00:00 +00:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency