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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +49 -0
- data/README.md +2 -3
- data/lib/lotus/utils/callbacks.rb +36 -4
- data/lib/lotus/utils/kernel.rb +235 -109
- data/lib/lotus/utils/load_paths.rb +149 -0
- data/lib/lotus/utils/string.rb +18 -0
- data/lib/lotus/utils/version.rb +1 -1
- data/lotus-utils.gemspec +2 -2
- metadata +6 -31
- data/.gitignore +0 -20
- data/.travis.yml +0 -6
- data/.yardopts +0 -3
- data/CONTRIBUTING.md +0 -44
- data/Gemfile +0 -10
- data/Rakefile +0 -17
- data/test/callbacks_test.rb +0 -213
- data/test/class_attribute_test.rb +0 -132
- data/test/class_test.rb +0 -47
- data/test/hash_test.rb +0 -35
- data/test/io_test.rb +0 -29
- data/test/kernel_test.rb +0 -1752
- data/test/path_prefix_test.rb +0 -68
- data/test/string_test.rb +0 -75
- data/test/test_helper.rb +0 -20
- data/test/version_test.rb +0 -7
@@ -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
|