ns-options 1.0.0.rc3 → 1.0.0.rc4

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.
@@ -131,11 +131,10 @@ module NsOptions
131
131
  elsif is_option_reader?(dslm)
132
132
  get_option(dslm.name)
133
133
  elsif is_option_writer?(dslm)
134
- # TODO: remove same-named opt/ns when adding the other with same name
135
134
  add_option(dslm.name) unless has_option?(dslm.name)
136
135
  begin
137
136
  set_option(dslm.name, dslm.data)
138
- rescue NsOptions::Option::CoerceError
137
+ rescue NsOptions::Option::CoerceError => err
139
138
  error! bt, err # reraise this exception with a sane backtrace
140
139
  end
141
140
  else # namespace writer or unknown
@@ -93,6 +93,8 @@ module NsOptions
93
93
  if [ ::Integer, ::Float, ::String ].include?(self.type_class)
94
94
  # ruby type conversion, i.e. String(1)
95
95
  Object.send(self.type_class.to_s, value)
96
+ elsif self.type_class == ::Fixnum
97
+ Object.send('Integer', value)
96
98
  elsif self.type_class == ::Symbol
97
99
  value.to_sym
98
100
  elsif self.type_class == ::Array
@@ -1,3 +1,3 @@
1
1
  module NsOptions
2
- VERSION = "1.0.0.rc3"
2
+ VERSION = "1.0.0.rc4"
3
3
  end
@@ -44,7 +44,7 @@ class NsOptions::Namespace
44
44
  class OptionTests < BaseTests
45
45
  desc "when adding an option named `something`"
46
46
  setup do
47
- @added_opt = @namespace.option('something', String, { :default => true })
47
+ @added_opt = @namespace.option('something', Fixnum, { :default => 1 })
48
48
  end
49
49
 
50
50
  should "have added an option to the namespace" do
@@ -52,8 +52,8 @@ class NsOptions::Namespace
52
52
 
53
53
  opt = subject.__data__.child_options[:something]
54
54
  assert_equal 'something', opt.name
55
- assert_equal String, opt.type_class
56
- assert_equal true, opt.rules[:default]
55
+ assert_equal Fixnum, opt.type_class
56
+ assert_equal 1, opt.rules[:default]
57
57
  end
58
58
 
59
59
  should "return the option it added" do
@@ -86,13 +86,24 @@ class NsOptions::Namespace
86
86
  end
87
87
 
88
88
  should "be writable through the defined writer" do
89
- assert_nothing_raised{ subject.something = "abc" }
90
- assert_equal "abc", subject.something
89
+ assert_nothing_raised{ subject.something = 2 }
90
+ assert_equal 2, subject.something
91
91
  end
92
92
 
93
93
  should "be writable through the reader with args" do
94
- assert_nothing_raised{ subject.something "123" }
95
- assert_equal "123", subject.something
94
+ assert_nothing_raised{ subject.something 3 }
95
+ assert_equal 3, subject.something
96
+ end
97
+
98
+ should "raise CoerceError when writing values not coercable to the type class" do
99
+ err = begin
100
+ subject.something = "can't be coerced to a Fixnum!"
101
+ rescue Exception => err
102
+ err
103
+ end
104
+
105
+ assert_equal NsOptions::Option::CoerceError, err.class
106
+ assert_included 'test/unit/namespace_tests.rb:', err.backtrace.first
96
107
  end
97
108
 
98
109
  end
@@ -190,29 +190,94 @@ class NsOptions::Option
190
190
 
191
191
  end
192
192
 
