lotus-utils 0.1.1 → 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.
@@ -1,132 +0,0 @@
1
- require 'test_helper'
2
- require 'lotus/utils/class_attribute'
3
-
4
- describe Lotus::Utils::ClassAttribute do
5
- before do
6
- class ClassAttributeTest
7
- include Lotus::Utils::ClassAttribute
8
- class_attribute :callbacks, :functions, :values
9
- self.callbacks = [:a]
10
- self.values = [1]
11
- end
12
-
13
- class SubclassAttributeTest < ClassAttributeTest
14
- class_attribute :subattribute
15
- self.functions = [:x, :y]
16
- self.subattribute = 42
17
- end
18
-
19
- class SubSubclassAttributeTest < SubclassAttributeTest
20
- end
21
-
22
- class Vehicle
23
- include Lotus::Utils::ClassAttribute
24
- class_attribute :engines, :wheels
25
-
26
- self.engines = 0
27
- self.wheels = 0
28
- end
29
-
30
- class Car < Vehicle
31
- self.engines = 1
32
- self.wheels = 4
33
- end
34
-
35
- class Airplane < Vehicle
36
- self.engines = 4
37
- self.wheels = 16
38
- end
39
-
40
- class SmallAirplane < Airplane
41
- self.engines = 2
42
- self.wheels = 8
43
- end
44
- end
45
-
46
- after do
47
- [:ClassAttributeTest,
48
- :SubclassAttributeTest,
49
- :SubSubclassAttributeTest,
50
- :Vehicle,
51
- :Car,
52
- :Airplane,
53
- :SmallAirplane].each do |const|
54
- Object.send :remove_const, const
55
- end
56
- end
57
-
58
- it 'sets the given value' do
59
- ClassAttributeTest.callbacks.must_equal([:a])
60
- end
61
-
62
- it 'the value it is inherited by subclasses' do
63
- SubclassAttributeTest.callbacks.must_equal([:a])
64
- end
65
-
66
- it 'if the superclass value changes it does not affects subclasses' do
67
- ClassAttributeTest.functions = [:y]
68
- SubclassAttributeTest.functions.must_equal([:x, :y])
69
- end
70
-
71
- it 'if the subclass value changes it does not affects superclass' do
72
- SubclassAttributeTest.values = [3,2]
73
- ClassAttributeTest.values.must_equal([1])
74
- end
75
-
76
- describe 'when the subclass is defined in a different namespace' do
77
- before do
78
- module Lts
79
- module Routing
80
- class Resource
81
- class Action
82
- include Lotus::Utils::ClassAttribute
83
- class_attribute :verb
84
- end
85
-
86
- class New < Action
87
- self.verb = :get
88
- end
89
- end
90
-
91
- class Resources < Resource
92
- class New < Resource::New
93
- end
94
- end
95
- end
96
- end
97
- end
98
-
99
- it 'refers to the superclass value' do
100
- Lts::Routing::Resources::New.verb.must_equal :get
101
- end
102
- end
103
-
104
- # it 'if the subclass value changes it affects subclasses' do
105
- # values = [3,2]
106
- # SubclassAttributeTest.values = values
107
- # SubclassAttributeTest.values.must_equal(values)
108
- # SubSubclassAttributeTest.values.must_equal(values)
109
- # end
110
-
111
- it 'if the subclass defines an attribute it should not be available for the superclass' do
112
- -> { ClassAttributeTest.subattribute }.must_raise(NoMethodError)
113
- end
114
-
115
- it 'if the subclass defines an attribute it should be available for its subclasses' do
116
- SubSubclassAttributeTest.subattribute.must_equal 42
117
- end
118
-
119
- it 'preserves values within the inheritance chain' do
120
- Vehicle.engines.must_equal 0
121
- Vehicle.wheels.must_equal 0
122
-
123
- Car.engines.must_equal 1
124
- Car.wheels.must_equal 4
125
-
126
- Airplane.engines.must_equal 4
127
- Airplane.wheels.must_equal 16
128
-
129
- SmallAirplane.engines.must_equal 2
130
- SmallAirplane.wheels.must_equal 8
131
- end
132
- end
data/test/class_test.rb DELETED
@@ -1,47 +0,0 @@
1
- require 'test_helper'
2
- require 'lotus/utils/class'
3
-
4
- describe Lotus::Utils::Class do
5
- describe '.load!' do
6
- before do
7
- module App
8
- module Layer
9
- class Step
10
- end
11
- end
12
-
13
- module Service
14
- class Point
15
- end
16
- end
17
-
18
- class ServicePoint
19
- end
20
- end
21
- end
22
-
23
- it 'loads the class from the given static string' do
24
- Lotus::Utils::Class.load!('App::Layer::Step').must_equal(App::Layer::Step)
25
- end
26
-
27
- it 'raises error for missing constant' do
28
- -> { Lotus::Utils::Class.load!('MissingConstant') }.must_raise(NameError)
29
- end
30
-
31
- it 'loads the class from given string, by interpolating tokens' do
32
- Lotus::Utils::Class.load!('App::Service(::Point|Point)').must_equal(App::Service::Point)
33
- end
34
-
35
- it 'loads the class from given string, by interpolating string tokens and respecting their order' do
36
- Lotus::Utils::Class.load!('App::Service(Point|::Point)').must_equal(App::ServicePoint)
37
- end
38
-
39
- it 'loads the class from given string, by interpolating tokens and not stopping after first fail' do
40
- Lotus::Utils::Class.load!('App::(Layer|Layer::)Step').must_equal(App::Layer::Step)
41
- end
42
-
43
- it 'loads class from given string and namespace' do
44
- Lotus::Utils::Class.load!('(Layer|Layer::)Step', App).must_equal(App::Layer::Step)
45
- end
46
- end
47
- end
data/test/hash_test.rb DELETED
@@ -1,35 +0,0 @@
1
- require 'test_helper'
2
- require 'lotus/utils/hash'
3
-
4
- describe Lotus::Utils::Hash do
5
- it 'acts as a Ruby standard Hash' do
6
- hash = Lotus::Utils::Hash.new
7
- hash.must_be_kind_of(::Hash)
8
-
9
- ::Hash.new.methods.each do |m|
10
- hash.must_respond_to(m)
11
- end
12
- end
13
-
14
- it 'holds values passed to the constructor' do
15
- hash = Lotus::Utils::Hash.new('foo' => 'bar')
16
- hash['foo'].must_equal('bar')
17
- end
18
-
19
- describe '#symbolize!' do
20
- it 'symbolize keys' do
21
- hash = Lotus::Utils::Hash.new('fub' => 'baz')
22
- hash.symbolize!
23
-
24
- hash['fub'].must_be_nil
25
- hash[:fub].must_equal('baz')
26
- end
27
-
28
- it 'symbolize nested hashes' do
29
- hash = Lotus::Utils::Hash.new('nested' => {'key' => 'value'})
30
- hash.symbolize!
31
-
32
- hash[:nested][:key].must_equal('value')
33
- end
34
- end
35
- end
data/test/io_test.rb DELETED
@@ -1,29 +0,0 @@
1
- require 'test_helper'
2
- require 'lotus/utils/io'
3
-
4
- class IOTest
5
- TEST_CONSTANT = 'initial'
6
- end
7
-
8
- describe Lotus::Utils::IO do
9
- describe '.silence_warnings' do
10
- it 'lowers verbosity of stdout' do
11
- begin
12
- position = STDOUT.tell
13
-
14
- Lotus::Utils::IO.silence_warnings do
15
- IOTest::TEST_CONSTANT = 'redefined'
16
- end
17
-
18
- IOTest::TEST_CONSTANT.must_equal('redefined')
19
- STDOUT.tell.must_equal(position)
20
- rescue Errno::ESPIPE
21
- puts 'Skipping this test, IO#tell is not supported in this environment'
22
-
23
- Lotus::Utils::IO.silence_warnings do
24
- IOTest::TEST_CONSTANT = 'redefined'
25
- end
26
- end
27
- end
28
- end
29
- end
data/test/kernel_test.rb DELETED
@@ -1,1752 +0,0 @@
1
- require 'test_helper'
2
- require 'bigdecimal'
3
- require 'lotus/utils/kernel'
4
-
5
- describe Lotus::Utils::Kernel do
6
- describe '.Array' do
7
- describe 'successful operations' do
8
- before do
9
- ResultSet = Struct.new(:records) do
10
- def to_a
11
- records.to_a.sort
12
- end
13
- end
14
-
15
- Response = Struct.new(:status, :headers, :body) do
16
- def to_ary
17
- [status, headers, body]
18
- end
19
- end
20
-
21
- @result = Lotus::Utils::Kernel.Array(input)
22
- end
23
-
24
- after do
25
- Object.send(:remove_const, :ResultSet)
26
- Object.send(:remove_const, :Response)
27
- end
28
-
29
- describe 'when nil is given' do
30
- let(:input) { nil }
31
-
32
- it 'returns an empty array' do
33
- @result.must_equal nil
34
- end
35
- end
36
-
37
- describe 'when true is given' do
38
- let(:input) { true }
39
-
40
- it 'returns an empty array' do
41
- @result.must_equal [true]
42
- end
43
- end
44
-
45
- describe 'when false is given' do
46
- let(:input) { false }
47
-
48
- it 'returns an empty array' do
49
- @result.must_equal [false]
50
- end
51
- end
52
-
53
- describe 'when an object is given' do
54
- let(:input) { Object.new }
55
-
56
- it 'returns an array' do
57
- @result.must_equal [input]
58
- end
59
- end
60
-
61
- describe 'when an array is given' do
62
- let(:input) { [Object.new] }
63
-
64
- it 'returns an array' do
65
- @result.must_equal input
66
- end
67
- end
68
-
69
- describe 'when a nested array is given' do
70
- let(:input) { [1, [2, 3]] }
71
-
72
- it 'returns a flatten array' do
73
- @result.must_equal [1,2,3]
74
- end
75
- end
76
-
77
- describe 'when an array with nil values is given' do
78
- let(:input) { [1, [nil, 3]] }
79
-
80
- it 'returns a compacted array' do
81
- @result.must_equal [1,3]
82
- end
83
- end
84
-
85
- describe 'when an array with duplicated values is given' do
86
- let(:input) { [2, [2, 3]] }
87
-
88
- it 'returns an array with uniq values' do
89
- @result.must_equal [2,3]
90
- end
91
- end
92
-
93
- describe 'when a set is given' do
94
- let(:input) { Set.new([33,12]) }
95
-
96
- it 'returns an array with uniq values' do
97
- @result.must_equal [33, 12]
98
- end
99
- end
100
-
101
- describe 'when a object that implements #to_a is given' do
102
- let(:input) { ResultSet.new([2,1,3]) }
103
-
104
- it 'returns an array' do
105
- @result.must_equal [1,2,3]
106
- end
107
- end
108
-
109
- describe 'when a object that implements #to_ary is given' do
110
- let(:input) { Response.new(200, {}, 'hello') }
111
-
112
- it 'returns an array' do
113
- @result.must_equal [200, {}, 'hello']
114
- end
115
- end
116
- end
117
-
118
- describe 'failure operations' do
119
- describe "when a object that doesn't implements #nil? is given" do
120
- let(:input) { BasicObject.new }
121
-
122
- it 'raises an error' do
123
- -> { Lotus::Utils::Kernel.Array(input) }.must_raise NoMethodError
124
- end
125
- end
126
- end
127
- end
128
-
129
- describe '.Set' do
130
- before do
131
- UuidSet = Class.new do
132
- def initialize(*uuids)
133
- @uuids = uuids
134
- end
135
-
136
- def to_set
137
- Set.new.tap do |set|
138
- @uuids.each {|uuid| set.add(uuid) }
139
- end
140
- end
141
- end
142
-
143
- BaseObject = Class.new(BasicObject) do
144
- def nil?
145
- false
146
- end
147
- end
148
- end
149
-
150
- after do
151
- Object.send(:remove_const, :UuidSet)
152
- Object.send(:remove_const, :BaseObject)
153
- end
154
-
155
- describe 'successful operations' do
156
- before do
157
- @result = Lotus::Utils::Kernel.Set(input)
158
- end
159
-
160
- describe 'when nil is given' do
161
- let(:input) { nil }
162
-
163
- it 'returns nil' do
164
- @result.must_equal nil
165
- end
166
- end
167
-
168
- describe 'when true is given' do
169
- let(:input) { true }
170
-
171
- it 'returns a set' do
172
- @result.must_equal Set.new([true])
173
- end
174
- end
175
-
176
- describe 'when false is given' do
177
- let(:input) { false }
178
-
179
- it 'returns a set' do
180
- @result.must_equal Set.new([false])
181
- end
182
- end
183
-
184
- describe 'when an object is given' do
185
- let(:input) { Object.new }
186
-
187
- it 'returns an set' do
188
- @result.must_equal Set.new([input])
189
- end
190
- end
191
-
192
- describe 'when an array is given' do
193
- let(:input) { [1] }
194
-
195
- it 'returns an set' do
196
- @result.must_equal Set.new(input)
197
- end
198
- end
199
-
200
- describe 'when an hash is given' do
201
- let(:input) { Hash[a: 1] }
202
-
203
- it 'returns an set' do
204
- @result.must_equal Set.new([[:a, 1]])
205
- end
206
- end
207
-
208
- describe 'when a set is given' do
209
- let(:input) { Set.new([Object.new]) }
210
-
211
- it 'returns self' do
212
- @result.must_equal input
213
- end
214
- end
215
-
216
- describe 'when a nested array is given' do
217
- let(:input) { [1, [2, 3]] }
218
-
219
- it 'returns it wraps in a set' do
220
- @result.must_equal Set.new([1, [2, 3]])
221
- end
222
- end
223
-
224
- describe 'when an array with nil values is given' do
225
- let(:input) { [1, [nil, 3]] }
226
-
227
- it 'returns it wraps in a set' do
228
- @result.must_equal Set.new([1, [nil, 3]])
229
- end
230
- end
231
-
232
- describe 'when an set with duplicated values is given' do
233
- let(:input) { [2, 3, 3] }
234
-
235
- it 'returns an set with uniq values' do
236
- @result.must_equal Set.new([2,3])
237
- end
238
- end
239
-
240
- describe 'when an set with nested duplicated values is given' do
241
- let(:input) { [2, [2, 3]] }
242
-
243
- it 'returns it wraps in a set' do
244
- @result.must_equal Set.new([2, [2,3]])
245
- end
246
- end
247
-
248
- describe 'when a object that implements #to_set is given' do
249
- let(:input) { UuidSet.new(*args) }
250
- let(:args) { [SecureRandom.uuid, SecureRandom.uuid] }
251
-
252
- it 'returns an set' do
253
- @result.must_equal Set.new(args)
254
- end
255
- end
256
- end
257
-
258
- describe 'failure operations' do
259
- describe "when a an object that doesn't implement #nil?" do
260
- let(:input) { BasicObject.new }
261
-
262
- it 'raises error' do
263
- -> { Lotus::Utils::Kernel.Set(input) }.must_raise(NoMethodError)
264
- end
265
- end
266
-
267
- describe "when a an object that doesn't implement #respond_to?" do
268
- let(:input) { BaseObject.new }
269
-
270
- it 'raises error' do
271
- -> { Lotus::Utils::Kernel.Set(input) }.must_raise(NoMethodError)
272
- end
273
- end
274
- end
275
- end
276
-
277
- describe '.Hash' do
278
- before do
279
- Room = Class.new do
280
- def initialize(*args)
281
- @args = args
282
- end
283
-
284
- def to_h
285
- Hash[*@args]
286
- end
287
- end
288
-
289
- Record = Class.new do
290
- def initialize(attributes = {})
291
- @attributes = attributes
292
- end
293
-
294
- def to_hash
295
- @attributes
296
- end
297
- end
298
-
299
- BaseObject = Class.new(BasicObject) do
300
- def nil?
301
- false
302
- end
303
- end
304
- end
305
-
306
- after do
307
- Object.send(:remove_const, :Room)
308
- Object.send(:remove_const, :Record)
309
- Object.send(:remove_const, :BaseObject)
310
- end
311
-
312
- describe 'successful operations' do
313
- before do
314
- @result = Lotus::Utils::Kernel.Hash(input)
315
- end
316
-
317
- describe 'when nil is given' do
318
- let(:input) { nil }
319
-
320
- it 'returns an empty hash' do
321
- @result.must_equal nil
322
- end
323
- end
324
-
325
- describe 'when an hash is given' do
326
- let(:input) { Hash[l: 23] }
327
-
328
- it 'returns the input' do
329
- @result.must_equal input
330
- end
331
- end
332
-
333
- describe 'when an array is given' do
334
- let(:input) { [[:a, 1]] }
335
-
336
- it 'returns an hash' do
337
- @result.must_equal Hash[a: 1]
338
- end
339
- end
340
-
341
- describe 'when a set is given' do
342
- let(:input) { Set.new([['x', 12]]) }
343
-
344
- it 'returns an hash' do
345
- @result.must_equal Hash['x' => 12]
346
- end
347
- end
348
-
349
- describe 'when a object that implements #to_h is given' do
350
- let(:input) { Room.new(:key, 123456) }
351
-
352
- it 'returns an hash' do
353
- @result.must_equal Hash[key: 123456]
354
- end
355
- end
356
-
357
- describe 'when a object that implements #to_hash is given' do
358
- let(:input) { Record.new(name: 'L') }
359
-
360
- it 'returns an hash' do
361
- @result.must_equal Hash[name: 'L']
362
- end
363
- end
364
- end
365
-
366
- describe 'failure operations' do
367
- describe "when a an object that doesn't implement #nil?" do
368
- let(:input) { BasicObject.new }
369
-
370
- it 'raises error' do
371
- -> { Lotus::Utils::Kernel.Hash(input) }.must_raise(NoMethodError)
372
- end
373
- end
374
-
375
- describe "when a an object that doesn't implement #respond_to?" do
376
- let(:input) { BaseObject.new }
377
-
378
- it 'raises error' do
379
- -> { Lotus::Utils::Kernel.Hash(input) }.must_raise(NoMethodError)
380
- end
381
- end
382
-
383
- describe 'when true is given' do
384
- let(:input) { true }
385
-
386
- it 'raises error' do
387
- -> { Lotus::Utils::Kernel.Hash(input) }.must_raise(TypeError)
388
- end
389
- end
390
-
391
- describe 'when false is given' do
392
- let(:input) { false }
393
-
394
- it 'raises error' do
395
- -> { Lotus::Utils::Kernel.Hash(input) }.must_raise(TypeError)
396
- end
397
- end
398
-
399
- describe 'when an array with one element is given' do
400
- let(:input) { [1] }
401
-
402
- it 'raises error' do
403
- -> { Lotus::Utils::Kernel.Hash(input) }.must_raise(TypeError)
404
- end
405
- end
406
-
407
- if RUBY_VERSION >= '2.1'
408
- describe 'when an array with two elements is given' do
409
- let(:input) { [:a, 1] }
410
-
411
- it 'raises error' do
412
- -> { Lotus::Utils::Kernel.Hash(input) }.must_raise(TypeError)
413
- end
414
- end
415
- end
416
-
417
- describe 'when a set of one element is given' do
418
- let(:input) { Set.new([1]) }
419
-
420
- it 'raises error' do
421
- -> { Lotus::Utils::Kernel.Hash(input) }.must_raise(TypeError)
422
- end
423
- end
424
-
425
- if RUBY_VERSION >= '2.1'
426
- describe 'when a set of two elements is given' do
427
- let(:input) { Set.new([:a, 1]) }
428
-
429
- it 'raises error' do
430
- -> { Lotus::Utils::Kernel.Hash(input) }.must_raise(TypeError)
431
- end
432
- end
433
- end
434
- end
435
- end
436
-
437
- describe '.Integer' do
438
- describe 'successful operations' do
439
- before do
440
- PersonFavNumber = Struct.new(:name) do
441
- def to_int
442
- 23
443
- end
444
- end
445
-
446
- @result = Lotus::Utils::Kernel.Integer(input)
447
- end
448
-
449
- after do
450
- Object.send(:remove_const, :PersonFavNumber)
451
- end
452
-
453
- describe 'when nil is given' do
454
- let(:input) { nil }
455
-
456
- it 'returns nil' do
457
- @result.must_equal nil
458
- end
459
- end
460
-
461
- describe 'when a fixnum given' do
462
- let(:input) { 1 }
463
-
464
- it 'returns an integer' do
465
- @result.must_equal 1
466
- end
467
- end
468
-
469
- describe 'when a float is given' do
470
- let(:input) { 1.2 }
471
-
472
- it 'returns an integer' do
473
- @result.must_equal 1
474
- end
475
- end
476
-
477
- describe 'when a string given' do
478
- let(:input) { '23' }
479
-
480
- it 'returns an integer' do
481
- @result.must_equal 23
482
- end
483
- end
484
-
485
- describe 'when a string representing a float number is given' do
486
- let(:input) { '23.4' }
487
-
488
- it 'returns an integer' do
489
- @result.must_equal 23
490
- end
491
- end
492
-
493
- describe 'when an octal is given' do
494
- let(:input) { 011 }
495
-
496
- it 'returns the string representation' do
497
- @result.must_equal 9
498
- end
499
- end
500
-
501
- describe 'when a hex is given' do
502
- let(:input) { 0xf5 }
503
-
504
- it 'returns the string representation' do
505
- @result.must_equal 245
506
- end
507
- end
508
-
509
- describe 'when a bignum is given' do
510
- let(:input) { 13289301283 ** 2 }
511
-
512
- it 'returns an bignum' do
513
- @result.must_equal 176605528590345446089
514
- end
515
- end
516
-
517
- describe 'when a bigdecimal is given' do
518
- let(:input) { BigDecimal.new('12.0001') }
519
-
520
- it 'returns an bignum' do
521
- @result.must_equal 12
522
- end
523
- end
524
-
525
- describe 'when a complex number is given' do
526
- let(:input) { Complex(0.3) }
527
-
528
- it 'returns an integer' do
529
- @result.must_equal 0
530
- end
531
- end
532
-
533
- describe 'when a string representing a complex number is given' do
534
- let(:input) { '2.5/1' }
535
-
536
- it 'returns an integer' do
537
- @result.must_equal 2
538
- end
539
- end
540
-
541
- describe 'when a rational number is given' do
542
- let(:input) { Rational(0.3) }
543
-
544
- it 'returns an integer' do
545
- @result.must_equal 0
546
- end
547
- end
548
-
549
- describe 'when a string representing a rational number is given' do
550
- let(:input) { '2/3' }
551
-
552
- it 'returns an integer' do
553
- @result.must_equal 2
554
- end
555
- end
556
-
557
- describe 'when a time is given' do
558
- let(:input) { Time.at(0).utc }
559
-
560
- it 'returns the string representation' do
561
- @result.must_equal 0
562
- end
563
- end
564
-
565
- describe 'when an object that implements #to_int is given' do
566
- let(:input) { PersonFavNumber.new('Luca') }
567
-
568
- it 'returns an integer' do
569
- @result.must_equal 23
570
- end
571
- end
572
- end
573
-
574
- describe 'failure operations' do
575
- describe 'true is given' do
576
- let(:input) { true }
577
-
578
- it 'raises error' do
579
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(TypeError)
580
- end
581
- end
582
-
583
- describe 'false is given' do
584
- let(:input) { false }
585
-
586
- it 'raises error' do
587
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(TypeError)
588
- end
589
- end
590
-
591
- describe 'when a date is given' do
592
- let(:input) { Date.today }
593
-
594
- it 'raises error' do
595
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(TypeError)
596
- end
597
- end
598
-
599
- describe 'when a datetime is given' do
600
- let(:input) { DateTime.now }
601
-
602
- it 'raises error' do
603
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(TypeError)
604
- end
605
- end
606
-
607
- describe "when a an object that doesn't implement #nil? " do
608
- let(:input) { BasicObject.new }
609
-
610
- it 'raises error' do
611
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(NoMethodError)
612
- end
613
- end
614
-
615
- describe "when a an object that doesn't implement any integer interface" do
616
- let(:input) { OpenStruct.new(color: 'purple') }
617
-
618
- it 'raises error' do
619
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(TypeError)
620
- end
621
- end
622
-
623
- describe 'when a bigdecimal infinity is given' do
624
- let(:input) { BigDecimal.new('Infinity') }
625
-
626
- it 'raises error' do
627
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(FloatDomainError)
628
- end
629
- end
630
-
631
- describe 'when a bigdecimal NaN is given' do
632
- let(:input) { BigDecimal.new('NaN') }
633
-
634
- it 'raises error' do
635
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(FloatDomainError)
636
- end
637
- end
638
-
639
- describe 'when a big complex number is given' do
640
- let(:input) { Complex(2,3) }
641
-
642
- it 'raises error' do
643
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(RangeError)
644
- end
645
- end
646
-
647
- describe 'when a big rational number is given' do
648
- let(:input) { Rational(-8) ** Rational(1, 3) }
649
-
650
- it 'raises error' do
651
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(RangeError)
652
- end
653
- end
654
- end
655
- end
656
-
657
- describe '.Float' do
658
- describe 'successful operations' do
659
- before do
660
- class Pi
661
- def to_f
662
- 3.14
663
- end
664
- end
665
-
666
- @result = Lotus::Utils::Kernel.Float(input)
667
- end
668
-
669
- after do
670
- Object.send(:remove_const, :Pi)
671
- end
672
-
673
- describe 'when nil is given' do
674
- let(:input) { nil }
675
-
676
- it 'returns nil' do
677
- @result.must_equal nil
678
- end
679
- end
680
-
681
- describe 'when a float is given' do
682
- let(:input) { 1.2 }
683
-
684
- it 'returns the argument' do
685
- @result.must_equal 1.2
686
- end
687
- end
688
-
689
- describe 'when a fixnum given' do
690
- let(:input) { 1 }
691
-
692
- it 'returns a float' do
693
- @result.must_be_kind_of(Float)
694
- @result.must_equal 1.0
695
- end
696
- end
697
-
698
- describe 'when a string given' do
699
- let(:input) { '23' }
700
-
701
- it 'returns a float' do
702
- @result.must_be_kind_of(Float)
703
- @result.must_equal 23.0
704
- end
705
- end
706
-
707
- describe 'when a string representing a float number is given' do
708
- let(:input) { '23.4' }
709
-
710
- it 'returns a float' do
711
- @result.must_be_kind_of(Float)
712
- @result.must_equal 23.4
713
- end
714
- end
715
-
716
- describe 'when an octal is given' do
717
- let(:input) { 011 }
718
-
719
- it 'returns the base 10 float' do
720
- @result.must_equal 9.0
721
- end
722
- end
723
-
724
- describe 'when a hex is given' do
725
- let(:input) { 0xf5 }
726
-
727
- it 'returns the base 10 float' do
728
- @result.must_equal 245.0
729
- end
730
- end
731
-
732
- describe 'when a bignum is given' do
733
- let(:input) { 13289301283 ** 2 }
734
-
735
- it 'returns a float' do
736
- @result.must_be_kind_of(Float)
737
- @result.must_equal 176605528590345446089.0
738
- end
739
- end
740
-
741
- describe 'when a bigdecimal is given' do
742
- let(:input) { BigDecimal.new('12.0001') }
743
-
744
- it 'returns a float' do
745
- @result.must_be_kind_of(Float)
746
- @result.must_equal 12.0001
747
- end
748
- end
749
-
750
- describe 'when a bigdecimal infinity is given' do
751
- let(:input) { BigDecimal.new('Infinity') }
752
-
753
- it 'returns Infinity' do
754
- @result.must_be_kind_of(Float)
755
- @result.to_s.must_equal 'Infinity'
756
- end
757
- end
758
-
759
- describe 'when a bigdecimal NaN is given' do
760
- let(:input) { BigDecimal.new('NaN') }
761
-
762
- it 'returns NaN' do
763
- @result.must_be_kind_of(Float)
764
- @result.to_s.must_equal 'NaN'
765
- end
766
- end
767
-
768
- describe 'when a complex number is given' do
769
- let(:input) { Complex(0.3) }
770
-
771
- it 'returns a float' do
772
- @result.must_be_kind_of(Float)
773
- @result.must_equal 0.3
774
- end
775
- end
776
-
777
- describe 'when a string representing a complex number is given' do
778
- let(:input) { '2.5/1' }
779
-
780
- it 'returns a float' do
781
- @result.must_be_kind_of(Float)
782
- @result.must_equal 2.5
783
- end
784
- end
785
-
786
- describe 'when a rational number is given' do
787
- let(:input) { Rational(0.3) }
788
-
789
- it 'returns a float' do
790
- @result.must_be_kind_of(Float)
791
- @result.must_equal 0.3
792
- end
793
- end
794
-
795
- describe 'when a string representing a rational number is given' do
796
- let(:input) { '2/3' }
797
-
798
- it 'returns a float' do
799
- @result.must_be_kind_of(Float)
800
- @result.must_equal 2.0
801
- end
802
- end
803
-
804
- describe 'when a time is given' do
805
- let(:input) { Time.at(0).utc }
806
-
807
- it 'returns the float representation' do
808
- @result.must_be_kind_of(Float)
809
- @result.must_equal 0.0
810
- end
811
- end
812
-
813
- describe 'when an object that implements #to_int is given' do
814
- let(:input) { Pi.new }
815
-
816
- it 'returns a float' do
817
- @result.must_be_kind_of(Float)
818
- @result.must_equal 3.14
819
- end
820
- end
821
- end
822
-
823
- describe 'failure operations' do
824
- describe 'true is given' do
825
- let(:input) { true }
826
-
827
- it 'raises error' do
828
- -> { Lotus::Utils::Kernel.Float(input) }.must_raise(TypeError)
829
- end
830
- end
831
-
832
- describe 'false is given' do
833
- let(:input) { false }
834
-
835
- it 'raises error' do
836
- -> { Lotus::Utils::Kernel.Float(input) }.must_raise(TypeError)
837
- end
838
- end
839
-
840
- describe 'when a date is given' do
841
- let(:input) { Date.today }
842
-
843
- it 'raises error' do
844
- -> { Lotus::Utils::Kernel.Float(input) }.must_raise(TypeError)
845
- end
846
- end
847
-
848
- describe 'when a datetime is given' do
849
- let(:input) { DateTime.now }
850
-
851
- it 'raises error' do
852
- -> { Lotus::Utils::Kernel.Float(input) }.must_raise(TypeError)
853
- end
854
- end
855
-
856
- describe "when a an object that doesn't implement #nil? " do
857
- let(:input) { BasicObject.new }
858
-
859
- it 'raises error' do
860
- -> { Lotus::Utils::Kernel.Float(input) }.must_raise(NoMethodError)
861
- end
862
- end
863
-
864
- describe "when a an object that doesn't implement any float interface" do
865
- let(:input) { OpenStruct.new(color: 'purple') }
866
-
867
- it 'raises error' do
868
- -> { Lotus::Utils::Kernel.Float(input) }.must_raise(TypeError)
869
- end
870
- end
871
-
872
- describe 'when a big complex number is given' do
873
- let(:input) { Complex(2,3) }
874
-
875
- it 'raises error' do
876
- -> { Lotus::Utils::Kernel.Float(input) }.must_raise(RangeError)
877
- end
878
- end
879
-
880
- describe 'when a big rational number is given' do
881
- let(:input) { Rational(-8) ** Rational(1, 3) }
882
-
883
- it 'raises error' do
884
- -> { Lotus::Utils::Kernel.Float(input) }.must_raise(RangeError)
885
- end
886
- end
887
- end
888
- end
889
-
890
- describe '.String' do
891
- before do
892
- Book = Struct.new(:title)
893
-
894
- BaseObject = Class.new(BasicObject) do
895
- def nil?
896
- false
897
- end
898
- end
899
-
900
- SimpleObject = Class.new(BaseObject) do
901
- def to_s
902
- 'simple object'
903
- end
904
- end
905
-
906
- Isbn = Struct.new(:code) do
907
- def to_str
908
- code.to_s
909
- end
910
- end
911
- end
912
-
913
- after do
914
- Object.send(:remove_const, :Book)
915
- Object.send(:remove_const, :BaseObject)
916
- Object.send(:remove_const, :SimpleObject)
917
- Object.send(:remove_const, :Isbn)
918
- end
919
-
920
- describe 'successful operations' do
921
- before do
922
- @result = Lotus::Utils::Kernel.String(input)
923
- end
924
-
925
- describe 'when nil is given' do
926
- let(:input) { nil }
927
-
928
- it 'returns nil' do
929
- @result.must_be_nil
930
- end
931
- end
932
-
933
- describe 'when true is given' do
934
- let(:input) { true }
935
-
936
- it 'returns nil' do
937
- @result.must_equal 'true'
938
- end
939
- end
940
-
941
- describe 'when false is given' do
942
- let(:input) { false }
943
-
944
- it 'returns nil' do
945
- @result.must_equal 'false'
946
- end
947
- end
948
-
949
- describe 'when an empty string is given' do
950
- let(:input) { '' }
951
-
952
- it 'returns it' do
953
- @result.must_equal ''
954
- end
955
- end
956
-
957
- describe 'when a string is given' do
958
- let(:input) { 'ciao' }
959
-
960
- it 'returns it' do
961
- @result.must_equal 'ciao'
962
- end
963
- end
964
-
965
- describe 'when an integer is given' do
966
- let(:input) { 23 }
967
-
968
- it 'returns the string representation' do
969
- @result.must_equal '23'
970
- end
971
- end
972
-
973
- describe 'when a float is given' do
974
- let(:input) { 3.14 }
975
-
976
- it 'returns the string representation' do
977
- @result.must_equal '3.14'
978
- end
979
- end
980
-
981
- describe 'when an octal is given' do
982
- let(:input) { 013 }
983
-
984
- it 'returns the string representation' do
985
- @result.must_equal '11'
986
- end
987
- end
988
-
989
- describe 'when a hex is given' do
990
- let(:input) { 0xc0ff33 }
991
-
992
- it 'returns the string representation' do
993
- @result.must_equal '12648243'
994
- end
995
- end
996
-
997
- describe 'when a big decimal is given' do
998
- let(:input) { BigDecimal.new(7944.2343, 10) }
999
-
1000
- it 'returns the string representation' do
1001
- @result.must_equal '0.79442343E4'
1002
- end
1003
- end
1004
-
1005
- describe 'when a big decimal infinity is given' do
1006
- let(:input) { BigDecimal.new('Infinity') }
1007
-
1008
- it 'returns the string representation' do
1009
- @result.must_equal 'Infinity'
1010
- end
1011
- end
1012
-
1013
- describe 'when a big decimal NaN is given' do
1014
- let(:input) { BigDecimal.new('NaN') }
1015
-
1016
- it 'returns the string representation' do
1017
- @result.must_equal 'NaN'
1018
- end
1019
- end
1020
-
1021
- describe 'when a complex is given' do
1022
- let(:input) { Complex(11,2) }
1023
-
1024
- it 'returns the string representation' do
1025
- @result.must_equal '11+2i'
1026
- end
1027
- end
1028
-
1029
- describe 'when a rational is given' do
1030
- let(:input) { Rational(-22) }
1031
-
1032
- it 'returns the string representation' do
1033
- @result.must_equal '-22/1'
1034
- end
1035
- end
1036
-
1037
- describe 'when an empty array is given' do
1038
- let(:input) { [] }
1039
-
1040
- it 'returns the string representation' do
1041
- @result.must_equal '[]'
1042
- end
1043
- end
1044
-
1045
- describe 'when an array of integers is given' do
1046
- let(:input) { [1,2,3] }
1047
-
1048
- it 'returns the string representation' do
1049
- @result.must_equal '[1, 2, 3]'
1050
- end
1051
- end
1052
-
1053
- describe 'when an array of strings is given' do
1054
- let(:input) { %w[a b c] }
1055
-
1056
- it 'returns the string representation' do
1057
- @result.must_equal '["a", "b", "c"]'
1058
- end
1059
- end
1060
-
1061
- describe 'when an array of objects is given' do
1062
- let(:input) { [Object.new] }
1063
-
1064
- it 'returns the string representation' do
1065
- @result.must_match '[#<Object:'
1066
- end
1067
- end
1068
-
1069
- describe 'when an empty hash is given' do
1070
- let(:input) { {} }
1071
-
1072
- it 'returns the string representation' do
1073
- @result.must_equal '{}'
1074
- end
1075
- end
1076
-
1077
- describe 'when an hash is given' do
1078
- let(:input) { {a: 1, 'b' => 2} }
1079
-
1080
- it 'returns the string representation' do
1081
- @result.must_equal '{:a=>1, "b"=>2}'
1082
- end
1083
- end
1084
-
1085
- describe 'when a symbol is given' do
1086
- let(:input) { :lotus }
1087
-
1088
- it 'returns the string representation' do
1089
- @result.must_equal 'lotus'
1090
- end
1091
- end
1092
-
1093
- describe 'when an struct is given' do
1094
- let(:input) { Book.new('DDD') }
1095
-
1096
- it 'returns the string representation' do
1097
- @result.must_equal '#<struct Book title="DDD">'
1098
- end
1099
- end
1100
-
1101
- describe 'when an open struct is given' do
1102
- let(:input) { OpenStruct.new(title: 'DDD') }
1103
-
1104
- it 'returns the string representation' do
1105
- @result.must_equal '#<OpenStruct title="DDD">'
1106
- end
1107
- end
1108
-
1109
- describe 'when a date is given' do
1110
- let(:input) { Date.parse('2014-04-11') }
1111
-
1112
- it 'returns the string representation' do
1113
- @result.must_equal '2014-04-11'
1114
- end
1115
- end
1116
-
1117
- describe 'when a datetime is given' do
1118
- let(:input) { DateTime.parse('2014-04-11 09:45') }
1119
-
1120
- it 'returns the string representation' do
1121
- @result.must_equal '2014-04-11T09:45:00+00:00'
1122
- end
1123
- end
1124
-
1125
- describe 'when a time is given' do
1126
- let(:input) { Time.at(0).utc }
1127
-
1128
- it 'returns the string representation' do
1129
- @result.must_equal '1970-01-01 00:00:00 UTC'
1130
- end
1131
- end
1132
-
1133
- describe 'when a class is given' do
1134
- let(:input) { Fixnum }
1135
-
1136
- it 'returns the string representation' do
1137
- @result.must_equal 'Fixnum'
1138
- end
1139
- end
1140
-
1141
- describe 'when a module is given' do
1142
- let(:input) { Lotus }
1143
-
1144
- it 'returns the string representation' do
1145
- @result.must_equal 'Lotus'
1146
- end
1147
- end
1148
-
1149
- describe 'when an object implements #to_s' do
1150
- let(:input) { SimpleObject.new }
1151
-
1152
- it 'returns the string representation' do
1153
- @result.must_equal 'simple object'
1154
- end
1155
- end
1156
-
1157
- describe 'when an object implements #to_str' do
1158
- let(:input) { Isbn.new(123) }
1159
-
1160
- it 'returns the string representation' do
1161
- @result.must_equal '123'
1162
- end
1163
- end
1164
- end
1165
-
1166
- describe 'failure operations' do
1167
- describe "when a an object that doesn't implement #nil?" do
1168
- let(:input) { BasicObject.new }
1169
-
1170
- it 'raises error' do
1171
- -> { Lotus::Utils::Kernel.String(input) }.must_raise(NoMethodError)
1172
- end
1173
- end
1174
-
1175
- describe "when a an object that doesn't implement a string interface" do
1176
- let(:input) { BaseObject.new }
1177
-
1178
- it 'raises error' do
1179
- -> { Lotus::Utils::Kernel.String(input) }.must_raise(TypeError)
1180
- end
1181
- end
1182
- end
1183
- end
1184
-
1185
- describe '.Boolean' do
1186
- before do
1187
- Answer = Struct.new(:answer) do
1188
- def to_bool
1189
- case answer
1190
- when 'yes' then true
1191
- else false
1192
- end
1193
- end
1194
- end
1195
- end
1196
-
1197
- after do
1198
- Object.send(:remove_const, :Answer)
1199
- end
1200
-
1201
- describe 'successful operations' do
1202
- before do
1203
- @result = Lotus::Utils::Kernel.Boolean(input)
1204
- end
1205
-
1206
- describe 'when nil is given' do
1207
- let(:input) { nil }
1208
-
1209
- it 'returns nil' do
1210
- @result.must_be_nil
1211
- end
1212
- end
1213
-
1214
- describe 'when true is given' do
1215
- let(:input) { true }
1216
-
1217
- it 'returns true' do
1218
- @result.must_equal true
1219
- end
1220
- end
1221
-
1222
- describe 'when false is given' do
1223
- let(:input) { false }
1224
-
1225
- it 'returns false' do
1226
- @result.must_equal false
1227
- end
1228
- end
1229
-
1230
- describe 'when 0 is given' do
1231
- let(:input) { 0 }
1232
-
1233
- it 'returns false' do
1234
- @result.must_equal false
1235
- end
1236
- end
1237
-
1238
- describe 'when 1 is given' do
1239
- let(:input) { 1 }
1240
-
1241
- it 'returns true' do
1242
- @result.must_equal true
1243
- end
1244
- end
1245
-
1246
- describe 'when 2 is given' do
1247
- let(:input) { 2 }
1248
-
1249
- it 'returns false' do
1250
- @result.must_equal false
1251
- end
1252
- end
1253
-
1254
- describe 'when -1 is given' do
1255
- let(:input) { -1 }
1256
-
1257
- it 'returns false' do
1258
- @result.must_equal false
1259
- end
1260
- end
1261
-
1262
- describe 'when "0" is given' do
1263
- let(:input) { "0" }
1264
-
1265
- it 'returns false' do
1266
- @result.must_equal false
1267
- end
1268
- end
1269
-
1270
- describe 'when "1" is given' do
1271
- let(:input) { "1" }
1272
-
1273
- it 'returns true' do
1274
- @result.must_equal true
1275
- end
1276
- end
1277
-
1278
- describe 'when an object is given' do
1279
- let(:input) { Object.new }
1280
-
1281
- it 'returns true' do
1282
- @result.must_equal true
1283
- end
1284
- end
1285
-
1286
- describe 'when the given object responds to #to_bool' do
1287
- let(:input) { Answer.new('no') }
1288
-
1289
- it 'returns the result of the serialization' do
1290
- @result.must_equal false
1291
- end
1292
- end
1293
- end
1294
-
1295
- describe 'failure operations' do
1296
- describe "when a an object that doesn't implement #respond_to?" do
1297
- let(:input) { BasicObject.new }
1298
-
1299
- it 'raises error' do
1300
- -> { Lotus::Utils::Kernel.Boolean(input) }.must_raise(NoMethodError)
1301
- end
1302
- end
1303
- end
1304
- end
1305
-
1306
- describe '.Date' do
1307
- before do
1308
- class Christmas
1309
- def to_date
1310
- Date.parse('Dec, 25')
1311
- end
1312
- end
1313
-
1314
- BaseObject = Class.new(BasicObject) do
1315
- def nil?
1316
- false
1317
- end
1318
- end
1319
- end
1320
-
1321
- after do
1322
- Object.send(:remove_const, :Christmas)
1323
- Object.send(:remove_const, :BaseObject)
1324
- end
1325
-
1326
- describe 'successful operations' do
1327
- before do
1328
- @result = Lotus::Utils::Kernel.Date(input)
1329
- end
1330
-
1331
- describe 'when nil is given' do
1332
- let(:input) { nil }
1333
-
1334
- it 'returns nil' do
1335
- @result.must_be_nil
1336
- end
1337
- end
1338
-
1339
- describe 'when a date is given' do
1340
- let(:input) { Date.today }
1341
-
1342
- it 'returns the input' do
1343
- @result.must_equal input
1344
- end
1345
- end
1346
-
1347
- describe 'when a string that represents a date is given' do
1348
- let(:input) { '2014-04-17' }
1349
-
1350
- it 'returns a date' do
1351
- @result.must_equal Date.parse(input)
1352
- end
1353
- end
1354
-
1355
- describe 'when a string that represents a timestamp is given' do
1356
- let(:input) { '2014-04-17 18:50:01' }
1357
-
1358
- it 'returns a date' do
1359
- @result.must_equal Date.parse('2014-04-17')
1360
- end
1361
- end
1362
-
1363
- describe 'when a time is given' do
1364
- let(:input) { Time.now }
1365
-
1366
- it 'returns a date' do
1367
- @result.must_equal Date.today
1368
- end
1369
- end
1370
-
1371
- describe 'when a datetime is given' do
1372
- let(:input) { DateTime.now }
1373
-
1374
- it 'returns a date' do
1375
- @result.must_equal Date.today
1376
- end
1377
- end
1378
-
1379
- describe 'when an object that implements #to_date is given' do
1380
- let(:input) { Christmas.new }
1381
-
1382
- it 'returns a date' do
1383
- @result.must_equal Date.parse('Dec, 25')
1384
- end
1385
- end
1386
- end
1387
-
1388
- describe 'failure operations' do
1389
- describe 'when true is given' do
1390
- let(:input) { true }
1391
-
1392
- it 'raises error' do
1393
- -> { Lotus::Utils::Kernel.Date(input) }.must_raise ArgumentError
1394
- end
1395
- end
1396
-
1397
- describe 'when false is given' do
1398
- let(:input) { false }
1399
-
1400
- it 'raises error' do
1401
- -> { Lotus::Utils::Kernel.Date(input) }.must_raise ArgumentError
1402
- end
1403
- end
1404
-
1405
- describe 'when a fixnum is given' do
1406
- let(:input) { 2 }
1407
-
1408
- it 'raises error' do
1409
- -> { Lotus::Utils::Kernel.Date(input) }.must_raise ArgumentError
1410
- end
1411
- end
1412
-
1413
- describe 'when a float is given' do
1414
- let(:input) { 2332.903007 }
1415
-
1416
- it 'raises error' do
1417
- -> { Lotus::Utils::Kernel.Date(input) }.must_raise ArgumentError
1418
- end
1419
- end
1420
-
1421
- describe "when a string that doesn't represent a date is given" do
1422
- let(:input) { 'lego' }
1423
-
1424
- it 'raises error' do
1425
- -> { Lotus::Utils::Kernel.Date(input) }.must_raise ArgumentError
1426
- end
1427
- end
1428
-
1429
- describe "when a string that represent a hour is given" do
1430
- let(:input) { '18:55' }
1431
-
1432
- it 'raises error' do
1433
- -> { Lotus::Utils::Kernel.Date(input) }.must_raise ArgumentError
1434
- end
1435
- end
1436
-
1437
- describe "when an object that doesn't implement #respond_to?" do
1438
- let(:input) { BasicObject.new }
1439
-
1440
- it 'raises error' do
1441
- -> { Lotus::Utils::Kernel.Date(input) }.must_raise NoMethodError
1442
- end
1443
- end
1444
-
1445
- describe "when an object that doesn't implement #nil?" do
1446
- let(:input) { BaseObject.new }
1447
-
1448
- it 'raises error' do
1449
- -> { Lotus::Utils::Kernel.Date(input) }.must_raise NoMethodError
1450
- end
1451
- end
1452
- end
1453
- end
1454
-
1455
- describe '.DateTime' do
1456
- before do
1457
- class NewYearEve
1458
- def to_datetime
1459
- DateTime.parse('Jan, 1')
1460
- end
1461
- end
1462
-
1463
- BaseObject = Class.new(BasicObject) do
1464
- def nil?
1465
- false
1466
- end
1467
- end
1468
- end
1469
-
1470
- after do
1471
- Object.send(:remove_const, :NewYearEve)
1472
- Object.send(:remove_const, :BaseObject)
1473
- end
1474
-
1475
- describe 'successful operations' do
1476
- before do
1477
- @result = Lotus::Utils::Kernel.DateTime(input)
1478
- end
1479
-
1480
- describe 'when nil is given' do
1481
- let(:input) { nil }
1482
-
1483
- it 'returns nil' do
1484
- @result.must_be_nil
1485
- end
1486
- end
1487
-
1488
- describe 'when a datetime is given' do
1489
- let(:input) { DateTime.now }
1490
-
1491
- it 'returns the input' do
1492
- @result.must_equal input
1493
- end
1494
- end
1495
-
1496
- describe 'when a date is given' do
1497
- let(:input) { Date.today }
1498
-
1499
- it 'returns a datetime' do
1500
- @result.must_equal DateTime.parse(Date.today.to_s)
1501
- end
1502
- end
1503
-
1504
- describe 'when a string that represents a date is given' do
1505
- let(:input) { '2014-04-17' }
1506
-
1507
- it 'returns a datetime' do
1508
- @result.must_equal DateTime.parse(input)
1509
- end
1510
- end
1511
-
1512
- describe 'when a string that represents a timestamp is given' do
1513
- let(:input) { '2014-04-17 22:51:48' }
1514
-
1515
- it 'returns a datetime' do
1516
- @result.must_equal DateTime.parse(input)
1517
- end
1518
- end
1519
-
1520
- describe 'when a time is given' do
1521
- let(:input) { Time.now }
1522
-
1523
- it 'returns a datetime' do
1524
- @result.must_equal input.to_datetime
1525
- end
1526
- end
1527
-
1528
- describe 'when an object that implements #to_datetime is given' do
1529
- let(:input) { NewYearEve.new }
1530
-
1531
- it 'returns a datetime' do
1532
- @result.must_equal DateTime.parse('Jan 1')
1533
- end
1534
- end
1535
-
1536
- describe "when a string that represent a hour is given" do
1537
- let(:input) { '23:12' }
1538
-
1539
- it 'returns a datetime' do
1540
- @result.must_equal DateTime.parse(input)
1541
- end
1542
- end
1543
-
1544
- describe 'when a float is given' do
1545
- let(:input) { 2332.903007 }
1546
-
1547
- it 'raises error' do
1548
- @result.must_equal Time.at(input).to_datetime
1549
- end
1550
- end
1551
-
1552
- describe 'when a fixnum is given' do
1553
- let(:input) { 34322 }
1554
-
1555
- it 'raises error' do
1556
- @result.must_equal Time.at(input).to_datetime
1557
- end
1558
- end
1559
- end
1560
-
1561
- describe 'failure operations' do
1562
- describe 'when true is given' do
1563
- let(:input) { true }
1564
-
1565
- it 'raises error' do
1566
- -> { Lotus::Utils::Kernel.DateTime(input) }.must_raise ArgumentError
1567
- end
1568
- end
1569
-
1570
- describe 'when false is given' do
1571
- let(:input) { false }
1572
-
1573
- it 'raises error' do
1574
- -> { Lotus::Utils::Kernel.DateTime(input) }.must_raise ArgumentError
1575
- end
1576
- end
1577
-
1578
- describe "when a string that doesn't represent a date is given" do
1579
- let(:input) { 'crab' }
1580
-
1581
- it 'raises error' do
1582
- -> { Lotus::Utils::Kernel.DateTime(input) }.must_raise ArgumentError
1583
- end
1584
- end
1585
-
1586
- describe "when an object that doesn't implement #respond_to?" do
1587
- let(:input) { BasicObject.new }
1588
-
1589
- it 'raises error' do
1590
- -> { Lotus::Utils::Kernel.DateTime(input) }.must_raise NoMethodError
1591
- end
1592
- end
1593
-
1594
- describe "when an object that doesn't implement #nil?" do
1595
- let(:input) { BaseObject.new }
1596
-
1597
- it 'raises error' do
1598
- -> { Lotus::Utils::Kernel.DateTime(input) }.must_raise NoMethodError
1599
- end
1600
- end
1601
- end
1602
- end
1603
-
1604
- describe '.Time' do
1605
- before do
1606
- class Epoch
1607
- def to_time
1608
- Time.at(0)
1609
- end
1610
- end
1611
-
1612
- BaseObject = Class.new(BasicObject) do
1613
- def nil?
1614
- false
1615
- end
1616
- end
1617
- end
1618
-
1619
- after do
1620
- Object.send(:remove_const, :Epoch)
1621
- Object.send(:remove_const, :BaseObject)
1622
- end
1623
-
1624
- describe 'successful operations' do
1625
- before do
1626
- @result = Lotus::Utils::Kernel.Time(input)
1627
- end
1628
-
1629
- describe 'when nil is given' do
1630
- let(:input) { nil }
1631
-
1632
- it 'returns nil' do
1633
- @result.must_be_nil
1634
- end
1635
- end
1636
-
1637
- describe 'when a time is given' do
1638
- let(:input) { Time.now }
1639
-
1640
- it 'returns the input' do
1641
- @result.must_equal input
1642
- end
1643
- end
1644
-
1645
- describe 'when a datetime is given' do
1646
- let(:input) { DateTime.now }
1647
-
1648
- it 'returns time' do
1649
- @result.must_equal input.to_time
1650
- end
1651
- end
1652
-
1653
- describe 'when a date is given' do
1654
- let(:input) { Date.today }
1655
-
1656
- it 'returns time' do
1657
- @result.must_equal input.to_time
1658
- end
1659
- end
1660
-
1661
- describe 'when a string that represents a date is given' do
1662
- let(:input) { '2014-04-18' }
1663
-
1664
- it 'returns time' do
1665
- @result.must_equal Time.parse(input)
1666
- end
1667
- end
1668
-
1669
- describe 'when a string that represents a timestamp is given' do
1670
- let(:input) { '2014-04-18 15:45:12' }
1671
-
1672
- it 'returns time' do
1673
- @result.must_equal Time.parse(input)
1674
- end
1675
- end
1676
-
1677
- describe 'when an object that implements #to_time is given' do
1678
- let(:input) { Epoch.new }
1679
-
1680
- it 'returns time' do
1681
- @result.must_equal Time.at(0)
1682
- end
1683
- end
1684
-
1685
- describe 'when a string that represent a hour is given' do
1686
- let(:input) { '15:47' }
1687
-
1688
- it 'returns a time' do
1689
- @result.must_equal Time.parse(input)
1690
- end
1691
- end
1692
-
1693
- describe 'when a fixnum is given' do
1694
- let(:input) { 38922 }
1695
-
1696
- it 'returns a time' do
1697
- @result.must_equal Time.at(input)
1698
- end
1699
- end
1700
-
1701
- describe 'when a float is given' do
1702
- let(:input) { 1332.9423843 }
1703
-
1704
- it 'returns a time' do
1705
- @result.must_equal Time.at(input)
1706
- end
1707
- end
1708
- end
1709
-
1710
- describe 'failure operations' do
1711
- describe 'when true is given' do
1712
- let(:input) { true }
1713
-
1714
- it 'raises error' do
1715
- -> { Lotus::Utils::Kernel.Time(input) }.must_raise ArgumentError
1716
- end
1717
- end
1718
-
1719
- describe 'when false is given' do
1720
- let(:input) { false }
1721
-
1722
- it 'raises error' do
1723
- -> { Lotus::Utils::Kernel.Time(input) }.must_raise ArgumentError
1724
- end
1725
- end
1726
-
1727
- describe "when a string that doesn't represent a date is given" do
1728
- let(:input) { 'boat' }
1729
-
1730
- it 'raises error' do
1731
- -> { Lotus::Utils::Kernel.Time(input) }.must_raise ArgumentError
1732
- end
1733
- end
1734
-
1735
- describe "when an object that doesn't implement #respond_to?" do
1736
- let(:input) { BasicObject.new }
1737
-
1738
- it 'raises error' do
1739
- -> { Lotus::Utils::Kernel.Time(input) }.must_raise NoMethodError
1740
- end
1741
- end
1742
-
1743
- describe "when an object that doesn't implement #nil?" do
1744
- let(:input) { BaseObject.new }
1745
-
1746
- it 'raises error' do
1747
- -> { Lotus::Utils::Kernel.Time(input) }.must_raise NoMethodError
1748
- end
1749
- end
1750
- end
1751
- end
1752
- end