foraneus 0.0.14 → 0.0.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -7
- data/lib/foraneus.rb +36 -110
- data/lib/foraneus/utils.rb +86 -0
- data/spec/lib/foraneus_spec.rb +34 -10
- metadata +60 -52
- data/spec/spec_helper_its.rb +0 -42
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
5
|
-
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d581bebcc546182ffb84546ff4fb8ad667ee126f
|
4
|
+
data.tar.gz: 241b1dfc78a1837a6ec6404904ab1a4b1f6d3125
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 457b8493632fb86f01ea610b164f05df68c0f85f156ab26d3c7fe98ee62a2262c9a2281dd037f636ffb31fac42b49f68ad66386dcd264db5023134d9ef0fbe15
|
7
|
+
data.tar.gz: 4c668906d942e090e563b7ec8a8241c4cfa1cb42096bad58146c168aca89672cdd82b1a92c99896fd8bcf7af7c354d5a9e525fb7a32122f9900103fc4060d52d
|
data/lib/foraneus.rb
CHANGED
@@ -10,13 +10,14 @@ require 'foraneus/converters/integer'
|
|
10
10
|
require 'foraneus/converters/noop'
|
11
11
|
require 'foraneus/converters/string'
|
12
12
|
require 'foraneus/errors'
|
13
|
+
require 'foraneus/utils'
|
13
14
|
|
14
15
|
# Foraneus base class used to declare a data set, aka 'form'.
|
15
16
|
class Foraneus
|
16
17
|
|
17
18
|
# @api private
|
18
19
|
def initialize
|
19
|
-
@_ = {}
|
20
|
+
@_ = {} # Hash that holds external representation data
|
20
21
|
end
|
21
22
|
|
22
23
|
# Declares a boolean field.
|
@@ -99,6 +100,11 @@ class Foraneus
|
|
99
100
|
@fields ||= {}
|
100
101
|
end
|
101
102
|
|
103
|
+
# Return the names of data and error accessors
|
104
|
+
#
|
105
|
+
# Returned hash contains the keys :data and :errors, where values are the proper accesor names
|
106
|
+
#
|
107
|
+
# @return [Hash]
|
102
108
|
def self.accessors
|
103
109
|
@accessors ||= {
|
104
110
|
:data => :data,
|
@@ -106,11 +112,14 @@ class Foraneus
|
|
106
112
|
}
|
107
113
|
end
|
108
114
|
|
115
|
+
# Create a new instance while setting up data and error accessors
|
116
|
+
#
|
117
|
+
# @return [Foraneus]
|
109
118
|
def self.create_instance
|
110
119
|
instance = self.new
|
111
120
|
|
112
|
-
|
113
|
-
|
121
|
+
Utils.singleton_attr_accessor(instance, :data, {})
|
122
|
+
Utils.singleton_attr_accessor(instance, :errors, {})
|
114
123
|
|
115
124
|
instance
|
116
125
|
end
|
@@ -122,24 +131,12 @@ class Foraneus
|
|
122
131
|
# @return [Foraneus] An instance of a form.
|
123
132
|
def self.parse(data = {})
|
124
133
|
instance = self.create_instance
|
134
|
+
data = data.dup
|
125
135
|
|
126
|
-
|
136
|
+
instance.instance_variable_set(:@_, data.dup)
|
127
137
|
|
128
138
|
fields.each do |field, converter|
|
129
|
-
|
130
|
-
v = data.fetch(given_key) do
|
131
|
-
given_key = field.to_sym
|
132
|
-
data.fetch(given_key, nil)
|
133
|
-
end
|
134
|
-
|
135
|
-
parsed_keys << given_key
|
136
|
-
__parse_raw_datum(given_key, v, instance, converter)
|
137
|
-
end
|
138
|
-
|
139
|
-
data.each do |k, v|
|
140
|
-
unless parsed_keys.include?(k)
|
141
|
-
instance[k] = v
|
142
|
-
end
|
139
|
+
__parse_field(data, field, converter, instance)
|
143
140
|
end
|
144
141
|
|
145
142
|
instance
|
@@ -152,16 +149,12 @@ class Foraneus
|
|
152
149
|
# @return [Foraneus] An instance of a form.
|
153
150
|
def self.raw(data = {})
|
154
151
|
instance = self.create_instance
|
152
|
+
data = data.dup
|
155
153
|
|
156
|
-
|
157
|
-
given_key = field
|
158
|
-
|
159
|
-
v = data.fetch(given_key) do
|
160
|
-
given_key = field.to_sym
|
161
|
-
data.fetch(given_key, nil)
|
162
|
-
end
|
154
|
+
instance.send("#{self.accessors[:data]}=", data)
|
163
155
|
|
164
|
-
|
156
|
+
fields.each do |field, converter|
|
157
|
+
__raw_field(data, field, converter, instance)
|
165
158
|
end
|
166
159
|
|
167
160
|
instance
|
@@ -174,8 +167,8 @@ class Foraneus
|
|
174
167
|
if m.nil?
|
175
168
|
@_
|
176
169
|
else
|
177
|
-
@_.fetch(m) do
|
178
|
-
@_[m.
|
170
|
+
@_.fetch(m.to_s) do
|
171
|
+
@_[m.to_sym]
|
179
172
|
end
|
180
173
|
end
|
181
174
|
end
|
@@ -198,100 +191,33 @@ class Foraneus
|
|
198
191
|
@errors.empty?
|
199
192
|
end
|
200
193
|
|
201
|
-
|
202
|
-
|
203
|
-
# Parses a value and assigns it to the corresponding field.
|
204
|
-
#
|
205
|
-
# It also registers errors if the conversion fails.
|
206
|
-
#
|
207
|
-
# @param [String, Symbol] k
|
208
|
-
# @param [String] v
|
209
|
-
# @param [Foraneus] foraneus
|
210
|
-
# @param [Converter] converter
|
211
|
-
def self.__parse_raw_datum(k, v, foraneus, converter)
|
212
|
-
field = k.to_s
|
213
|
-
|
214
|
-
foraneus[k] = v
|
215
|
-
|
216
|
-
v = __parse(k, v, converter)
|
194
|
+
def self.__parse_field(data, field, converter, instance)
|
195
|
+
s, is_present = Utils.fetch(data, field)
|
217
196
|
|
218
|
-
|
219
|
-
foraneus.send(self.accessors[:data])[k] = v
|
197
|
+
v, error = Utils.parse_datum(field, s, converter)
|
220
198
|
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
end
|
225
|
-
private_class_method :__parse_raw_datum
|
226
|
-
|
227
|
-
# @api private
|
228
|
-
#
|
229
|
-
# Parses a raw value.
|
230
|
-
#
|
231
|
-
# @param [String, Symbol] field
|
232
|
-
# @param [String] v Raw value.
|
233
|
-
# @param converter
|
234
|
-
#
|
235
|
-
# @raise [KeyError] if converter requires a value but no one is given.
|
236
|
-
#
|
237
|
-
# @return [Object]
|
238
|
-
def self.__parse(field, v, converter)
|
239
|
-
if v == '' && converter.opts.fetch(:blanks_as_nil, true)
|
240
|
-
v = nil
|
199
|
+
unless error
|
200
|
+
instance.send("#{field}=", v)
|
201
|
+
instance.send(self.accessors[:data])[field.to_sym] = v if is_present || converter.opts.include?(:default)
|
241
202
|
end
|
242
203
|
|
243
|
-
|
244
|
-
raise KeyError, "required parameter not found: #{field.inspect}"
|
245
|
-
elsif v.nil?
|
246
|
-
converter.opts[:default]
|
247
|
-
else
|
248
|
-
converter.parse(v)
|
249
|
-
end
|
204
|
+
instance.send(self.accessors[:errors])[field.to_sym] = error if error
|
250
205
|
end
|
251
|
-
private_class_method :
|
206
|
+
private_class_method :__parse_field
|
252
207
|
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
# It also registers errors if the conversion fails.
|
258
|
-
#
|
259
|
-
# @param [String, Symbol] k
|
260
|
-
# @param [String] v
|
261
|
-
# @param [Foraneus] foraneus
|
262
|
-
# @param [Converter] converter
|
263
|
-
def self.__raw_datum(k, v, foraneus, converter)
|
264
|
-
foraneus.send("#{k}=", v)
|
208
|
+
def self.__raw_field(data, field, converter, instance)
|
209
|
+
v, is_present = Utils.fetch(data, field)
|
210
|
+
|
211
|
+
instance.send("#{field}=", v)
|
265
212
|
|
266
213
|
if v.nil?
|
267
214
|
v = converter.opts[:default]
|
268
215
|
end
|
269
216
|
|
270
|
-
s =
|
271
|
-
converter.raw(v)
|
272
|
-
end
|
273
|
-
|
274
|
-
foraneus[k] = s
|
275
|
-
foraneus.send(self.accessors[:data])[k] = v
|
276
|
-
end
|
277
|
-
private_class_method :__raw_datum
|
278
|
-
|
279
|
-
# @api private
|
280
|
-
#
|
281
|
-
# Creates a singleton attribute reader on an instance.
|
282
|
-
#
|
283
|
-
# @param [Foraneus] instance
|
284
|
-
# @param [Symbol] attribute
|
285
|
-
# @param initial_value
|
286
|
-
def self.__singleton_attr_reader(instance, attribute, initial_value = nil)
|
287
|
-
spec = instance.class
|
217
|
+
s = Utils.raw_datum(v, converter)
|
288
218
|
|
289
|
-
instance.
|
290
|
-
|
291
|
-
instance.instance_exec do
|
292
|
-
instance.instance_variable_set(:"@#{spec.accessors[attribute]}", initial_value)
|
293
|
-
end
|
219
|
+
instance[field.to_sym] = s if is_present || converter.opts.include?(:default)
|
294
220
|
end
|
295
|
-
private_class_method :
|
221
|
+
private_class_method :__raw_field
|
296
222
|
|
297
223
|
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
class Foraneus
|
2
|
+
module Utils
|
3
|
+
|
4
|
+
# Return the value of a key in the given hash and flag indicating whether the keys exists or not
|
5
|
+
#
|
6
|
+
# If the given key is not present then tries fetching key#to_sym
|
7
|
+
#
|
8
|
+
# @param [Hash] data
|
9
|
+
# @param [String] field
|
10
|
+
#
|
11
|
+
# @return [Object, Boolean]
|
12
|
+
def self.fetch(hash, key)
|
13
|
+
v = nil
|
14
|
+
is_present = true
|
15
|
+
|
16
|
+
v = hash.fetch(key) do
|
17
|
+
hash.fetch(key.to_sym) do
|
18
|
+
is_present = false
|
19
|
+
nil
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
[v, is_present]
|
24
|
+
end
|
25
|
+
|
26
|
+
# Parses a raw value.
|
27
|
+
#
|
28
|
+
# @param [String, Symbol] field
|
29
|
+
# @param [String] s Raw value.
|
30
|
+
# @param converter
|
31
|
+
#
|
32
|
+
# @raise [KeyError] if converter requires a value but no one is given.
|
33
|
+
#
|
34
|
+
# @return [Object, nil] when parsing succeeds
|
35
|
+
# @return [nil, Foraneus::Error] when parsing fails
|
36
|
+
def self.parse_datum(field, s, converter)
|
37
|
+
if s == '' && converter.opts.fetch(:blanks_as_nil, true)
|
38
|
+
s = nil
|
39
|
+
end
|
40
|
+
|
41
|
+
if s.nil? && converter.opts[:required]
|
42
|
+
raise KeyError, "required parameter not found: #{field.inspect}"
|
43
|
+
end
|
44
|
+
|
45
|
+
result = if s.nil?
|
46
|
+
converter.opts[:default]
|
47
|
+
|
48
|
+
else
|
49
|
+
converter.parse(s)
|
50
|
+
end
|
51
|
+
|
52
|
+
[result, nil]
|
53
|
+
|
54
|
+
rescue
|
55
|
+
error = Foraneus::Error.new($!.class.name, $!.message)
|
56
|
+
|
57
|
+
[nil, error]
|
58
|
+
end
|
59
|
+
|
60
|
+
# Obtains a raw representation of a value and assigns it to the corresponding field.
|
61
|
+
#
|
62
|
+
# @param [Object] v
|
63
|
+
# @param [Converter] converter
|
64
|
+
#
|
65
|
+
# @return [String]
|
66
|
+
def self.raw_datum(v, converter)
|
67
|
+
converter.raw(v) unless v.nil?
|
68
|
+
end
|
69
|
+
|
70
|
+
# Creates a singleton attribute accessor on an instance.
|
71
|
+
#
|
72
|
+
# @param [Foraneus] instance
|
73
|
+
# @param [Symbol] attribute
|
74
|
+
# @param initial_value
|
75
|
+
def self.singleton_attr_accessor(instance, attribute, initial_value = nil)
|
76
|
+
spec = instance.class
|
77
|
+
|
78
|
+
instance.singleton_class.send(:attr_accessor, spec.accessors[attribute])
|
79
|
+
|
80
|
+
instance.instance_exec do
|
81
|
+
instance.instance_variable_set(:"@#{spec.accessors[attribute]}", initial_value)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
data/spec/lib/foraneus_spec.rb
CHANGED
@@ -82,9 +82,10 @@ describe Foraneus do
|
|
82
82
|
|
83
83
|
assert_equal 5, subject.delay
|
84
84
|
assert_equal 5, subject.data[:delay]
|
85
|
+
assert_equal({ :delay => 5 }, subject.data)
|
85
86
|
|
86
87
|
assert_equal '5', subject[:delay]
|
87
|
-
|
88
|
+
assert_equal '5', subject['delay']
|
88
89
|
assert_equal({ :delay => '5' }, subject[])
|
89
90
|
|
90
91
|
assert subject.valid?
|
@@ -98,7 +99,8 @@ describe Foraneus do
|
|
98
99
|
it 'parses given data' do
|
99
100
|
assert_equal '5', subject['delay']
|
100
101
|
assert_equal '5', subject[:delay]
|
101
|
-
|
102
|
+
|
103
|
+
assert_equal({ :delay => 5 }, subject.data)
|
102
104
|
|
103
105
|
assert_equal({ 'delay' => '5' }, subject[])
|
104
106
|
end
|
@@ -267,11 +269,7 @@ describe Foraneus do
|
|
267
269
|
|
268
270
|
assert_equal 1, subject.delay
|
269
271
|
|
270
|
-
assert_equal 1, subject.data
|
271
|
-
|
272
|
-
assert_nil subject[:delay]
|
273
|
-
|
274
|
-
assert_nil subject[][:delay]
|
272
|
+
assert_equal({ :delay => 1}, subject.data)
|
275
273
|
|
276
274
|
refute subject.errors.include?(:delay)
|
277
275
|
end
|
@@ -289,6 +287,21 @@ describe Foraneus do
|
|
289
287
|
assert_nil subject[:delay]
|
290
288
|
end
|
291
289
|
end
|
290
|
+
|
291
|
+
describe 'when missing optional field' do
|
292
|
+
let(:converter) { Foraneus::Converters::Integer.new(:required => false) }
|
293
|
+
|
294
|
+
subject { form_spec.parse }
|
295
|
+
|
296
|
+
it 'parses' do
|
297
|
+
assert subject.valid?
|
298
|
+
|
299
|
+
assert_nil subject.delay
|
300
|
+
refute_includes subject.data, :delay
|
301
|
+
|
302
|
+
refute_includes subject[], :delay
|
303
|
+
end
|
304
|
+
end
|
292
305
|
end
|
293
306
|
end
|
294
307
|
end
|
@@ -303,7 +316,7 @@ describe Foraneus do
|
|
303
316
|
|
304
317
|
assert_equal '5', subject[:delay]
|
305
318
|
|
306
|
-
assert_equal '5', subject[]
|
319
|
+
assert_equal({ :delay => '5' }, subject[])
|
307
320
|
|
308
321
|
assert subject.valid?
|
309
322
|
|
@@ -320,7 +333,7 @@ describe Foraneus do
|
|
320
333
|
|
321
334
|
assert_equal '5', subject[:delay]
|
322
335
|
|
323
|
-
assert_equal '5', subject[]
|
336
|
+
assert_equal({ :delay => '5' }, subject[])
|
324
337
|
|
325
338
|
assert subject.valid?
|
326
339
|
|
@@ -349,11 +362,22 @@ describe Foraneus do
|
|
349
362
|
|
350
363
|
it 'parses' do
|
351
364
|
assert_nil subject.delay
|
365
|
+
refute_includes subject.data, :delay
|
352
366
|
|
353
367
|
assert_equal '1', subject[:delay]
|
354
368
|
assert_equal '1', subject[][:delay]
|
355
369
|
end
|
356
370
|
end
|
357
|
-
end
|
358
371
|
|
372
|
+
describe 'with absent values' do
|
373
|
+
subject { form_spec.raw }
|
374
|
+
|
375
|
+
it 'parses' do
|
376
|
+
assert_nil subject.delay
|
377
|
+
|
378
|
+
assert_equal({}, subject.data)
|
379
|
+
assert_equal({}, subject[])
|
380
|
+
end
|
381
|
+
end
|
382
|
+
end
|
359
383
|
end
|
metadata
CHANGED
@@ -1,52 +1,63 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: foraneus
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.15
|
5
5
|
platform: ruby
|
6
|
-
authors:
|
6
|
+
authors:
|
7
7
|
- Gianfranco Zas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2015-04-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
15
14
|
name: minitest
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: "0"
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
23
20
|
type: :development
|
24
|
-
version_requirements: *id001
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
name: yard
|
27
21
|
prerelease: false
|
28
|
-
|
29
|
-
requirements:
|
30
|
-
-
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: yard
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
31
34
|
type: :development
|
32
|
-
version_requirements: *id003
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: kramdown
|
35
35
|
prerelease: false
|
36
|
-
|
37
|
-
requirements:
|
38
|
-
-
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: kramdown
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
39
48
|
type: :development
|
40
|
-
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
description: Provides two way transformation mechanisms to external data.
|
42
56
|
email: snmgian@gmail.com
|
43
57
|
executables: []
|
44
|
-
|
45
58
|
extensions: []
|
46
|
-
|
47
59
|
extra_rdoc_files: []
|
48
|
-
|
49
|
-
files:
|
60
|
+
files:
|
50
61
|
- COPYING
|
51
62
|
- COPYING.LESSER
|
52
63
|
- README.md
|
@@ -60,6 +71,7 @@ files:
|
|
60
71
|
- lib/foraneus/converters/noop.rb
|
61
72
|
- lib/foraneus/converters/string.rb
|
62
73
|
- lib/foraneus/errors.rb
|
74
|
+
- lib/foraneus/utils.rb
|
63
75
|
- spec/lib/foraneus/converters/boolean_converter_spec.rb
|
64
76
|
- spec/lib/foraneus/converters/date_converter_spec.rb
|
65
77
|
- spec/lib/foraneus/converters/decimal_converter_spec.rb
|
@@ -70,42 +82,38 @@ files:
|
|
70
82
|
- spec/lib/foraneus_spec.rb
|
71
83
|
- spec/runner.rb
|
72
84
|
- spec/spec_helper.rb
|
73
|
-
- spec/spec_helper_its.rb
|
74
85
|
homepage: https://github.com/snmgian/foraneus
|
75
|
-
licenses:
|
86
|
+
licenses:
|
76
87
|
- LGPL
|
77
88
|
metadata: {}
|
78
|
-
|
79
89
|
post_install_message:
|
80
90
|
rdoc_options: []
|
81
|
-
|
82
|
-
require_paths:
|
91
|
+
require_paths:
|
83
92
|
- lib
|
84
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
-
requirements:
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
86
95
|
- - ">="
|
87
|
-
- !ruby/object:Gem::Version
|
96
|
+
- !ruby/object:Gem::Version
|
88
97
|
version: 1.8.7
|
89
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
-
requirements:
|
91
|
-
-
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
92
103
|
requirements: []
|
93
|
-
|
94
104
|
rubyforge_project:
|
95
105
|
rubygems_version: 2.4.5
|
96
106
|
signing_key:
|
97
107
|
specification_version: 4
|
98
108
|
summary: Transforms external data.
|
99
|
-
test_files:
|
100
|
-
- spec/lib/
|
109
|
+
test_files:
|
110
|
+
- spec/lib/foraneus/converters/float_converter_spec.rb
|
101
111
|
- spec/lib/foraneus/converters/noop_converter_spec.rb
|
102
|
-
- spec/lib/foraneus/converters/decimal_converter_spec.rb
|
103
112
|
- spec/lib/foraneus/converters/date_converter_spec.rb
|
113
|
+
- spec/lib/foraneus/converters/decimal_converter_spec.rb
|
104
114
|
- spec/lib/foraneus/converters/integer_converter_spec.rb
|
105
|
-
- spec/lib/foraneus/converters/string_converter_spec.rb
|
106
|
-
- spec/lib/foraneus/converters/float_converter_spec.rb
|
107
115
|
- spec/lib/foraneus/converters/boolean_converter_spec.rb
|
108
|
-
- spec/
|
109
|
-
- spec/
|
116
|
+
- spec/lib/foraneus/converters/string_converter_spec.rb
|
117
|
+
- spec/lib/foraneus_spec.rb
|
110
118
|
- spec/runner.rb
|
111
|
-
|
119
|
+
- spec/spec_helper.rb
|
data/spec/spec_helper_its.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'minitest/autorun'
|
3
|
-
require 'minitest/spec'
|
4
|
-
require 'minitest/unit'
|
5
|
-
|
6
|
-
require 'foraneus'
|
7
|
-
|
8
|
-
module MiniTest
|
9
|
-
class Spec
|
10
|
-
#module
|
11
|
-
|
12
|
-
def self.its(getter, &block)
|
13
|
-
block ||= proc { skip "(no tests defined)" }
|
14
|
-
|
15
|
-
@specs ||= 0
|
16
|
-
@specs += 1
|
17
|
-
|
18
|
-
name = "test_%04d_%s" % [ @specs, getter ]
|
19
|
-
|
20
|
-
define_method(name) {
|
21
|
-
#&block
|
22
|
-
case getter
|
23
|
-
when Symbol, String
|
24
|
-
expression = subject.public_send(getter)
|
25
|
-
when Array
|
26
|
-
expression = subject[*getter]
|
27
|
-
end
|
28
|
-
|
29
|
-
expression.instance_exec &block
|
30
|
-
}
|
31
|
-
|
32
|
-
self.children.each do |mod|
|
33
|
-
mod.send :undef_method, name if mod.public_method_defined? name
|
34
|
-
end
|
35
|
-
|
36
|
-
name
|
37
|
-
end
|
38
|
-
|
39
|
-
#end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|