load_data_infile 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/load_data_infile.rb +12 -1
- data/spec/load_data_infile_spec.rb +21 -0
- data/spec/spec_helper.rb +1 -1
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/lib/load_data_infile.rb
CHANGED
@@ -3,6 +3,7 @@ require 'ostruct'
|
|
3
3
|
|
4
4
|
module LoadDataInfile
|
5
5
|
module MySql
|
6
|
+
mattr_accessor :load_data_infile_defaults
|
6
7
|
|
7
8
|
# Deletes all rows in table very fast, but without calling +destroy+ method
|
8
9
|
# nor any hooks.
|
@@ -29,6 +30,14 @@ module LoadDataInfile
|
|
29
30
|
end
|
30
31
|
|
31
32
|
# Load csv from a file using MySql's LOAD DATA INFILE
|
33
|
+
# You can set defaults for all these options using the accesor load_data_infile_defaults:
|
34
|
+
#
|
35
|
+
# class ActiveRecord::Base
|
36
|
+
# load_data_infile_defaults = {
|
37
|
+
# :ignore => 1
|
38
|
+
# }
|
39
|
+
# end
|
40
|
+
#
|
32
41
|
# For details see: http://dev.mysql.com/doc/refman/5.1/en/load-data.html
|
33
42
|
#
|
34
43
|
# Options:
|
@@ -51,7 +60,9 @@ module LoadDataInfile
|
|
51
60
|
# table :: [OPTIONAL] Table name. Defaults to quoted_table_name (won't work if used from an abstract class, e.g. ActiveRecord::Base')
|
52
61
|
# terminated_by :: [OPTIONAL] Character
|
53
62
|
# disable_keys :: [OPTIONAL] true or false. Defaults to true. Disables foreign keys while running the import.
|
54
|
-
def load_data_infile(
|
63
|
+
def load_data_infile(opt = {})
|
64
|
+
options = (load_data_infile_defaults || Hash.new).merge(opt)
|
65
|
+
|
55
66
|
disable_keys_option = !options.member?(:disable_keys) || options[:disable_keys]
|
56
67
|
|
57
68
|
c = Context.new
|
@@ -52,4 +52,25 @@ describe LoadDataInfile do
|
|
52
52
|
"field_c" => 24000
|
53
53
|
}]
|
54
54
|
end
|
55
|
+
|
56
|
+
it "can use defaults" do
|
57
|
+
ActiveRecord::Base.load_data_infile_defaults = {
|
58
|
+
:terminated_by => ",",
|
59
|
+
:columns => %w|id @field_a @field_b @field_c|,
|
60
|
+
:mappings => {
|
61
|
+
:field_a => "CONCAT('So ', @field_a)",
|
62
|
+
:field_b => "CONCAT('Much ', @field_b)",
|
63
|
+
:field_c => "@field_c * 10",
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
Thing.load_data_infile(:path => FIXTURE_WITHOUT_HEADERS)
|
68
|
+
|
69
|
+
Thing.all.map(&:attributes).should == [{
|
70
|
+
"id" => 61,
|
71
|
+
"field_a" => "So live",
|
72
|
+
"field_b" => "Much from",
|
73
|
+
"field_c" => 24000
|
74
|
+
}]
|
75
|
+
end
|
55
76
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
SPEC_PATH = File.dirname(__FILE__)
|
2
2
|
$LOAD_PATH.unshift(SPEC_PATH)
|
3
3
|
$LOAD_PATH.unshift(File.join(SPEC_PATH, '..', 'lib'))
|
4
|
-
require 'load_data_infile'
|
5
4
|
require 'spec'
|
6
5
|
require 'spec/autorun'
|
7
6
|
require 'rubygems'
|
8
7
|
require 'active_record'
|
8
|
+
require 'load_data_infile'
|
9
9
|
require 'active_record_helper'
|
10
10
|
require File.join(SPEC_PATH, "..", "rails", "init.rb")
|
11
11
|
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 4
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.4.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Emmanuel Oga
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-02-
|
17
|
+
date: 2010-02-25 00:00:00 -03:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|