activerecord-import 0.4.1 → 0.5.0
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile +2 -0
- data/LICENSE +56 -0
- data/README.markdown +38 -0
- data/Rakefile +1 -1
- data/activerecord-import.gemspec +1 -0
- data/lib/activerecord-import.rb +2 -1
- data/lib/activerecord-import/active_record/adapters/jdbcpostgresql_adapter.rb +6 -0
- data/lib/activerecord-import/adapters/em_mysql2_adapter.rb +1 -1
- data/lib/activerecord-import/adapters/mysql2_adapter.rb +2 -2
- data/lib/activerecord-import/base.rb +10 -8
- data/lib/activerecord-import/em_mysql2.rb +1 -1
- data/lib/activerecord-import/import.rb +1 -1
- data/lib/activerecord-import/mysql.rb +1 -2
- data/lib/activerecord-import/mysql2.rb +1 -2
- data/lib/activerecord-import/postgresql.rb +1 -2
- data/lib/activerecord-import/sqlite3.rb +1 -2
- data/lib/activerecord-import/synchronize.rb +1 -0
- data/lib/activerecord-import/version.rb +1 -1
- data/test/adapters/jdbcpostgresql.rb +1 -0
- data/test/jdbcpostgresql/import_test.rb +6 -0
- data/test/support/active_support/test_case_extensions.rb +3 -3
- data/test/synchronize_test.rb +12 -1
- data/test/test_helper.rb +1 -1
- metadata +11 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d8742c99d2600b0f4e4c425ef0a427f46f5f220
|
4
|
+
data.tar.gz: 2c421e2f980400b03efc42f087bd68179edd5f78
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 092393e90fe7bebb3eed9a5c51aca467afe5b64d664d5b1888b25cc6b9c5e2cfdcdbd04505c736e22a4e8d40d9be0a5bd26f2c7f709213927d530f575b81d115
|
7
|
+
data.tar.gz: d130c2a565701477b2344599b267f0bc45f0f2e99f0bc88ac81e54f35b152993558d06340888a12a8245db963e51249b9885ba68d7532d01760c3c626e1f662f
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/LICENSE
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
|
2
|
+
You can redistribute it and/or modify it under either the terms of the
|
3
|
+
2-clause BSDL (see the file BSDL), or the conditions below:
|
4
|
+
|
5
|
+
1. You may make and give away verbatim copies of the source form of the
|
6
|
+
software without restriction, provided that you duplicate all of the
|
7
|
+
original copyright notices and associated disclaimers.
|
8
|
+
|
9
|
+
2. You may modify your copy of the software in any way, provided that
|
10
|
+
you do at least ONE of the following:
|
11
|
+
|
12
|
+
a) place your modifications in the Public Domain or otherwise
|
13
|
+
make them Freely Available, such as by posting said
|
14
|
+
modifications to Usenet or an equivalent medium, or by allowing
|
15
|
+
the author to include your modifications in the software.
|
16
|
+
|
17
|
+
b) use the modified software only within your corporation or
|
18
|
+
organization.
|
19
|
+
|
20
|
+
c) give non-standard binaries non-standard names, with
|
21
|
+
instructions on where to get the original software distribution.
|
22
|
+
|
23
|
+
d) make other distribution arrangements with the author.
|
24
|
+
|
25
|
+
3. You may distribute the software in object code or binary form,
|
26
|
+
provided that you do at least ONE of the following:
|
27
|
+
|
28
|
+
a) distribute the binaries and library files of the software,
|
29
|
+
together with instructions (in the manual page or equivalent)
|
30
|
+
on where to get the original distribution.
|
31
|
+
|
32
|
+
b) accompany the distribution with the machine-readable source of
|
33
|
+
the software.
|
34
|
+
|
35
|
+
c) give non-standard binaries non-standard names, with
|
36
|
+
instructions on where to get the original software distribution.
|
37
|
+
|
38
|
+
d) make other distribution arrangements with the author.
|
39
|
+
|
40
|
+
4. You may modify and include the part of the software into any other
|
41
|
+
software (possibly commercial). But some files in the distribution
|
42
|
+
are not written by the author, so that they are not under these terms.
|
43
|
+
|
44
|
+
For the list of those files and their copying conditions, see the
|
45
|
+
file LEGAL.
|
46
|
+
|
47
|
+
5. The scripts and library files supplied as input to or produced as
|
48
|
+
output from the software do not automatically fall under the
|
49
|
+
copyright of the software, but belong to whomever generated them,
|
50
|
+
and may be sold commercially, and may be aggregated with this
|
51
|
+
software.
|
52
|
+
|
53
|
+
6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
54
|
+
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
55
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
56
|
+
PURPOSE.
|
data/README.markdown
CHANGED
@@ -18,6 +18,44 @@ Use activerecord-import 0.2.11. As of activerecord-import 0.3.0 we are relying o
|
|
18
18
|
|
19
19
|
For more information on activerecord-import please see its wiki: https://github.com/zdennis/activerecord-import/wiki
|
20
20
|
|
21
|
+
## Additional Adapters
|
22
|
+
Additional adapters can be provided by gems external to activerecord-import by providing an adapter that matches the naming convention setup by activerecord-import (and subsequently activerecord) for dynamically loading adapters. This involves also providing a folder on the load path that follows the activerecord-import naming convention to allow activerecord-import to dynamically load the file.
|
23
|
+
|
24
|
+
When `ActiveRecord::Import.require_adapter("fake_name")` is called the require will be:
|
25
|
+
|
26
|
+
```ruby
|
27
|
+
require 'activerecord-import/active_record/adapters/fake_name_adapter'
|
28
|
+
```
|
29
|
+
|
30
|
+
This allows an external gem to dyanmically add an adapter without the need to add any file/code to the core activerecord-import gem.
|
31
|
+
|
32
|
+
### Load Path Setup
|
33
|
+
To understand how rubygems loads code you can reference the following:
|
34
|
+
|
35
|
+
http://guides.rubygems.org/patterns/#loading_code
|
36
|
+
|
37
|
+
And an example of how active_record dynamically load adapters:
|
38
|
+
https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/connection_specification.rb
|
39
|
+
|
40
|
+
In summary, when a gem is loaded rubygems adds the `lib` folder of the gem to the global load path `$LOAD_PATH` so that all `require` lookups will not propegate through all of the folders on the load path. When a `require` is issued each folder on the `$LOAD_PATH` is checked for the file and/or folder referenced. This allows a gem (like activerecord-import) to define push the activerecord-import folder (or namespace) on the `$LOAD_PATH` and any adapters provided by activerecord-import will be found by rubygems when the require is issued.
|
41
|
+
|
42
|
+
If `fake_name` adapter is needed by a gem (potentially called `activerecord-import-fake_name`) then the folder structure should look as follows:
|
43
|
+
|
44
|
+
```bash
|
45
|
+
activerecord-import-fake_name/
|
46
|
+
|-- activerecord-import-fake_name.gemspec
|
47
|
+
|-- lib
|
48
|
+
| |-- activerecord-import-fake_name
|
49
|
+
| | |-- version.rb
|
50
|
+
| |-- activerecord-import
|
51
|
+
| | |-- active_record
|
52
|
+
| | | |-- adapters
|
53
|
+
| | | |-- fake_name_adapter.rb
|
54
|
+
|--activerecord-import-fake_name.rb
|
55
|
+
```
|
56
|
+
|
57
|
+
When rubygems pushes the `lib` folder onto the load path a `require` will now find `activerecord-import/active_record/adapters/fake_name_adapter` as it runs through the lookup process for a ruby file under that path in `$LOAD_PATH`
|
58
|
+
|
21
59
|
# License
|
22
60
|
|
23
61
|
This is licensed under the ruby license.
|
data/Rakefile
CHANGED
@@ -13,7 +13,7 @@ namespace :display do
|
|
13
13
|
end
|
14
14
|
task :default => ["display:notice"]
|
15
15
|
|
16
|
-
ADAPTERS = %w(mysql mysql2 em_mysql2 jdbcmysql postgresql sqlite3 seamless_database_pool mysqlspatial mysql2spatial spatialite postgis)
|
16
|
+
ADAPTERS = %w(mysql mysql2 em_mysql2 jdbcmysql jdbcpostgresql postgresql sqlite3 seamless_database_pool mysqlspatial mysql2spatial spatialite postgis)
|
17
17
|
ADAPTERS.each do |adapter|
|
18
18
|
namespace :test do
|
19
19
|
desc "Runs #{adapter} database tests."
|
data/activerecord-import.gemspec
CHANGED
@@ -7,6 +7,7 @@ Gem::Specification.new do |gem|
|
|
7
7
|
gem.summary = "Bulk-loading extension for ActiveRecord"
|
8
8
|
gem.description = "Extraction of the ActiveRecord::Base#import functionality from ar-extensions for Rails 3 and beyond"
|
9
9
|
gem.homepage = "http://github.com/zdennis/activerecord-import"
|
10
|
+
gem.license = "Ruby"
|
10
11
|
|
11
12
|
gem.files = `git ls-files`.split($\)
|
12
13
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
data/lib/activerecord-import.rb
CHANGED
@@ -10,7 +10,8 @@ end
|
|
10
10
|
|
11
11
|
ActiveSupport.on_load(:active_record_connection_established) do |connection_pool|
|
12
12
|
if !ActiveRecord.const_defined?(:Import) || !ActiveRecord::Import.respond_to?(:load_from_connection_pool)
|
13
|
-
require
|
13
|
+
require "activerecord-import/base"
|
14
14
|
end
|
15
|
+
|
15
16
|
ActiveRecord::Import.load_from_connection_pool connection_pool
|
16
17
|
end
|
@@ -3,7 +3,7 @@ require "active_record"
|
|
3
3
|
require "active_record/version"
|
4
4
|
|
5
5
|
module ActiveRecord::Import
|
6
|
-
AdapterPath =
|
6
|
+
AdapterPath = "activerecord-import/active_record/adapters"
|
7
7
|
|
8
8
|
def self.base_adapter(adapter)
|
9
9
|
case adapter
|
@@ -18,7 +18,11 @@ module ActiveRecord::Import
|
|
18
18
|
# Loads the import functionality for a specific database adapter
|
19
19
|
def self.require_adapter(adapter)
|
20
20
|
require File.join(AdapterPath,"/abstract_adapter")
|
21
|
-
|
21
|
+
begin
|
22
|
+
require File.join(AdapterPath,"/#{base_adapter(adapter)}_adapter")
|
23
|
+
rescue LoadError
|
24
|
+
# fallback
|
25
|
+
end
|
22
26
|
end
|
23
27
|
|
24
28
|
# Loads the import functionality for the passed in ActiveRecord connection
|
@@ -27,9 +31,7 @@ module ActiveRecord::Import
|
|
27
31
|
end
|
28
32
|
end
|
29
33
|
|
30
|
-
|
31
|
-
|
32
|
-
require
|
33
|
-
require
|
34
|
-
require this_dir.join("synchronize").to_s
|
35
|
-
require this_dir.join("value_sets_parser").to_s
|
34
|
+
require 'activerecord-import/import'
|
35
|
+
require 'activerecord-import/active_record/adapters/abstract_adapter'
|
36
|
+
require 'activerecord-import/synchronize'
|
37
|
+
require 'activerecord-import/value_sets_parser'
|
@@ -370,7 +370,7 @@ class ActiveRecord::Base
|
|
370
370
|
|
371
371
|
if supports_on_duplicate_key_update?
|
372
372
|
if options[:on_duplicate_key_update]
|
373
|
-
options[:on_duplicate_key_update] << key.to_sym if options[:on_duplicate_key_update].is_a?(Array)
|
373
|
+
options[:on_duplicate_key_update] << key.to_sym if options[:on_duplicate_key_update].is_a?(Array) && !options[:on_duplicate_key_update].include?(key.to_sym)
|
374
374
|
options[:on_duplicate_key_update][key.to_sym] = key.to_sym if options[:on_duplicate_key_update].is_a?(Hash)
|
375
375
|
else
|
376
376
|
options[:on_duplicate_key_update] = [ key.to_sym ]
|
@@ -44,6 +44,7 @@ module ActiveRecord # :nodoc:
|
|
44
44
|
instance.clear_association_cache
|
45
45
|
instance.instance_variable_set '@attributes', matched_instance.attributes
|
46
46
|
instance.instance_variable_set '@attributes_cache', {}
|
47
|
+
instance.changed_attributes.clear
|
47
48
|
# Since the instance now accurately reflects the record in
|
48
49
|
# the database, ensure that instance.persisted? is true.
|
49
50
|
instance.instance_variable_set '@new_record', false
|
@@ -0,0 +1 @@
|
|
1
|
+
ENV["ARE_DB"] = "jdbcpostgresql"
|
@@ -0,0 +1,6 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
+
|
3
|
+
#require File.expand_path(File.dirname(__FILE__) + '/../support/postgresql/assertions')
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + '/../support/postgresql/import_examples')
|
5
|
+
|
6
|
+
should_support_postgresql_import_functionality
|
@@ -47,10 +47,10 @@ class ActiveSupport::TestCase
|
|
47
47
|
alias_method :context, :describe
|
48
48
|
|
49
49
|
def let(name, &blk)
|
50
|
-
values = {}
|
51
50
|
define_method(name) do
|
52
|
-
|
53
|
-
|
51
|
+
instance_variable_name = "@__let_#{name}"
|
52
|
+
return instance_variable_get(instance_variable_name) if instance_variable_defined?(instance_variable_name)
|
53
|
+
instance_variable_set(instance_variable_name, instance_eval(&blk))
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
data/test/synchronize_test.rb
CHANGED
@@ -12,11 +12,22 @@ describe ".synchronize" do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
it "reloads data for the specified records" do
|
15
|
-
|
15
|
+
Topic.synchronize topics
|
16
16
|
|
17
17
|
actual_titles = topics.map(&:title)
|
18
18
|
assert_equal "#{titles[0]}_haha", actual_titles[0], "the first record was not correctly updated"
|
19
19
|
assert_equal "#{titles[1]}_haha", actual_titles[1], "the second record was not correctly updated"
|
20
20
|
assert_equal "#{titles[2]}_haha", actual_titles[2], "the third record was not correctly updated"
|
21
21
|
end
|
22
|
+
|
23
|
+
it "the synchronized records aren't dirty" do
|
24
|
+
# Update the in memory records so they're dirty
|
25
|
+
topics.each { |topic| topic.title = 'dirty title' }
|
26
|
+
|
27
|
+
Topic.synchronize topics
|
28
|
+
|
29
|
+
assert_equal false, topics[0].changed?, "the first record was dirty"
|
30
|
+
assert_equal false, topics[1].changed?, "the second record was dirty"
|
31
|
+
assert_equal false, topics[2].changed?, "the third record was dirty"
|
32
|
+
end
|
22
33
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-import
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zach Dennis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -49,6 +49,7 @@ files:
|
|
49
49
|
- .gitignore
|
50
50
|
- Brewfile
|
51
51
|
- Gemfile
|
52
|
+
- LICENSE
|
52
53
|
- README.markdown
|
53
54
|
- Rakefile
|
54
55
|
- activerecord-import.gemspec
|
@@ -72,6 +73,7 @@ files:
|
|
72
73
|
- lib/activerecord-import/active_record/adapters/abstract_adapter.rb
|
73
74
|
- lib/activerecord-import/active_record/adapters/em_mysql2_adapter.rb
|
74
75
|
- lib/activerecord-import/active_record/adapters/jdbcmysql_adapter.rb
|
76
|
+
- lib/activerecord-import/active_record/adapters/jdbcpostgresql_adapter.rb
|
75
77
|
- lib/activerecord-import/active_record/adapters/mysql2_adapter.rb
|
76
78
|
- lib/activerecord-import/active_record/adapters/mysql_adapter.rb
|
77
79
|
- lib/activerecord-import/active_record/adapters/postgresql_adapter.rb
|
@@ -95,6 +97,7 @@ files:
|
|
95
97
|
- lib/activerecord-import/version.rb
|
96
98
|
- test/adapters/em_mysql2.rb
|
97
99
|
- test/adapters/jdbcmysql.rb
|
100
|
+
- test/adapters/jdbcpostgresql.rb
|
98
101
|
- test/adapters/mysql.rb
|
99
102
|
- test/adapters/mysql2.rb
|
100
103
|
- test/adapters/mysql2spatial.rb
|
@@ -108,6 +111,7 @@ files:
|
|
108
111
|
- test/em_mysql2/import_test.rb
|
109
112
|
- test/import_test.rb
|
110
113
|
- test/jdbcmysql/import_test.rb
|
114
|
+
- test/jdbcpostgresql/import_test.rb
|
111
115
|
- test/models/book.rb
|
112
116
|
- test/models/group.rb
|
113
117
|
- test/models/topic.rb
|
@@ -133,7 +137,8 @@ files:
|
|
133
137
|
- test/value_sets_bytes_parser_test.rb
|
134
138
|
- test/value_sets_records_parser_test.rb
|
135
139
|
homepage: http://github.com/zdennis/activerecord-import
|
136
|
-
licenses:
|
140
|
+
licenses:
|
141
|
+
- Ruby
|
137
142
|
metadata: {}
|
138
143
|
post_install_message:
|
139
144
|
rdoc_options: []
|
@@ -151,13 +156,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
151
156
|
version: '0'
|
152
157
|
requirements: []
|
153
158
|
rubyforge_project:
|
154
|
-
rubygems_version: 2.
|
159
|
+
rubygems_version: 2.2.1
|
155
160
|
signing_key:
|
156
161
|
specification_version: 4
|
157
162
|
summary: Bulk-loading extension for ActiveRecord
|
158
163
|
test_files:
|
159
164
|
- test/adapters/em_mysql2.rb
|
160
165
|
- test/adapters/jdbcmysql.rb
|
166
|
+
- test/adapters/jdbcpostgresql.rb
|
161
167
|
- test/adapters/mysql.rb
|
162
168
|
- test/adapters/mysql2.rb
|
163
169
|
- test/adapters/mysql2spatial.rb
|
@@ -171,6 +177,7 @@ test_files:
|
|
171
177
|
- test/em_mysql2/import_test.rb
|
172
178
|
- test/import_test.rb
|
173
179
|
- test/jdbcmysql/import_test.rb
|
180
|
+
- test/jdbcpostgresql/import_test.rb
|
174
181
|
- test/models/book.rb
|
175
182
|
- test/models/group.rb
|
176
183
|
- test/models/topic.rb
|