jinx-migrate 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. data/.gitignore +14 -0
  2. data/.rspec +3 -0
  3. data/.yardopts +1 -0
  4. data/Gemfile +8 -0
  5. data/Gemfile.lock +38 -0
  6. data/History.md +6 -0
  7. data/LEGAL +5 -0
  8. data/LICENSE +22 -0
  9. data/README.md +33 -0
  10. data/Rakefile +40 -0
  11. data/bin/csvjoin +24 -0
  12. data/examples/family/README.md +24 -0
  13. data/examples/family/conf/children/fields.yaml +2 -0
  14. data/examples/family/conf/parents/defaults.yaml +3 -0
  15. data/examples/family/conf/parents/fields.yaml +6 -0
  16. data/examples/family/conf/parents/values.yaml +4 -0
  17. data/examples/family/data/children.csv +1 -0
  18. data/examples/family/data/parents.csv +1 -0
  19. data/examples/family/lib/shims.rb +17 -0
  20. data/jinx-migrate.gemspec +26 -0
  21. data/lib/jinx/csv/csvio.rb +214 -0
  22. data/lib/jinx/csv/joiner.rb +196 -0
  23. data/lib/jinx/migration/filter.rb +167 -0
  24. data/lib/jinx/migration/migratable.rb +244 -0
  25. data/lib/jinx/migration/migrator.rb +1029 -0
  26. data/lib/jinx/migration/reader.rb +16 -0
  27. data/lib/jinx/migration/version.rb +5 -0
  28. data/spec/bad/bad_spec.rb +25 -0
  29. data/spec/bad/fields.yaml +1 -0
  30. data/spec/bad/parents.csv +1 -0
  31. data/spec/bad/shims.rb +16 -0
  32. data/spec/csv/join/join_helper.rb +35 -0
  33. data/spec/csv/join/join_spec.rb +100 -0
  34. data/spec/csv/join/jumbled_src.csv +7 -0
  35. data/spec/csv/join/jumbled_tgt.csv +7 -0
  36. data/spec/csv/join/source.csv +7 -0
  37. data/spec/csv/join/target.csv +7 -0
  38. data/spec/extract/extract.rb +13 -0
  39. data/spec/extract/extract_spec.rb +33 -0
  40. data/spec/extract/fields.yaml +1 -0
  41. data/spec/extract/parents.csv +1 -0
  42. data/spec/family/child_spec.rb +27 -0
  43. data/spec/family/family.rb +13 -0
  44. data/spec/family/parent_spec.rb +57 -0
  45. data/spec/filter/fields.yaml +1 -0
  46. data/spec/filter/filter_spec.rb +20 -0
  47. data/spec/filter/parents.csv +1 -0
  48. data/spec/filter/values.yaml +4 -0
  49. data/spec/primitive/children.csv +1 -0
  50. data/spec/primitive/fields.yaml +4 -0
  51. data/spec/primitive/primitive_spec.rb +24 -0
  52. data/spec/skip/fields.yaml +1 -0
  53. data/spec/skip/parents.csv +1 -0
  54. data/spec/skip/skip_spec.rb +17 -0
  55. data/spec/spec_helper.rb +17 -0
  56. data/spec/support/model.rb +7 -0
  57. data/spec/unique/fields.yaml +1 -0
  58. data/spec/unique/parent.rb +6 -0
  59. data/spec/unique/parents.csv +1 -0
  60. data/spec/unique/shims.rb +10 -0
  61. data/spec/unique/unique_spec.rb +20 -0
  62. data/test/fixtures/csv/data/empty.csv +1 -0
  63. data/test/fixtures/csv/data/variety.csv +1 -0
  64. data/test/lib/csv/csvio_test.rb +74 -0
  65. metadata +206 -0
