option_list 0.1.6 → 0.2.0

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.
Files changed (4) hide show
  1. checksums.yaml +9 -9
  2. data/option_list.rb +18 -1
  3. data/option_list_test.rb +21 -0
  4. metadata +8 -9
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NTZjYWUzNDczZmFlZTFhNTNlNTU0YmEzZjYzNGM1OTUzZDJmNTdjNw==
4
+ MGE1NTkyMWExYjVhYmY1MzJjZmQyOWM2ODVlNmMwNWNmNjVhM2QxYg==
5
5
  data.tar.gz: !binary |-
6
- OTljOTcyODI0MDIyNzgxYjE3ZTkzNjQyOWUwZDk5NTgyZGVjYTAzMQ==
7
- !binary "U0hBNTEy":
6
+ NjAyN2M4NWQ2OGRiZGRjNWY5MTU5MGE4NjMwYjUzNzYwZjNhMDI3MQ==
7
+ SHA512:
8
8
  metadata.gz: !binary |-
9
- ODg1OWYxZGU0YmU1MmYyYjRmMTZlOGE1NGZlYWYzMDlmOTY2MjRlZmM1NzM3
10
- YTRjODM2ZDUyYzk2MDRiOGY3OWY3MmM4Zjk4ZTJiMWU3ZTRkMDcyZDQwZmZk
11
- OWUwMzRiYTMyNjcyZmZmNzYzOGYyMGZmMWNmZmQ3OWQyM2JhMGU=
9
+ MzljNzk3MzI0NjM5ZTM5NmZiZDY4YjlmMWUzNThiODc5ZjJmZmE5NjliMTk0
10
+ NGQ3ZThjNThiNTE0ZTExNGVkYmRlMGZkNzYyNDcxZjcwOWZiMTAxMjIzYmI5
11
+ YmI1OWZjNjM4MjFjNDJkMTVjM2EwNzc3NDExNDc3OWZjMTJiMTk=
12
12
  data.tar.gz: !binary |-
13
- Y2VhZjdhNDFhMjlhNDdlZjRjNTJhMmFkM2NlMTE4YTg5YzE4YmVkYWY5M2I0
14
- NmVmMWFhMWE0OWQ1YTdlZDEyNmZkZDNkZWI3MjM4NjFhYmEwNjFlNGIxZWJi
15
- MDU0OTMwODUyNDQzZDI5ZGQzN2MyYmUyZGU2ZGRiODk3MWIxNzA=
13
+ M2E4MmM2NjdjNjQ4MDA0ZmRjNDcyZGE1YTVmZjU0NmY4NTA4MDcxZDJkOGYy
14
+ YWI5ODBiNTMzNTU4ZjIxZTQzMjI1YjNmNTkwNjc0ZDAwNWQ5ODJhOGFlNzFi
15
+ YjRmMTkyYThhYTdmNDYwNThhM2ZiNDhjYWNiNTA3ODg3MzI4MjM=
@@ -69,6 +69,10 @@ class OptionList
69
69
  #==== Parameters:
70
70
  #* option_specs - The comma separated option specs, made into an array by the
71
71
  # splat operator.
72
+ #* select_block - An optional block of code that is called when selections
73
+ # have been made. This allows for custom validations to be applied at that
74
+ # point. This block should accept one argument, a reference to the option
75
+ # list object that is calling it for validation.
72
76
  #==== Dynamic Methods:
73
77
  #As option specs are added, new methods are created to allow for easy access
74
78
  #to the option information. If the above example were processed, the following
@@ -79,11 +83,12 @@ class OptionList
79
83
  #* page_len - would return the value of the :page_len category.
80
84
  #==== Exceptions:
81
85
  #* ArgumentError for a number of invalid argument conditions.
82
- def initialize(*option_specs)
86
+ def initialize(*option_specs, &select_block)
83
87
  @categories = Hash.new
84
88
  @default = Hash.new
85
89
  @selected = Hash.new
86
90
  do_add_specs(option_specs)
91
+ @select_block = select_block
87
92
  end
88
93
 
89
94
  #Add additonal option specifications to the option list. See the method new
@@ -198,9 +203,13 @@ class OptionList
198
203
  # all of the default values will be selected.
199
204
  #==== Exceptions:
