topographer 0.0.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 +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE +20 -0
- data/LICENSE.txt +22 -0
- data/README.md +38 -0
- data/Rakefile +1 -0
- data/lib/Topographer/exceptions.rb +4 -0
- data/lib/Topographer/importer.rb +57 -0
- data/lib/Topographer/importer/helpers.rb +18 -0
- data/lib/Topographer/importer/helpers/write_log_to_csv.rb +85 -0
- data/lib/Topographer/importer/importable.rb +5 -0
- data/lib/Topographer/importer/input.rb +5 -0
- data/lib/Topographer/importer/input/base.rb +13 -0
- data/lib/Topographer/importer/input/roo.rb +28 -0
- data/lib/Topographer/importer/input/source_data.rb +8 -0
- data/lib/Topographer/importer/logger.rb +8 -0
- data/lib/Topographer/importer/logger/base.rb +69 -0
- data/lib/Topographer/importer/logger/fatal_error_entry.rb +19 -0
- data/lib/Topographer/importer/logger/file.rb +0 -0
- data/lib/Topographer/importer/logger/log_entry.rb +34 -0
- data/lib/Topographer/importer/logger/simple.rb +27 -0
- data/lib/Topographer/importer/mapper.rb +161 -0
- data/lib/Topographer/importer/mapper/default_field_mapping.rb +22 -0
- data/lib/Topographer/importer/mapper/field_mapping.rb +55 -0
- data/lib/Topographer/importer/mapper/ignored_field_mapping.rb +10 -0
- data/lib/Topographer/importer/mapper/result.rb +21 -0
- data/lib/Topographer/importer/mapper/validation_field_mapping.rb +36 -0
- data/lib/Topographer/importer/strategy.rb +7 -0
- data/lib/Topographer/importer/strategy/base.rb +42 -0
- data/lib/Topographer/importer/strategy/create_or_update_record.rb +50 -0
- data/lib/Topographer/importer/strategy/import_new_record.rb +17 -0
- data/lib/Topographer/importer/strategy/import_status.rb +28 -0
- data/lib/Topographer/importer/strategy/update_record.rb +33 -0
- data/lib/Topographer/version.rb +3 -0
- data/lib/topographer.rb +6 -0
- data/spec/Cartographer/importer/helpers/write_log_to_csv_spec.rb +69 -0
- data/spec/Cartographer/importer/helpers_spec.rb +33 -0
- data/spec/Cartographer/importer/importable_spec.rb +13 -0
- data/spec/Cartographer/importer/importer_spec.rb +132 -0
- data/spec/Cartographer/importer/logger/base_spec.rb +12 -0
- data/spec/Cartographer/importer/logger/fatal_error_entry_spec.rb +31 -0
- data/spec/Cartographer/importer/logger/simple_spec.rb +53 -0
- data/spec/Cartographer/importer/mapper/default_field_mapping_spec.rb +41 -0
- data/spec/Cartographer/importer/mapper/field_mapping_spec.rb +126 -0
- data/spec/Cartographer/importer/mapper/validation_field_mapping_spec.rb +42 -0
- data/spec/Cartographer/importer/mapper_spec.rb +318 -0
- data/spec/Cartographer/importer/strategy/base_spec.rb +43 -0
- data/spec/Cartographer/importer/strategy/create_or_update_record_spec.rb +46 -0
- data/spec/Cartographer/importer/strategy/import_new_records_spec.rb +66 -0
- data/spec/Cartographer/importer/strategy/import_status_spec.rb +24 -0
- data/spec/Cartographer/importer/strategy/mapped_model.rb +41 -0
- data/spec/Cartographer/importer/strategy/update_record_spec.rb +45 -0
- data/spec/spec_helper.rb +1 -0
- data/topographer.gemspec +26 -0
- metadata +175 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Importer::Strategy::Base do
|
4
|
+
let(:mapper) do
|
5
|
+
double('Mapper')
|
6
|
+
end
|
7
|
+
let(:strategy) { Importer::Strategy::Base.new(mapper) }
|
8
|
+
let(:status) do
|
9
|
+
double 'Status',
|
10
|
+
errors?: false
|
11
|
+
end
|
12
|
+
let(:bad_status) do
|
13
|
+
double 'Status',
|
14
|
+
errors?: true
|
15
|
+
end
|
16
|
+
describe '#initialize' do
|
17
|
+
it 'creates a new Strategy instance with the given mapper' do
|
18
|
+
strategy = Importer::Strategy::Base.new(mapper)
|
19
|
+
strategy.instance_variable_get(:@mapper).should be(mapper)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
describe '#import_record' do
|
23
|
+
it 'should raise NotImplementedError' do
|
24
|
+
expect { strategy.import_record(nil) }.to raise_error(NotImplementedError)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#should_persist_import?' do
|
29
|
+
it 'returns true if the status has no errors and the import is not a dry run' do
|
30
|
+
expect(strategy.should_persist_import?(status)).to be_true
|
31
|
+
end
|
32
|
+
it 'returns false if the status has errors regardless of whether the import is a dry run or not' do
|
33
|
+
expect(strategy.should_persist_import?(bad_status)).to be_false
|
34
|
+
strategy.dry_run = true
|
35
|
+
expect(strategy.should_persist_import?(bad_status)).to be_false
|
36
|
+
end
|
37
|
+
it 'returns false if the status has no errors and the import is a dry run' do
|
38
|
+
strategy.dry_run = true
|
39
|
+
expect(strategy.should_persist_import?(status)).to be_false
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ostruct'
|
3
|
+
require_relative 'mapped_model'
|
4
|
+
|
5
|
+
describe Importer::Strategy::CreateOrUpdateRecord do
|
6
|
+
|
7
|
+
let(:strategy) { Importer::Strategy::CreateOrUpdateRecord.new(MappedModel.get_mapper) }
|
8
|
+
let(:input) do
|
9
|
+
double 'Data',
|
10
|
+
source_identifier: 'record',
|
11
|
+
data: {'Field1' => 'datum1',
|
12
|
+
'Field2' => 'datum2'}
|
13
|
+
end
|
14
|
+
let(:invalid_input) do
|
15
|
+
double 'Data',
|
16
|
+
source_identifier: 'bad record',
|
17
|
+
data: {'Field1' => 'datum1'}
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
describe '#import_record' do
|
22
|
+
it 'should return an ImportStatus object' do
|
23
|
+
expect(strategy.import_record(input)).to be_a Importer::Strategy::ImportStatus
|
24
|
+
end
|
25
|
+
it 'should import a record from valid input' do
|
26
|
+
MappedModel.any_instance.should_receive(:save).once
|
27
|
+
import_status = strategy.import_record(input)
|
28
|
+
expect(import_status.errors?).to be false
|
29
|
+
end
|
30
|
+
it 'should not import a record from invalid input' do
|
31
|
+
|
32
|
+
MappedModel.any_instance.should_not_receive(:save)
|
33
|
+
import_status = strategy.import_record(invalid_input)
|
34
|
+
expect(import_status.errors?).to be true
|
35
|
+
expect(import_status.errors[:mapping]).to include('Missing required input(s): `Field2` for `field_2`')
|
36
|
+
expect(import_status.errors[:validation]).to include('Field 2 is not datum2')
|
37
|
+
end
|
38
|
+
it 'should not save a record on a dry run' do
|
39
|
+
MappedModel.any_instance.should_not_receive(:save)
|
40
|
+
strategy.dry_run = true
|
41
|
+
import_status = strategy.import_record(input)
|
42
|
+
expect(import_status.errors?).to be false
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ostruct'
|
3
|
+
require_relative 'mapped_model'
|
4
|
+
|
5
|
+
describe Importer::Strategy::ImportNewRecord do
|
6
|
+
let(:valid_status) do
|
7
|
+
double 'Result',
|
8
|
+
source_identifier: 'row1',
|
9
|
+
data: {'field_1' => 'datum1', 'field_2' => 'datum2'},
|
10
|
+
errors?: false,
|
11
|
+
errors: {}
|
12
|
+
end
|
13
|
+
let(:invalid_result) do
|
14
|
+
double 'Result',
|
15
|
+
source_identifier: 'row1',
|
16
|
+
data: {'field_1' => 'dataum1'},
|
17
|
+
errors?: true,
|
18
|
+
errors: {'field_2' => 'Missing input(s): `Field2` for `field_2`'}
|
19
|
+
|
20
|
+
end
|
21
|
+
let(:mapper) do
|
22
|
+
double('Mapper', map_input: valid_status, model_class: MappedModel)
|
23
|
+
end
|
24
|
+
|
25
|
+
let(:strategy) { Importer::Strategy::ImportNewRecord.new(MappedModel.get_mapper) }
|
26
|
+
let(:input) do
|
27
|
+
double 'Data',
|
28
|
+
source_identifier: 'record',
|
29
|
+
data: {'Field1' => 'datum1',
|
30
|
+
'Field2' => 'datum2'}
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#initialize' do
|
34
|
+
it 'creates a new Strategy instance with the given mapper' do
|
35
|
+
strategy = Importer::Strategy::ImportNewRecord.new(mapper)
|
36
|
+
strategy.instance_variable_get(:@mapper).should be(mapper)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#import_record' do
|
41
|
+
it 'should return an ImportStatus object' do
|
42
|
+
expect(strategy.import_record(input)).to be_a Importer::Strategy::ImportStatus
|
43
|
+
end
|
44
|
+
it 'should import a record from valid input' do
|
45
|
+
MappedModel.any_instance.should_receive(:save).once
|
46
|
+
result = strategy.import_record(input)
|
47
|
+
expect(result.errors?).to be false
|
48
|
+
end
|
49
|
+
it 'should not import a record from invalid input' do
|
50
|
+
mapper.stub(:map_input).and_return(invalid_result)
|
51
|
+
strategy = Importer::Strategy::ImportNewRecord.new(mapper)
|
52
|
+
MappedModel.any_instance.should_not_receive(:save)
|
53
|
+
import_status = strategy.import_record(input)
|
54
|
+
expect(import_status.errors?).to be true
|
55
|
+
expect(import_status.errors[:mapping]).to include('Missing input(s): `Field2` for `field_2`')
|
56
|
+
expect(import_status.errors[:validation]).to include('Field 2 is not datum2')
|
57
|
+
end
|
58
|
+
it 'should not save a record on a dry run' do
|
59
|
+
MappedModel.any_instance.should_not_receive(:save)
|
60
|
+
strategy.dry_run = true
|
61
|
+
import_status = strategy.import_record(input)
|
62
|
+
expect(import_status.errors?).to be false
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Importer::Strategy::ImportStatus do
|
4
|
+
let(:status) {Importer::Strategy::ImportStatus.new('row1')}
|
5
|
+
describe '#add_error' do
|
6
|
+
it 'should add errors' do
|
7
|
+
status.add_error(:validation, 'ERROR')
|
8
|
+
expect(status.error_count).to be 1
|
9
|
+
end
|
10
|
+
end
|
11
|
+
describe '#set_timestamp' do
|
12
|
+
it 'should set the timestamp the first time it is called' do
|
13
|
+
expect(status.timestamp).to be_nil
|
14
|
+
status.set_timestamp
|
15
|
+
expect(status.timestamp).to be_a DateTime
|
16
|
+
end
|
17
|
+
it 'should not change the timestamp after it has been called' do
|
18
|
+
status.set_timestamp
|
19
|
+
timestamp = status.timestamp
|
20
|
+
status.set_timestamp
|
21
|
+
expect(timestamp).to eql(status.timestamp)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class MappedModel < OpenStruct
|
2
|
+
def self.create(params)
|
3
|
+
self.new(params)
|
4
|
+
end
|
5
|
+
|
6
|
+
def first
|
7
|
+
self
|
8
|
+
end
|
9
|
+
|
10
|
+
def valid?
|
11
|
+
self.errors = OpenStruct.new(full_messages: [])
|
12
|
+
if field_2 == 'datum2'
|
13
|
+
true
|
14
|
+
else
|
15
|
+
self.errors = OpenStruct.new(full_messages: ['Field 2 is not datum2'])
|
16
|
+
false
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def save
|
21
|
+
true
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.get_mapper
|
25
|
+
Importer::Mapper.build_mapper(MappedModel) do |mapping|
|
26
|
+
mapping.required_mapping 'Field1', 'field_1'
|
27
|
+
mapping.required_mapping 'Field2', 'field_2'
|
28
|
+
mapping.optional_mapping 'Field3', 'field_3'
|
29
|
+
mapping.key_field 'field_1'
|
30
|
+
mapping.key_field 'field_2'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.where(params)
|
35
|
+
return self.new(params)
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.find_or_initialize_by(params)
|
39
|
+
return self.new(params)
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ostruct'
|
3
|
+
require_relative 'mapped_model'
|
4
|
+
|
5
|
+
describe Importer::Strategy::UpdateRecord do
|
6
|
+
|
7
|
+
let(:strategy) { Importer::Strategy::UpdateRecord.new(MappedModel.get_mapper) }
|
8
|
+
let(:input) do
|
9
|
+
double 'Data',
|
10
|
+
source_identifier: 'record',
|
11
|
+
data: {'Field1' => 'datum1',
|
12
|
+
'Field2' => 'datum2'}
|
13
|
+
end
|
14
|
+
let(:invalid_input) do
|
15
|
+
double 'Data',
|
16
|
+
source_identifier: 'bad record',
|
17
|
+
data: {'Field1' => 'datum1'}
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#import_record' do
|
21
|
+
it 'should return an ImportStatus object' do
|
22
|
+
expect(strategy.import_record(input)).to be_a Importer::Strategy::ImportStatus
|
23
|
+
end
|
24
|
+
it 'should import a record from valid input' do
|
25
|
+
MappedModel.any_instance.should_receive(:save).once
|
26
|
+
result = strategy.import_record(input)
|
27
|
+
expect(result.errors?).to be false
|
28
|
+
end
|
29
|
+
it 'should not import a record from invalid input' do
|
30
|
+
|
31
|
+
MappedModel.any_instance.should_not_receive(:save)
|
32
|
+
import_status = strategy.import_record(invalid_input)
|
33
|
+
expect(import_status.errors?).to be true
|
34
|
+
expect(import_status.errors[:mapping]).to include('Missing required input(s): `Field2` for `field_2`')
|
35
|
+
expect(import_status.errors[:validation]).to include('Field 2 is not datum2')
|
36
|
+
end
|
37
|
+
it 'should not save a record on a dry run' do
|
38
|
+
MappedModel.any_instance.should_not_receive(:save)
|
39
|
+
strategy.dry_run = true
|
40
|
+
import_status = strategy.import_record(input)
|
41
|
+
expect(import_status.errors?).to be false
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'topographer'
|
data/topographer.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'Topographer/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'topographer'
|
8
|
+
spec.version = Topographer::VERSION
|
9
|
+
spec.authors = ['Mike Simpson', 'Emerson Huitt']
|
10
|
+
spec.email = ['mjs2600@gmail.com', 'ehuitt@gmail.com']
|
11
|
+
spec.description = %q{Topographer enables importing of models from various input sources.}
|
12
|
+
spec.summary = %q{Topographer allows the mapping of columnar input data to fields for active record models. This facilitates importing from a variety of sources.}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_runtime_dependency('activesupport', ['>= 3'])
|
22
|
+
|
23
|
+
spec.add_development_dependency('bundler', ['~> 1.3'])
|
24
|
+
spec.add_development_dependency('rake')
|
25
|
+
spec.add_development_dependency('rspec')
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,175 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: topographer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mike Simpson
|
8
|
+
- Emerson Huitt
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-02-11 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activesupport
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '3'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - '>='
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '3'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: bundler
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ~>
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '1.3'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ~>
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '1.3'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rake
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: rspec
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
description: Topographer enables importing of models from various input sources.
|
71
|
+
email:
|
72
|
+
- mjs2600@gmail.com
|
73
|
+
- ehuitt@gmail.com
|
74
|
+
executables: []
|
75
|
+
extensions: []
|
76
|
+
extra_rdoc_files: []
|
77
|
+
files:
|
78
|
+
- .gitignore
|
79
|
+
- Gemfile
|
80
|
+
- LICENSE
|
81
|
+
- LICENSE.txt
|
82
|
+
- README.md
|
83
|
+
- Rakefile
|
84
|
+
- lib/Topographer/exceptions.rb
|
85
|
+
- lib/Topographer/importer.rb
|
86
|
+
- lib/Topographer/importer/helpers.rb
|
87
|
+
- lib/Topographer/importer/helpers/write_log_to_csv.rb
|
88
|
+
- lib/Topographer/importer/importable.rb
|
89
|
+
- lib/Topographer/importer/input.rb
|
90
|
+
- lib/Topographer/importer/input/base.rb
|
91
|
+
- lib/Topographer/importer/input/roo.rb
|
92
|
+
- lib/Topographer/importer/input/source_data.rb
|
93
|
+
- lib/Topographer/importer/logger.rb
|
94
|
+
- lib/Topographer/importer/logger/base.rb
|
95
|
+
- lib/Topographer/importer/logger/fatal_error_entry.rb
|
96
|
+
- lib/Topographer/importer/logger/file.rb
|
97
|
+
- lib/Topographer/importer/logger/log_entry.rb
|
98
|
+
- lib/Topographer/importer/logger/simple.rb
|
99
|
+
- lib/Topographer/importer/mapper.rb
|
100
|
+
- lib/Topographer/importer/mapper/default_field_mapping.rb
|
101
|
+
- lib/Topographer/importer/mapper/field_mapping.rb
|
102
|
+
- lib/Topographer/importer/mapper/ignored_field_mapping.rb
|
103
|
+
- lib/Topographer/importer/mapper/result.rb
|
104
|
+
- lib/Topographer/importer/mapper/validation_field_mapping.rb
|
105
|
+
- lib/Topographer/importer/strategy.rb
|
106
|
+
- lib/Topographer/importer/strategy/base.rb
|
107
|
+
- lib/Topographer/importer/strategy/create_or_update_record.rb
|
108
|
+
- lib/Topographer/importer/strategy/import_new_record.rb
|
109
|
+
- lib/Topographer/importer/strategy/import_status.rb
|
110
|
+
- lib/Topographer/importer/strategy/update_record.rb
|
111
|
+
- lib/Topographer/version.rb
|
112
|
+
- lib/topographer.rb
|
113
|
+
- spec/Cartographer/importer/helpers/write_log_to_csv_spec.rb
|
114
|
+
- spec/Cartographer/importer/helpers_spec.rb
|
115
|
+
- spec/Cartographer/importer/importable_spec.rb
|
116
|
+
- spec/Cartographer/importer/importer_spec.rb
|
117
|
+
- spec/Cartographer/importer/logger/base_spec.rb
|
118
|
+
- spec/Cartographer/importer/logger/fatal_error_entry_spec.rb
|
119
|
+
- spec/Cartographer/importer/logger/simple_spec.rb
|
120
|
+
- spec/Cartographer/importer/mapper/default_field_mapping_spec.rb
|
121
|
+
- spec/Cartographer/importer/mapper/field_mapping_spec.rb
|
122
|
+
- spec/Cartographer/importer/mapper/validation_field_mapping_spec.rb
|
123
|
+
- spec/Cartographer/importer/mapper_spec.rb
|
124
|
+
- spec/Cartographer/importer/strategy/base_spec.rb
|
125
|
+
- spec/Cartographer/importer/strategy/create_or_update_record_spec.rb
|
126
|
+
- spec/Cartographer/importer/strategy/import_new_records_spec.rb
|
127
|
+
- spec/Cartographer/importer/strategy/import_status_spec.rb
|
128
|
+
- spec/Cartographer/importer/strategy/mapped_model.rb
|
129
|
+
- spec/Cartographer/importer/strategy/update_record_spec.rb
|
130
|
+
- spec/spec_helper.rb
|
131
|
+
- topographer.gemspec
|
132
|
+
homepage: ''
|
133
|
+
licenses:
|
134
|
+
- MIT
|
135
|
+
metadata: {}
|
136
|
+
post_install_message:
|
137
|
+
rdoc_options: []
|
138
|
+
require_paths:
|
139
|
+
- lib
|
140
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - '>='
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
145
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
requirements: []
|
151
|
+
rubyforge_project:
|
152
|
+
rubygems_version: 2.1.11
|
153
|
+
signing_key:
|
154
|
+
specification_version: 4
|
155
|
+
summary: Topographer allows the mapping of columnar input data to fields for active
|
156
|
+
record models. This facilitates importing from a variety of sources.
|
157
|
+
test_files:
|
158
|
+
- spec/Cartographer/importer/helpers/write_log_to_csv_spec.rb
|
159
|
+
- spec/Cartographer/importer/helpers_spec.rb
|
160
|
+
- spec/Cartographer/importer/importable_spec.rb
|
161
|
+
- spec/Cartographer/importer/importer_spec.rb
|
162
|
+
- spec/Cartographer/importer/logger/base_spec.rb
|
163
|
+
- spec/Cartographer/importer/logger/fatal_error_entry_spec.rb
|
164
|
+
- spec/Cartographer/importer/logger/simple_spec.rb
|
165
|
+
- spec/Cartographer/importer/mapper/default_field_mapping_spec.rb
|
166
|
+
- spec/Cartographer/importer/mapper/field_mapping_spec.rb
|
167
|
+
- spec/Cartographer/importer/mapper/validation_field_mapping_spec.rb
|
168
|
+
- spec/Cartographer/importer/mapper_spec.rb
|
169
|
+
- spec/Cartographer/importer/strategy/base_spec.rb
|
170
|
+
- spec/Cartographer/importer/strategy/create_or_update_record_spec.rb
|
171
|
+
- spec/Cartographer/importer/strategy/import_new_records_spec.rb
|
172
|
+
- spec/Cartographer/importer/strategy/import_status_spec.rb
|
173
|
+
- spec/Cartographer/importer/strategy/mapped_model.rb
|
174
|
+
- spec/Cartographer/importer/strategy/update_record_spec.rb
|
175
|
+
- spec/spec_helper.rb
|