datashift 0.1.0 → 0.2.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 (86) hide show
  1. data/.document +5 -5
  2. data/LICENSE.txt +26 -26
  3. data/README.markdown +305 -303
  4. data/README.rdoc +19 -19
  5. data/Rakefile +93 -93
  6. data/VERSION +1 -1
  7. data/datashift-0.1.0.gem +0 -0
  8. data/datashift.gemspec +152 -136
  9. data/lib/applications/jruby/jexcel_file.rb +408 -408
  10. data/lib/applications/jruby/word.rb +79 -79
  11. data/lib/datashift.rb +152 -152
  12. data/lib/datashift/exceptions.rb +11 -11
  13. data/lib/datashift/file_definitions.rb +353 -353
  14. data/lib/datashift/mapping_file_definitions.rb +87 -87
  15. data/lib/datashift/method_detail.rb +275 -275
  16. data/lib/datashift/method_dictionary.rb +209 -209
  17. data/lib/datashift/method_mapper.rb +90 -90
  18. data/lib/generators/csv_generator.rb +36 -36
  19. data/lib/generators/excel_generator.rb +122 -122
  20. data/lib/generators/generator_base.rb +13 -13
  21. data/lib/helpers/core_ext/to_b.rb +24 -24
  22. data/lib/helpers/spree_helper.rb +153 -155
  23. data/lib/java/poi-3.7/LICENSE +507 -507
  24. data/lib/java/poi-3.7/NOTICE +21 -21
  25. data/lib/java/poi-3.7/RELEASE_NOTES.txt +115 -115
  26. data/lib/loaders/csv_loader.rb +98 -98
  27. data/lib/loaders/excel_loader.rb +155 -155
  28. data/lib/loaders/loader_base.rb +420 -420
  29. data/lib/loaders/spreadsheet_loader.rb +136 -136
  30. data/lib/loaders/spree/image_loader.rb +63 -64
  31. data/lib/loaders/spree/product_loader.rb +248 -250
  32. data/public/spree/products/large/DEMO_001_ror_bag.jpeg +0 -0
  33. data/public/spree/products/large/DEMO_002_Powerstation.jpg +0 -0
  34. data/public/spree/products/large/DEMO_003_ror_mug.jpeg +0 -0
  35. data/public/spree/products/mini/DEMO_001_ror_bag.jpeg +0 -0
  36. data/public/spree/products/mini/DEMO_002_Powerstation.jpg +0 -0
  37. data/public/spree/products/mini/DEMO_003_ror_mug.jpeg +0 -0
  38. data/public/spree/products/original/DEMO_001_ror_bag.jpeg +0 -0
  39. data/public/spree/products/original/DEMO_002_Powerstation.jpg +0 -0
  40. data/public/spree/products/original/DEMO_003_ror_mug.jpeg +0 -0
  41. data/public/spree/products/product/DEMO_001_ror_bag.jpeg +0 -0
  42. data/public/spree/products/product/DEMO_002_Powerstation.jpg +0 -0
  43. data/public/spree/products/product/DEMO_003_ror_mug.jpeg +0 -0
  44. data/public/spree/products/small/DEMO_001_ror_bag.jpeg +0 -0
  45. data/public/spree/products/small/DEMO_002_Powerstation.jpg +0 -0
  46. data/public/spree/products/small/DEMO_003_ror_mug.jpeg +0 -0
  47. data/spec/csv_loader_spec.rb +30 -30
  48. data/spec/datashift_spec.rb +26 -26
  49. data/spec/db/migrate/20110803201325_create_test_bed.rb +85 -85
  50. data/spec/excel_exporter_spec.rb +78 -78
  51. data/spec/excel_generator_spec.rb +78 -78
  52. data/spec/excel_loader_spec.rb +223 -223
  53. data/spec/file_definitions.rb +141 -141
  54. data/spec/fixtures/ProjectsDefaults.yml +29 -29
  55. data/spec/fixtures/config/database.yml +27 -24
  56. data/spec/fixtures/datashift_Spree_db.sqlite +0 -0
  57. data/spec/fixtures/interact_models_db.sqlite +0 -0
  58. data/spec/fixtures/negative/SpreeProdMiss1Mandatory.csv +4 -4
  59. data/spec/fixtures/negative/SpreeProdMissManyMandatory.csv +4 -4
  60. data/spec/fixtures/spree/SpreeProducts.csv +4 -4
  61. data/spec/fixtures/spree/SpreeProductsMultiColumn.csv +4 -4
  62. data/spec/fixtures/spree/SpreeProductsSimple.csv +4 -4
  63. data/spec/fixtures/spree/SpreeProductsWithImages.csv +4 -0
  64. data/spec/fixtures/spree/SpreeZoneExample.csv +5 -5
  65. data/spec/fixtures/test_model_defs.rb +57 -57
  66. data/spec/loader_spec.rb +120 -120
  67. data/spec/method_dictionary_spec.rb +242 -242
  68. data/spec/method_mapper_spec.rb +41 -41
  69. data/spec/spec_helper.rb +116 -116
  70. data/spec/spree_generator_spec.rb +64 -64
  71. data/spec/spree_loader_spec.rb +324 -327
  72. data/spec/spree_method_mapping_spec.rb +214 -214
  73. data/tasks/config/seed_fu_product_template.erb +15 -15
  74. data/tasks/config/tidy_config.txt +12 -12
  75. data/tasks/db_tasks.rake +65 -65
  76. data/tasks/excel_generator.rake +78 -78
  77. data/tasks/file_tasks.rake +36 -36
  78. data/tasks/import/csv.rake +49 -49
  79. data/tasks/import/excel.rake +71 -71
  80. data/tasks/spree/image_load.rake +108 -108
  81. data/tasks/spree/product_loader.rake +43 -43
  82. data/tasks/word_to_seedfu.rake +166 -166
  83. data/test/helper.rb +18 -18
  84. data/test/test_interact.rb +7 -7
  85. metadata +22 -3
  86. data/spec/fixtures/interact_spree_db.sqlite +0 -0