@@ -0,0 +1,4 @@
1
+ Name: Child.name
2
+ Flag: Child.flag
3
+ Cardinal: Child.cardinal
4
+ Decimal: Child.decimal
@@ -0,0 +1,24 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ module Model
4
+ describe 'Primitive' do
5
+ before(:all) do
6
+ # Migrate the input.
7
+ @migrated = Jinx::Migrator.new(:debug => true, :target => Child,
8
+ :mapping => File.expand_path('fields.yaml', File.dirname(__FILE__)),
9
+ :input => File.expand_path('children.csv', File.dirname(__FILE__))
10
+ ).to_a
11
+ end
12
+
13
+ it "should migrate the records" do
14
+ @migrated.size.should be 3
15
+ end
16
+
17
+ it "should capture the primitive fields" do
18
+ @migrated.first.name.should == 'Jane'
19
+ @migrated.first.flag.should be true
20
+ @migrated.first.cardinal.should be 1
21
+ @migrated.first.decimal.should == 2.2
22
+ end
23
+ end
24
+ end
@@ -0,0 +1 @@
1
+ Name: Parent.name
@@ -0,0 +1 @@
1
+ Name
@@ -0,0 +1,17 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ module Model
4
+ describe 'Skip' do
5
+ before(:all) do
6
+ @migrated = Jinx::Migrator.new(:debug => true, :target => Parent,
7
+ :mapping => File.expand_path('fields.yaml', File.dirname(__FILE__)),
8
+ :from => 2,
9
+ :input => File.expand_path('parents.csv', File.dirname(__FILE__))
10
+ ).to_a
11
+ end
12
+
13
+ it "should skip the first record" do
14
+ @migrated.size.should be 1
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ Bundler.require(:test, :development)
4
+
5
+ require 'jinx/migration/migrator'
6
+
7
+ # Open the logger.
8
+ Jinx::Log.instance.open(File.dirname(__FILE__) + '/../test/results/log/jinx.log', :debug => true)
9
+
10
+ module Migration
11
+ module Test
12
+ RESULTS = File.dirname(__FILE__) + '/../test/results'
13
+ end
14
+ end
15
+
16
+ # Add the support files.
17
+ Dir.glob(File.dirname(__FILE__) + '/support/**/*.rb').each { |f| require f }
@@ -0,0 +1,7 @@
1
+ # Load the jinx model example.
2
+ require Bundler.environment.specs.detect { |s| s.name == 'jinx' }.full_gem_path + '/spec/support/model'
3
+
4
+ # Make the test domain classes migratable
5
+ module Model
6
+ include Jinx::Migratable
7
+ end
@@ -0,0 +1 @@
1
+ Name: Parent.name
@@ -0,0 +1,6 @@
1
+ module Model
2
+ class Parent
3
+ # The name is the secondary key.
4
+ property :name, :secondary_key
5
+ end
6
+ end
@@ -0,0 +1 @@
1
+ Name
@@ -0,0 +1,10 @@
1
+ require 'jinx/resource/unique'
2
+
3
+ module Model
4
+ shims Parent
5
+
6
+ class Parent
7
+ # Make each Parent unique.
8
+ include Jinx::Unique
9
+ end
10
+ end
@@ -0,0 +1,20 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ module Model
4
+ describe 'Unique' do
5
+ # Add the parent metadata definition.
6
+ Model.definitions File.dirname(__FILE__)
7
+
8
+ # Migrate the input.
9
+ migrated = Jinx::Migrator.new(:debug => true, :target => Parent, :unique => true,
10
+ :shims => File.expand_path('shims.rb', File.dirname(__FILE__)),
11
+ :mapping => File.expand_path('fields.yaml', File.dirname(__FILE__)),
12
+ :input => File.expand_path('parents.csv', File.dirname(__FILE__))
13
+ ).to_a
14
+
15
+ # Validate the migration.
16
+ it "should make the secondary key unique" do
17
+ migrated.each { |p|p.name.should match /\w+_\d+/ }
18
+ end
19
+ end
20
+ end
@@ -0,0 +1 @@
1
+ One,Two
@@ -0,0 +1 @@
1
+ Id,String Field,Integer,Float,Date
@@ -0,0 +1,74 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ Bundler.require(:test, :development)
4
+
5
+ require 'jinx/migration/migrator'
6
+
7
+ # Open the logger.
8
+ Jinx::Log.instance.open(File.dirname(__FILE__) + '/../../results/log/jinx.log', :debug => true)
9
+
10
+ require 'test/unit'
11
+ require 'ftools'
12
+ require 'date'
13
+ require 'jinx/helpers/file_separator'
14
+ require 'jinx/csv/csvio'
15
+
16
+ class CsvIOTest < Test::Unit::TestCase
17
+ TEST_DIR = File.dirname(__FILE__) + '/../..'
18
+ FIXTURES_DIR = TEST_DIR + '/fixtures/csv/data'
19
+ OUTPUT_DIR = TEST_DIR + '/results/csv'
20
+
21
+ def setup
22
+ File.makedirs(OUTPUT_DIR)
23
+ end
24
+
25
+ def test_read
26
+ loader = Jinx::CsvIO.new(File.join(FIXTURES_DIR, 'variety.csv'))
27
+ loader.each do |row|
28
+ assert_not_nil(row[:id], "Missing id")
29
+ assert_not_nil(row[:string_field], "Missing string_field")
30
+ assert_not_nil(row[:integer], "Missing integer method")
31
+ assert(Integer === row[:integer], "Incorrect integer field value #{row[:integer]} type")
32
+ assert_not_nil(row[:float], "Missing float method")
33
+ assert(Float === row[:float], "Incorrect float field value #{row[:float]} type")
34
+ assert_not_nil(row[:date], "Missing date method")
35
+ assert_equal(Date, row[:date].class, "Incorrect date field value #{row[:date]} type")
36
+ end
37
+ end
38
+
39
+ def test_empty
40
+ loader = Jinx::CsvIO.new(File.join(FIXTURES_DIR, 'empty.csv'))
41
+ row = loader.shift
42
+ assert_nil(row[:one], "Missing value not nil")
43
+ assert_nil(row[:two], "Missing value not nil")
44
+ end
45
+
46
+ def test_accessor
47
+ loader = Jinx::CsvIO.new(File.join(FIXTURES_DIR, 'variety.csv'))
48
+ assert_equal(:id, loader.accessor('Id'), "Accessor incorrect")
49
+ assert_equal(:string_field, loader.accessor('String Field'), "Accessor incorrect")
50
+ end
51
+
52
+ def test_write
53
+ input = File.join(FIXTURES_DIR, 'variety.csv')
54
+ output = File.join(OUTPUT_DIR, 'variety.csv')
55
+ headers = records = nil
56
+ # Read the input file content.
57
+ File.open(input) do |file|
58
+ headers = file.readline.chomp.split(/,\s*/)
59
+ records = file.map { |line| line.chomp.split(/,\s*/) }
60
+ end
61
+ # Write the output file.
62
+ Jinx::CsvIO.open(output, :mode => 'w', :headers => headers) do |csvio|
63
+ records.each { |rec| csvio << rec }
64
+ end
65
+ # Compare the output to the input.
66
+ File.open(output) do |file|
67
+ assert_equal(headers, file.readline.chomp.split(/,\s*/), "Headers don't match")
68
+ file.each_with_index do |line, i|
69
+ rec = line.chomp.split(/,\s*/)
70
+ assert_equal(records[i], rec, "Line #{i.succ} doesn't match")
71
+ end
72
+ end
73
+ end
74
+ end
metadata ADDED
@@ -0,0 +1,206 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jinx-migrate
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 2.1.1
6
+ platform: ruby
7
+ authors:
8
+ - OHSU
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2012-04-13 00:00:00 -07:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rack
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0"
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: "0"
36
+ type: :runtime
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: fastercsv
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: rake
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ type: :development
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: rspec
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "2.6"
69
+ type: :development
70
+ version_requirements: *id005
71
+ description: Jinx JSON plug-in.. See github.com/jinx/migrate for more information.
72
+ email: jinx.ruby@gmail.com
73
+ executables:
74
+ - csvjoin
75
+ extensions: []
76
+
77
+ extra_rdoc_files: []
78
+
79
+ files:
80
+ - .gitignore
81
+ - .rspec
82
+ - .yardopts
83
+ - Gemfile
84
+ - Gemfile.lock
85
+ - History.md
86
+ - LEGAL
87
+ - LICENSE
88
+ - README.md
89
+ - Rakefile
90
+ - bin/csvjoin
91
+ - examples/family/README.md
92
+ - examples/family/conf/children/fields.yaml
93
+ - examples/family/conf/parents/defaults.yaml
94
+ - examples/family/conf/parents/fields.yaml
95
+ - examples/family/conf/parents/values.yaml
96
+ - examples/family/data/children.csv
97
+ - examples/family/data/parents.csv
98
+ - examples/family/lib/shims.rb
99
+ - jinx-migrate.gemspec
100
+ - lib/jinx/csv/csvio.rb
101
+ - lib/jinx/csv/joiner.rb
102
+ - lib/jinx/migration/filter.rb
103
+ - lib/jinx/migration/migratable.rb
104
+ - lib/jinx/migration/migrator.rb
105
+ - lib/jinx/migration/reader.rb
106
+ - lib/jinx/migration/version.rb
107
+ - spec/bad/bad_spec.rb
108
+ - spec/bad/fields.yaml
109
+ - spec/bad/parents.csv
110
+ - spec/bad/shims.rb
111
+ - spec/csv/join/join_helper.rb
112
+ - spec/csv/join/join_spec.rb
113
+ - spec/csv/join/jumbled_src.csv
114
+ - spec/csv/join/jumbled_tgt.csv
115
+ - spec/csv/join/source.csv
116
+ - spec/csv/join/target.csv
117
+ - spec/extract/extract.rb
118
+ - spec/extract/extract_spec.rb
119
+ - spec/extract/fields.yaml
120
+ - spec/extract/parents.csv
121
+ - spec/family/child_spec.rb
122
+ - spec/family/family.rb
123
+ - spec/family/parent_spec.rb
124
+ - spec/filter/fields.yaml
125
+ - spec/filter/filter_spec.rb
126
+ - spec/filter/parents.csv
127
+ - spec/filter/values.yaml
128
+ - spec/primitive/children.csv
129
+ - spec/primitive/fields.yaml
130
+ - spec/primitive/primitive_spec.rb
131
+ - spec/skip/fields.yaml
132
+ - spec/skip/parents.csv
133
+ - spec/skip/skip_spec.rb
134
+ - spec/spec_helper.rb
135
+ - spec/support/model.rb
136
+ - spec/unique/fields.yaml
137
+ - spec/unique/parent.rb
138
+ - spec/unique/parents.csv
139
+ - spec/unique/shims.rb
140
+ - spec/unique/unique_spec.rb
141
+ - test/fixtures/csv/data/empty.csv
142
+ - test/fixtures/csv/data/variety.csv
143
+ - test/lib/csv/csvio_test.rb
144
+ has_rdoc: yard
145
+ homepage: http://github.com/jinx/migrate
146
+ licenses:
147
+ - MIT
148
+ post_install_message:
149
+ rdoc_options: []
150
+
151
+ require_paths:
152
+ - lib
153
+ required_ruby_version: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: "0"
159
+ required_rubygems_version: !ruby/object:Gem::Requirement
160
+ none: false
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: "0"
165
+ requirements: []
166
+
167
+ rubyforge_project: jinx
168
+ rubygems_version: 1.5.1
169
+ signing_key:
170
+ specification_version: 3
171
+ summary: Jinx JSON plug-in.
172
+ test_files:
173
+ - spec/bad/bad_spec.rb
174
+ - spec/bad/fields.yaml
175
+ - spec/bad/parents.csv
176
+ - spec/bad/shims.rb
177
+ - spec/csv/join/join_helper.rb
178
+ - spec/csv/join/join_spec.rb
179
+ - spec/csv/join/jumbled_src.csv
180
+ - spec/csv/join/jumbled_tgt.csv
181
+ - spec/csv/join/source.csv
182
+ - spec/csv/join/target.csv
183
+ - spec/extract/extract.rb
184
+ - spec/extract/extract_spec.rb
185
+ - spec/extract/fields.yaml
186
+ - spec/extract/parents.csv
187
+ - spec/family/child_spec.rb
188
+ - spec/family/family.rb
189
+ - spec/family/parent_spec.rb
190
+ - spec/filter/fields.yaml
191
+ - spec/filter/filter_spec.rb
192
+ - spec/filter/parents.csv
193
+ - spec/filter/values.yaml
194
+ - spec/primitive/children.csv
195
+ - spec/primitive/fields.yaml
196
+ - spec/primitive/primitive_spec.rb
197
+ - spec/skip/fields.yaml
198
+ - spec/skip/parents.csv
199
+ - spec/skip/skip_spec.rb
200
+ - spec/spec_helper.rb
201
+ - spec/support/model.rb
202
+ - spec/unique/fields.yaml
203
+ - spec/unique/parent.rb
204
+ - spec/unique/parents.csv
205
+ - spec/unique/shims.rb
206
+ - spec/unique/unique_spec.rb