necromancer 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/lib/necromancer.rb +4 -3
  4. data/lib/necromancer/context.rb +4 -4
  5. data/lib/necromancer/conversion_target.rb +5 -5
  6. data/lib/necromancer/conversions.rb +10 -10
  7. data/lib/necromancer/converter.rb +1 -1
  8. data/lib/necromancer/converters/array.rb +6 -6
  9. data/lib/necromancer/converters/boolean.rb +2 -2
  10. data/lib/necromancer/converters/date_time.rb +4 -4
  11. data/lib/necromancer/converters/numeric.rb +7 -7
  12. data/lib/necromancer/converters/range.rb +6 -6
  13. data/lib/necromancer/null_converter.rb +1 -1
  14. data/lib/necromancer/version.rb +1 -1
  15. metadata +9 -77
  16. data/Rakefile +0 -8
  17. data/necromancer.gemspec +0 -34
  18. data/spec/spec_helper.rb +0 -53
  19. data/spec/unit/can_spec.rb +0 -9
  20. data/spec/unit/config_spec.rb +0 -30
  21. data/spec/unit/configuration/new_spec.rb +0 -28
  22. data/spec/unit/conversions/fetch_spec.rb +0 -16
  23. data/spec/unit/conversions/register_spec.rb +0 -58
  24. data/spec/unit/conversions/to_hash_spec.rb +0 -37
  25. data/spec/unit/convert_spec.rb +0 -130
  26. data/spec/unit/converters/array/array_to_boolean_spec.rb +0 -20
  27. data/spec/unit/converters/array/array_to_numeric_spec.rb +0 -20
  28. data/spec/unit/converters/array/array_to_set_spec.rb +0 -16
  29. data/spec/unit/converters/array/object_to_array_spec.rb +0 -19
  30. data/spec/unit/converters/array/string_to_array_spec.rb +0 -31
  31. data/spec/unit/converters/boolean/boolean_to_integer_spec.rb +0 -24
  32. data/spec/unit/converters/boolean/integer_to_boolean_spec.rb +0 -20
  33. data/spec/unit/converters/boolean/string_to_boolean_spec.rb +0 -34
  34. data/spec/unit/converters/date_time/string_to_date_spec.rb +0 -24
  35. data/spec/unit/converters/date_time/string_to_datetime_spec.rb +0 -30
  36. data/spec/unit/converters/date_time/string_to_time_spec.rb +0 -28
  37. data/spec/unit/converters/numeric/string_to_float_spec.rb +0 -46
  38. data/spec/unit/converters/numeric/string_to_integer_spec.rb +0 -60
  39. data/spec/unit/converters/numeric/string_to_numeric_spec.rb +0 -30
  40. data/spec/unit/converters/range/string_to_range_spec.rb +0 -33
  41. data/spec/unit/inspect_spec.rb +0 -14
  42. data/spec/unit/new_spec.rb +0 -10
  43. data/spec/unit/register_spec.rb +0 -15
  44. data/tasks/console.rake +0 -11
  45. data/tasks/coverage.rake +0 -11
  46. data/tasks/spec.rake +0 -29
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Necromancer::ArrayConverters::ArrayToSetConverter, '.call' do
4
-
5
- subject(:converter) { described_class.new(:array, :set) }
6
-
7
- it "converts `[:x,:y,:x,1,2,1]` to set" do
8
- expect(converter.call([:x,:y,:x,1,2,1])).to eql(Set[:x,:y,1,2])
9
- end
10
-
11
- it "fails to convert `1` to set" do
12
- expect {
13
- converter.call(1, strict: true)
14
- }.to raise_error(Necromancer::ConversionTypeError)
15
- end
16
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Necromancer::ArrayConverters::ObjectToArrayConverter, '.call' do
4
- subject(:converter) { described_class.new(:object, :array) }
5
-
6
- it "converts nil to array" do
7
- expect(converter.call(nil)).to eq([])
8
- end
9
-
10
- it "converts custom object to array" do
11
- Custom = Class.new do
12
- def to_ary
13
- [:x, :y]
14
- end
15
- end
16
- custom = Custom.new
17
- expect(converter.call(custom)).to eq([:x, :y])
18
- end
19
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Necromancer::ArrayConverters::StringToArrayConverter, '.call' do
4
- subject(:converter) { described_class.new(:string, :array) }
5
-
6
- it "converts empty string to array" do
7
- expect(converter.call('', strict: false)).to eq([''])
8
- end
9
-
10
- it "fails to convert empty string to array in strict mode" do
11
- expect {
12
- converter.call('', strict: true)
13
- }.to raise_error(Necromancer::ConversionTypeError)
14
- end
15
-
16
- it "converts `1,2,3` to array" do
17
- expect(converter.call('1,2,3')).to eq([1,2,3])
18
- end
19
-
20
- it "converts `a,b,c` to array" do
21
- expect(converter.call('a,b,c')).to eq(['a','b','c'])
22
- end
23
-
24
- it "converts '1-2-3' to array" do
25
- expect(converter.call('1-2-3')).to eq([1,2,3])
26
- end
27
-
28
- it "converts ' 1 - 2 - 3 ' to array" do
29
- expect(converter.call(' 1 - 2 - 3 ')).to eq([1,2,3])
30
- end
31
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Necromancer::BooleanConverters::BooleanToIntegerConverter, '.call' do
4
-
5
- subject(:converter) { described_class.new }
6
-
7
- it "converts true to 1 value" do
8
- expect(converter.call(true)).to eq(1)
9
- end
10
-
11
- it "converts false to 0 value" do
12
- expect(converter.call(false)).to eq(0)
13
- end
14
-
15
- it "fails to convert in strict mode" do
16
- expect {
17
- converter.call('unknown', strict: true)
18
- }.to raise_error(Necromancer::ConversionTypeError)
19
- end
20
-
21
- it "returns value in non-strict mode" do
22
- expect(converter.call('unknown', strict: false)).to eq('unknown')
23
- end
24
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Necromancer::BooleanConverters::IntegerToBooleanConverter, '.call' do
4
-
5
- subject(:converter) { described_class.new }
6
-
7
- it "converts 1 to true value" do
8
- expect(converter.call(1)).to eq(true)
9
- end
10
-
11
- it "converts 0 to false value" do
12
- expect(converter.call(0)).to eq(false)
13
- end
14
-
15
- it "fails to convert in strict mode" do
16
- expect {
17
- converter.call('1', strict: true)
18
- }.to raise_error(Necromancer::ConversionTypeError)
19
- end
20
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Necromancer::BooleanConverters::StringToBooleanConverter, '.call' do
4
-
5
- subject(:converter) { described_class.new(:string, :boolean) }
6
-
7
- it "raises error for empty string strict mode" do
8
- expect {
9
- converter.call('', strict: true)
10
- }.to raise_error(Necromancer::ConversionTypeError)
11
- end
12
-
13
- it "fails to convert unkonwn value FOO" do
14
- expect {
15
- converter.call('FOO', strict: true)
16
- }.to raise_error(Necromancer::ConversionTypeError)
17
- end
18
-
19
- it "passes through boolean value" do
20
- expect(converter.call(true)).to eq(true)
21
- end
22
-
23
- %w[true TRUE t T 1 y Y YES yes on ON].each do |value|
24
- it "converts '#{value}' to true value" do
25
- expect(converter.call(value)).to eq(true)
26
- end
27
- end
28
-
29
- %w[false FALSE f F 0 n N NO No no off OFF].each do |value|
30
- it "converts '#{value}' to false value" do
31
- expect(converter.call(value)).to eq(false)
32
- end
33
- end
34
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Necromancer::DateTimeConverters::StringToDateConverter, '.call' do
4
-
5
- subject(:converter) { described_class.new(:string, :date) }
6
-
7
- it "converts '1-1-2015' to date value" do
8
- expect(converter.call('1-1-2015')).to eq(Date.parse('2015/01/01'))
9
- end
10
-
11
- it "converts '2014/12/07' to date value" do
12
- expect(converter.call('2014/12/07')).to eq(Date.parse('2014/12/07'))
13
- end
14
-
15
- it "converts '2014-12-07' to date value" do
16
- expect(converter.call('2014-12-07')).to eq(Date.parse('2014/12/07'))
17
- end
18
-
19
- it "fails to convert in strict mode" do
20
- expect {
21
- converter.call('2014 - 12 - 07', strict: true)
22
- }.to raise_error(Necromancer::ConversionTypeError)
23
- end
24
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Necromancer::DateTimeConverters::StringToDateTimeConverter, '.call' do
4
-
5
- subject(:converter) { described_class.new(:string, :datetime) }
6
-
7
- it "converts '2014/12/07' to date value" do
8
- expect(converter.call('2014/12/07')).to eq(DateTime.parse('2014/12/07'))
9
- end
10
-
11
- it "converts '2014-12-07' to date value" do
12
- expect(converter.call('2014-12-07')).to eq(DateTime.parse('2014-12-07'))
13
- end
14
-
15
- it "converts '7th December 2014' to datetime value" do
16
- expect(converter.call('7th December 2014')).
17
- to eq(DateTime.parse('2014-12-07'))
18
- end
19
-
20
- it "converts '7th December 2014 17:19:44' to datetime value" do
21
- expect(converter.call('7th December 2014 17:19:44')).
22
- to eq(DateTime.parse('2014-12-07 17:19:44'))
23
- end
24
-
25
- it "fails to convert in strict mode" do
26
- expect {
27
- converter.call('2014 - 12 - 07', strict: true)
28
- }.to raise_error(Necromancer::ConversionTypeError)
29
- end
30
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Necromancer::DateTimeConverters::StringToTimeConverter, '.call' do
4
-
5
- subject(:converter) { described_class.new(:string, :time) }
6
-
7
- it "converts to time instance" do
8
- expect(converter.call('01/01/2015')).to be_a(Time)
9
- end
10
-
11
- it "converts '01/01/2015' to time value" do
12
- expect(converter.call('01/01/2015')).to eq(Time.parse('01/01/2015'))
13
- end
14
-
15
- it "converts '01/01/2015 08:35' to time value" do
16
- expect(converter.call('01/01/2015 08:35')).to eq(Time.parse('01/01/2015 08:35'))
17
- end
18
-
19
- it "converts '12:35' to time value" do
20
- expect(converter.call('12:35')).to eq(Time.parse('12:35'))
21
- end
22
-
23
- it "fails to convert in strict mode" do
24
- expect {
25
- converter.call('11-13-2015', strict: true)
26
- }.to raise_error(Necromancer::ConversionTypeError)
27
- end
28
- end
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Necromancer::NumericConverters::StringToFloatConverter, '.call' do
4
-
5
- subject(:converter) { described_class.new(:string, :float) }
6
-
7
- it "raises error for empty string in strict mode" do
8
- expect {
9
- converter.call('', strict: true)
10
- }.to raise_error(Necromancer::ConversionTypeError)
11
- end
12
-
13
- {
14
- '1' => 1.0,
15
- '+1' => 1.0,
16
- '-1' => -1.0,
17
- '1e1' => 10.0,
18
- '1e-1' => 0.1,
19
- '-1e1' => -10.0,
20
- '-1e-1' => -0.1,
21
- '1.0' => 1.0,
22
- '1.0e+1' => 10.0,
23
- '1.0e-1' => 0.1,
24
- '-1.0e+1' => -10.0,
25
- '-1.0e-1' => -0.1,
26
- '.1' => 0.1,
27
- '.1e+1' => 1.0,
28
- '.1e-1' => 0.01,
29
- '-.1e+1' => -1.0,
30
- '-.1e-1' => -0.01
31
- }.each do |actual, expected|
32
- it "converts '#{actual}' to float value" do
33
- expect(converter.call(actual)).to eql(expected)
34
- end
35
- end
36
-
37
- it "failse to convert '1.2a' in strict mode" do
38
- expect {
39
- converter.call('1.2a', strict: true)
40
- }.to raise_error(Necromancer::ConversionTypeError)
41
- end
42
-
43
- it "converts '1.2a' in non-strict mode" do
44
- expect(converter.call('1.2a', strict: false)).to eq(1.2)
45
- end
46
- end
@@ -1,60 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Necromancer::NumericConverters::StringToIntegerConverter, '.call' do
4
-
5
- subject(:converter) { described_class.new(:string, :integer) }
6
-
7
- {
8
- '1' => 1,
9
- '+1' => 1,
10
- '-1' => -1,
11
- '1e+1' => 1,
12
- '+1e-1' => 1,
13
- '-1e1' => -1,
14
- '-1e-1' => -1,
15
- '1.0' => 1,
16
- '1.0e+1' => 1,
17
- '1.0e-1' => 1,
18
- '-1.0e+1' => -1,
19
- '-1.0e-1' => -1,
20
- '.1' => 0,
21
- '.1e+1' => 0,
22
- '.1e-1' => 0,
23
- '-.1e+1' => 0,
24
- '-.1e-1' => 0
25
- }.each do |actual, expected|
26
- it "converts '#{actual}' to float value" do
27
- expect(converter.call(actual)).to eql(expected)
28
- end
29
- end
30
-
31
- it "raises error for empty string in strict mode" do
32
- expect {
33
- converter.call('', strict: true)
34
- }.to raise_error(Necromancer::ConversionTypeError)
35
- end
36
-
37
- it "converts empty string to 0 in non-strict mode" do
38
- expect(converter.call('', strict: false)).to eq(0)
39
- end
40
-
41
- it "raises error for float in strict mode" do
42
- expect {
43
- converter.call('1.2', strict: true)
44
- }.to raise_error(Necromancer::ConversionTypeError)
45
- end
46
-
47
- it "converts float to integer in non-strict mode" do
48
- expect(converter.call(1.2)).to eq(1)
49
- end
50
-
51
- it "converts mixed string to integer in non-strict mode" do
52
- expect(converter.call('1abc')).to eq(1)
53
- end
54
-
55
- it "raises error for mixed string in strict mode" do
56
- expect {
57
- converter.call('1abc', strict: true)
58
- }.to raise_error(Necromancer::ConversionTypeError)
59
- end
60
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Necromancer::NumericConverters::StringToNumericConverter, '.call' do
4
-
5
- subject(:converter) { described_class.new(:string, :numeric) }
6
-
7
- {
8
- '1' => 1,
9
- '+1' => 1,
10
- '-1' => -1,
11
- '1e1' => 10.0,
12
- '1e-1' => 0.1,
13
- '-1e1' => -10.0,
14
- '-1e-1' => -0.1,
15
- '1.0' => 1.0,
16
- '1.0e+1' => 10.0,
17
- '1.0e-1' => 0.1,
18
- '-1.0e+1' => -10.0,
19
- '-1.0e-1' => -0.1,
20
- '.1' => 0.1,
21
- '.1e+1' => 1.0,
22
- '.1e-1' => 0.01,
23
- '-.1e+1' => -1.0,
24
- '-.1e-1' => -0.01
25
- }.each do |actual, expected|
26
- it "converts '#{actual}' to '#{expected}'" do
27
- expect(converter.call(actual)).to eql(expected)
28
- end
29
- end
30
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Necromancer::RangeConverters::StringToRangeConverter, '.call' do
4
-
5
- subject(:converter) { described_class.new }
6
-
7
- it "raises error for empty string in strict mode" do
8
- expect {
9
- converter.call('', strict: true)
10
- }.to raise_error(Necromancer::ConversionTypeError)
11
- end
12
-
13
- it "returns value in non-strict mode" do
14
- expect(converter.call('', strict: false)).to eq('')
15
- end
16
-
17
- {
18
- '1' => 1..1,
19
- '1..10' => 1..10,
20
- '1-10' => 1..10,
21
- '1,10' => 1..10,
22
- '1...10' => 1...10,
23
- '-1..10' => -1..10,
24
- '1..-10' => 1..-10,
25
- 'a..z' => 'a'..'z',
26
- 'a-z' => 'a'..'z',
27
- 'A-Z' => 'A'..'Z'
28
- }.each do |actual, expected|
29
- it "converts '#{actual}' to range type" do
30
- expect(converter.call(actual)).to eql(expected)
31
- end
32
- end
33
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Necromancer, '.inspect' do
4
- subject(:converter) { described_class.new }
5
-
6
- it "inspects converter instance" do
7
- expect(converter.inspect).to eq("#<Necromancer::Context@#{converter.object_id} @config=#{converter.configuration}>")
8
- end
9
-
10
- it "inspects conversion target" do
11
- conversion = converter.convert(11)
12
- expect(conversion.inspect).to eq("#<Necromancer::ConversionTarget@#{conversion.object_id} @object=11, @source=integer>")
13
- end
14
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Necromancer, '#new' do
4
-
5
- subject(:converter) { described_class.new }
6
-
7
- it "creates context" do
8
- expect(converter).to be_a(Necromancer::Context)
9
- end
10
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Necromancer, '.register' do
4
- it "allows ro register converter" do
5
- converter = described_class.new
6
- UpcaseConverter = Struct.new(:source, :target) do
7
- def call(value, **options)
8
- value.to_s.upcase
9
- end
10
- end
11
- upcase_converter = UpcaseConverter.new(:string, :upcase)
12
- expect(converter.register(upcase_converter)).to eq(true)
13
- expect(converter.convert('magic').to(:upcase)).to eq('MAGIC')
14
- end
15
- end