193
- class WithNativeTypeClassTests < BaseTests
194
- desc "with a native type class (Float)"
193
+ class WithIntegerTypeClassTests < BaseTests
194
+ desc "with an Integer type class"
195
+ setup do
196
+ @option = NsOptions::Option.new(:something, Integer)
197
+ end
198
+ subject{ @option }
199
+
200
+ should "allow setting it's value" do
201
+ subject.value = 12
202
+ assert_equal 12, subject.value
203
+ end
204
+
205
+ should "allow setting it's value with a string and convert it" do
206
+ subject.value = "13"
207
+ assert_equal "13".to_i, subject.value
208
+ end
209
+
210
+ end
211
+
212
+ class WithFixnumTypeClassTests < BaseTests
213
+ desc "with a Fixnum type class"
214
+ setup do
215
+ @option = NsOptions::Option.new(:something, Fixnum)
216
+ end
217
+ subject{ @option }
218
+
219
+ should "allow setting it's value" do
220
+ subject.value = 12
221
+ assert_equal 12, subject.value
222
+ end
223
+
224
+ should "allow setting it's value with a string and convert it" do
225
+ subject.value = "13"
226
+ assert_equal "13".to_i, subject.value
227
+ end
228
+
229
+ end
230
+
231
+ class WithFloatTypeClassTests < BaseTests
232
+ desc "with a Float type class"
195
233
  setup do
196
234
  @option = NsOptions::Option.new(:something, Float)
197
235
  end
198
236
  subject{ @option }
199
237
 
200
- should "allow setting it's value with a float" do
201
- new_value = 12.5
202
- subject.value = new_value
203
- assert_equal new_value, subject.value
238
+ should "allow setting it's value" do
239
+ subject.value = 12.5
240
+ assert_equal 12.5, subject.value
204
241
  end
205
242
 
206
243
  should "allow setting it's value with a string and convert it" do
207
- new_value = "13.4"
208
- subject.value = new_value
209
- assert_equal new_value.to_f, subject.value
244
+ subject.value = "13.4"
245
+ assert_equal "13.4".to_f, subject.value
210
246
  end
211
247
 
212
248
  should "allow setting it's value with an integer and convert it" do
213
- new_value = 1
214
- subject.value = new_value
215
- assert_equal new_value.to_f, subject.value
249
+ subject.value = 1
250
+ assert_equal 1.to_f, subject.value
251
+ end
252
+
253
+ end
254
+
255
+ class WithStringTypeClassTests < BaseTests
256
+ desc "with an String type class"
257
+ setup do
258
+ @option = NsOptions::Option.new(:something, String)
259
+ end
260
+ subject{ @option }
261
+
262
+ should "allow setting it's value" do
263
+ subject.value = "12"
264
+ assert_equal "12", subject.value
265
+ end
266
+
267
+ should "allow setting it's value with a numeric and convert it" do
268
+ subject.value = 13
269
+ assert_equal 13.to_s, subject.value
270
+
271
+ subject.value = 13.5
272
+ assert_equal 13.5.to_s, subject.value
273
+ end
274
+
275
+ should "allow setting it's value with other things and convert it" do
276
+ subject.value = true
277
+ assert_equal true.to_s, subject.value
278
+
279
+ subject.value = NsOptions
280
+ assert_equal NsOptions.to_s, subject.value
216
281
  end
217
282
 
218
283
  end
@@ -300,7 +365,7 @@ class NsOptions::Option
300
365
  @option = NsOptions::Option.new(:something, SuperSuperTestTest)
301
366
  end
302
367
 
303
- should "reraise the arg error, with a custom message and backtrace" do
368
+ should "reraise as a CoerceError with a custom message and backtrace" do
304
369
  err = begin
305
370
  @option.value = "arg error should be raised"
306
371
  rescue Exception => err
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ns-options
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1486472869
4
+ hash: -1768309136
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
9
  - 0
10
10
  - rc
11
- - 3
12
- version: 1.0.0.rc3
11
+ - 4
12
+ version: 1.0.0.rc4
13
13
  platform: ruby
14
14
  authors:
15
15
  - Collin Redding
@@ -18,7 +18,7 @@ autorequire:
18
18
  bindir: bin
19
19
  cert_chain: []
20
20
 
21
- date: 2012-11-29 00:00:00 Z
21
+ date: 2012-12-03 00:00:00 Z
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
24
24
  name: assert