topographer 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/lib/Topographer/importer/helpers/write_log_to_csv.rb +1 -1
- data/lib/Topographer/importer/helpers.rb +1 -1
- data/lib/Topographer/importer/importable.rb +1 -1
- data/lib/Topographer/importer/input/base.rb +1 -1
- data/lib/Topographer/importer/input/roo.rb +2 -2
- data/lib/Topographer/importer/input/source_data.rb +1 -1
- data/lib/Topographer/importer/input.rb +1 -1
- data/lib/Topographer/importer/logger/base.rb +2 -2
- data/lib/Topographer/importer/logger/fatal_error_entry.rb +1 -1
- data/lib/Topographer/importer/logger/log_entry.rb +1 -1
- data/lib/Topographer/importer/logger/simple.rb +1 -1
- data/lib/Topographer/importer/logger.rb +1 -1
- data/lib/Topographer/importer/mapper/default_field_mapping.rb +1 -1
- data/lib/Topographer/importer/mapper/field_mapping.rb +1 -1
- data/lib/Topographer/importer/mapper/ignored_field_mapping.rb +1 -1
- data/lib/Topographer/importer/mapper/result.rb +1 -1
- data/lib/Topographer/importer/mapper/validation_field_mapping.rb +1 -1
- data/lib/Topographer/importer/mapper.rb +1 -1
- data/lib/Topographer/importer/strategy/base.rb +2 -2
- data/lib/Topographer/importer/strategy/create_or_update_record.rb +1 -1
- data/lib/Topographer/importer/strategy/import_new_record.rb +1 -1
- data/lib/Topographer/importer/strategy/import_status.rb +1 -1
- data/lib/Topographer/importer/strategy/update_record.rb +1 -1
- data/lib/Topographer/importer/strategy.rb +1 -1
- data/lib/Topographer/importer.rb +1 -1
- data/lib/Topographer/version.rb +1 -1
- data/spec/Cartographer/importer/helpers/write_log_to_csv_spec.rb +8 -8
- data/spec/Cartographer/importer/helpers_spec.rb +2 -2
- data/spec/Cartographer/importer/importable_spec.rb +2 -2
- data/spec/Cartographer/importer/importer_spec.rb +12 -12
- data/spec/Cartographer/importer/logger/base_spec.rb +3 -3
- data/spec/Cartographer/importer/logger/fatal_error_entry_spec.rb +2 -2
- data/spec/Cartographer/importer/logger/simple_spec.rb +2 -2
- data/spec/Cartographer/importer/mapper/default_field_mapping_spec.rb +7 -7
- data/spec/Cartographer/importer/mapper/field_mapping_spec.rb +8 -8
- data/spec/Cartographer/importer/mapper/validation_field_mapping_spec.rb +5 -5
- data/spec/Cartographer/importer/mapper_spec.rb +23 -23
- data/spec/Cartographer/importer/strategy/base_spec.rb +3 -3
- data/spec/Cartographer/importer/strategy/create_or_update_record_spec.rb +3 -3
- data/spec/Cartographer/importer/strategy/import_new_records_spec.rb +5 -5
- data/spec/Cartographer/importer/strategy/import_status_spec.rb +2 -2
- data/spec/Cartographer/importer/strategy/mapped_model.rb +1 -1
- data/spec/Cartographer/importer/strategy/update_record_spec.rb +3 -3
- metadata +11 -10
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZjI0NDZhMDEyMDhkNzA0NzA4MTczMjBjYzY3NWZkMzQxODBmYzBjNg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
OTI1MzZhMWU2NTZhOTllOTE2Nzg4ZjMyZTVmMmU5MDQzMWU3ZmI1Ng==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
YzczMzllN2M3YTc3ZTc2M2E3YTY2NmJjMjU0YmNkODdhN2ViZDY5MGEzYjg3
|
10
|
+
MTU1YTVkZmIwYjUwM2UyNWNhMjAzMTdiMjc2ZmIwZTZiMWE5OWU1MGU1OTk5
|
11
|
+
ZDYyNWUyNTNjMjYzNzhkYzM4N2FiNjU4OWYyMWY0NzViNGMzNjM=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MjExOTg5NGM5OWYzZDhkYzM1NzBlM2RmMTY5N2JiNDRmNmJkNDUyZDhhOTll
|
14
|
+
YTcwMWYyYmVkMjg5M2RkZTkwN2IwMjg5OWQ5N2I4MzhiNTEwZDQ3ZWVmNTEw
|
15
|
+
ODViNDYxMjA4NDFhODIyMTI3OWY0YzAyYTFmY2I1YjE2YmVlZDI=
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class Importer::Input::Roo < Importer::Input::Base
|
1
|
+
class Topographer::Importer::Input::Roo < Topographer::Importer::Input::Base
|
2
2
|
include Enumerable
|
3
3
|
|
4
4
|
def initialize(roo_sheet, header_row=1, data_row=2)
|
@@ -21,7 +21,7 @@ class Importer::Input::Roo < Importer::Input::Base
|
|
21
21
|
@start_data_row.upto @end_data_row do |row_number|
|
22
22
|
data = @sheet.row(row_number)
|
23
23
|
source_identifier = "Row: #{row_number}"
|
24
|
-
yield Importer::Input::SourceData.new(source_identifier,
|
24
|
+
yield Topographer::Importer::Input::SourceData.new(source_identifier,
|
25
25
|
Hash[@header.zip(data)])
|
26
26
|
end
|
27
27
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class Importer::Logger::Base
|
1
|
+
class Topographer::Importer::Logger::Base
|
2
2
|
|
3
3
|
attr_reader :fatal_errors
|
4
4
|
|
@@ -31,7 +31,7 @@ class Importer::Logger::Base
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def log_fatal(source, message)
|
34
|
-
@fatal_errors << Importer::Logger::FatalErrorEntry.new(source, message)
|
34
|
+
@fatal_errors << Topographer::Importer::Logger::FatalErrorEntry.new(source, message)
|
35
35
|
end
|
36
36
|
|
37
37
|
def successful_imports
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'active_support/core_ext/hash'
|
2
2
|
require 'active_support/core_ext/object/blank'
|
3
|
-
class Importer::Mapper::FieldMapping
|
3
|
+
class Topographer::Importer::Mapper::FieldMapping
|
4
4
|
attr_reader :input_columns, :output_field
|
5
5
|
|
6
6
|
def initialize(required, input_columns, output_field, &mapping_behavior)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class Importer::Strategy::Base
|
1
|
+
class Topographer::Importer::Strategy::Base
|
2
2
|
|
3
3
|
attr_reader :mapper
|
4
4
|
attr_accessor :dry_run
|
@@ -27,7 +27,7 @@ class Importer::Strategy::Base
|
|
27
27
|
private
|
28
28
|
|
29
29
|
def get_import_status(mapping_result, new_model_errors)
|
30
|
-
status = Importer::Strategy::ImportStatus.new(mapping_result.source_identifier)
|
30
|
+
status = Topographer::Importer::Strategy::ImportStatus.new(mapping_result.source_identifier)
|
31
31
|
mapping_result.errors.values.each do |error|
|
32
32
|
status.add_error(:mapping, error)
|
33
33
|
end
|
data/lib/Topographer/importer.rb
CHANGED
data/lib/Topographer/version.rb
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Importer::Helpers::WriteLogToCSV do
|
3
|
+
describe Topographer::Importer::Helpers::WriteLogToCSV do
|
4
4
|
let(:successful_entry) do
|
5
|
-
status = Importer::Strategy::ImportStatus.new('test-input')
|
5
|
+
status = Topographer::Importer::Strategy::ImportStatus.new('test-input')
|
6
6
|
status.set_timestamp
|
7
|
-
Importer::Logger::LogEntry.new('test-input', 'TestModel', status)
|
7
|
+
Topographer::Importer::Logger::LogEntry.new('test-input', 'TestModel', status)
|
8
8
|
end
|
9
9
|
let(:failed_entry) do
|
10
|
-
status = Importer::Strategy::ImportStatus.new('test-input')
|
10
|
+
status = Topographer::Importer::Strategy::ImportStatus.new('test-input')
|
11
11
|
status.set_timestamp
|
12
12
|
(1+rand(6)).times do |n|
|
13
13
|
status.add_error(:mapping, "Test error #{n}")
|
14
14
|
end
|
15
|
-
Importer::Logger::LogEntry.new('test-input', 'TestModel', status)
|
15
|
+
Topographer::Importer::Logger::LogEntry.new('test-input', 'TestModel', status)
|
16
16
|
end
|
17
17
|
let(:fatal_error) do
|
18
|
-
Importer::Logger::FatalErrorEntry.new('test-input', 'FATAL ERROR')
|
18
|
+
Topographer::Importer::Logger::FatalErrorEntry.new('test-input', 'FATAL ERROR')
|
19
19
|
end
|
20
20
|
let(:successes) do
|
21
21
|
successes = []
|
@@ -57,13 +57,13 @@ describe Importer::Helpers::WriteLogToCSV do
|
|
57
57
|
file = double('file')
|
58
58
|
CSV.should_receive(:open).with('fake_file_path', 'wb').and_yield(file)
|
59
59
|
file.should_receive(:<<).exactly(12).times
|
60
|
-
Importer::Helpers::WriteLogToCSV.instance.write_log_to_csv(logger, 'fake_file_path', write_all: true)
|
60
|
+
Topographer::Importer::Helpers::WriteLogToCSV.instance.write_log_to_csv(logger, 'fake_file_path', write_all: true)
|
61
61
|
end
|
62
62
|
it 'should only write failures and fatal errors if write_all is false' do
|
63
63
|
file = double('file')
|
64
64
|
CSV.should_receive(:open).with('fake_file_path', 'wb').and_yield(file)
|
65
65
|
file.should_receive(:<<).exactly(10).times
|
66
|
-
Importer::Helpers::WriteLogToCSV.instance.write_log_to_csv(logger, 'fake_file_path', write_all: false)
|
66
|
+
Topographer::Importer::Helpers::WriteLogToCSV.instance.write_log_to_csv(logger, 'fake_file_path', write_all: false)
|
67
67
|
end
|
68
68
|
end
|
69
69
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
class TestImportable
|
4
|
-
extend Importer::Helpers
|
4
|
+
extend Topographer::Importer::Helpers
|
5
5
|
end
|
6
6
|
|
7
|
-
describe Importer::Helpers do
|
7
|
+
describe Topographer::Importer::Helpers do
|
8
8
|
describe ".boolify" do
|
9
9
|
it "returns true if given 'Yes'" do
|
10
10
|
expect(TestImportable.boolify('Yes')).to eql true
|
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
class TestImportable
|
4
|
-
extend Importer::Importable
|
4
|
+
extend Topographer::Importer::Importable
|
5
5
|
end
|
6
6
|
|
7
|
-
describe Importer::Importable do
|
7
|
+
describe Topographer::Importer::Importable do
|
8
8
|
describe "#get_mapper" do
|
9
9
|
it 'should raise NotImplementedError' do
|
10
10
|
expect { TestImportable.get_mapper(nil) }.to raise_error(NotImplementedError)
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
require 'ostruct'
|
3
3
|
|
4
4
|
class MockImportable < OpenStruct
|
5
|
-
include Importer::Importable
|
5
|
+
include Topographer::Importer::Importable
|
6
6
|
|
7
7
|
def self.create(params)
|
8
8
|
self.new(params)
|
@@ -21,7 +21,7 @@ class MockImportable < OpenStruct
|
|
21
21
|
def self.get_mapper(strategy_class)
|
22
22
|
case
|
23
23
|
when strategy_class == HashImportStrategy
|
24
|
-
Importer::Mapper.build_mapper(MockImportable) do |mapping|
|
24
|
+
Topographer::Importer::Mapper.build_mapper(MockImportable) do |mapping|
|
25
25
|
mapping.required_mapping 'Field1', 'field_1'
|
26
26
|
mapping.required_mapping 'Field2', 'field_2'
|
27
27
|
mapping.optional_mapping 'Field3', 'field_3'
|
@@ -32,7 +32,7 @@ class MockImportable < OpenStruct
|
|
32
32
|
|
33
33
|
end
|
34
34
|
|
35
|
-
class HashImportStrategy < Importer::Strategy::Base
|
35
|
+
class HashImportStrategy < Topographer::Importer::Strategy::Base
|
36
36
|
attr_reader :imported_data
|
37
37
|
|
38
38
|
def initialize(mapper)
|
@@ -71,14 +71,14 @@ class MockInput
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def each
|
74
|
-
yield Importer::Input::SourceData.new('1', {'Field1' => 'datum1', 'Field2' => 'datum2'})
|
75
|
-
yield Importer::Input::SourceData.new('2', {'Field1' => 'datum2', 'Field2' => 'datum2', 'Field3' => 'datum3'})
|
76
|
-
yield Importer::Input::SourceData.new('3', {'Field1' => 'datum3', 'Field2' => 'invalid value!!!!1ONE'}) #I am INVALID!!!
|
77
|
-
yield Importer::Input::SourceData.new('4', {'Field1' => 'datum4', 'Field2' => 'datum2', 'Field3' => 'datum3', 'IgnoredField' => 'ignore me'})
|
74
|
+
yield Topographer::Importer::Input::SourceData.new('1', {'Field1' => 'datum1', 'Field2' => 'datum2'})
|
75
|
+
yield Topographer::Importer::Input::SourceData.new('2', {'Field1' => 'datum2', 'Field2' => 'datum2', 'Field3' => 'datum3'})
|
76
|
+
yield Topographer::Importer::Input::SourceData.new('3', {'Field1' => 'datum3', 'Field2' => 'invalid value!!!!1ONE'}) #I am INVALID!!!
|
77
|
+
yield Topographer::Importer::Input::SourceData.new('4', {'Field1' => 'datum4', 'Field2' => 'datum2', 'Field3' => 'datum3', 'IgnoredField' => 'ignore me'})
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
|
-
describe Importer do
|
81
|
+
describe Topographer::Importer do
|
82
82
|
let(:input) { MockInput.new }
|
83
83
|
let(:model_class) { MockImportable }
|
84
84
|
let(:strategy_class) { HashImportStrategy }
|
@@ -87,8 +87,8 @@ describe Importer do
|
|
87
87
|
get_header: ['BadCol1', 'BadCol2', 'Field1', 'Field3'],
|
88
88
|
input_identifier: 'Test'
|
89
89
|
end
|
90
|
-
let(:simple_logger) { Importer::Logger::Simple.new }
|
91
|
-
let(:import_log) { Importer.import_data(input, model_class, strategy_class, simple_logger) }
|
90
|
+
let(:simple_logger) { Topographer::Importer::Logger::Simple.new }
|
91
|
+
let(:import_log) { Topographer::Importer.import_data(input, model_class, strategy_class, simple_logger) }
|
92
92
|
|
93
93
|
describe '.import_data' do
|
94
94
|
it 'returns a logger instance' do
|
@@ -109,7 +109,7 @@ describe Importer do
|
|
109
109
|
end
|
110
110
|
|
111
111
|
it 'does not import data with an invalid header' do
|
112
|
-
import_log = Importer.import_data(bad_input, model_class, strategy_class, simple_logger)
|
112
|
+
import_log = Topographer::Importer.import_data(bad_input, model_class, strategy_class, simple_logger)
|
113
113
|
expect(import_log.errors?).to be_true
|
114
114
|
expect(import_log.fatal_error?).to be_true
|
115
115
|
expect(import_log.fatal_errors.first.message).
|
@@ -118,7 +118,7 @@ describe Importer do
|
|
118
118
|
end
|
119
119
|
describe '.build_mapper' do
|
120
120
|
it 'returns a mapper with the defined mappings' do
|
121
|
-
mapper = Importer.build_mapper(MockImportable) do |mapping|
|
121
|
+
mapper = Topographer::Importer.build_mapper(MockImportable) do |mapping|
|
122
122
|
mapping.required_mapping 'Field1', 'field_1'
|
123
123
|
mapping.required_mapping 'Field2', 'field_2'
|
124
124
|
mapping.optional_mapping 'Field3', 'field_3'
|
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Importer::Logger::Base do
|
4
|
-
let(:logger){Importer::Logger::Base.new}
|
3
|
+
describe Topographer::Importer::Logger::Base do
|
4
|
+
let(:logger){Topographer::Importer::Logger::Base.new}
|
5
5
|
describe '#log_fatal' do
|
6
6
|
it 'should log a fatal error' do
|
7
7
|
logger.log_fatal('test input', 'Fatal Error')
|
8
|
-
expect(logger.fatal_errors.first).to be_a Importer::Logger::LogEntry
|
8
|
+
expect(logger.fatal_errors.first).to be_a Topographer::Importer::Logger::LogEntry
|
9
9
|
expect(logger.fatal_errors.first)
|
10
10
|
end
|
11
11
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Importer::Logger::FatalErrorEntry do
|
4
|
-
let(:entry) { Importer::Logger::FatalErrorEntry.new('test-input', 'failure message') }
|
3
|
+
describe Topographer::Importer::Logger::FatalErrorEntry do
|
4
|
+
let(:entry) { Topographer::Importer::Logger::FatalErrorEntry.new('test-input', 'failure message') }
|
5
5
|
describe '#failure?' do
|
6
6
|
it 'should return true' do
|
7
7
|
expect(entry.failure?).to be_true
|
@@ -1,22 +1,22 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Importer::Mapper::DefaultFieldMapping do
|
3
|
+
describe Topographer::Importer::Mapper::DefaultFieldMapping do
|
4
4
|
let(:static_mapping) do
|
5
|
-
Importer::Mapper::DefaultFieldMapping.new('field1') do
|
5
|
+
Topographer::Importer::Mapper::DefaultFieldMapping.new('field1') do
|
6
6
|
10+5
|
7
7
|
end
|
8
8
|
end
|
9
9
|
let(:failed_static_mapping) do
|
10
|
-
Importer::Mapper::DefaultFieldMapping.new('field1') do
|
10
|
+
Topographer::Importer::Mapper::DefaultFieldMapping.new('field1') do
|
11
11
|
raise 'FAILURE'
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
let(:result) { Importer::Mapper::Result.new('test') }
|
16
|
-
let(:result2) { Importer::Mapper::Result.new('test') }
|
15
|
+
let(:result) { Topographer::Importer::Mapper::Result.new('test') }
|
16
|
+
let(:result2) { Topographer::Importer::Mapper::Result.new('test') }
|
17
17
|
describe '#initialize' do
|
18
18
|
it 'should not create a static mapping without a behavior block' do
|
19
|
-
expect { Importer::Mapper::DefaultFieldMapping.new('broken mapping') }.
|
19
|
+
expect { Topographer::Importer::Mapper::DefaultFieldMapping.new('broken mapping') }.
|
20
20
|
to raise_error(Topographer::InvalidMappingError)
|
21
21
|
end
|
22
22
|
end
|
@@ -32,7 +32,7 @@ describe Importer::Mapper::DefaultFieldMapping do
|
|
32
32
|
expect(result.errors.values).to include('FAILURE')
|
33
33
|
end
|
34
34
|
it 'should not rescue Exceptions that do not inherit from standard error' do
|
35
|
-
mapper = Importer::Mapper::DefaultFieldMapping.new('output_column') do
|
35
|
+
mapper = Topographer::Importer::Mapper::DefaultFieldMapping.new('output_column') do
|
36
36
|
raise Exception, 'Field1 MUST BE 4'
|
37
37
|
end
|
38
38
|
expect{ mapper.process_input({'field1' => false}, result) }.to raise_error(Exception)
|
@@ -1,25 +1,25 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Importer::Mapper::FieldMapping do
|
4
|
-
let(:required_simple_mapping) { Importer::Mapper::FieldMapping.new(true, ['field1'], 'output_column') }
|
3
|
+
describe Topographer::Importer::Mapper::FieldMapping do
|
4
|
+
let(:required_simple_mapping) { Topographer::Importer::Mapper::FieldMapping.new(true, ['field1'], 'output_column') }
|
5
5
|
let(:required_simple_mapping_with_validation) do
|
6
|
-
Importer::Mapper::FieldMapping.new(true, ['field1'], 'output_column') do |input|
|
6
|
+
Topographer::Importer::Mapper::FieldMapping.new(true, ['field1'], 'output_column') do |input|
|
7
7
|
if input['field1'] != 4
|
8
8
|
raise 'Field1 MUST BE 4'
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
12
12
|
let(:required_complex_mapping) do
|
13
|
-
Importer::Mapper::FieldMapping.new(true, ['field1', 'field2', 'field3'], 'output_column') do |input|
|
13
|
+
Topographer::Importer::Mapper::FieldMapping.new(true, ['field1', 'field2', 'field3'], 'output_column') do |input|
|
14
14
|
if input['field1'] != 4
|
15
15
|
raise 'Field1 MUST BE 4'
|
16
16
|
end
|
17
17
|
input.values.flatten.inject(0) {|sum, x| sum+x}
|
18
18
|
end
|
19
19
|
end
|
20
|
-
let(:optional_simple_mapping) { Importer::Mapper::FieldMapping.new(false, 'field1', 'output_column') }
|
20
|
+
let(:optional_simple_mapping) { Topographer::Importer::Mapper::FieldMapping.new(false, 'field1', 'output_column') }
|
21
21
|
let(:optional_complex_mapping) do
|
22
|
-
Importer::Mapper::FieldMapping.new(false, ['field1', 'field2', 'field3'], 'output_column') do |input|
|
22
|
+
Topographer::Importer::Mapper::FieldMapping.new(false, ['field1', 'field2', 'field3'], 'output_column') do |input|
|
23
23
|
if input['field1'] != 4
|
24
24
|
raise 'Field1 MUST BE 4'
|
25
25
|
end
|
@@ -32,7 +32,7 @@ describe Importer::Mapper::FieldMapping do
|
|
32
32
|
let(:invalid_complex_input) do
|
33
33
|
{'field1' => 3, 'field2' => 4, 'field3' => 5}
|
34
34
|
end
|
35
|
-
let(:result) { Importer::Mapper::Result.new('test') }
|
35
|
+
let(:result) { Topographer::Importer::Mapper::Result.new('test') }
|
36
36
|
describe '#process_input' do
|
37
37
|
context 'required mappings' do
|
38
38
|
it 'maps required simple mappings when input is valid' do
|
@@ -116,7 +116,7 @@ describe Importer::Mapper::FieldMapping do
|
|
116
116
|
expect(result.data['output_column']).to eql(false)
|
117
117
|
end
|
118
118
|
it 'should not rescue Exceptions that do not inherit from standard error' do
|
119
|
-
mapper = Importer::Mapper::FieldMapping.new(true, 'field1', 'output_column') do |input|
|
119
|
+
mapper = Topographer::Importer::Mapper::FieldMapping.new(true, 'field1', 'output_column') do |input|
|
120
120
|
raise Exception, 'Field1 MUST BE 4'
|
121
121
|
end
|
122
122
|
expect{ mapper.process_input({'field1' => false}, result) }.to raise_error(Exception)
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Importer::Mapper::ValidationFieldMapping do
|
3
|
+
describe Topographer::Importer::Mapper::ValidationFieldMapping do
|
4
4
|
let(:validation_mapping) do
|
5
|
-
Importer::Mapper::ValidationFieldMapping.new('test mapping', ['field1', 'field2', 'field3']) do |input|
|
5
|
+
Topographer::Importer::Mapper::ValidationFieldMapping.new('test mapping', ['field1', 'field2', 'field3']) do |input|
|
6
6
|
sum = input.values.flatten.inject(0) {|sum, x| sum+x}
|
7
7
|
raise 'Sum must be 15' if sum != 15
|
8
8
|
end
|
@@ -13,10 +13,10 @@ describe Importer::Mapper::ValidationFieldMapping do
|
|
13
13
|
let(:invalid_input) do
|
14
14
|
{'field1' => 3, 'field2' => 4, 'field3' => 5}
|
15
15
|
end
|
16
|
-
let(:result) { Importer::Mapper::Result.new('test') }
|
16
|
+
let(:result) { Topographer::Importer::Mapper::Result.new('test') }
|
17
17
|
describe '#initialize' do
|
18
18
|
it 'should not create a validation mapping without a behavior block' do
|
19
|
-
expect { Importer::Mapper::ValidationFieldMapping.new('test mapping', ['field1', 'field2', 'field3']) }.
|
19
|
+
expect { Topographer::Importer::Mapper::ValidationFieldMapping.new('test mapping', ['field1', 'field2', 'field3']) }.
|
20
20
|
to raise_error(Topographer::InvalidMappingError)
|
21
21
|
end
|
22
22
|
end
|
@@ -32,7 +32,7 @@ describe Importer::Mapper::ValidationFieldMapping do
|
|
32
32
|
expect(result.errors.values).to include('Sum must be 15')
|
33
33
|
end
|
34
34
|
it 'should not rescue Exceptions that do not inherit from standard error' do
|
35
|
-
mapper = Importer::Mapper::ValidationFieldMapping.new('test mapping', ['field1', 'field2', 'field3']) do |input|
|
35
|
+
mapper = Topographer::Importer::Mapper::ValidationFieldMapping.new('test mapping', ['field1', 'field2', 'field3']) do |input|
|
36
36
|
sum = input.values.flatten.inject(0) {|sum, x| sum+x}
|
37
37
|
raise Exception, 'Sum must be 15' if sum != 15
|
38
38
|
end
|
@@ -1,24 +1,24 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Importer::Mapper do
|
3
|
+
describe Topographer::Importer::Mapper do
|
4
4
|
describe '.build_mapper' do
|
5
5
|
describe 'required mappings' do
|
6
6
|
it 'can require a one to one field mapping' do
|
7
|
-
mapper = Importer::Mapper.build_mapper(Object) do |m|
|
7
|
+
mapper = Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
8
8
|
m.required_mapping 'Field1', 'field_1'
|
9
9
|
end
|
10
10
|
mapper.required_columns.should include("Field1")
|
11
11
|
mapper.output_fields.should include('field_1')
|
12
12
|
end
|
13
13
|
it 'can require a many to one field mapping' do
|
14
|
-
mapper = Importer::Mapper.build_mapper(Object) do |m|
|
14
|
+
mapper = Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
15
15
|
m.required_mapping ['Field1', 'Field2'], 'field_1'
|
16
16
|
end
|
17
17
|
mapper.required_columns.should include("Field1", "Field2")
|
18
18
|
mapper.output_fields.should include('field_1')
|
19
19
|
end
|
20
20
|
it 'cannot require a one to many field mapping' do
|
21
|
-
expect { mapper = Importer::Mapper.build_mapper(Object) do |m|
|
21
|
+
expect { mapper = Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
22
22
|
m.required_mapping 'Field1', ['field_1', 'field_2']
|
23
23
|
end
|
24
24
|
}.to raise_error(Topographer::InvalidMappingError)
|
@@ -26,21 +26,21 @@ describe Importer::Mapper do
|
|
26
26
|
end
|
27
27
|
describe 'optional mappings' do
|
28
28
|
it 'can create an optional one to one field mapping' do
|
29
|
-
mapper = Importer::Mapper.build_mapper(Object) do |m|
|
29
|
+
mapper = Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
30
30
|
m.optional_mapping 'Field1', 'field_1'
|
31
31
|
end
|
32
32
|
mapper.optional_columns.should include("Field1")
|
33
33
|
mapper.output_fields.should include('field_1')
|
34
34
|
end
|
35
35
|
it 'can create an optional many to one field mapping' do
|
36
|
-
mapper = Importer::Mapper.build_mapper(Object) do |m|
|
36
|
+
mapper = Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
37
37
|
m.optional_mapping ['Field1', 'Field2'], 'field_1'
|
38
38
|
end
|
39
39
|
mapper.optional_columns.should include("Field1", "Field2")
|
40
40
|
mapper.output_fields.should include('field_1')
|
41
41
|
end
|
42
42
|
it 'cannot create an optional one to many field mapping' do
|
43
|
-
expect { mapper = Importer::Mapper.build_mapper(Object) do |m|
|
43
|
+
expect { mapper = Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
44
44
|
m.optional_mapping 'Field1', ['field_1', 'field_2']
|
45
45
|
end
|
46
46
|
}.to raise_error(Topographer::InvalidMappingError)
|
@@ -48,7 +48,7 @@ describe Importer::Mapper do
|
|
48
48
|
end
|
49
49
|
describe 'ignored mappings' do
|
50
50
|
it 'can ignore a column' do
|
51
|
-
mapper = Importer::Mapper.build_mapper(Object) do |m|
|
51
|
+
mapper = Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
52
52
|
m.ignored_column 'Field1'
|
53
53
|
end
|
54
54
|
mapper.ignored_columns.should include('Field1')
|
@@ -56,21 +56,21 @@ describe Importer::Mapper do
|
|
56
56
|
end
|
57
57
|
|
58
58
|
it 'raises an error when adding a mapping whose output is already an output of another mapping' do
|
59
|
-
expect { Importer::Mapper.build_mapper(Object) do |m|
|
59
|
+
expect { Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
60
60
|
m.optional_mapping 'Field1', 'field_1'
|
61
61
|
m.required_mapping 'Field2', 'field_1'
|
62
62
|
end }.to raise_error(Topographer::InvalidMappingError)
|
63
63
|
end
|
64
64
|
|
65
65
|
it 'raises an error when adding a ignored column, which is already an input of another mapping' do
|
66
|
-
expect { Importer::Mapper.build_mapper(Object) do |m|
|
66
|
+
expect { Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
67
67
|
m.optional_mapping 'Field1', 'field_1'
|
68
68
|
m.ignored_column 'Field1'
|
69
69
|
end }.to raise_error(Topographer::InvalidMappingError)
|
70
70
|
end
|
71
71
|
|
72
72
|
it 'raises an error when adding a mapped column which has already been ignored' do
|
73
|
-
expect { Importer::Mapper.build_mapper(Object) do |m|
|
73
|
+
expect { Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
74
74
|
m.ignored_column 'Field1'
|
75
75
|
m.optional_mapping 'Field1', 'field_1'
|
76
76
|
end }.to raise_error(Topographer::InvalidMappingError)
|
@@ -79,7 +79,7 @@ describe Importer::Mapper do
|
|
79
79
|
|
80
80
|
describe 'validation mappings' do
|
81
81
|
it 'can create a single column validation' do
|
82
|
-
mapper = Importer::Mapper.build_mapper(Object) do |m|
|
82
|
+
mapper = Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
83
83
|
m.validation_field 'Field 1 Validation', 'Field1' do |input|
|
84
84
|
raise 'No Input' unless input
|
85
85
|
end
|
@@ -88,7 +88,7 @@ describe Importer::Mapper do
|
|
88
88
|
expect(mapper.output_fields.empty?).to be_true
|
89
89
|
end
|
90
90
|
it 'can create a multicolumn validation' do
|
91
|
-
mapper = Importer::Mapper.build_mapper(Object) do |m|
|
91
|
+
mapper = Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
92
92
|
m.validation_field 'Multicolumn Validation', ['Field1', 'Field2'] do |input|
|
93
93
|
raise 'No Input' unless input
|
94
94
|
end
|
@@ -98,7 +98,7 @@ describe Importer::Mapper do
|
|
98
98
|
end
|
99
99
|
it 'raises an error if a validation name is repeated' do
|
100
100
|
expect {
|
101
|
-
mapper = Importer::Mapper.build_mapper(Object) do |m|
|
101
|
+
mapper = Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
102
102
|
m.validation_field 'Field 1 Validation', 'Field1' do |input|
|
103
103
|
raise 'No Input' unless input
|
104
104
|
end
|
@@ -110,7 +110,7 @@ describe Importer::Mapper do
|
|
110
110
|
|
111
111
|
describe 'static mappings' do
|
112
112
|
it 'can create a static mapping' do
|
113
|
-
mapper = Importer::Mapper.build_mapper(Object) do |m|
|
113
|
+
mapper = Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
114
114
|
m.default_value 'Field1' do
|
115
115
|
34
|
116
116
|
end
|
@@ -119,14 +119,14 @@ describe Importer::Mapper do
|
|
119
119
|
expect(mapper.output_fields).to eql(['Field1'])
|
120
120
|
end
|
121
121
|
it 'cannot create a static mapping to many columns' do
|
122
|
-
expect { mapper = Importer::Mapper.build_mapper(Object) do |m|
|
122
|
+
expect { mapper = Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
123
123
|
m.default_value ['Field1', 'Field2'] do
|
124
124
|
34
|
125
125
|
end
|
126
126
|
end }.to raise_error(Topographer::InvalidMappingError)
|
127
127
|
end
|
128
128
|
it 'cannot add a static mapping to a field that has already been mapped' do
|
129
|
-
expect { mapper = Importer::Mapper.build_mapper(Object) do |m|
|
129
|
+
expect { mapper = Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
130
130
|
m.required_mapping 'Field1', 'field1'
|
131
131
|
m.default_value 'field1' do
|
132
132
|
34
|
@@ -136,7 +136,7 @@ describe Importer::Mapper do
|
|
136
136
|
end
|
137
137
|
|
138
138
|
it 'associates the model class with the mapper instance' do
|
139
|
-
mapper = Importer::Mapper.build_mapper(Object) do |m|
|
139
|
+
mapper = Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
140
140
|
m.ignored_column 'Field1'
|
141
141
|
m.optional_mapping 'Field2', 'field_1'
|
142
142
|
end
|
@@ -145,7 +145,7 @@ describe Importer::Mapper do
|
|
145
145
|
end
|
146
146
|
|
147
147
|
describe '#key_field' do
|
148
|
-
let(:mapper) { Importer::Mapper.new(Object) }
|
148
|
+
let(:mapper) { Topographer::Importer::Mapper.new(Object) }
|
149
149
|
it 'should add a key field to the list of key fields' do
|
150
150
|
mapper.key_field 'Field1'
|
151
151
|
expect(mapper.key_fields).to eql(['Field1'])
|
@@ -165,7 +165,7 @@ describe Importer::Mapper do
|
|
165
165
|
|
166
166
|
describe '#input_structure_valid?' do
|
167
167
|
let(:mapper) do
|
168
|
-
Importer::Mapper.build_mapper(Object) do |m|
|
168
|
+
Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
169
169
|
m.required_mapping 'Field1', 'field1'
|
170
170
|
m.required_mapping 'Field2', 'field_4'
|
171
171
|
m.optional_mapping 'Field3', 'field_6'
|
@@ -203,7 +203,7 @@ describe Importer::Mapper do
|
|
203
203
|
|
204
204
|
describe '#bad_columns' do
|
205
205
|
let(:mapper) do
|
206
|
-
Importer::Mapper.build_mapper(Object) do |m|
|
206
|
+
Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
207
207
|
m.required_mapping 'Field1', 'field1'
|
208
208
|
m.required_mapping 'Field2', 'field_4'
|
209
209
|
m.validation_field('test validation 2', 'Field2') { |input| raise 'FAILURE' if !input }
|
@@ -222,7 +222,7 @@ describe Importer::Mapper do
|
|
222
222
|
|
223
223
|
describe '#missing_columns' do
|
224
224
|
let(:mapper) do
|
225
|
-
Importer::Mapper.build_mapper(Object) do |m|
|
225
|
+
Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
226
226
|
m.required_mapping 'Field1', 'field1'
|
227
227
|
m.required_mapping 'Field2', 'field_4'
|
228
228
|
m.optional_mapping 'Field3', 'field_6'
|
@@ -240,7 +240,7 @@ describe Importer::Mapper do
|
|
240
240
|
|
241
241
|
describe '#map_input' do
|
242
242
|
let(:mapper) do
|
243
|
-
Importer::Mapper.build_mapper(Object) do |m|
|
243
|
+
Topographer::Importer::Mapper.build_mapper(Object) do |m|
|
244
244
|
m.required_mapping 'Field1', 'field_1'
|
245
245
|
m.required_mapping ['Field1', 'Field2'], 'field_2'
|
246
246
|
m.validation_field('Field2 Validation', 'Field2') { |input| raise 'FAILURE' if input['Field2'] != 'datum2'}
|
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Importer::Strategy::Base do
|
3
|
+
describe Topographer::Importer::Strategy::Base do
|
4
4
|
let(:mapper) do
|
5
5
|
double('Mapper')
|
6
6
|
end
|
7
|
-
let(:strategy) { Importer::Strategy::Base.new(mapper) }
|
7
|
+
let(:strategy) { Topographer::Importer::Strategy::Base.new(mapper) }
|
8
8
|
let(:status) do
|
9
9
|
double 'Status',
|
10
10
|
errors?: false
|
@@ -15,7 +15,7 @@ describe Importer::Strategy::Base do
|
|
15
15
|
end
|
16
16
|
describe '#initialize' do
|
17
17
|
it 'creates a new Strategy instance with the given mapper' do
|
18
|
-
strategy = Importer::Strategy::Base.new(mapper)
|
18
|
+
strategy = Topographer::Importer::Strategy::Base.new(mapper)
|
19
19
|
strategy.instance_variable_get(:@mapper).should be(mapper)
|
20
20
|
end
|
21
21
|
end
|
@@ -2,9 +2,9 @@ require 'spec_helper'
|
|
2
2
|
require 'ostruct'
|
3
3
|
require_relative 'mapped_model'
|
4
4
|
|
5
|
-
describe Importer::Strategy::CreateOrUpdateRecord do
|
5
|
+
describe Topographer::Importer::Strategy::CreateOrUpdateRecord do
|
6
6
|
|
7
|
-
let(:strategy) { Importer::Strategy::CreateOrUpdateRecord.new(MappedModel.get_mapper) }
|
7
|
+
let(:strategy) { Topographer::Importer::Strategy::CreateOrUpdateRecord.new(MappedModel.get_mapper) }
|
8
8
|
let(:input) do
|
9
9
|
double 'Data',
|
10
10
|
source_identifier: 'record',
|
@@ -20,7 +20,7 @@ describe Importer::Strategy::CreateOrUpdateRecord do
|
|
20
20
|
|
21
21
|
describe '#import_record' do
|
22
22
|
it 'should return an ImportStatus object' do
|
23
|
-
expect(strategy.import_record(input)).to be_a Importer::Strategy::ImportStatus
|
23
|
+
expect(strategy.import_record(input)).to be_a Topographer::Importer::Strategy::ImportStatus
|
24
24
|
end
|
25
25
|
it 'should import a record from valid input' do
|
26
26
|
MappedModel.any_instance.should_receive(:save).once
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
require 'ostruct'
|
3
3
|
require_relative 'mapped_model'
|
4
4
|
|
5
|
-
describe Importer::Strategy::ImportNewRecord do
|
5
|
+
describe Topographer::Importer::Strategy::ImportNewRecord do
|
6
6
|
let(:valid_status) do
|
7
7
|
double 'Result',
|
8
8
|
source_identifier: 'row1',
|
@@ -22,7 +22,7 @@ describe Importer::Strategy::ImportNewRecord do
|
|
22
22
|
double('Mapper', map_input: valid_status, model_class: MappedModel)
|
23
23
|
end
|
24
24
|
|
25
|
-
let(:strategy) { Importer::Strategy::ImportNewRecord.new(MappedModel.get_mapper) }
|
25
|
+
let(:strategy) { Topographer::Importer::Strategy::ImportNewRecord.new(MappedModel.get_mapper) }
|
26
26
|
let(:input) do
|
27
27
|
double 'Data',
|
28
28
|
source_identifier: 'record',
|
@@ -32,14 +32,14 @@ describe Importer::Strategy::ImportNewRecord do
|
|
32
32
|
|
33
33
|
describe '#initialize' do
|
34
34
|
it 'creates a new Strategy instance with the given mapper' do
|
35
|
-
strategy = Importer::Strategy::ImportNewRecord.new(mapper)
|
35
|
+
strategy = Topographer::Importer::Strategy::ImportNewRecord.new(mapper)
|
36
36
|
strategy.instance_variable_get(:@mapper).should be(mapper)
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
40
|
describe '#import_record' do
|
41
41
|
it 'should return an ImportStatus object' do
|
42
|
-
expect(strategy.import_record(input)).to be_a Importer::Strategy::ImportStatus
|
42
|
+
expect(strategy.import_record(input)).to be_a Topographer::Importer::Strategy::ImportStatus
|
43
43
|
end
|
44
44
|
it 'should import a record from valid input' do
|
45
45
|
MappedModel.any_instance.should_receive(:save).once
|
@@ -48,7 +48,7 @@ describe Importer::Strategy::ImportNewRecord do
|
|
48
48
|
end
|
49
49
|
it 'should not import a record from invalid input' do
|
50
50
|
mapper.stub(:map_input).and_return(invalid_result)
|
51
|
-
strategy = Importer::Strategy::ImportNewRecord.new(mapper)
|
51
|
+
strategy = Topographer::Importer::Strategy::ImportNewRecord.new(mapper)
|
52
52
|
MappedModel.any_instance.should_not_receive(:save)
|
53
53
|
import_status = strategy.import_record(input)
|
54
54
|
expect(import_status.errors?).to be true
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Importer::Strategy::ImportStatus do
|
4
|
-
let(:status) {Importer::Strategy::ImportStatus.new('row1')}
|
3
|
+
describe Topographer::Importer::Strategy::ImportStatus do
|
4
|
+
let(:status) {Topographer::Importer::Strategy::ImportStatus.new('row1')}
|
5
5
|
describe '#add_error' do
|
6
6
|
it 'should add errors' do
|
7
7
|
status.add_error(:validation, 'ERROR')
|
@@ -22,7 +22,7 @@ class MappedModel < OpenStruct
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def self.get_mapper
|
25
|
-
Importer::Mapper.build_mapper(MappedModel) do |mapping|
|
25
|
+
Topographer::Importer::Mapper.build_mapper(MappedModel) do |mapping|
|
26
26
|
mapping.required_mapping 'Field1', 'field_1'
|
27
27
|
mapping.required_mapping 'Field2', 'field_2'
|
28
28
|
mapping.optional_mapping 'Field3', 'field_3'
|
@@ -2,9 +2,9 @@ require 'spec_helper'
|
|
2
2
|
require 'ostruct'
|
3
3
|
require_relative 'mapped_model'
|
4
4
|
|
5
|
-
describe Importer::Strategy::UpdateRecord do
|
5
|
+
describe Topographer::Importer::Strategy::UpdateRecord do
|
6
6
|
|
7
|
-
let(:strategy) { Importer::Strategy::UpdateRecord.new(MappedModel.get_mapper) }
|
7
|
+
let(:strategy) { Topographer::Importer::Strategy::UpdateRecord.new(MappedModel.get_mapper) }
|
8
8
|
let(:input) do
|
9
9
|
double 'Data',
|
10
10
|
source_identifier: 'record',
|
@@ -19,7 +19,7 @@ describe Importer::Strategy::UpdateRecord do
|
|
19
19
|
|
20
20
|
describe '#import_record' do
|
21
21
|
it 'should return an ImportStatus object' do
|
22
|
-
expect(strategy.import_record(input)).to be_a Importer::Strategy::ImportStatus
|
22
|
+
expect(strategy.import_record(input)).to be_a Topographer::Importer::Strategy::ImportStatus
|
23
23
|
end
|
24
24
|
it 'should import a record from valid input' do
|
25
25
|
MappedModel.any_instance.should_receive(:save).once
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: topographer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Simpson
|
@@ -15,14 +15,14 @@ dependencies:
|
|
15
15
|
name: activesupport
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - '>='
|
18
|
+
- - ! '>='
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '3'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - '>='
|
25
|
+
- - ! '>='
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '3'
|
28
28
|
- !ruby/object:Gem::Dependency
|
@@ -43,28 +43,28 @@ dependencies:
|
|
43
43
|
name: rake
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - '>='
|
46
|
+
- - ! '>='
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '0'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - '>='
|
53
|
+
- - ! '>='
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: rspec
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- - '>='
|
60
|
+
- - ! '>='
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '0'
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- - '>='
|
67
|
+
- - ! '>='
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
70
|
description: Topographer enables importing of models from various input sources.
|
@@ -139,17 +139,17 @@ require_paths:
|
|
139
139
|
- lib
|
140
140
|
required_ruby_version: !ruby/object:Gem::Requirement
|
141
141
|
requirements:
|
142
|
-
- - '>='
|
142
|
+
- - ! '>='
|
143
143
|
- !ruby/object:Gem::Version
|
144
144
|
version: '0'
|
145
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
146
|
requirements:
|
147
|
-
- - '>='
|
147
|
+
- - ! '>='
|
148
148
|
- !ruby/object:Gem::Version
|
149
149
|
version: '0'
|
150
150
|
requirements: []
|
151
151
|
rubyforge_project:
|
152
|
-
rubygems_version: 2.1.
|
152
|
+
rubygems_version: 2.1.10
|
153
153
|
signing_key:
|
154
154
|
specification_version: 4
|
155
155
|
summary: Topographer allows the mapping of columnar input data to fields for active
|
@@ -173,3 +173,4 @@ test_files:
|
|
173
173
|
- spec/Cartographer/importer/strategy/mapped_model.rb
|
174
174
|
- spec/Cartographer/importer/strategy/update_record_spec.rb
|
175
175
|
- spec/spec_helper.rb
|
176
|
+
has_rdoc:
|