davidrichards-etl 0.0.6 → 0.0.7
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.
- data/VERSION.yml +1 -1
- data/lib/etl/active_record_loader.rb +48 -48
- metadata +2 -2
data/VERSION.yml
CHANGED
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
#
|
|
2
|
-
#
|
|
3
|
-
# #
|
|
4
|
-
# # sudo gem install ar-extensions
|
|
5
|
-
# #
|
|
6
|
-
# # See:
|
|
7
|
-
# # http://www.igvita.com/2007/07/11/efficient-updates-data-import-in-rails/
|
|
8
|
-
# # http://agilewebdevelopment.com/plugins/ar_extensions
|
|
9
|
-
# # http://www.continuousthinking.com/
|
|
1
|
+
# This is a base class that uses ETL and Zach Dennis' excellent ar-
|
|
2
|
+
# extensions gem. To get the gem, just:
|
|
10
3
|
#
|
|
11
|
-
#
|
|
12
|
-
# # create an array of arrays, with the first array as the header. The
|
|
13
|
-
# # header and data should only contain values in the table to be imported.
|
|
14
|
-
# # The data_frame gem (sudo gem install davidrichards-data_frame)
|
|
15
|
-
# # may make the transform a LOT easier to do if there is a lot of column
|
|
16
|
-
# # munging to do. Chris Wycoff's babel_icious gem will go a long way in
|
|
17
|
-
# # the transform if you have XML data you are working with
|
|
18
|
-
# # (sudo gem install cwycoff-babel_icious).
|
|
4
|
+
# sudo gem install ar-extensions
|
|
19
5
|
#
|
|
20
|
-
#
|
|
21
|
-
#
|
|
22
|
-
#
|
|
23
|
-
#
|
|
24
|
-
|
|
25
|
-
#
|
|
26
|
-
#
|
|
27
|
-
#
|
|
28
|
-
#
|
|
29
|
-
#
|
|
30
|
-
#
|
|
31
|
-
#
|
|
32
|
-
#
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
#
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
6
|
+
# See:
|
|
7
|
+
# http://www.igvita.com/2007/07/11/efficient-updates-data-import-in-rails/
|
|
8
|
+
# http://agilewebdevelopment.com/plugins/ar_extensions
|
|
9
|
+
# http://www.continuousthinking.com/
|
|
10
|
+
|
|
11
|
+
# To use this, 1) setup an extract to find the data, and 2) a transform to
|
|
12
|
+
# create an array of arrays, with the first array as the header. The
|
|
13
|
+
# header and data should only contain values in the table to be imported.
|
|
14
|
+
# The data_frame gem (sudo gem install davidrichards-data_frame)
|
|
15
|
+
# may make the transform a LOT easier to do if there is a lot of column
|
|
16
|
+
# munging to do. Chris Wycoff's babel_icious gem will go a long way in
|
|
17
|
+
# the transform if you have XML data you are working with
|
|
18
|
+
# (sudo gem install cwycoff-babel_icious).
|
|
19
|
+
|
|
20
|
+
class ActiveRecordLoader < ETL
|
|
21
|
+
|
|
22
|
+
after_transform :ensure_array_of_arrays
|
|
23
|
+
before_load :ensure_class_defined
|
|
24
|
+
before_load :assert_header
|
|
25
|
+
|
|
26
|
+
protected
|
|
27
|
+
|
|
28
|
+
def ensure_array_of_arrays
|
|
29
|
+
# Not 100% whether I process raw_data before or after this method. I think before.
|
|
30
|
+
data = @raw || @data
|
|
31
|
+
raise ArgumentError,
|
|
32
|
+
"Expecting transformed data to be an array of arays" unless
|
|
33
|
+
data.is_a?(Array) and data.first.is_a?(Array) and data.last.is_a?(Array)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def assert_header
|
|
37
|
+
@header ||= @data.shift
|
|
38
|
+
@header.symbolize_values!
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def ensure_class_defined
|
|
42
|
+
raise ArgumentError,
|
|
43
|
+
"Must provide a class to import to. Try #{self.to_a}.instance.options[:class] = ModelClassName" unless
|
|
44
|
+
self.options[:class]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def load
|
|
48
|
+
options[:class].import(@header, @data)
|
|
49
|
+
end
|
|
50
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: davidrichards-etl
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- David Richards
|
|
@@ -9,7 +9,7 @@ autorequire:
|
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
11
|
|
|
12
|
-
date: 2009-08-
|
|
12
|
+
date: 2009-08-15 00:00:00 -07:00
|
|
13
13
|
default_executable: etl
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|