activerecord-import 0.1.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.
@@ -0,0 +1,17 @@
1
+ ActiveRecord::Schema.define do
2
+
3
+ create_table :books, :options=>'ENGINE=MyISAM', :force=>true do |t|
4
+ t.column :title, :string, :null=>false
5
+ t.column :publisher, :string, :null=>false, :default => 'Default Publisher'
6
+ t.column :author_name, :string, :null=>false
7
+ t.column :created_at, :datetime
8
+ t.column :created_on, :datetime
9
+ t.column :updated_at, :datetime
10
+ t.column :updated_on, :datetime
11
+ t.column :publish_date, :date
12
+ t.column :topic_id, :integer
13
+ t.column :for_sale, :boolean, :default => true
14
+ end
15
+ execute "ALTER TABLE books ADD FULLTEXT( `title`, `publisher`, `author_name` )"
16
+
17
+ end
@@ -0,0 +1,4 @@
1
+ class SchemaInfo < ActiveRecord::Base
2
+ set_table_name 'schema_info'
3
+ VERSION = 12
4
+ end
@@ -0,0 +1,13 @@
1
+ Factory.define :group do |m|
2
+ m.sequence(:order) { |n| "Order #{n}" }
3
+ end
4
+
5
+ Factory.define :invalid_topic, :class => "Topic" do |m|
6
+ m.sequence(:title){ |n| "Title #{n}"}
7
+ m.author_name nil
8
+ end
9
+
10
+ Factory.define :topic do |m|
11
+ m.sequence(:title){ |n| "Title #{n}"}
12
+ m.sequence(:author_name){ |n| "Author #{n}"}
13
+ end
@@ -0,0 +1,29 @@
1
+ class ActiveSupport::TestCase
2
+ def Build(*args)
3
+ n = args.shift if args.first.is_a?(Numeric)
4
+ factory = args.shift
5
+ factory_girl_args = args.shift || {}
6
+
7
+ if n
8
+ Array.new.tap do |collection|
9
+ n.times.each { collection << Factory.build(factory.to_s.singularize.to_sym, factory_girl_args) }
10
+ end
11
+ else
12
+ Factory.build(factory.to_s.singularize.to_sym, factory_girl_args)
13
+ end
14
+ end
15
+
16
+ def Generate(*args)
17
+ n = args.shift if args.first.is_a?(Numeric)
18
+ factory = args.shift
19
+ factory_girl_args = args.shift || {}
20
+
21
+ if n
22
+ Array.new.tap do |collection|
23
+ n.times.each { collection << Factory.create(factory.to_s.singularize.to_sym, factory_girl_args) }
24
+ end
25
+ else
26
+ Factory.create(factory.to_s.singularize.to_sym, factory_girl_args)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,55 @@
1
+ class ActiveSupport::TestCase
2
+ module MySQLAssertions
3
+ def self.extended(klass)
4
+ klass.instance_eval do
5
+ assertion(:should_not_update_created_at_on_timestamp_columns) do
6
+ Delorean.time_travel_to("5 minutes from now") do
7
+ perform_import
8
+ assert_equal @topic.created_at.to_i, updated_topic.created_at.to_i
9
+ assert_equal @topic.created_on.to_i, updated_topic.created_on.to_i
10
+ end
11
+ end
12
+
13
+ assertion(:should_update_updated_at_on_timestamp_columns) do
14
+ time = Chronic.parse("5 minutes from now")
15
+ Delorean.time_travel_to(time) do
16
+ perform_import
17
+ assert_equal time.to_i, updated_topic.updated_at.to_i
18
+ assert_equal time.to_i, updated_topic.updated_on.to_i
19
+ end
20
+ end
21
+
22
+ assertion(:should_not_update_timestamps) do
23
+ Delorean.time_travel_to("5 minutes from now") do
24
+ perform_import :timestamps => false
25
+ assert_equal @topic.created_at.to_i, updated_topic.created_at.to_i
26
+ assert_equal @topic.created_on.to_i, updated_topic.created_on.to_i
27
+ assert_equal @topic.updated_at.to_i, updated_topic.updated_at.to_i
28
+ assert_equal @topic.updated_on.to_i, updated_topic.updated_on.to_i
29
+ end
30
+ end
31
+
32
+ assertion(:should_not_update_fields_not_mentioned) do
33
+ assert_equal "John Doe", updated_topic.author_name
34
+ end
35
+
36
+ assertion(:should_update_fields_mentioned) do
37
+ perform_import
38
+ assert_equal "Book - 2nd Edition", updated_topic.title
39
+ assert_equal "johndoe@example.com", updated_topic.author_email_address
40
+ end
41
+
42
+ assertion(:should_update_fields_mentioned_with_hash_mappings) do
43
+ perform_import
44
+ assert_equal "johndoe@example.com", updated_topic.title
45
+ assert_equal "Book - 2nd Edition", updated_topic.author_email_address
46
+ end
47
+
48
+ assertion(:should_update_foreign_keys) do
49
+ perform_import
50
+ assert_equal 57, updated_topic.parent_id
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,119 @@
1
+ require 'pathname'
2
+ test_dir = Pathname.new File.dirname(__FILE__)
3
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
4
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
5
+
6
+ require "fileutils"
7
+ require "rubygems"
8
+
9
+ ENV["RAILS_ENV"] = "test"
10
+
11
+ require "bundler"
12
+ Bundler.setup
13
+
14
+ require "rails"
15
+ require "rails/test_help"
16
+ require "active_record/fixtures"
17
+ require "active_support/test_case"
18
+
19
+ require "delorean"
20
+
21
+ require "active_record"
22
+ require "logger"
23
+
24
+ require "ruby-debug"
25
+
26
+ # load test helpers
27
+ class MyApplication < Rails::Application ; end
28
+ adapter = ENV["ARE_DB"] || "sqlite3"
29
+
30
+ # load the library
31
+ require "activerecord-import/#{adapter}"
32
+
33
+ class ActiveSupport::TestCase
34
+ include ActiveRecord::TestFixtures
35
+ self.use_transactional_fixtures = true
36
+
37
+ class << self
38
+ def assertion(name, &block)
39
+ mc = class << self ; self ; end
40
+ mc.class_eval do
41
+ define_method(name) do
42
+ it(name, &block)
43
+ end
44
+ end
45
+ end
46
+
47
+ def asssertion_group(name, &block)
48
+ mc = class << self ; self ; end
49
+ mc.class_eval do
50
+ define_method(name, &block)
51
+ end
52
+ end
53
+
54
+ def macro(name, &block)
55
+ class_eval do
56
+ define_method(name, &block)
57
+ end
58
+ end
59
+
60
+ def describe(description, toplevel=nil, &blk)
61
+ text = toplevel ? description : "#{name} #{description}"
62
+ klass = Class.new(self)
63
+
64
+ klass.class_eval <<-RUBY_EVAL
65
+ def self.name
66
+ "#{text}"
67
+ end
68
+ RUBY_EVAL
69
+
70
+ # do not inherit test methods from the superclass
71
+ klass.class_eval do
72
+ instance_methods.grep(/^test.+/) do |method|
73
+ undef_method method
74
+ end
75
+ end
76
+
77
+ klass.instance_eval &blk
78
+ end
79
+ alias_method :context, :describe
80
+
81
+ def let(name, &blk)
82
+ values = {}
83
+ define_method(name) do
84
+ return values[name] if values.has_key?(name)
85
+ values[name] = instance_eval(&blk)
86
+ end
87
+ end
88
+
89
+ def it(description, &blk)
90
+ define_method("test: #{name} #{description}", &blk)
91
+ end
92
+ end
93
+
94
+ end
95
+
96
+ def describe(description, &blk)
97
+ ActiveSupport::TestCase.describe(description, true, &blk)
98
+ end
99
+
100
+ FileUtils.mkdir_p'log'
101
+ ActiveRecord::Base.logger = Logger.new("log/test.log")
102
+ ActiveRecord::Base.logger.level = Logger::DEBUG
103
+ ActiveRecord::Base.configurations["test"] = YAML.load(test_dir.join("database.yml").open)[adapter]
104
+ ActiveRecord::Base.establish_connection "test"
105
+
106
+ ActiveSupport::Notifications.subscribe(/active_record.sql/) do |event, _, _, _, hsh|
107
+ ActiveRecord::Base.logger.info hsh[:sql]
108
+ end
109
+
110
+ require "factory_girl"
111
+ Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each{ |file| require file }
112
+
113
+ # Load base/generic schema
114
+ require test_dir.join("schema/version")
115
+ require test_dir.join("schema/generic_schema")
116
+ adapter_schema = test_dir.join("schema/#{adapter}_schema.rb")
117
+ require adapter_schema if File.exists?(adapter_schema)
118
+
119
+ Dir[File.dirname(__FILE__) + "/models/*.rb"].each{ |file| require file }
metadata ADDED
@@ -0,0 +1,125 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: activerecord-import
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Zach Dennis
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-08-10 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ prerelease: false
23
+ version_requirements: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 7712042
29
+ segments:
30
+ - 3
31
+ - 0
32
+ - 0
33
+ - rc
34
+ version: 3.0.0.rc
35
+ requirement: *id001
36
+ name: rails
37
+ type: :runtime
38
+ description: Extraction of the ActiveRecord::Base#import functionality from ar-extensions for Rails 3 and beyond
39
+ email: zach.dennis@gmail.com
40
+ executables: []
41
+
42
+ extensions: []
43
+
44
+ extra_rdoc_files:
45
+ - README.markdown
46
+ files:
47
+ - README.markdown
48
+ - Rakefile
49
+ - VERSION
50
+ - lib/activerecord-import/active_record/adapters/abstract_adapter.rb
51
+ - lib/activerecord-import/active_record/adapters/mysql_adapter.rb
52
+ - lib/activerecord-import/active_record/adapters/postgresql_adapter.rb
53
+ - lib/activerecord-import/active_record/adapters/sqlite3_adapter.rb
54
+ - lib/activerecord-import/base.rb
55
+ - lib/activerecord-import/import.rb
56
+ - lib/activerecord-import/mysql.rb
57
+ - lib/activerecord-import/postgresql.rb
58
+ - lib/activerecord-import/sqlite3.rb
59
+ - test/active_record/connection_adapter_test.rb
60
+ - test/adapters/mysql.rb
61
+ - test/adapters/postgresql.rb
62
+ - test/adapters/sqlite3.rb
63
+ - test/import_test.rb
64
+ - test/models/book.rb
65
+ - test/models/group.rb
66
+ - test/models/topic.rb
67
+ - test/mysql/import_test.rb
68
+ - test/schema/generic_schema.rb
69
+ - test/schema/mysql_schema.rb
70
+ - test/schema/version.rb
71
+ - test/support/factories.rb
72
+ - test/support/generate.rb
73
+ - test/support/mysql/assertions.rb
74
+ - test/test_helper.rb
75
+ has_rdoc: true
76
+ homepage: http://github.com/zdennis/activerecord-import
77
+ licenses: []
78
+
79
+ post_install_message:
80
+ rdoc_options:
81
+ - --charset=UTF-8
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ hash: 3
90
+ segments:
91
+ - 0
92
+ version: "0"
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ hash: 3
99
+ segments:
100
+ - 0
101
+ version: "0"
102
+ requirements: []
103
+
104
+ rubyforge_project:
105
+ rubygems_version: 1.3.7
106
+ signing_key:
107
+ specification_version: 3
108
+ summary: Bulk-loading extension for ActiveRecord
109
+ test_files:
110
+ - test/active_record/connection_adapter_test.rb
111
+ - test/adapters/mysql.rb
112
+ - test/adapters/postgresql.rb
113
+ - test/adapters/sqlite3.rb
114
+ - test/import_test.rb
115
+ - test/models/book.rb
116
+ - test/models/group.rb
117
+ - test/models/topic.rb
118
+ - test/mysql/import_test.rb
119
+ - test/schema/generic_schema.rb
120
+ - test/schema/mysql_schema.rb
121
+ - test/schema/version.rb
122
+ - test/support/factories.rb
123
+ - test/support/generate.rb
124
+ - test/support/mysql/assertions.rb
125
+ - test/test_helper.rb