200
205
  #* ArgumentError for a number of invalid argument conditions.
206
+ #==== Notes:
207
+ #After processing the selections, the selection block is called if one was
208
+ #defined in by the constructor.
201
209
  def select(selections=[])
202
210
  @selected = @default.clone
203
211
  add_selections(selections)
212
+ @select_block.call(self) unless @select_block.nil?
204
213
  end
205
214
 
206
215
  #Add/override additional selections to the option_list. See the select method
@@ -220,6 +229,12 @@ class OptionList
220
229
  end
221
230
  end
222
231
 
232
+ #Call the selection block if one was defined in by the constructor. This
233
+ #method must be used if selections are added with add_selections.
234
+ def validate
235
+ @select_block.call(self) unless @select_block.nil?
236
+ end
237
+
223
238
  private #Some more privacy, please!
224
239
 
225
240
  #Process a symbolic option selection.
@@ -252,6 +267,8 @@ class OptionList
252
267
  @selected[cat] = value
253
268
  end
254
269
  end
270
+
271
+ public
255
272
 
256
273
  #Fail with an argument error.
257
274
  def fAE(msg)
@@ -5,9 +5,25 @@ require_relative 'option_list'
5
5
  require 'minitest/autorun'
6
6
 
7
7
  class OptionListTester < MiniTest::Unit::TestCase
8
+ $do_this_only_one_time = true
9
+
10
+ def initialize(*all)
11
+ if $do_this_only_one_time
12
+ puts "Testing file: option_list.rb"
13
+ $do_this_only_one_time = false
14
+ end
15
+
16
+ super(*all)
17
+ end
18
+
8
19
  def setup
9
20
  @ol1 = OptionList.new([:history, :history, :nohistory], {:pg_len => 42})
10
21
  @ol2 = OptionList.new([:history, nil, :history, :nohistory])
22
+ @ol3 = OptionList.new([:history, nil, :history, :nohistory],
23
+ {:fuel1=>:matter, :fuel2=>:antimatter}) do |opt|
24
+ opt.fAE "The :history option must be set." if opt.history.nil?
25
+ opt.fAE "Improper fuel mix." unless opt.fuel1 == :matter && opt.fuel2 == :antimatter
26
+ end
11
27
  end
12
28
 
13
29
  def test_that_it_rejects_bad_specs
@@ -241,4 +257,9 @@ class OptionListTester < MiniTest::Unit::TestCase
241
257
  refute(@ol2.nohistory?)
242
258
  assert(@ol2.history.nil?)
243
259
  end
260
+
261
+ def test_that_the_select_block_works
262
+ assert_raises(ArgumentError) { @ol3.select() }
263
+ assert_raises(ArgumentError) { @ol3.select({:history=>:nohistory, :fuel2=>:matter}) }
264
+ end
244
265
  end
metadata CHANGED
@@ -1,16 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: option_list
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Camilleri
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-20 00:00:00.000000000 Z
11
+ date: 2013-09-22 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: A unified handler for flexible function option parameters.
13
+ description: A unified handler for flexible function option parameters. Please see
14
+ the homepage for docs.
14
15
  email: peter.c.camilleri@gmail.com
15
16
  executables: []
16
17
  extensions: []
@@ -18,16 +19,14 @@ extra_rdoc_files: []
18
19
  files:
19
20
  - option_list.rb
20
21
  - option_list_test.rb
21
- homepage: http://teuthida-technologies.com/
22
+ homepage: http://teuthida-technologies.com/?p=1506
22
23
  licenses:
23
24
  - MIT
24
25
  metadata: {}
25
26
  post_install_message:
26
- rdoc_options:
27
- - --output=doc
28
- - option_list.rb
27
+ rdoc_options: []
29
28
  require_paths:
30
- - lib
29
+ - .
31
30
  required_ruby_version: !ruby/object:Gem::Requirement
32
31
  requirements:
33
32
  - - ! '>='
@@ -41,7 +40,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
41
40
  requirements:
42
41
  - No special requirements.
43
42
  rubyforge_project:
44
- rubygems_version: 2.0.7
43
+ rubygems_version: 2.1.4
45
44
  signing_key:
46
45
  specification_version: 4
47
46
  summary: A unified handler for flexible function option parameters.