@@ -1,13 +1,13 @@
1
- # Copyright:: (c) Autotelik Media Ltd 2011
2
- # Author :: Tom Statter
3
- # Date :: Aug 2010
4
- #
5
- # License:: Free, OpenSource... MIT ?
6
-
7
- # This is the best effort I've found so far to reduce the amount of MS cruft
8
- # to absolute minimum
9
- # ... but unfortunately these tags will NOT BE REMOVED completely - manual cleanup still required
10
-
11
- # TODO - add another ruby parse layer to strip these out completely
12
-
1
+ # Copyright:: (c) Autotelik Media Ltd 2011
2
+ # Author :: Tom Statter
3
+ # Date :: Aug 2010
4
+ #
5
+ # License:: Free, OpenSource... MIT ?
6
+
7
+ # This is the best effort I've found so far to reduce the amount of MS cruft
8
+ # to absolute minimum
9
+ # ... but unfortunately these tags will NOT BE REMOVED completely - manual cleanup still required
10
+
11
+ # TODO - add another ruby parse layer to strip these out completely
12
+
13
13
  new-empty-tags: o:smarttagtype, st1:placename, st1:place, st1:placetype
data/tasks/db_tasks.rake CHANGED
@@ -1,66 +1,66 @@
1
- # Author :: Tom Statter
2
- # Date :: Mar 2011
3
- #
4
- # License:: The MIT License (Free and OpenSource)
5
- #
6
- # About:: Additional Rake tasks useful when testing seeding DB via DataShift
7
- #
8
- namespace :autotelik do
9
-
10
- namespace :db do
11
-
12
- SYSTEM_TABLE_EXCLUSION_LIST = ['schema_migrations']
13
-
14
- desc "Purge the current database"
15
-
16
- task :purge, [:exclude_system_tables] => [:environment] do |t, args|
17
- require 'highline/import'
18
-
19
- if(RAILS_ENV == 'production')
20
- agree("WARNING: In Production database, REALLY PURGE ? [y]:")
21
- end
22
-
23
- config = ActiveRecord::Base.configurations[RAILS_ENV || 'development']
24
- case config['adapter']
25
- when "mysql", "jdbcmysql"
26
- ActiveRecord::Base.establish_connection(config)
27
- ActiveRecord::Base.connection.tables.each do |table|
28
- next if(args[:exclude_system_tables] && SYSTEM_TABLE_EXCLUSION_LIST.include?(table) )
29
- puts "purging table: #{table}"
30
- ActiveRecord::Base.connection.execute("TRUNCATE #{table}")
31
- end
32
- when "sqlite","sqlite3"
33
- dbfile = config["database"] || config["dbfile"]
34
- File.delete(dbfile) if File.exist?(dbfile)
35
- when "sqlserver"
36
- dropfkscript = "#{config["host"]}.#{config["database"]}.DP1".gsub(/\\/,'-')
37
- `osql -E -S #{config["host"]} -d #{config["database"]} -i db\\#{dropfkscript}`
38
- `osql -E -S #{config["host"]} -d #{config["database"]} -i db\\#{RAILS_ENV}_structure.sql`
39
- when "oci", "oracle"
40
- ActiveRecord::Base.establish_connection(config)
41
- ActiveRecord::Base.connection.structure_drop.split(";\n\n").each do |ddl|
42
- ActiveRecord::Base.connection.execute(ddl)
43
- end
44
- when "firebird"
45
- ActiveRecord::Base.establish_connection(config)
46
- ActiveRecord::Base.connection.recreate_database!
47
- else
48
- raise "Task not supported by '#{config["adapter"]}'"
49
- end
50
- end
51
-
52
- desc "Clear database and optional directories such as assets, then run db:seed"
53
- task :seed_again, [:assets] => [:environment] do |t, args|
54
-
55
- Rake::Task['autotelik:db:purge'].invoke( true ) # i.e ENV['exclude_system_tables'] = true
56
-
57
- if(args[:assets])
58
- assets = "#{Rails.root}/public/assets"
59
- FileUtils::rm_rf(assets) if(File.exists?(assets))
60
- end
61
-
62
- Rake::Task['db:seed'].invoke
63
- end
64
-
65
- end # db
1
+ # Author :: Tom Statter
2
+ # Date :: Mar 2011
3
+ #
4
+ # License:: The MIT License (Free and OpenSource)
5
+ #
6
+ # About:: Additional Rake tasks useful when testing seeding DB via DataShift
7
+ #
8
+ namespace :autotelik do
9
+
10
+ namespace :db do
11
+
12
+ SYSTEM_TABLE_EXCLUSION_LIST = ['schema_migrations']
13
+
14
+ desc "Purge the current database"
15
+
16
+ task :purge, [:exclude_system_tables] => [:environment] do |t, args|
17
+ require 'highline/import'
18
+
19
+ if(RAILS_ENV == 'production')
20
+ agree("WARNING: In Production database, REALLY PURGE ? [y]:")
21
+ end
22
+
23
+ config = ActiveRecord::Base.configurations[RAILS_ENV || 'development']
24
+ case config['adapter']
25
+ when "mysql", "jdbcmysql"
26
+ ActiveRecord::Base.establish_connection(config)
27
+ ActiveRecord::Base.connection.tables.each do |table|
28
+ next if(args[:exclude_system_tables] && SYSTEM_TABLE_EXCLUSION_LIST.include?(table) )
29
+ puts "purging table: #{table}"
30
+ ActiveRecord::Base.connection.execute("TRUNCATE #{table}")
31
+ end
32
+ when "sqlite","sqlite3"
33
+ dbfile = config["database"] || config["dbfile"]
34
+ File.delete(dbfile) if File.exist?(dbfile)
35
+ when "sqlserver"
36
+ dropfkscript = "#{config["host"]}.#{config["database"]}.DP1".gsub(/\\/,'-')
37
+ `osql -E -S #{config["host"]} -d #{config["database"]} -i db\\#{dropfkscript}`
38
+ `osql -E -S #{config["host"]} -d #{config["database"]} -i db\\#{RAILS_ENV}_structure.sql`
39
+ when "oci", "oracle"
40
+ ActiveRecord::Base.establish_connection(config)
41
+ ActiveRecord::Base.connection.structure_drop.split(";\n\n").each do |ddl|
42
+ ActiveRecord::Base.connection.execute(ddl)
43
+ end
44
+ when "firebird"
45
+ ActiveRecord::Base.establish_connection(config)
46
+ ActiveRecord::Base.connection.recreate_database!
47
+ else
48
+ raise "Task not supported by '#{config["adapter"]}'"
49
+ end
50
+ end
51
+
52
+ desc "Clear database and optional directories such as assets, then run db:seed"
53
+ task :seed_again, [:assets] => [:environment] do |t, args|
54
+
55
+ Rake::Task['autotelik:db:purge'].invoke( true ) # i.e ENV['exclude_system_tables'] = true
56
+
57
+ if(args[:assets])
58
+ assets = "#{Rails.root}/public/assets"
59
+ FileUtils::rm_rf(assets) if(File.exists?(assets))
60
+ end
61
+
62
+ Rake::Task['db:seed'].invoke
63
+ end
64
+
65
+ end # db
66
66
  end # autotelik
