go_import 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/go-import +96 -0
- data/lib/go_import/csv_helper.rb +47 -0
- data/lib/go_import/email_helper.rb +10 -0
- data/lib/go_import/errors.rb +22 -0
- data/lib/go_import/excel_helper.rb +10 -0
- data/lib/go_import/global_phone.json +6571 -0
- data/lib/go_import/model/address.rb +61 -0
- data/lib/go_import/model/class_settings.rb +50 -0
- data/lib/go_import/model/coworker.rb +76 -0
- data/lib/go_import/model/coworker_reference.rb +33 -0
- data/lib/go_import/model/customfield.rb +87 -0
- data/lib/go_import/model/deal.rb +172 -0
- data/lib/go_import/model/deal_class_settings.rb +73 -0
- data/lib/go_import/model/deal_state.rb +15 -0
- data/lib/go_import/model/deal_status.rb +23 -0
- data/lib/go_import/model/deal_status_reference.rb +47 -0
- data/lib/go_import/model/deal_status_setting.rb +49 -0
- data/lib/go_import/model/documents.rb +51 -0
- data/lib/go_import/model/link.rb +70 -0
- data/lib/go_import/model/note.rb +97 -0
- data/lib/go_import/model/note_classification.rb +25 -0
- data/lib/go_import/model/organization.rb +219 -0
- data/lib/go_import/model/person.rb +151 -0
- data/lib/go_import/model/referencetosource.rb +46 -0
- data/lib/go_import/model/relation.rb +23 -0
- data/lib/go_import/model/rootmodel.rb +359 -0
- data/lib/go_import/model/settings.rb +61 -0
- data/lib/go_import/model/tag.rb +35 -0
- data/lib/go_import/model_helpers.rb +54 -0
- data/lib/go_import/phone_helper.rb +74 -0
- data/lib/go_import/roo_helper.rb +80 -0
- data/lib/go_import/serialize_helper.rb +186 -0
- data/lib/go_import/source.rb +87 -0
- data/lib/go_import/templating.rb +52 -0
- data/lib/go_import.rb +19 -0
- data/sources/csv/.gitignore +14 -0
- data/sources/csv/.go_import/runner.rb +62 -0
- data/sources/csv/Gemfile +5 -0
- data/sources/csv/Rakefile.rb +7 -0
- data/sources/csv/converter.rb +179 -0
- data/sources/csv/data/coworkers.csv +2 -0
- data/sources/csv/data/deals.csv +2 -0
- data/sources/csv/data/organizations.csv +2 -0
- data/sources/csv/data/persons.csv +2 -0
- data/sources/csv/spec/exporter_spec.rb +17 -0
- data/sources/csv/spec/sample_data/coworkers.csv +2 -0
- data/sources/csv/spec/sample_data/deals.csv +2 -0
- data/sources/csv/spec/sample_data/organizations.csv +2 -0
- data/sources/csv/spec/sample_data/persons.csv +2 -0
- data/sources/csv/spec/spec_helper.rb +30 -0
- data/sources/easy/.gitignore +14 -0
- data/sources/easy/.go_import/runner.rb +115 -0
- data/sources/easy/Export/readme.txt +6 -0
- data/sources/easy/Gemfile +5 -0
- data/sources/easy/Rakefile.rb +7 -0
- data/sources/easy/converter.rb +435 -0
- data/sources/easy/spec/exporter_spec.rb +10 -0
- data/sources/easy/spec/sample_data/Company.txt +649 -0
- data/sources/easy/spec/spec_helper.rb +30 -0
- data/sources/excel/.gitignore +14 -0
- data/sources/excel/.go_import/runner.rb +116 -0
- data/sources/excel/Gemfile +6 -0
- data/sources/excel/Rakefile.rb +7 -0
- data/sources/excel/converter.rb +130 -0
- data/sources/excel/spec/sample_data/sample.xlsx +0 -0
- data/sources/excel/spec/spec_helper.rb +26 -0
- data/sources/excel/spec/tomodel_spec.rb +18 -0
- data/sources/excel/template.xlsx +0 -0
- data/spec/address_spec.rb +49 -0
- data/spec/class_settings_spec.rb +37 -0
- data/spec/coworker_spec.rb +94 -0
- data/spec/custom_field_spec.rb +22 -0
- data/spec/deal_class_settings_spec.rb +104 -0
- data/spec/deal_spec.rb +182 -0
- data/spec/deal_status_reference_spec.rb +17 -0
- data/spec/documents_spec.rb +37 -0
- data/spec/helpers/csv_helper_spec.rb +29 -0
- data/spec/helpers/email_helper_spec.rb +32 -0
- data/spec/helpers/phone_helper_spec.rb +97 -0
- data/spec/helpers/roo_helper_spec.rb +10 -0
- data/spec/helpers/serialize_helper_spec.rb +249 -0
- data/spec/helpers/xsd_validate_spec.rb +55 -0
- data/spec/link_spec.rb +106 -0
- data/spec/note_spec.rb +110 -0
- data/spec/organization_spec.rb +151 -0
- data/spec/person_spec.rb +132 -0
- data/spec/rootmodel_spec.rb +371 -0
- data/spec/spec_helper.rb +30 -0
- data/spec/templating_spec.rb +12 -0
- metadata +306 -0
data/bin/go-import
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "thor"
|
4
|
+
require "go_import"
|
5
|
+
|
6
|
+
class GoImportCommandLine < Thor
|
7
|
+
|
8
|
+
desc "about", "About go-import"
|
9
|
+
def about()
|
10
|
+
puts "go-import is an import tool for LIME Go. It can take virtually any input source and create pretty looking xml-files that LIME Go likes. go-import has some predefined sources that will make it easy for you to migrate your data."
|
11
|
+
puts ""
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "list-sources", "Lists the available sources"
|
15
|
+
def list_sources()
|
16
|
+
puts "The following sources are available:"
|
17
|
+
puts
|
18
|
+
|
19
|
+
sources = GoImport::Sources.new(source_path)
|
20
|
+
sources.list().each do |s|
|
21
|
+
puts "\t#{s}"
|
22
|
+
end
|
23
|
+
|
24
|
+
puts "\nCreate a new project with 'go-import new' with one of these sources."
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "new", "Creates a new migration project with a specifed name and source"
|
28
|
+
option(:project,
|
29
|
+
:desc => "Name of the project. The project will be created in a folder with the same name.",
|
30
|
+
:type => :string,
|
31
|
+
:required => true)
|
32
|
+
option(:source,
|
33
|
+
:desc => "Name of the source to use. Use list-sources to show available sources.",
|
34
|
+
:type => :string,
|
35
|
+
:required => true)
|
36
|
+
def new(project = nil, source = nil)
|
37
|
+
sources = GoImport::Sources.new(source_path)
|
38
|
+
|
39
|
+
if sources.create_project_from_source(options.project, options.source)
|
40
|
+
puts "\nProject '#{options.project}' created from source '#{options.source}'."
|
41
|
+
puts "Modify the #{options.project}/converter.rb script to suit your source."
|
42
|
+
puts "Use 'go-import run' from the project directory to create the xml file for LIME Go."
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
desc "run", "Executes the current project and create a go-import.xml file. Existing go-import.xml will be overwritten, use -o to specify a different filename"
|
47
|
+
def run_import()
|
48
|
+
# run is a Thor reserved word and cant be used as a method name
|
49
|
+
|
50
|
+
runner_dir = ".go_import"
|
51
|
+
|
52
|
+
if Dir.exists?(runner_dir) == false
|
53
|
+
puts "This doesnt look like a go-import project. Are you in the right directory or did you mess with the '#{runner_dir}' folder?"
|
54
|
+
return
|
55
|
+
end
|
56
|
+
|
57
|
+
runner_file = File.expand_path('./.go_import/runner.rb', Dir.pwd)
|
58
|
+
if File.exists?(runner_file) == false
|
59
|
+
puts "I can't run this project. Did you mess with the '#{runner_dir}' folder?"
|
60
|
+
return
|
61
|
+
end
|
62
|
+
|
63
|
+
require(runner_file)
|
64
|
+
|
65
|
+
# the source must implement the convert_source method that
|
66
|
+
# returns an instance of GoImport::RootModel
|
67
|
+
model = convert_source()
|
68
|
+
|
69
|
+
go_data_filename = "go.xml"
|
70
|
+
|
71
|
+
error = model.sanity_check
|
72
|
+
if error.empty?
|
73
|
+
validation_errors = model.validate
|
74
|
+
|
75
|
+
if validation_errors.empty?
|
76
|
+
model.serialize_to_file(go_data_filename)
|
77
|
+
puts "Source has been been converted into '#{go_data_filename}'."
|
78
|
+
else
|
79
|
+
puts "Source could not be converted due to"
|
80
|
+
puts validation_errors
|
81
|
+
end
|
82
|
+
else
|
83
|
+
puts "Source could not be converted due to"
|
84
|
+
puts error
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
def source_path()
|
91
|
+
File.expand_path("../sources", File.dirname(__FILE__))
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
GoImportCommandLine.start(ARGV)
|
96
|
+
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require "csv"
|
2
|
+
module GoImport
|
3
|
+
module CsvHelper
|
4
|
+
|
5
|
+
# @example Detect column separator and transform to hashes
|
6
|
+
# hashes = GoImport::CsvHelper.text_to_hashes(text)
|
7
|
+
#
|
8
|
+
# @example Use specific column separator and transform to hashes
|
9
|
+
# column_separator = ','
|
10
|
+
# hashes = GoImport::CsvHelper.text_to_hashes(text, column_separator)
|
11
|
+
def self.text_to_hashes(text, column_separator = nil, row_separator = :auto, quote_char = '"')
|
12
|
+
if !text
|
13
|
+
raise "Missing text"
|
14
|
+
end
|
15
|
+
|
16
|
+
if !column_separator
|
17
|
+
column_separator = self.detect_col_sep text
|
18
|
+
end
|
19
|
+
|
20
|
+
rows = CSV.parse(text.strip,{:col_sep => column_separator,
|
21
|
+
:row_sep => row_separator, :quote_char => quote_char})
|
22
|
+
map = {}
|
23
|
+
first = rows.first
|
24
|
+
(0 .. first.length-1).each do |i|
|
25
|
+
map[i] = first[i]
|
26
|
+
end
|
27
|
+
rs = []
|
28
|
+
(1 .. rows.length-1).each do |i|
|
29
|
+
r={}
|
30
|
+
(0 .. map.length-1).each do |j|
|
31
|
+
r[map[j]] = rows[i][j]
|
32
|
+
end
|
33
|
+
rs.push(r)
|
34
|
+
end
|
35
|
+
return rs
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
def self.detect_col_sep(text)
|
40
|
+
firstline = text.split('\n').first
|
41
|
+
col_seps = [';','\t',',']
|
42
|
+
return col_seps.find do |c|
|
43
|
+
firstline.include? c
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module GoImport
|
2
|
+
class AlreadyAddedError < StandardError
|
3
|
+
end
|
4
|
+
|
5
|
+
class InvalidCustomFieldError < StandardError
|
6
|
+
end
|
7
|
+
|
8
|
+
class InvalidRelationError < StandardError
|
9
|
+
end
|
10
|
+
|
11
|
+
class InvalidValueError < StandardError
|
12
|
+
def initalize(value)
|
13
|
+
super("#{value} is not a valid value.")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class InvalidDealStatusError < StandardError
|
18
|
+
end
|
19
|
+
|
20
|
+
class InvalidNoteClassificationError < StandardError
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module GoImport
|
2
|
+
# The ExcelHelper just makes it a little bit easier to open an
|
3
|
+
# excel file in the imports. With ExcelHelper you don't need to
|
4
|
+
# know anything about Roo and RooHelper.
|
5
|
+
class ExcelHelper
|
6
|
+
def self.Open(excel_filename)
|
7
|
+
return RooHelper.new(Roo::Excelx.new(excel_filename))
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|