jinx-migrate 2.1.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.
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