@@ -1,79 +1,79 @@
1
- # Copyright:: (c) Autotelik Media Ltd 2011
2
- # Author :: Tom Statter
3
- # Date :: Aug 2011
4
- # License:: MIT.
5
- #
6
- # REQUIRES: JRuby
7
- #
8
- # Usage::
9
- #
10
- # In Rakefile:
11
- #
12
- # require 'datashift'
13
- #
14
- # DataShift::load_tasks
15
- #
16
- # Cmd Line:
17
- #
18
- # => jruby -S rake datashift:generate:excel model=<active record class> result=<output_template.xls>
19
- #
20
- namespace :datashift do
21
- namespace :generate do
22
-
23
- desc "Generate a template .xls (Excel) file for a model"
24
-
25
- task :excel, [:model, :result] => [:environment] do |t, args|
26
-
27
- require 'excel_generator'
28
-
29
- # in familiar ruby style args seems to have been become empty using this new style for rake 0.9.2
30
- # whatever format i try, on both Win and OSX .. so had to revert back to ENV
31
- model = args[:model] || ENV['model']
32
- result = args[:result] || ENV['result']
33
-
34
- raise "USAGE: jruby -S rake datashift:generate:excel model=<Class> result=<file.xls>" unless(result)
35
- raise "ERROR: Cannot process without AR Model - please supply model=<Class>" unless(model)
36
-
37
- begin
38
- klass = Kernel.const_get(model)
39
- rescue NameError
40
- raise "ERROR: No such AR Model found - check valid model supplied via model=<Class>"
41
- end
42
-
43
- gen = DataShift::ExcelGenerator.new(result)
44
-
45
- gen.generate(klass)
46
- end
47
-
48
- end
49
-
50
- namespace :export do
51
-
52
- desc "Export active record data to .xls (Excel) file"
53
-
54
- task :excel, [:model, :result] => [:environment] do |t, args|
55
-
56
- require 'excel_generator'
57
-
58
- # in familiar ruby style args seems to have been become empty using this new style for rake 0.9.2
59
- # whatever format i try, on both Win and OSX .. so had to revert back to ENV
60
- model = ENV['model']
61
- result = ENV['result']
62
-
63
- raise "USAGE: jruby -S rake datashift:gen:excel model=<Class> result=<file.xls>" unless(result)
64
- raise "ERROR: Cannot process without AR Model - please supply model=<Class>" unless(model)
65
-
66
- begin
67
- klass = Kernel.const_get(model)
68
- rescue NameError
69
- raise "ERROR: No such AR Model found - check valid model supplied via model=<Class>"
70
- end
71
-
72
- gen = DataShift::ExcelGenerator.new(result)
73
-
74
- gen.export(klass.all)
75
- end
76
-
77
- end
78
-
1
+ # Copyright:: (c) Autotelik Media Ltd 2011
2
+ # Author :: Tom Statter
3
+ # Date :: Aug 2011
4
+ # License:: MIT.
5
+ #
6
+ # REQUIRES: JRuby
7
+ #
8
+ # Usage::
9
+ #
10
+ # In Rakefile:
11
+ #
12
+ # require 'datashift'
13
+ #
14
+ # DataShift::load_tasks
15
+ #
16
+ # Cmd Line:
17
+ #
18
+ # => jruby -S rake datashift:generate:excel model=<active record class> result=<output_template.xls>
19
+ #
20
+ namespace :datashift do
21
+ namespace :generate do
22
+
23
+ desc "Generate a template .xls (Excel) file for a model"
24
+
25
+ task :excel, [:model, :result] => [:environment] do |t, args|
26
+
27
+ require 'excel_generator'
28
+
29
+ # in familiar ruby style args seems to have been become empty using this new style for rake 0.9.2
30
+ # whatever format i try, on both Win and OSX .. so had to revert back to ENV
31
+ model = args[:model] || ENV['model']
32
+ result = args[:result] || ENV['result']
33
+
34
+ raise "USAGE: jruby -S rake datashift:generate:excel model=<Class> result=<file.xls>" unless(result)
35
+ raise "ERROR: Cannot process without AR Model - please supply model=<Class>" unless(model)
36
+
37
+ begin
38
+ klass = Kernel.const_get(model)
39
+ rescue NameError
40
+ raise "ERROR: No such AR Model found - check valid model supplied via model=<Class>"
41
+ end
42
+
43
+ gen = DataShift::ExcelGenerator.new(result)
44
+
45
+ gen.generate(klass)
46
+ end
47
+
48
+ end
49
+
50
+ namespace :export do
51
+
52
+ desc "Export active record data to .xls (Excel) file"
53
+
54
+ task :excel, [:model, :result] => [:environment] do |t, args|
55
+
56
+ require 'excel_generator'
57
+
58
+ # in familiar ruby style args seems to have been become empty using this new style for rake 0.9.2
59
+ # whatever format i try, on both Win and OSX .. so had to revert back to ENV
60
+ model = ENV['model']
61
+ result = ENV['result']
62
+
63
+ raise "USAGE: jruby -S rake datashift:gen:excel model=<Class> result=<file.xls>" unless(result)
64
+ raise "ERROR: Cannot process without AR Model - please supply model=<Class>" unless(model)
65
+
66
+ begin
67
+ klass = Kernel.const_get(model)
68
+ rescue NameError
69
+ raise "ERROR: No such AR Model found - check valid model supplied via model=<Class>"
70
+ end
71
+
72
+ gen = DataShift::ExcelGenerator.new(result)
73
+
74
+ gen.export(klass.all)
75
+ end
76
+
77
+ end
78
+
79
79
  end
