active_import 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -30,10 +30,12 @@ There are three Rake tasks that allow you to use a converter on a file:
30
30
 
31
31
  === Examples
32
32
 
33
- rake active_import:csv user.csv CONVERTER=User CONVERTER_OPTIONS="give_admin_access=true"
33
+ rake active_import:csv FILE=user.csv CONVERTER=User CONVERTER_OPTIONS="give_admin_access=true"
34
34
 
35
35
  In this case the file in db/active_import/user.csv would be run through the converter UserConverter. The options specified are available within the converter. In this case @options["give_admin_access"] will evaluate to true.
36
36
 
37
+ The FILE parameter is not strictly necessary in this case either as the default file name will be an underscored value of the name of the converter.
38
+
37
39
  == Seeding
38
40
 
39
41
  Seeding allows you to import several files through different model converters in a single command. It involves the creation of a .seed file. Each file goes on a single line and the options are separated by pipe symbols.
@@ -44,8 +46,15 @@ Seeding allows you to import several files through different model converters in
44
46
  user_info/roles.xls | Role
45
47
  user_info/permissions.xls | UserPermission
46
48
 
49
+ You could save this file as db/active_import/user_info.seed and run the command like this:
50
+
51
+ rake active_import:seed SET=user_info
52
+
47
53
  Note this will get the data files from a subdirectory: db/active_import/user_info. Also the top conversion uses options but as they are optional, the following two do not.
48
54
 
55
+ If you do not specify a set, the rake task will look for a set based on the current development environment: ie development.seed.
56
+
57
+
49
58
  == The Converter Class
50
59
 
51
60
  === Column Setup
data/lib/active_import.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require "active_import/import_csv"
2
2
  require "active_import/import_excel"
3
3
  require 'active_import/model_converter'
4
+ require 'active_import/seed'
4
5
 
5
6
  module ActiveImport
6
7
  class Railtie < ::Rails::Railtie
