necromancer 0.1.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 +7 -0
- data/.gitignore +14 -0
- data/.rspec +3 -0
- data/.ruby-version +1 -0
- data/.travis.yml +19 -0
- data/Gemfile +16 -0
- data/LICENSE.txt +22 -0
- data/README.md +141 -0
- data/Rakefile +8 -0
- data/lib/necromancer.rb +27 -0
- data/lib/necromancer/context.rb +45 -0
- data/lib/necromancer/conversion_target.rb +82 -0
- data/lib/necromancer/conversions.rb +75 -0
- data/lib/necromancer/converter.rb +37 -0
- data/lib/necromancer/converters/array.rb +50 -0
- data/lib/necromancer/converters/boolean.rb +58 -0
- data/lib/necromancer/converters/float.rb +28 -0
- data/lib/necromancer/converters/integer.rb +48 -0
- data/lib/necromancer/converters/range.rb +38 -0
- data/lib/necromancer/null_converter.rb +10 -0
- data/lib/necromancer/version.rb +5 -0
- data/necromancer.gemspec +21 -0
- data/spec/spec_helper.rb +45 -0
- data/spec/unit/can_spec.rb +11 -0
- data/spec/unit/conversions/register_spec.rb +50 -0
- data/spec/unit/convert_spec.rb +66 -0
- data/spec/unit/converters/array/array_to_numeric_spec.rb +22 -0
- data/spec/unit/converters/array/string_to_array_spec.rb +15 -0
- data/spec/unit/converters/boolean/boolean_to_integer_spec.rb +16 -0
- data/spec/unit/converters/boolean/integer_to_boolean_spec.rb +16 -0
- data/spec/unit/converters/boolean/string_to_boolean_spec.rb +96 -0
- data/spec/unit/converters/float/string_to_float_spec.rb +28 -0
- data/spec/unit/converters/integer/string_to_integer_spec.rb +38 -0
- data/spec/unit/converters/range/string_to_range_spec.rb +52 -0
- data/spec/unit/new_spec.rb +12 -0
- data/tasks/console.rake +10 -0
- data/tasks/coverage.rake +11 -0
- data/tasks/spec.rake +29 -0
- metadata +109 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Necromancer::ArrayConverters::ArrayToNumericConverter, '.call' do
|
6
|
+
|
7
|
+
subject(:converter) { described_class.new }
|
8
|
+
|
9
|
+
it "converts `['1','2.3','3.0']` to numeric array" do
|
10
|
+
expect(converter.call(['1', '2.3', '3.0'])).to eq([1, 2.3, 3.0])
|
11
|
+
end
|
12
|
+
|
13
|
+
it "fails to convert `['1','2.3',false]` to numeric array in strict mode" do
|
14
|
+
expect {
|
15
|
+
converter.call(['1', '2.3', false], strict: true)
|
16
|
+
}.to raise_error(Necromancer::ConversionTypeError)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "converts `['1','2.3',false]` to numeric array in non-strict mode" do
|
20
|
+
expect(converter.call(['1', '2.3', false], strict: false)).to eq([1, 2.3, false])
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Necromancer::ArrayConverters::StringToArrayConverter, '.call' do
|
6
|
+
subject(:converter) { described_class.new }
|
7
|
+
|
8
|
+
it "converts `1,2,3` to array" do
|
9
|
+
expect(converter.call('1,2,3')).to eq([1,2,3])
|
10
|
+
end
|
11
|
+
|
12
|
+
it "converts `a,b,c` to array" do
|
13
|
+
expect(converter.call('a,b,c')).to eq(['a','b','c'])
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Necromancer::BooleanConverters::BooleanToIntegerConverter, '.call' do
|
6
|
+
|
7
|
+
subject(:converter) { described_class.new }
|
8
|
+
|
9
|
+
it "converts true to 1 value" do
|
10
|
+
expect(converter.call(true)).to eq(1)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "converts false to 0 value" do
|
14
|
+
expect(converter.call(false)).to eq(0)
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Necromancer::BooleanConverters::IntegerToBooleanConverter, '.call' do
|
6
|
+
|
7
|
+
subject(:converter) { described_class.new }
|
8
|
+
|
9
|
+
it "converts 1 to true value" do
|
10
|
+
expect(converter.call(1)).to eq(true)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "converts 0 to false value" do
|
14
|
+
expect(converter.call(0)).to eq(false)
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Necromancer::BooleanConverters::StringToBooleanConverter, '.call' do
|
6
|
+
|
7
|
+
subject(:converter) { described_class.new }
|
8
|
+
|
9
|
+
it "raises error for empty string" do
|
10
|
+
expect { converter.call('') }.to raise_error(ArgumentError)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "passes through boolean value" do
|
14
|
+
expect(converter.call(true)).to eq(true)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "converts 'true' to true value" do
|
18
|
+
expect(converter.call('true')).to eq(true)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "converts 'TRUE' to true value" do
|
22
|
+
expect(converter.call('TRUE')).to eq(true)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "converts TRUE to true value" do
|
26
|
+
expect(converter.call(TRUE)).to eq(true)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "converts 't' to true value" do
|
30
|
+
expect(converter.call('t')).to eq(true)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "converts 'T' to true value" do
|
34
|
+
expect(converter.call('T')).to eq(true)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "converts 1 to true value" do
|
38
|
+
expect(converter.call(1)).to eq(true)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "converts '1' to true value" do
|
42
|
+
expect(converter.call('1')).to eq(true)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "converts 'y' to true value" do
|
46
|
+
expect(converter.call('y')).to eq(true)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "converts 'yes' to true value" do
|
50
|
+
expect(converter.call('yes')).to eq(true)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "converts 'on' to true value" do
|
54
|
+
expect(converter.call('on')).to eq(true)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "converts 'false' to false value" do
|
58
|
+
expect(converter.call('false')).to eq(false)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "converts FALSE to false value" do
|
62
|
+
expect(converter.call(FALSE)).to eq(false)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "converts 'FALSE' to false value" do
|
66
|
+
expect(converter.call('FALSE')).to eq(false)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "converts 'f' to false value" do
|
70
|
+
expect(converter.call('f')).to eq(false)
|
71
|
+
end
|
72
|
+
|
73
|
+
it "converts 'F' to false value" do
|
74
|
+
expect(converter.call('F')).to eq(false)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "converts '0' to false value" do
|
78
|
+
expect(converter.call('0')).to eq(false)
|
79
|
+
end
|
80
|
+
|
81
|
+
it "converts 'n' to false value" do
|
82
|
+
expect(converter.call('n')).to eq(false)
|
83
|
+
end
|
84
|
+
|
85
|
+
it "converts 'no' to false value" do
|
86
|
+
expect(converter.call('no')).to eq(false)
|
87
|
+
end
|
88
|
+
|
89
|
+
it "converts 'off' to false value" do
|
90
|
+
expect(converter.call('off')).to eq(false)
|
91
|
+
end
|
92
|
+
|
93
|
+
it "fails to convert unkonwn value FOO" do
|
94
|
+
expect { converter.call('FOO') }.to raise_error(ArgumentError)
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Necromancer::FloatConverters::StringToFloatConverter, '.call' do
|
6
|
+
|
7
|
+
subject(:converter) { described_class.new }
|
8
|
+
|
9
|
+
it "raises error for empty string in strict mode" do
|
10
|
+
expect {
|
11
|
+
converter.call('', strict: true)
|
12
|
+
}.to raise_error(Necromancer::ConversionTypeError)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "converts '1' to float value" do
|
16
|
+
expect(converter.call('1')).to eq(1.0)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "converts '1.2a' to float value in non-strict mode" do
|
20
|
+
expect(converter.call('1.2')).to eq(1.2)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "failse to convert '1.2a' in strict mode" do
|
24
|
+
expect {
|
25
|
+
converter.call('1.2a', strict: true)
|
26
|
+
}.to raise_error(Necromancer::ConversionTypeError)
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Necromancer::IntegerConverters::StringToIntegerConverter, '.call' do
|
6
|
+
|
7
|
+
subject(:converter) { described_class.new }
|
8
|
+
|
9
|
+
it "raises error for empty string in strict mode" do
|
10
|
+
expect {
|
11
|
+
converter.call('', strict: true)
|
12
|
+
}.to raise_error(Necromancer::ConversionTypeError)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "converts empty string to 0 in non-strict mode" do
|
16
|
+
expect(converter.call('', strict: false)).to eq(0)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "raises error for float in strict mode" do
|
20
|
+
expect {
|
21
|
+
converter.call(1.2, strict: true)
|
22
|
+
}.to raise_error(Necromancer::ConversionTypeError)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "converts float to integer in non-strict mode" do
|
26
|
+
expect(converter.call(1.2)).to eq(1)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "converts mixed string to integer in non-strict mode" do
|
30
|
+
expect(converter.call('1abc')).to eq(1)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "raises error for mixed string in strict mode" do
|
34
|
+
expect {
|
35
|
+
converter.call('1abc', strict: true)
|
36
|
+
}.to raise_error(Necromancer::ConversionTypeError)
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Necromancer::RangeConverters::StringToRangeConverter, '.call' do
|
6
|
+
|
7
|
+
subject(:converter) { described_class.new }
|
8
|
+
|
9
|
+
it "raises error for empty string" do
|
10
|
+
expect { converter.call('') }.to raise_error(Necromancer::ConversionTypeError)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "converts '1' to range" do
|
14
|
+
expect(converter.call('1')).to eq(1..1)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "converts '1..10' to range value" do
|
18
|
+
expect(converter.call('1..10')).to eq(1..10)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "converts '1-10' to range value" do
|
22
|
+
expect(converter.call('1-10')).to eq(1..10)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "converts '1,10' to range value" do
|
26
|
+
expect(converter.call('1,10')).to eq(1..10)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "converts '1...10' to range value" do
|
30
|
+
expect(converter.call('1...10')).to eq(1...10)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "converts '-1..10' to range value" do
|
34
|
+
expect(converter.call('-1..10')).to eq(-1..10)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "converts '1..-10' to range value" do
|
38
|
+
expect(converter.call('1..-10')).to eq(1..-10)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "converts 'a..z' to range value" do
|
42
|
+
expect(converter.call('a..z')).to eq('a'..'z')
|
43
|
+
end
|
44
|
+
|
45
|
+
it "converts 'a-z' to range value" do
|
46
|
+
expect(converter.call('a-z')).to eq('a'..'z')
|
47
|
+
end
|
48
|
+
|
49
|
+
it "converts 'A-Z' to range value" do
|
50
|
+
expect(converter.call('A-Z')).to eq('A'..'Z')
|
51
|
+
end
|
52
|
+
end
|
data/tasks/console.rake
ADDED
data/tasks/coverage.rake
ADDED
data/tasks/spec.rake
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
|
6
|
+
desc 'Run all specs'
|
7
|
+
RSpec::Core::RakeTask.new(:spec) do |task|
|
8
|
+
task.pattern = 'spec/{unit,integration}{,/*/**}/*_spec.rb'
|
9
|
+
end
|
10
|
+
|
11
|
+
namespace :spec do
|
12
|
+
desc 'Run unit specs'
|
13
|
+
RSpec::Core::RakeTask.new(:unit) do |task|
|
14
|
+
task.pattern = 'spec/unit{,/*/**}/*_spec.rb'
|
15
|
+
end
|
16
|
+
|
17
|
+
desc 'Run integration specs'
|
18
|
+
RSpec::Core::RakeTask.new(:integration) do |task|
|
19
|
+
task.pattern = 'spec/integration{,/*/**}/*_spec.rb'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
rescue LoadError
|
24
|
+
%w[spec spec:unit spec:integration].each do |name|
|
25
|
+
task name do
|
26
|
+
$stderr.puts "In order to run #{name}, do `gem install rspec`"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: necromancer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Piotr Murach
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-11-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
description: Conversion from one object type to another with a bit of black magic.
|
28
|
+
email:
|
29
|
+
- ''
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- .gitignore
|
35
|
+
- .rspec
|
36
|
+
- .ruby-version
|
37
|
+
- .travis.yml
|
38
|
+
- Gemfile
|
39
|
+
- LICENSE.txt
|
40
|
+
- README.md
|
41
|
+
- Rakefile
|
42
|
+
- lib/necromancer.rb
|
43
|
+
- lib/necromancer/context.rb
|
44
|
+
- lib/necromancer/conversion_target.rb
|
45
|
+
- lib/necromancer/conversions.rb
|
46
|
+
- lib/necromancer/converter.rb
|
47
|
+
- lib/necromancer/converters/array.rb
|
48
|
+
- lib/necromancer/converters/boolean.rb
|
49
|
+
- lib/necromancer/converters/float.rb
|
50
|
+
- lib/necromancer/converters/integer.rb
|
51
|
+
- lib/necromancer/converters/range.rb
|
52
|
+
- lib/necromancer/null_converter.rb
|
53
|
+
- lib/necromancer/version.rb
|
54
|
+
- necromancer.gemspec
|
55
|
+
- spec/spec_helper.rb
|
56
|
+
- spec/unit/can_spec.rb
|
57
|
+
- spec/unit/conversions/register_spec.rb
|
58
|
+
- spec/unit/convert_spec.rb
|
59
|
+
- spec/unit/converters/array/array_to_numeric_spec.rb
|
60
|
+
- spec/unit/converters/array/string_to_array_spec.rb
|
61
|
+
- spec/unit/converters/boolean/boolean_to_integer_spec.rb
|
62
|
+
- spec/unit/converters/boolean/integer_to_boolean_spec.rb
|
63
|
+
- spec/unit/converters/boolean/string_to_boolean_spec.rb
|
64
|
+
- spec/unit/converters/float/string_to_float_spec.rb
|
65
|
+
- spec/unit/converters/integer/string_to_integer_spec.rb
|
66
|
+
- spec/unit/converters/range/string_to_range_spec.rb
|
67
|
+
- spec/unit/new_spec.rb
|
68
|
+
- tasks/console.rake
|
69
|
+
- tasks/coverage.rake
|
70
|
+
- tasks/spec.rake
|
71
|
+
homepage: https://github.com/peter-murach/necromancer
|
72
|
+
licenses:
|
73
|
+
- MIT
|
74
|
+
metadata: {}
|
75
|
+
post_install_message:
|
76
|
+
rdoc_options: []
|
77
|
+
require_paths:
|
78
|
+
- lib
|
79
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
requirements: []
|
90
|
+
rubyforge_project:
|
91
|
+
rubygems_version: 2.0.3
|
92
|
+
signing_key:
|
93
|
+
specification_version: 4
|
94
|
+
summary: Conversion from one object type to another with a bit of black magic.
|
95
|
+
test_files:
|
96
|
+
- spec/spec_helper.rb
|
97
|
+
- spec/unit/can_spec.rb
|
98
|
+
- spec/unit/conversions/register_spec.rb
|
99
|
+
- spec/unit/convert_spec.rb
|
100
|
+
- spec/unit/converters/array/array_to_numeric_spec.rb
|
101
|
+
- spec/unit/converters/array/string_to_array_spec.rb
|
102
|
+
- spec/unit/converters/boolean/boolean_to_integer_spec.rb
|
103
|
+
- spec/unit/converters/boolean/integer_to_boolean_spec.rb
|
104
|
+
- spec/unit/converters/boolean/string_to_boolean_spec.rb
|
105
|
+
- spec/unit/converters/float/string_to_float_spec.rb
|
106
|
+
- spec/unit/converters/integer/string_to_integer_spec.rb
|
107
|
+
- spec/unit/converters/range/string_to_range_spec.rb
|
108
|
+
- spec/unit/new_spec.rb
|
109
|
+
has_rdoc:
|