@@ -1,37 +1,37 @@
1
- # Copyright:: (c) Autotelik Media Ltd 2011
2
- # Author :: Tom Statter
3
- # Date :: Feb 2011
4
- # License:: MIT
5
- #
6
- # Usage:: rake datashift:file_rename input=/blah image_load input=path_to_images
7
- #
8
- namespace :datashift do
9
-
10
- desc "copy or mv a folder of files, consistently renaming in the process"
11
- task :file_rename, :input, :offset, :prefix, :width, :commit, :mv do |t, args|
12
- raise "USAGE: rake file_rename input='C:\blah' [offset=n prefix='str' width=n]" unless args[:input] && File.exists?(args[:input])
13
- width = args[:width] || 2
14
-
15
- action = args[:mv] ? 'mv' : 'cp'
16
-
17
- cache = args[:input]
18
-
19
- if(File.exists?(cache) )
20
- puts "Renaming files from #{cache}"
21
- Dir.glob(File.join(cache, "*")) do |name|
22
- path, base_name = File.split(name)
23
- id = base_name.slice!(/\w+/)
24
-
25
- id = id.to_i + args[:offset].to_i if(args[:offset])
26
- id = "%0#{width}d" % id.to_i if(args[:width])
27
- id = args[:prefix] + id.to_s if(args[:prefix])
28
-
29
- destination = File.join(path, "#{id}#{base_name}")
30
- puts "ACTION: #{action} #{name} #{destination}"
31
-
32
- File.send( action, name, destination) if args[:commit]
33
- end
34
- end
35
- end
36
-
1
+ # Copyright:: (c) Autotelik Media Ltd 2011
2
+ # Author :: Tom Statter
3
+ # Date :: Feb 2011
4
+ # License:: MIT
5
+ #
6
+ # Usage:: rake datashift:file_rename input=/blah image_load input=path_to_images
7
+ #
8
+ namespace :datashift do
9
+
10
+ desc "copy or mv a folder of files, consistently renaming in the process"
11
+ task :file_rename, :input, :offset, :prefix, :width, :commit, :mv do |t, args|
12
+ raise "USAGE: rake file_rename input='C:\blah' [offset=n prefix='str' width=n]" unless args[:input] && File.exists?(args[:input])
13
+ width = args[:width] || 2
14
+
15
+ action = args[:mv] ? 'mv' : 'cp'
16
+
17
+ cache = args[:input]
18
+
19
+ if(File.exists?(cache) )
20
+ puts "Renaming files from #{cache}"
21
+ Dir.glob(File.join(cache, "*")) do |name|
22
+ path, base_name = File.split(name)
23
+ id = base_name.slice!(/\w+/)
24
+
25
+ id = id.to_i + args[:offset].to_i if(args[:offset])
26
+ id = "%0#{width}d" % id.to_i if(args[:width])
27
+ id = args[:prefix] + id.to_s if(args[:prefix])
28
+
29
+ destination = File.join(path, "#{id}#{base_name}")
30
+ puts "ACTION: #{action} #{name} #{destination}"
31
+
32
+ File.send( action, name, destination) if args[:commit]
33
+ end
34
+ end
35
+ end
36
+
37
37
  end