@@ -0,0 +1,50 @@
1
+ module ActiveImport
2
+ class Seed
3
+
4
+ def self.seed_from_file seed_file_name
5
+ seed_file = File.open(seed_file_name, "r")
6
+ seed_file.each_line do |seed_line|
7
+ unless (/^#/.match(seed_line))
8
+ seed_info = seed_line.split("|")
9
+ data_file_name = seed_info[0]
10
+ converter_name = seed_info[1]
11
+
12
+ unless data_file_name.nil? || converter_name.nil?
13
+ data_file_name = import_file_with_path data_file_name
14
+
15
+ if (File.exists? data_file_name)
16
+ converter_name.strip!
17
+ converter_options = process_converter_options seed_info[2]
18
+
19
+ puts "Importing from: #{data_file_name.cyan}"
20
+ puts "Using converter: #{converter_name.cyan}"
21
+ puts "Options: #{converter_options.to_s.cyan}"
22
+
23
+ model_converter = eval("#{converter_name.camelize}Converter.new")
24
+ model_converter.options = converter_options
25
+
26
+ import = nil
27
+ extension = File.extname(data_file_name).downcase.strip
28
+ case extension
29
+ when ".xls"
30
+ puts "Excel file detected".yellow
31
+ import = ActiveImport::ImportExcel.new(model_converter, data_file_name)
32
+ when ".xlsx"
33
+ puts "Excel(X) file detected".yellow
34
+ import = ActiveImport::ImportExcel.new(model_converter, data_file_name)
35
+ when ".csv"
36
+ puts "CSV file detected".yellow
37
+ import = ActiveImport::ImportCsv.new(model_converter, data_file_name)
38
+ else
39
+ puts "File type cannot be processed".red
40
+ end
41
+ parse(import, model_converter) unless import.nil?
42
+ else
43
+ puts "Skipping non existing file: #{data_file_name}".red
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -1,3 +1,3 @@
1
1
  module ActiveImport
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -4,7 +4,7 @@ class <%= @converter_name.camelize %>Converter < ActiveImport::ModelConverter
4
4
  def setup
5
5
  <% @attributes.each do |attribute| -%>
6
6
  <% unless ["id", "created_at", "updated_at"].include? attribute -%>
7
- add_column :<%= attribute %>, :match => "<%= attribute %>", :type => :<%= @model.columns_hash[attribute].type %>, :mandatory => true
7
+ add_column :<%= attribute %>, :match => "^<%= attribute %>$", :type => :<%= @model.columns_hash[attribute].type %>, :mandatory => true
8
8
  <% end -%>
9
9
  <% end -%>
10
10
  end
@@ -63,49 +63,6 @@ def parse(import, model_converter)
63
63
  end
64
64
 
65
65
  def seed_from_file(seed_file_name)
66
- seed_file = File.open(seed_file_name, "r")
67
- seed_file.each_line do |seed_line|
68
- unless (/^#/.match(seed_line))
69
- seed_info = seed_line.split("|")
70
- data_file_name = seed_info[0]
71
- converter_name = seed_info[1]
72
-
73
- unless data_file_name.nil? || converter_name.nil?
74
- data_file_name = import_file_with_path data_file_name
75
-
76
- if (File.exists? data_file_name)
77
- converter_name.strip!
78
- converter_options = process_converter_options seed_info[2]
79
-
80
- puts "Importing from: #{data_file_name.cyan}"
81
- puts "Using converter: #{converter_name.cyan}"
82
- puts "Options: #{converter_options.to_s.cyan}"
83
-
84
- model_converter = eval("#{converter_name.camelize}Converter.new")
85
- model_converter.options = converter_options
86
-
87
- import = nil
88
- extension = File.extname(data_file_name).downcase.strip
89
- case extension
90
- when ".xls"
91
- puts "Excel file detected".yellow
92
- import = ActiveImport::ImportExcel.new(model_converter, data_file_name)
93
- when ".xlsx"
94
- puts "Excel(X) file detected".yellow
95
- import = ActiveImport::ImportExcel.new(model_converter, data_file_name)
96
- when ".csv"
97
- puts "CSV file detected".yellow
98
- import = ActiveImport::ImportCsv.new(model_converter, data_file_name)
99
- else
100
- puts "File type cannot be processed".red
101
- end
102
- parse(import, model_converter) unless import.nil?
103
- else
104
- puts "Skipping non existing file: #{data_file_name}".red
105
- end
106
- end
107
- end
108
- end
109
66
  end
110
67
 
111
68
  namespace :active_import do
@@ -131,7 +88,7 @@ namespace :active_import do
131
88
  seed_file_name = File.join(Rails.root, "db", "active_import", "#{set}.seed")
132
89
  if File.exists?(seed_file_name)
133
90
  puts "Seeding from file: '#{seed_file_name.yellow}'"
134
- seed_from_file seed_file_name
91
+ ActiveImport::Seed.seed_from_file seed_file_name
135
92
  else
136
93
  puts "Cannot find seed file: '#{seed_file_name}'".red
137
94
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_import
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-01 00:00:00.000000000Z
12
+ date: 2012-04-16 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &70351188223760 !ruby/object:Gem::Requirement
16
+ requirement: &70129661763280 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70351188223760
24
+ version_requirements: *70129661763280
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: colorize
27
- requirement: &70351188223340 !ruby/object:Gem::Requirement
27
+ requirement: &70129661762220 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70351188223340
35
+ version_requirements: *70129661762220
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: roo
38
- requirement: &70351188222880 !ruby/object:Gem::Requirement
38
+ requirement: &70129661759880 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70351188222880
46
+ version_requirements: *70129661759880
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: sqlite3
49
- requirement: &70351188222460 !ruby/object:Gem::Requirement
49
+ requirement: &70129661758520 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70351188222460
57
+ version_requirements: *70129661758520
58
58
  description: ''
59
59
  email:
60
60
  - david.monagle@intrica.com.au
@@ -65,6 +65,7 @@ files:
65
65
  - lib/active_import/import_csv.rb
66
66
  - lib/active_import/import_excel.rb
67
67
  - lib/active_import/model_converter.rb
68
+ - lib/active_import/seed.rb
68
69
  - lib/active_import/version.rb
69
70
  - lib/active_import.rb
70
71
  - lib/generators/active_import/model_converter_generator.rb
@@ -119,7 +120,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
120
  version: '0'
120
121
  segments:
121
122
  - 0
122
- hash: -3536894334839617531
123
+ hash: 3899470936762174354
123
124
  required_rubygems_version: !ruby/object:Gem::Requirement
124
125
  none: false
125
126
  requirements:
@@ -128,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
129
  version: '0'
129
130
  segments:
130
131
  - 0
131
- hash: -3536894334839617531
132
+ hash: 3899470936762174354
132
133
  requirements: []
133
134
  rubyforge_project:
134
135
  rubygems_version: 1.8.6