eitil 1.2.0 → 1.2.1
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/lib/eitil/version.rb +1 -1
- data/spec/eitil_core/argument_helpers/all_args_to_ivars_bang_spec.rb +19 -0
- data/spec/eitil_core/argument_helpers/all_args_to_ivars_spec.rb +19 -0
- data/spec/eitil_core/argument_helpers/all_kwargs_to_ivars_bang_spec.rb +34 -0
- data/spec/eitil_core/argument_helpers/all_kwargs_to_ivars_spec.rb +34 -0
- data/spec/eitil_core/argument_helpers/args_to_h_bang_spec.rb +16 -0
- data/spec/eitil_core/argument_helpers/args_to_h_spec.rb +16 -0
- data/spec/eitil_core/argument_helpers/args_to_ivars_bang_spec.rb +49 -0
- data/spec/eitil_core/argument_helpers/args_to_ivars_spec.rb +49 -0
- data/spec/eitil_core/array/map_strings_spec.rb +24 -0
- data/spec/eitil_core/array/slice_hashes_spec.rb +13 -0
- data/spec/eitil_core/datetime/prettify_spec.rb +11 -0
- data/spec/eitil_core/errors/raise_error_spec.rb +33 -0
- data/spec/eitil_core/float/safe_to_i_spec.rb +24 -0
- data/spec/eitil_core/formatters/duck_set_spec.rb +139 -0
- data/spec/eitil_core/formatters/sql_spec.rb +90 -0
- data/spec/eitil_core/hash/auto_dig_spec.rb +17 -0
- data/spec/eitil_core/hash/transform_string_values_spec.rb +25 -0
- data/spec/eitil_core/safe_executions/safe_call.rb +23 -0
- data/spec/eitil_core/safe_executions/safe_send.rb +25 -0
- data/spec/eitil_core/setters/set_ivars_spec.rb +28 -0
- data/spec/eitil_core/string/strip_base64_header_spec.rb +22 -0
- data/spec/eitil_core/string/to_filename_spec.rb +34 -0
- data/spec/eitil_core/type_checkers/is_num_or_nan_spec.rb +146 -0
- metadata +24 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 591930a48096cb26f7ccc1b0cac2ef947fbb98c9598e87a0e81d4dd8fdc90dda
|
|
4
|
+
data.tar.gz: 7b96c9a9eee4295e46e46c28e1a41a51e90908506eca9153a8f6d88c3812cd9b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 218952e25bec69b4677ff12cff4b597266cd1538a4c01a806f6dafcbc6e6ca0e18a474db2a07f33d13bc82539ff282a92ff4ae3f13f13184c64f7d25d58d1483
|
|
7
|
+
data.tar.gz: '010814956180e66acc2fc5669d666201e617563fde6fdb04d2ba83b801c7a04d7d3ada715f7965dfbf2bb7df04736ccd770a1c0c401a1f3b70cf3630762d46bc'
|
data/lib/eitil/version.rb
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "Kernel#all_args_to_ivars!" do
|
|
3
|
+
|
|
4
|
+
it "should set all positional arguments as instance variables" do
|
|
5
|
+
|
|
6
|
+
def test_method(a, b, c)
|
|
7
|
+
all_args_to_ivars!
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
test_method(1, "two", :three)
|
|
11
|
+
|
|
12
|
+
expect(@a).to eq 1
|
|
13
|
+
expect(@b).to eq "two"
|
|
14
|
+
expect(@c).to eq :three
|
|
15
|
+
expect(@d).to be_nil
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "Kernel#all_args_to_ivars" do
|
|
3
|
+
|
|
4
|
+
it "should set all positional arguments as instance variables" do
|
|
5
|
+
|
|
6
|
+
def test_method(a, b, c)
|
|
7
|
+
all_args_to_ivars binding
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
test_method(1, "two", :three)
|
|
11
|
+
|
|
12
|
+
expect(@a).to eq 1
|
|
13
|
+
expect(@b).to eq "two"
|
|
14
|
+
expect(@c).to eq :three
|
|
15
|
+
expect(@d).to be_nil
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "Kernel#all_kwargs_to_ivars!" do
|
|
3
|
+
|
|
4
|
+
it "should set all hash keys, nested within a positional hash, to instance variables" do
|
|
5
|
+
|
|
6
|
+
def test_method(a, b, c, kwargs)
|
|
7
|
+
all_kwargs_to_ivars! :kwargs
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
test_method(1, "two", :three, {a: 0, b: "not_two", c: :not_three})
|
|
11
|
+
|
|
12
|
+
expect(@a).to eq 0
|
|
13
|
+
expect(@b).to eq "not_two"
|
|
14
|
+
expect(@c).to eq :not_three
|
|
15
|
+
expect(@d).to be_nil
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should set all hash keys, nested within a keyword hash, to instance variables" do
|
|
20
|
+
|
|
21
|
+
def test_method(a, b, c, kwargs:)
|
|
22
|
+
all_kwargs_to_ivars! :kwargs
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
test_method(1, "two", :three, kwargs: {a: 0, b: "not_two", c: :not_three})
|
|
26
|
+
|
|
27
|
+
expect(@a).to eq 0
|
|
28
|
+
expect(@b).to eq "not_two"
|
|
29
|
+
expect(@c).to eq :not_three
|
|
30
|
+
expect(@d).to be_nil
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "Kernel#all_kwargs_to_ivars" do
|
|
3
|
+
|
|
4
|
+
it "should set all hash keys, nested within a positional hash, to instance variables" do
|
|
5
|
+
|
|
6
|
+
def test_method(a, b, c, kwargs)
|
|
7
|
+
all_kwargs_to_ivars binding, :kwargs
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
test_method(1, "two", :three, {a: 0, b: "not_two", c: :not_three})
|
|
11
|
+
|
|
12
|
+
expect(@a).to eq 0
|
|
13
|
+
expect(@b).to eq "not_two"
|
|
14
|
+
expect(@c).to eq :not_three
|
|
15
|
+
expect(@d).to be_nil
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should set all hash keys, nested within a keyword hash, to instance variables" do
|
|
20
|
+
|
|
21
|
+
def test_method(a, b, c, kwargs:)
|
|
22
|
+
all_kwargs_to_ivars binding, :kwargs
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
test_method(1, "two", :three, kwargs: {a: 0, b: "not_two", c: :not_three})
|
|
26
|
+
|
|
27
|
+
expect(@a).to eq 0
|
|
28
|
+
expect(@b).to eq "not_two"
|
|
29
|
+
expect(@c).to eq :not_three
|
|
30
|
+
expect(@d).to be_nil
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "Kernel#args_to_h!" do
|
|
3
|
+
|
|
4
|
+
it "should create an hash, with the local variables as key / value pairs" do
|
|
5
|
+
|
|
6
|
+
a = 1
|
|
7
|
+
b = "two"
|
|
8
|
+
c = :three
|
|
9
|
+
|
|
10
|
+
created_hash = args_to_h! :a, :c
|
|
11
|
+
expected_hash = {a: 1, c: :three}
|
|
12
|
+
|
|
13
|
+
expect(created_hash).to eq expected_hash
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "Kernel#args_to_h" do
|
|
3
|
+
|
|
4
|
+
it "should create an hash, with the local variables as key / value pairs" do
|
|
5
|
+
|
|
6
|
+
a = 1
|
|
7
|
+
b = "two"
|
|
8
|
+
c = :three
|
|
9
|
+
|
|
10
|
+
created_hash = args_to_h(binding, :a, :c)
|
|
11
|
+
expected_hash = {a: 1, c: :three}
|
|
12
|
+
|
|
13
|
+
expect(created_hash).to eq expected_hash
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "Kernel#args_to_ivars!" do
|
|
3
|
+
|
|
4
|
+
it "should set the given positional arguments to instance variables" do
|
|
5
|
+
|
|
6
|
+
def test_method(a, b, c)
|
|
7
|
+
args_to_ivars! :a, :c
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
test_method(1, "two", :three)
|
|
11
|
+
|
|
12
|
+
expect(@a).to eq 1
|
|
13
|
+
expect(@b).to be_nil
|
|
14
|
+
expect(@c).to eq :three
|
|
15
|
+
expect(@d).to be_nil
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should set the given keyword arguments to instance variables" do
|
|
20
|
+
|
|
21
|
+
def test_method(a:, b:, c:)
|
|
22
|
+
args_to_ivars! :a, :c
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
test_method(a: 1, b: "two", c: :three)
|
|
26
|
+
|
|
27
|
+
expect(@a).to eq 1
|
|
28
|
+
expect(@b).to be_nil
|
|
29
|
+
expect(@c).to eq :three
|
|
30
|
+
expect(@d).to be_nil
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should set the given local variables to instance variables" do
|
|
35
|
+
|
|
36
|
+
a = 1
|
|
37
|
+
b = "two"
|
|
38
|
+
c = :three
|
|
39
|
+
|
|
40
|
+
args_to_ivars! :a, :c
|
|
41
|
+
|
|
42
|
+
expect(@a).to eq 1
|
|
43
|
+
expect(@b).to be_nil
|
|
44
|
+
expect(@c).to eq :three
|
|
45
|
+
expect(@d).to be_nil
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "Kernel#args_to_ivars" do
|
|
3
|
+
|
|
4
|
+
it "should set the given positional arguments to instance variables" do
|
|
5
|
+
|
|
6
|
+
def test_method(a, b, c)
|
|
7
|
+
args_to_ivars binding, :a, :c
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
test_method(1, "two", :three)
|
|
11
|
+
|
|
12
|
+
expect(@a).to eq 1
|
|
13
|
+
expect(@b).to be_nil
|
|
14
|
+
expect(@c).to eq :three
|
|
15
|
+
expect(@d).to be_nil
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should set the given keyword arguments to instance variables" do
|
|
20
|
+
|
|
21
|
+
def test_method(a:, b:, c:)
|
|
22
|
+
args_to_ivars binding, :a, :c
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
test_method(a: 1, b: "two", c: :three)
|
|
26
|
+
|
|
27
|
+
expect(@a).to eq 1
|
|
28
|
+
expect(@b).to be_nil
|
|
29
|
+
expect(@c).to eq :three
|
|
30
|
+
expect(@d).to be_nil
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should set the given local variables to instance variables" do
|
|
35
|
+
|
|
36
|
+
a = 1
|
|
37
|
+
b = "two"
|
|
38
|
+
c = :three
|
|
39
|
+
|
|
40
|
+
args_to_ivars binding, :a, :c
|
|
41
|
+
|
|
42
|
+
expect(@a).to eq 1
|
|
43
|
+
expect(@b).to be_nil
|
|
44
|
+
expect(@c).to eq :three
|
|
45
|
+
expect(@d).to be_nil
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "Array#map_strings" do
|
|
3
|
+
|
|
4
|
+
it "should transforms all strings in infinite recursion" do
|
|
5
|
+
|
|
6
|
+
array = ["hey", ["hi", {a: "ho", b: {d: "he"}}]]
|
|
7
|
+
result = array.map_strings { |str| str.upcase }
|
|
8
|
+
|
|
9
|
+
expect(result).to eq ["HEY", ["HI", {a: "HO", b: {d: "HE"}}]]
|
|
10
|
+
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
RSpec.describe "Array#map_strings!" do
|
|
15
|
+
|
|
16
|
+
it "should transforms all strings in infinite recursion" do
|
|
17
|
+
|
|
18
|
+
array = ["hey", ["hi", {a: "ho", b: {d: "he"}}]]
|
|
19
|
+
array.map_strings! { |str| str.upcase }
|
|
20
|
+
|
|
21
|
+
expect(array).to eq ["HEY", ["HI", {a: "HO", b: {d: "HE"}}]]
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "Array#slice_hashes" do
|
|
3
|
+
|
|
4
|
+
it "should slice each hash in an array of hashes with the given keys" do
|
|
5
|
+
|
|
6
|
+
array = [{"a"=>1, "b"=>2, "c"=>3}, {"a"=>1, "b"=>2, "c"=>3}]
|
|
7
|
+
result = array.slice_hashes("a", "b")
|
|
8
|
+
expected = [{"a"=>1, "b"=>2}, {"a"=>1, "b"=>2}]
|
|
9
|
+
|
|
10
|
+
expect(result).to eq expected
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "Kernel#raise_error" do
|
|
3
|
+
|
|
4
|
+
# Call specs directly on Kernel, which you would usually do implicit
|
|
5
|
+
# instead of explicit, in order to escape the RSpec namespace, which has
|
|
6
|
+
# it's own effects for raised errors
|
|
7
|
+
|
|
8
|
+
it "should define a new constant, if the error class does not yet exist" do
|
|
9
|
+
|
|
10
|
+
begin
|
|
11
|
+
Kernel.raise_error "ThisErrorWillProbablyNotExistError"
|
|
12
|
+
rescue
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
expect(Kernel.const_defined?('ThisErrorWillProbablyNotExistError')).to eq true
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should call an existing constant, if the error class already exists" do
|
|
20
|
+
|
|
21
|
+
expect(Kernel.const_defined?('StandardError'))
|
|
22
|
+
initial_const_count = Module.constants.count
|
|
23
|
+
|
|
24
|
+
begin
|
|
25
|
+
Kernel.raise_error "StandardError"
|
|
26
|
+
rescue
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
expect(Module.constants.count).to eq initial_const_count
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "Float#safe_to_i" do
|
|
3
|
+
|
|
4
|
+
it "should convert a float to an integer, if the float is rounded (e.g. 7.0)" do
|
|
5
|
+
|
|
6
|
+
float = 7.0
|
|
7
|
+
result = float.safe_to_i
|
|
8
|
+
|
|
9
|
+
expect(result).to eq 7
|
|
10
|
+
expect(result).to be_a Integer
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should not convert a float to an integer, if the float is not rounded (e.g. 7.1)" do
|
|
15
|
+
|
|
16
|
+
float = 7.1
|
|
17
|
+
result = float.safe_to_i
|
|
18
|
+
|
|
19
|
+
expect(result).to eq 7.1
|
|
20
|
+
expect(result).to be_a Float
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "Date.duck_set(object)" do
|
|
3
|
+
|
|
4
|
+
let(:date) { Date.duck_set(@object) }
|
|
5
|
+
|
|
6
|
+
it "should return the object, if the object is a Date instance" do
|
|
7
|
+
@object = Date.today
|
|
8
|
+
expect(date).to eq @object
|
|
9
|
+
expect(date).to be_a Date
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should return a Date instance, if the object is a String instance" do
|
|
13
|
+
@object = "2020-01-01"
|
|
14
|
+
expect(@object).to be_a String
|
|
15
|
+
expect(date).to be_a Date
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
it "should return a Date instance, if the object is a DateTime instance" do
|
|
20
|
+
@object = DateTime.now
|
|
21
|
+
expect(@object).to be_a DateTime
|
|
22
|
+
expect(date).to be_a Date
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
it "should return a Date instance, if the object is a Time instance" do
|
|
27
|
+
@object = Time.now
|
|
28
|
+
expect(@object).to be_a Time
|
|
29
|
+
expect(date).to be_a Date
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
it "should raise an error, if the object's class is not one of: String, Date, DateTime, Time" do
|
|
34
|
+
@object = 2020
|
|
35
|
+
expect(@object).to be_a Integer
|
|
36
|
+
begin
|
|
37
|
+
error_raised = false
|
|
38
|
+
date
|
|
39
|
+
rescue
|
|
40
|
+
error_raised = true
|
|
41
|
+
end
|
|
42
|
+
expect(error_raised).to eq true
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
RSpec.describe "DateTime.duck_set(object)" do
|
|
49
|
+
|
|
50
|
+
let(:datetime) { DateTime.duck_set(@object) }
|
|
51
|
+
|
|
52
|
+
it "should return the object, if the object is a DateTime instance" do
|
|
53
|
+
@object = DateTime.now
|
|
54
|
+
expect(datetime).to eq @object
|
|
55
|
+
expect(datetime).to be_a DateTime
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should return a DateTime instance, if the object is a String instance" do
|
|
59
|
+
@object = "2020-01-01"
|
|
60
|
+
expect(@object).to be_a String
|
|
61
|
+
expect(datetime).to be_a DateTime
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
it "should return a DateTime instance, if the object is a Date instance" do
|
|
66
|
+
@object = Date.today
|
|
67
|
+
expect(@object).to be_a Date
|
|
68
|
+
expect(datetime).to be_a DateTime
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
it "should return a DateTime instance, if the object is a Time instance" do
|
|
73
|
+
@object = Time.now
|
|
74
|
+
expect(@object).to be_a Time
|
|
75
|
+
expect(datetime).to be_a DateTime
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
it "should raise an error, if the object's class is not one of: String, DateTime, Date, Time" do
|
|
80
|
+
@object = 2020
|
|
81
|
+
expect(@object).to be_a Integer
|
|
82
|
+
begin
|
|
83
|
+
error_raised = false
|
|
84
|
+
datetime
|
|
85
|
+
rescue
|
|
86
|
+
error_raised = true
|
|
87
|
+
end
|
|
88
|
+
expect(error_raised).to eq true
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
RSpec.describe "Time.duck_set(object)" do
|
|
96
|
+
|
|
97
|
+
let(:time) { Time.duck_set(@object) }
|
|
98
|
+
|
|
99
|
+
it "should return the object, if the object is a Time instance" do
|
|
100
|
+
@object = Time.now
|
|
101
|
+
expect(time).to eq @object
|
|
102
|
+
expect(time).to be_a Time
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it "should return a Time instance, if the object is a String instance" do
|
|
106
|
+
@object = "20:00"
|
|
107
|
+
expect(@object).to be_a String
|
|
108
|
+
expect(time).to be_a Time
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
it "should return a Time instance, if the object is a Date instance" do
|
|
113
|
+
@object = Date.today
|
|
114
|
+
expect(@object).to be_a Date
|
|
115
|
+
expect(time).to be_a Time
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
it "should return a Time instance, if the object is a DateTime instance" do
|
|
120
|
+
@object = DateTime.now
|
|
121
|
+
expect(@object).to be_a DateTime
|
|
122
|
+
expect(time).to be_a Time
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
it "should raise an error, if the object's class is not one of: String, DateTime, Date, Time" do
|
|
127
|
+
@object = 2020
|
|
128
|
+
expect(@object).to be_a Integer
|
|
129
|
+
begin
|
|
130
|
+
error_raised = false
|
|
131
|
+
time
|
|
132
|
+
rescue
|
|
133
|
+
error_raised = true
|
|
134
|
+
end
|
|
135
|
+
expect(error_raised).to eq true
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
end
|
|
139
|
+
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "Date#strfsql(type)" do
|
|
3
|
+
|
|
4
|
+
let(:date) { Date.parse('01-01-2020').strfsql(@type) }
|
|
5
|
+
|
|
6
|
+
it "should by default format a Date instance to '%Y-%m-%d'" do
|
|
7
|
+
date = Date.parse('01-01-2020').strfsql
|
|
8
|
+
expect(date).to eq '2020-01-01'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should format a Date instance to '%Y-%m-%d', if :date is given as type" do
|
|
12
|
+
@type = :date
|
|
13
|
+
expect(date).to eq '2020-01-01'
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should simply return nil if an invalid type is given" do
|
|
17
|
+
@type = 666
|
|
18
|
+
expect(date).to be_nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
RSpec.describe "DateTime#strfsql(type)" do
|
|
25
|
+
|
|
26
|
+
let(:datetime) { DateTime.parse('01-01-2020').strfsql(@type) }
|
|
27
|
+
|
|
28
|
+
it "should by default format a DateTime instance to '%Y-%m-%d %H:%M:%S.%6N'" do
|
|
29
|
+
datetime = DateTime.parse('01-01-2020').strfsql
|
|
30
|
+
expect(datetime).to eq "2020-01-01 00:00:00.000000"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should format a DateTime instance to '%Y-%m-%d %H:%M:%S.%6N', if :datetime is given as type" do
|
|
34
|
+
@type = :datetime
|
|
35
|
+
expect(datetime).to eq "2020-01-01 00:00:00.000000"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
it "should format a DateTime instance to '%Y-%m-%d', if :date is given as type" do
|
|
40
|
+
@type = :date
|
|
41
|
+
expect(datetime).to eq "2020-01-01"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
it "should format a DateTime instance to '%H:%M:%S', if :time is given as type" do
|
|
46
|
+
@type = :time
|
|
47
|
+
expect(datetime).to eq "00:00:00"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "should simply return nil if an invalid type is given" do
|
|
51
|
+
@type = 666
|
|
52
|
+
expect(datetime).to be_nil
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
RSpec.describe "Time#strfsql(type)" do
|
|
60
|
+
|
|
61
|
+
let(:time) { Time.parse('01-01-2020 20:00:00 +0200').strfsql(@type) }
|
|
62
|
+
|
|
63
|
+
it "should by default format a Time instance to '%Y-%m-%d %H:%M:%S.%6N'" do
|
|
64
|
+
time = Time.parse('01-01-2020 20:00:00 +0200').strfsql
|
|
65
|
+
expect(time).to eq "20:00:00"
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "should format a Time instance to '%Y-%m-%d %H:%M:%S.%6N', if :datetime is given as type" do
|
|
69
|
+
@type = :datetime
|
|
70
|
+
expect(time).to eq "2020-01-01 20:00:00.000000"
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
it "should format a Time instance to '%Y-%m-%d', if :date is given as type" do
|
|
75
|
+
@type = :date
|
|
76
|
+
expect(time).to eq "2020-01-01"
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
it "should format a Time instance to '%H:%M:%S', if :time is given as type" do
|
|
81
|
+
@type = :time
|
|
82
|
+
expect(time).to eq "20:00:00"
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it "should simply return nil if an invalid type is given" do
|
|
86
|
+
@type = 666
|
|
87
|
+
expect(time).to be_nil
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "Hash#auto_dig" do
|
|
3
|
+
|
|
4
|
+
it "should recursively find the value for the given hash key" do
|
|
5
|
+
hash = {a: 1, b: {c: 2, d: {e: 3}}}
|
|
6
|
+
result = hash.auto_dig :e
|
|
7
|
+
expect(result).to eq 3
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
it "should return nil if the given hash key is not present" do
|
|
12
|
+
hash = {a: 1, b: {c: 2, d: {e: 3}}}
|
|
13
|
+
result = hash.auto_dig :f
|
|
14
|
+
expect(result).to be_nil
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "Hash#transform_string_values" do
|
|
3
|
+
|
|
4
|
+
it "should transforms all strings in infinite recursion" do
|
|
5
|
+
hash = {a: "hey", b: {c: "hi", d: ["ho"]}}
|
|
6
|
+
expected = {a: "HEY", b: {c: "HI", d: ["HO"]}}
|
|
7
|
+
result = hash.transform_string_values { |str| str.upcase }
|
|
8
|
+
|
|
9
|
+
expect(result).to eq expected
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
RSpec.describe "Hash#transform_string_values!" do
|
|
16
|
+
|
|
17
|
+
it "should transforms all strings in infinite recursion" do
|
|
18
|
+
hash = {a: "hey", b: {c: "hi", d: ["ho"]}}
|
|
19
|
+
expected = {a: "HEY", b: {c: "HI", d: ["HO"]}}
|
|
20
|
+
|
|
21
|
+
hash.transform_string_values! { |str| str.upcase }
|
|
22
|
+
expect(hash).to eq expected
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
|
|
2
|
+
# For some reason, the Kernel patches – which ruby mixes into Object – are not
|
|
3
|
+
# available to the tests, therefore load the file manually.
|
|
4
|
+
load (Eitil::Root + "/eitil_core/lib/eitil_core/safe_executions/safe_call.rb")
|
|
5
|
+
|
|
6
|
+
RSpec.describe "Object#safe_call" do
|
|
7
|
+
|
|
8
|
+
it "should return the block's yield value, if no error is raised" do
|
|
9
|
+
result = Object.new.safe_call { 1 + 1 }
|
|
10
|
+
expect(result).to eq 2
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should by default return nil, if an error is raised" do
|
|
14
|
+
result = Object.new.safe_call { raise(StandardError) }
|
|
15
|
+
expect(result).to be_nil
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should return the specified :return_value, if an error is raised" do
|
|
19
|
+
result = Object.new.safe_call(return_value: :something_else) { raise(StandardError) }
|
|
20
|
+
expect(result).to eq :something_else
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
|
|
2
|
+
# For some reason, the Kernel patches – which ruby mixes into string – are not
|
|
3
|
+
# available to the tests, therefore load the file manually.
|
|
4
|
+
load (Eitil::Root + "/eitil_core/lib/eitil_core/safe_executions/safe_send.rb")
|
|
5
|
+
|
|
6
|
+
RSpec.describe "Object#safe_send" do
|
|
7
|
+
|
|
8
|
+
let(:string) { "Hiya, Cowboy!" }
|
|
9
|
+
|
|
10
|
+
it "should return the method's return value, if no error is raised" do
|
|
11
|
+
result = string.safe_send(:upcase)
|
|
12
|
+
expect(result).to eq "HIYA, COWBOY!"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should by default return nil, if an error is raised" do
|
|
16
|
+
result = string.safe_send(:this_method_does_probably_not_exist)
|
|
17
|
+
expect(result).to be_nil
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should return the specified :return_value, if an error is raised" do
|
|
21
|
+
result = string.safe_send(:this_method_does_probably_not_exist, return_value: :something_else)
|
|
22
|
+
expect(result).to eq :something_else
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "Object#set_ivars" do
|
|
3
|
+
|
|
4
|
+
def set_ivar_one
|
|
5
|
+
:one
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def set_ivar_two
|
|
9
|
+
2
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it 'should call a method .set_#{ivar_name}, for every :ivar_name passed' do
|
|
13
|
+
set_ivars :ivar_one, :ivar_two
|
|
14
|
+
expect(@ivar_one).to eq :one
|
|
15
|
+
expect(@ivar_two).to eq 2
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should return an array of symbols, which the names of all ivars being set" do
|
|
19
|
+
return_value = set_ivars :ivar_one, :ivar_two
|
|
20
|
+
expect(return_value).to eq [:ivar_one, :ivar_two]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should return an empty array, if no arguments are passed" do
|
|
24
|
+
expect(set_ivars).to eq []
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "String#strip_base64_header" do
|
|
3
|
+
|
|
4
|
+
let(:regex) { EitilStore::Regex::LeadingBase64Data }
|
|
5
|
+
let(:b64_string) { "data:image/png;base64,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" }
|
|
6
|
+
let(:normal_string) { "IAmJustANormalStringDoingNormalThings" }
|
|
7
|
+
|
|
8
|
+
it "should retrieve the Regexp LeadingBase64Data" do
|
|
9
|
+
expect(regex).to be_a Regexp
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should detect a base_64 string" do
|
|
13
|
+
result = b64_string =~ regex
|
|
14
|
+
expect(result).to be_a Integer
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should leave a normal string untouched" do
|
|
18
|
+
result = normal_string =~ regex
|
|
19
|
+
expect(result).to be_nil
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "String#to_filename(substitute='_')" do
|
|
3
|
+
|
|
4
|
+
it "should substitute all spaces with, by default, lowdashes" do
|
|
5
|
+
string = "this is a filename"
|
|
6
|
+
expect(string.to_filename).to eq "this_is_a_filename"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "should substitute all spaces with, if given, the substitute argument" do
|
|
10
|
+
string = "this is a filename"
|
|
11
|
+
expect(string.to_filename('-')).to eq "this-is-a-filename"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should substitute all slashes with, by default, lowdashes" do
|
|
15
|
+
string = "this/is/a/filename"
|
|
16
|
+
expect(string.to_filename).to eq "this_is_a_filename"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should substitute all slashes with, if given, the substitute argument" do
|
|
20
|
+
string = "this/is/a/filename"
|
|
21
|
+
expect(string.to_filename('-')).to eq "this-is-a-filename"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should substitute all backslashes with, by default, lowdashes" do
|
|
25
|
+
string = 'this\is\a\filename'
|
|
26
|
+
expect(string.to_filename).to eq "this_is_a_filename"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should substitute all backslashes with, if given, the substitute argument" do
|
|
30
|
+
string = 'this\is\a\filename'
|
|
31
|
+
expect(string.to_filename('-')).to eq "this-is-a-filename"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
|
|
2
|
+
RSpec.describe "#is_num? and #is_nan?" do
|
|
3
|
+
|
|
4
|
+
context "for String" do
|
|
5
|
+
|
|
6
|
+
it "#is_num? should return true for '5' (integers)" do
|
|
7
|
+
expect('5'.is_num?).to be_truthy
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "#is_num? should return true for '5.0' (floats) " do
|
|
11
|
+
expect('5.0'.is_num?).to be_truthy
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "#is_num? should return true for '5,0' (floats, separated by comma) " do
|
|
15
|
+
expect('5,0'.is_num?).to be_truthy
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "#is_num? should return false for valid values, '5a' (concatenated with additional letters)" do
|
|
19
|
+
expect('5a'.is_num?).to be_falsy
|
|
20
|
+
expect('5.0a'.is_num?).to be_falsy
|
|
21
|
+
expect('5,0a'.is_num?).to be_falsy
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "#is_nan? should return the opposite" do
|
|
25
|
+
expect('5'.is_nan?).to be_falsy
|
|
26
|
+
expect('5.0'.is_nan?).to be_falsy
|
|
27
|
+
expect('5,0'.is_nan?).to be_falsy
|
|
28
|
+
expect('5a'.is_nan?).to be_truthy
|
|
29
|
+
expect('5.0a'.is_nan?).to be_truthy
|
|
30
|
+
expect('5,0a'.is_nan?).to be_truthy
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
context "for Numeric" do
|
|
36
|
+
|
|
37
|
+
it "#is_num? should always return true" do
|
|
38
|
+
expect(1.is_num?).to be_truthy
|
|
39
|
+
expect(1.0.is_num?).to be_truthy
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "#is_nan? should always return false" do
|
|
43
|
+
expect(1.is_nan?).to be_falsy
|
|
44
|
+
expect(1.0.is_nan?).to be_falsy
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
context "for NilClass" do
|
|
50
|
+
|
|
51
|
+
it "#is_num? should always return false" do
|
|
52
|
+
expect(nil.is_num?).to be_falsy
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "#is_nan? should always return true" do
|
|
56
|
+
expect(nil.is_nan?).to be_truthy
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context "for TrueClass" do
|
|
62
|
+
|
|
63
|
+
it "#is_num? should always return false" do
|
|
64
|
+
expect(true.is_num?).to be_falsy
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "#is_nan? should always return true" do
|
|
68
|
+
expect(true.is_nan?).to be_truthy
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
context "for FalseClass" do
|
|
74
|
+
|
|
75
|
+
it "#is_num? should always return false" do
|
|
76
|
+
expect(false.is_num?).to be_falsy
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "#is_nan? should always return true" do
|
|
80
|
+
expect(false.is_nan?).to be_truthy
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
context "for Hash" do
|
|
86
|
+
|
|
87
|
+
it "#is_num? should always return false" do
|
|
88
|
+
expect({}.is_num?).to be_falsy
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it "#is_nan? should always return true" do
|
|
92
|
+
expect({}.is_nan?).to be_truthy
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
context "for Array" do
|
|
98
|
+
|
|
99
|
+
it "#is_num? should always return false" do
|
|
100
|
+
expect([].is_num?).to be_falsy
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it "#is_nan? should always return true" do
|
|
104
|
+
expect([].is_nan?).to be_truthy
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
context "for Date" do
|
|
110
|
+
|
|
111
|
+
it "#is_num? should always return false" do
|
|
112
|
+
expect(Date.today.is_num?).to be_falsy
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
it "#is_nan? should always return true" do
|
|
116
|
+
expect(Date.today.is_nan?).to be_truthy
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
context "for Time" do
|
|
122
|
+
|
|
123
|
+
it "#is_num? should always return false" do
|
|
124
|
+
expect(Time.now.is_num?).to be_falsy
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it "#is_nan? should always return true" do
|
|
128
|
+
expect(Time.now.is_nan?).to be_truthy
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
context "for DateTime" do
|
|
134
|
+
|
|
135
|
+
it "#is_num? should always return false" do
|
|
136
|
+
expect(DateTime.now.is_num?).to be_falsy
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it "#is_nan? should always return true" do
|
|
140
|
+
expect(DateTime.now.is_nan?).to be_truthy
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
end
|
|
146
|
+
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: eitil
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.2.
|
|
4
|
+
version: 1.2.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jurriaan Schrofer
|
|
@@ -247,6 +247,29 @@ files:
|
|
|
247
247
|
- lib/eitil/all.rb
|
|
248
248
|
- lib/eitil/railtie.rb
|
|
249
249
|
- lib/eitil/version.rb
|
|
250
|
+
- spec/eitil_core/argument_helpers/all_args_to_ivars_bang_spec.rb
|
|
251
|
+
- spec/eitil_core/argument_helpers/all_args_to_ivars_spec.rb
|
|
252
|
+
- spec/eitil_core/argument_helpers/all_kwargs_to_ivars_bang_spec.rb
|
|
253
|
+
- spec/eitil_core/argument_helpers/all_kwargs_to_ivars_spec.rb
|
|
254
|
+
- spec/eitil_core/argument_helpers/args_to_h_bang_spec.rb
|
|
255
|
+
- spec/eitil_core/argument_helpers/args_to_h_spec.rb
|
|
256
|
+
- spec/eitil_core/argument_helpers/args_to_ivars_bang_spec.rb
|
|
257
|
+
- spec/eitil_core/argument_helpers/args_to_ivars_spec.rb
|
|
258
|
+
- spec/eitil_core/array/map_strings_spec.rb
|
|
259
|
+
- spec/eitil_core/array/slice_hashes_spec.rb
|
|
260
|
+
- spec/eitil_core/datetime/prettify_spec.rb
|
|
261
|
+
- spec/eitil_core/errors/raise_error_spec.rb
|
|
262
|
+
- spec/eitil_core/float/safe_to_i_spec.rb
|
|
263
|
+
- spec/eitil_core/formatters/duck_set_spec.rb
|
|
264
|
+
- spec/eitil_core/formatters/sql_spec.rb
|
|
265
|
+
- spec/eitil_core/hash/auto_dig_spec.rb
|
|
266
|
+
- spec/eitil_core/hash/transform_string_values_spec.rb
|
|
267
|
+
- spec/eitil_core/safe_executions/safe_call.rb
|
|
268
|
+
- spec/eitil_core/safe_executions/safe_send.rb
|
|
269
|
+
- spec/eitil_core/setters/set_ivars_spec.rb
|
|
270
|
+
- spec/eitil_core/string/strip_base64_header_spec.rb
|
|
271
|
+
- spec/eitil_core/string/to_filename_spec.rb
|
|
272
|
+
- spec/eitil_core/type_checkers/is_num_or_nan_spec.rb
|
|
250
273
|
- spec/spec_helper.rb
|
|
251
274
|
homepage: https://github.com/eitje-app/eitil_engine
|
|
252
275
|
licenses:
|