@@ -1,50 +1,50 @@
1
- # Copyright:: (c) Autotelik Media Ltd 2011
2
- # Author :: Tom Statter
3
- # Date :: Aug 2011
4
- # License:: MIT
5
- #
6
- # Usage::
7
- #
8
- # In Rakefile:
9
- #
10
- # require 'datashift'
11
- #
12
- # DataShift::load_tasks
13
- #
14
- # Cmd Line:
15
- #
16
- # => jruby -S rake datashift:import:csv model=<active record class> input=<file.csv>
17
- #
18
- namespace :datashift do
19
-
20
- namespace :import do
21
-
22
- desc "Populate a model's table in db with data from CSV file"
23
- task :csv, [:model, :loader, :input, :verbose] => [:environment] do |t, args|
24
-
25
- # in familiar ruby style args seems to have been become empty with rake 0.9.2 whatever i try
26
- # so had to revert back to ENV
27
- model = ENV['model']
28
- input = ENV['input']
29
-
30
- raise "USAGE: rake datashift:import:csv input=file.csv model=<Class>" unless(input)
31
- raise "ERROR: Cannot process without AR Model - please supply model=<Class>" unless(model)
32
- raise "ERROR: Could not find csv file #{args[:input]}" unless File.exists?(input)
33
-
34
- require 'csv_loader'
35
-
36
- begin
37
- klass = Kernel.const_get(model)
38
- rescue NameError
39
- raise "ERROR: No such AR Model found - check valid model supplied via model=<Class>"
40
- end
41
-
42
- puts "INFO: Using CSV loader"
43
-
44
- loader = DataShift::CsvLoader.new(klass)
45
-
46
- loader.perform_load(input)
47
- end
48
- end
49
-
1
+ # Copyright:: (c) Autotelik Media Ltd 2011
2
+ # Author :: Tom Statter
3
+ # Date :: Aug 2011
4
+ # License:: MIT
5
+ #
6
+ # Usage::
7
+ #
8
+ # In Rakefile:
9
+ #
10
+ # require 'datashift'
11
+ #
12
+ # DataShift::load_tasks
13
+ #
14
+ # Cmd Line:
15
+ #
16
+ # => jruby -S rake datashift:import:csv model=<active record class> input=<file.csv>
17
+ #
18
+ namespace :datashift do
19
+
20
+ namespace :import do
21
+
22
+ desc "Populate a model's table in db with data from CSV file"
23
+ task :csv, [:model, :loader, :input, :verbose] => [:environment] do |t, args|
24
+
25
+ # in familiar ruby style args seems to have been become empty with rake 0.9.2 whatever i try
26
+ # so had to revert back to ENV
27
+ model = ENV['model']
28
+ input = ENV['input']
29
+
30
+ raise "USAGE: rake datashift:import:csv input=file.csv model=<Class>" unless(input)
31
+ raise "ERROR: Cannot process without AR Model - please supply model=<Class>" unless(model)
32
+ raise "ERROR: Could not find csv file #{args[:input]}" unless File.exists?(input)
33
+
34
+ require 'csv_loader'
35
+
36
+ begin
37
+ klass = Kernel.const_get(model)
38
+ rescue NameError
39
+ raise "ERROR: No such AR Model found - check valid model supplied via model=<Class>"
40
+ end
41
+
42
+ puts "INFO: Using CSV loader"
43
+
44
+ loader = DataShift::CsvLoader.new(klass)
45
+
46
+ loader.perform_load(input)
47
+ end
48
+ end
49
+
50
50
  end