import 0.0.2 → 0.0.3

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/.gitignore CHANGED
@@ -1,7 +1,7 @@
1
1
  .bundle/
2
2
  log/*.log
3
3
  pkg/
4
- test/dummy/db/*.sqlite3
5
- test/dummy/config/database.yml
6
- test/dummy/log/*.log
7
- test/dummy/tmp/
4
+ spec/dummy/db/*.sqlite3
5
+ spec/dummy/config/database.yml
6
+ spec/dummy/log/*.log
7
+ spec/dummy/tmp/
data/Gemfile CHANGED
@@ -11,4 +11,6 @@ gemspec
11
11
  # your gem to rubygems.org.
12
12
 
13
13
  # To use debugger
14
- # gem 'ruby-debug19', :require => 'ruby-debug'
14
+ # gem 'ruby-debug19', :require => 'ruby-debug'
15
+
16
+ gem 'activerecord-import', :git => 'git@github.com:Applicat/activerecord-import.git'
@@ -1,7 +1,15 @@
1
+ GIT
2
+ remote: git@github.com:Applicat/activerecord-import.git
3
+ revision: b4d634d74c9fefa9a7a5fe1c6d3c46ea089bd7be
4
+ specs:
5
+ activerecord-import (0.2.9)
6
+ activerecord (~> 3.0pre)
7
+ activerecord (~> 3.0pre)
8
+
1
9
  PATH
2
10
  remote: .
3
11
  specs:
4
- import (0.0.2)
12
+ import (0.0.3)
5
13
  activerecord-import
6
14
  rails (~> 3.1.0)
7
15
  state_machine
@@ -34,9 +42,6 @@ GEM
34
42
  activesupport (= 3.1.0)
35
43
  arel (~> 2.2.1)
36
44
  tzinfo (~> 0.3.29)
37
- activerecord-import (0.2.8)
38
- activerecord (~> 3.0pre)
39
- activerecord (~> 3.0pre)
40
45
  activeresource (3.1.0)
41
46
  activemodel (= 3.1.0)
42
47
  activesupport (= 3.1.0)
@@ -62,7 +67,7 @@ GEM
62
67
  factory_girl (~> 2.1.0)
63
68
  railties (>= 3.0.0)
64
69
  ffi (1.0.9)
65
- guard (0.7.0)
70
+ guard (0.8.0)
66
71
  thor (~> 0.14.6)
67
72
  guard-rspec (0.4.5)
68
73
  guard (>= 0.4.0)
@@ -133,7 +138,7 @@ GEM
133
138
  sprockets (2.0.0)
134
139
  hike (~> 1.2)
135
140
  rack (~> 1.0)
136
- tilt (!= 1.3.0, ~> 1.1)
141
+ tilt (~> 1.1, != 1.3.0)
137
142
  state_machine (1.0.2)
138
143
  thor (0.14.6)
139
144
  tilt (1.3.3)
@@ -150,6 +155,7 @@ PLATFORMS
150
155
  ruby
151
156
 
152
157
  DEPENDENCIES
158
+ activerecord-import!
153
159
  capybara
154
160
  factory_girl_rails
155
161
  guard-rspec
@@ -4,15 +4,7 @@ Data entity importer for Ruby and asynchronous handling wrapped around activerec
4
4
 
5
5
  ## Usage
6
6
 
7
- Perform the installation as follows
8
-
9
- rails g import:install
10
-
11
- Run the installed migration
12
-
13
- rake db:migrate
14
-
15
- ## Changelog
7
+ https://github.com/Applicat/Import/wiki
16
8
 
17
9
  ## License
18
10
 
@@ -1,6 +1,9 @@
1
+ # encoding: UTF-8
2
+
1
3
  require 'state_machine'
2
4
  require File.dirname(__FILE__) + '/import/resource.rb'
3
5
  require File.dirname(__FILE__) + '/import/no_relation.rb'
6
+ require File.dirname(__FILE__) + '/import/importable.rb'
4
7
 
5
8
  module Import
6
9
  end
@@ -0,0 +1,14 @@
1
+ class ActiveRecord::Base
2
+ class << self
3
+ def find_existing_entries(criteria, values)
4
+ class_eval <<-EOV
5
+ find_by_sql(
6
+ [
7
+ "SELECT #{self.table_name}.id AS id, #{self.table_name}.name AS name FROM #{self.table_name} WHERE #{criteria}",
8
+ "#{values.join('", "')}"
9
+ ]
10
+ ).map{|a| [a.id, a.name]}
11
+ EOV
12
+ end
13
+ end
14
+ end
@@ -1,5 +1,8 @@
1
1
  module Import
2
- class NoRelation < Resource
2
+ class NoRelation < Resource
3
+ attr_accessible :logger, :input, :email, :resource_class
4
+ attr_accessor :resource_class
5
+
3
6
  protected
4
7
 
5
8
  def parse_resource(resource)
@@ -7,7 +10,7 @@ module Import
7
10
  end
8
11
 
9
12
  def append_existing_resources_criteria(resource)
10
- @existing_resources_criteria << "(#{table_name}.name = ?)"
13
+ @existing_resources_criteria << "(#{resource_class.table_name}.name = ?)"
11
14
  @existing_resources_criteria_values << resource
12
15
  end
13
16
 
@@ -4,20 +4,7 @@ module Import
4
4
 
5
5
  belongs_to :author, :class_name => 'User'
6
6
  belongs_to :parent, :polymorphic => true
7
-
8
- TYPES = [
9
- [I18n.t('imports.types.user_import'), 'Importer::User'],
10
- [I18n.t('imports.types.group_affiliation_import'), 'Importer::GroupAffiliation'],
11
- [I18n.t('imports.types.music_group_label_affiliation_import'), 'Importer::Music::GroupLabelAffiliation'],
12
- [I18n.t('imports.types.music_group_artist_affiliation_import'), 'Importer::Music::GroupArtistAffiliation'],
13
- [I18n.t('imports.types.music_group_release_affiliation_import'), 'Importer::Music::GroupReleaseAffiliation'],
14
- [I18n.t('imports.types.music_group_video_affiliation_import'), 'Importer::Music::GroupVideoAffiliation'],
15
- [I18n.t('imports.types.music_artist_import'), 'Importer::Music::Artist'],
16
- [I18n.t('imports.types.music_release_import'), 'Import::Music::Release']
17
- ]
18
- INDEX_COLUMNS = ['id', 'type', 'author_id', 'parent_type', 'parent_id']
19
7
 
20
- validates :type, :inclusion => { :in => TYPES.map(&:last) }
21
8
  validates :input, :presence => true
22
9
  validates_format_of :email, :with => /\A[^@]+@([^@\.]+\.)+[^@\.]+\z/, :allow_blank => true
23
10
 
@@ -70,10 +57,6 @@ module Import
70
57
  end
71
58
 
72
59
  def collection(force = true)
73
- unless resource_class.respond_to?(:find_existing_entries)
74
- raise I18n.t('imports.errors.derive_from_resource', :class_name => resource_class.class_name)
75
- end
76
-
77
60
  if force
78
61
  @existing_collection = find_existing_resources
79
62
  else
@@ -84,11 +67,11 @@ module Import
84
67
  protected
85
68
 
86
69
  def parse_resource(resource)
87
- raise I18n.t('imports.errors.override_parse_resource', :class_name => self.class_name)
70
+ raise I18n.t('imports.errors.override_parse_resource', :class_name => self.class.name)
88
71
  end
89
72
 
90
73
  def append_existing_resources_criteria(resource)
91
- raise I18n.t('imports.errors.override_append_existing_resources_criteria', :class_name => self.class_name)
74
+ raise I18n.t('imports.errors.override_append_existing_resources_criteria', :class_name => self.class.name)
92
75
  end
93
76
 
94
77
  def all_dependencies_loaded?
@@ -99,7 +82,7 @@ module Import
99
82
  end
100
83
 
101
84
  def import_resources
102
- raise I18n.t('imports.errors.override_import_resources', :class_name => self.class_name)
85
+ raise I18n.t('imports.errors.override_import_resources', :class_name => self.class.name)
103
86
  end
104
87
 
105
88
  def find_existing_resources
@@ -114,7 +97,7 @@ module Import
114
97
  end
115
98
 
116
99
  def parsed_resources_missing
117
- raise I18n.t('imports.errors.override_parsed_resources_missing', :class_name => self.class_name)
100
+ raise I18n.t('imports.errors.override_parsed_resources_missing', :class_name => self.class.name)
118
101
  end
119
102
 
120
103
  def resource_class
@@ -160,6 +143,7 @@ module Import
160
143
  if self.exception.blank?
161
144
  return true
162
145
  elsif self.parent_import_id.blank?
146
+ raise self.exception
163
147
  self.my_fail!
164
148
  return false
165
149
  else
@@ -1,3 +1,3 @@
1
1
  module Import
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -5,16 +5,4 @@ class Music::Artist < ActiveRecord::Base
5
5
  validates_uniqueness_of :name, :case_sensitive => false
6
6
 
7
7
  attr_accessible :name, :tag_list, :author_id
8
-
9
- # TODO: Move to Import::NoRelation
10
- def self.find_existing_entries(criteria, values)
11
- class_eval <<-EOV
12
- find_by_sql(
13
- [
14
- "SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE #{criteria}",
15
- "#{values.join('", "')}"
16
- ]
17
- ).map{|a| [a.id, a.name]}
18
- EOV
19
- end
20
8
  end
@@ -36,3 +36,203 @@
36
36
   (0.7ms) RELEASE SAVEPOINT active_record_1
37
37
  Music::Artist Load (3.8ms) SELECT `music_artists`.* FROM `music_artists` ORDER BY `music_artists`.`id` DESC LIMIT 1
38
38
   (8.4ms) ROLLBACK
39
+  (0.2ms) BEGIN
40
+  (0.2ms) SAVEPOINT active_record_1
41
+ SQL (0.5ms) INSERT INTO `imports` (`author_id`, `created_at`, `email`, `exception`, `input`, `parameters`, `parent_id`, `parent_type`, `state`, `type`, `updated_at`) VALUES (NULL, '2011-09-26 04:29:39', NULL, NULL, 'Paradise Lost', '--- {}\n', NULL, NULL, 'draft', 'Importer::Music::Artist', '2011-09-26 04:29:39')
42
+  (0.1ms) RELEASE SAVEPOINT active_record_1
43
+  (0.1ms) SAVEPOINT active_record_1
44
+ Music::Artist Load (0.3ms) SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE (music_artists.name = 'Paradise Lost')
45
+  (26.7ms) SHOW VARIABLES like 'max_allowed_packet';
46
+ Class Create Many Without Validations Or Callbacks (0.3ms) INSERT INTO `music_artists` (`name`,`created_at`,`updated_at`) VALUES ('Paradise Lost','2011-09-26 04:29:39','2011-09-26 04:29:39') ON DUPLICATE KEY UPDATE `music_artists`.`updated_at`=VALUES(`updated_at`)
47
+  (0.1ms) RELEASE SAVEPOINT active_record_1
48
+  (0.2ms) SAVEPOINT active_record_1
49
+  (0.6ms) UPDATE `imports` SET `state` = 'processed', `updated_at` = '2011-09-26 04:29:39', `parameters` = '--- {}\n' WHERE `imports`.`type` IN ('Importer::Music::Artist') AND `imports`.`id` = 10
50
+  (0.1ms) RELEASE SAVEPOINT active_record_1
51
+ Music::Artist Load (0.6ms) SELECT `music_artists`.* FROM `music_artists` ORDER BY `music_artists`.`id` DESC LIMIT 1
52
+  (36.9ms) ROLLBACK
53
+  (0.3ms) BEGIN
54
+  (0.2ms) SAVEPOINT active_record_1
55
+ SQL (0.5ms) INSERT INTO `imports` (`author_id`, `created_at`, `email`, `exception`, `input`, `parameters`, `parent_id`, `parent_type`, `state`, `type`, `updated_at`) VALUES (NULL, '2011-09-26 04:32:11', NULL, NULL, 'Paradise Lost', '--- {}\n', NULL, NULL, 'draft', 'Importer::Music::Artist', '2011-09-26 04:32:11')
56
+  (0.2ms) RELEASE SAVEPOINT active_record_1
57
+  (0.3ms) SAVEPOINT active_record_1
58
+ Music::Artist Load (1.5ms) SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE (music_artists.name = 'Paradise Lost')
59
+  (0.5ms) SHOW VARIABLES like 'max_allowed_packet';
60
+ Class Create Many Without Validations Or Callbacks (0.4ms) INSERT INTO `music_artists` (`name`,`created_at`,`updated_at`) VALUES ('Paradise Lost','2011-09-26 04:32:11','2011-09-26 04:32:11') ON DUPLICATE KEY UPDATE `music_artists`.`updated_at`=VALUES(`updated_at`)
61
+  (1.0ms) RELEASE SAVEPOINT active_record_1
62
+  (0.3ms) SAVEPOINT active_record_1
63
+  (0.6ms) UPDATE `imports` SET `state` = 'processed', `updated_at` = '2011-09-26 04:32:11', `parameters` = '--- {}\n' WHERE `imports`.`type` IN ('Importer::Music::Artist') AND `imports`.`id` = 11
64
+  (0.2ms) RELEASE SAVEPOINT active_record_1
65
+ Music::Artist Load (2.0ms) SELECT `music_artists`.* FROM `music_artists` ORDER BY `music_artists`.`id` DESC LIMIT 1
66
+  (29.1ms) ROLLBACK
67
+  (28.1ms) BEGIN
68
+  (0.2ms) SAVEPOINT active_record_1
69
+ SQL (87.5ms) INSERT INTO `imports` (`author_id`, `created_at`, `email`, `exception`, `input`, `parameters`, `parent_id`, `parent_type`, `state`, `type`, `updated_at`) VALUES (NULL, '2011-09-26 05:44:26', NULL, NULL, 'Paradise Lost', '--- {}\n', NULL, NULL, 'draft', 'Importer::Music::Artist', '2011-09-26 05:44:26')
70
+  (0.1ms) RELEASE SAVEPOINT active_record_1
71
+  (0.1ms) SAVEPOINT active_record_1
72
+ Music::Artist Load (15.1ms) SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE (music_artists.name = 'Paradise Lost')
73
+  (0.4ms) SHOW VARIABLES like 'max_allowed_packet';
74
+ Class Create Many Without Validations Or Callbacks (0.6ms) INSERT INTO `music_artists` (`name`,`created_at`,`updated_at`) VALUES ('Paradise Lost','2011-09-26 05:44:26','2011-09-26 05:44:26') ON DUPLICATE KEY UPDATE `music_artists`.`updated_at`=VALUES(`updated_at`)
75
+  (0.1ms) RELEASE SAVEPOINT active_record_1
76
+  (0.3ms) SAVEPOINT active_record_1
77
+  (25.8ms) UPDATE `imports` SET `state` = 'processed', `updated_at` = '2011-09-26 05:44:26', `parameters` = '--- {}\n' WHERE `imports`.`type` IN ('Importer::Music::Artist') AND `imports`.`id` = 12
78
+  (0.1ms) RELEASE SAVEPOINT active_record_1
79
+ Music::Artist Load (0.6ms) SELECT `music_artists`.* FROM `music_artists` ORDER BY `music_artists`.`id` DESC LIMIT 1
80
+  (26.3ms) ROLLBACK
81
+  (0.4ms) BEGIN
82
+  (0.2ms) SAVEPOINT active_record_1
83
+ SQL (49.7ms) INSERT INTO `imports` (`author_id`, `created_at`, `email`, `exception`, `input`, `parameters`, `parent_id`, `parent_type`, `state`, `type`, `updated_at`) VALUES (NULL, '2011-09-26 05:56:47', NULL, NULL, 'Paradise Lost', '--- {}\n', NULL, NULL, 'draft', 'Importer::Music::Artist', '2011-09-26 05:56:47')
84
+  (0.1ms) RELEASE SAVEPOINT active_record_1
85
+  (0.2ms) SAVEPOINT active_record_1
86
+ Music::Artist Load (64.2ms) SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE (music_artists.name = 'Paradise Lost')
87
+  (0.5ms) SHOW VARIABLES like 'max_allowed_packet';
88
+ Class Create Many Without Validations Or Callbacks (0.3ms) INSERT INTO `music_artists` (`name`,`created_at`,`updated_at`) VALUES ('Paradise Lost','2011-09-26 05:56:47','2011-09-26 05:56:47') ON DUPLICATE KEY UPDATE `music_artists`.`updated_at`=VALUES(`updated_at`)
89
+  (0.1ms) RELEASE SAVEPOINT active_record_1
90
+  (0.1ms) SAVEPOINT active_record_1
91
+  (2.6ms) UPDATE `imports` SET `state` = 'processed', `updated_at` = '2011-09-26 05:56:47', `parameters` = '--- {}\n' WHERE `imports`.`type` IN ('Importer::Music::Artist') AND `imports`.`id` = 13
92
+  (0.3ms) RELEASE SAVEPOINT active_record_1
93
+ Music::Artist Load (0.7ms) SELECT `music_artists`.* FROM `music_artists` ORDER BY `music_artists`.`id` DESC LIMIT 1
94
+  (41.6ms) ROLLBACK
95
+  (0.1ms) BEGIN
96
+  (0.1ms) SAVEPOINT active_record_1
97
+ SQL (0.4ms) INSERT INTO `imports` (`author_id`, `created_at`, `email`, `exception`, `input`, `parameters`, `parent_id`, `parent_type`, `state`, `type`, `updated_at`) VALUES (NULL, '2011-09-26 05:56:47', NULL, NULL, 'Böhse Onkelz', '--- {}\n', NULL, NULL, 'draft', 'Importer::Music::Artist', '2011-09-26 05:56:47')
98
+  (0.1ms) RELEASE SAVEPOINT active_record_1
99
+  (0.1ms) SAVEPOINT active_record_1
100
+ Music::Artist Load (0.4ms) SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE (music_artists.name = 'Böhse Onkelz')
101
+  (0.4ms) SHOW VARIABLES like 'max_allowed_packet';
102
+ Class Create Many Without Validations Or Callbacks (0.2ms) INSERT INTO `music_artists` (`name`,`created_at`,`updated_at`) VALUES ('Böhse Onkelz','2011-09-26 05:56:47','2011-09-26 05:56:47') ON DUPLICATE KEY UPDATE `music_artists`.`updated_at`=VALUES(`updated_at`)
103
+  (0.1ms) RELEASE SAVEPOINT active_record_1
104
+  (0.1ms) SAVEPOINT active_record_1
105
+  (0.5ms) UPDATE `imports` SET `state` = 'processed', `updated_at` = '2011-09-26 05:56:47', `parameters` = '--- {}\n' WHERE `imports`.`type` IN ('Importer::Music::Artist') AND `imports`.`id` = 14
106
+  (0.2ms) RELEASE SAVEPOINT active_record_1
107
+ Music::Artist Load (0.7ms) SELECT `music_artists`.* FROM `music_artists` ORDER BY `music_artists`.`id` DESC LIMIT 1
108
+  (75.0ms) ROLLBACK
109
+  (0.8ms) BEGIN
110
+  (0.2ms) SAVEPOINT active_record_1
111
+ SQL (0.5ms) INSERT INTO `imports` (`author_id`, `created_at`, `email`, `exception`, `input`, `parameters`, `parent_id`, `parent_type`, `state`, `type`, `updated_at`) VALUES (NULL, '2011-09-26 05:57:54', NULL, NULL, 'Böhse Onkelz', '--- {}\n', NULL, NULL, 'draft', 'Importer::Music::Artist', '2011-09-26 05:57:54')
112
+  (0.1ms) RELEASE SAVEPOINT active_record_1
113
+  (0.3ms) SAVEPOINT active_record_1
114
+ Music::Artist Load (0.4ms) SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE (music_artists.name = 'Böhse Onkelz')
115
+  (0.4ms) SHOW VARIABLES like 'max_allowed_packet';
116
+ Class Create Many Without Validations Or Callbacks (0.2ms) INSERT INTO `music_artists` (`name`,`created_at`,`updated_at`) VALUES ('Böhse Onkelz','2011-09-26 05:57:54','2011-09-26 05:57:54') ON DUPLICATE KEY UPDATE `music_artists`.`updated_at`=VALUES(`updated_at`)
117
+  (0.1ms) RELEASE SAVEPOINT active_record_1
118
+  (0.1ms) SAVEPOINT active_record_1
119
+  (0.5ms) UPDATE `imports` SET `state` = 'processed', `updated_at` = '2011-09-26 05:57:54', `parameters` = '--- {}\n' WHERE `imports`.`type` IN ('Importer::Music::Artist') AND `imports`.`id` = 15
120
+  (0.1ms) RELEASE SAVEPOINT active_record_1
121
+ Music::Artist Load (0.5ms) SELECT `music_artists`.* FROM `music_artists` ORDER BY `music_artists`.`id` DESC LIMIT 1
122
+  (0.2ms) SAVEPOINT active_record_1
123
+ SQL (0.6ms) INSERT INTO `imports` (`author_id`, `created_at`, `email`, `exception`, `input`, `parameters`, `parent_id`, `parent_type`, `state`, `type`, `updated_at`) VALUES (NULL, '2011-09-26 05:57:54', NULL, NULL, 'Böhse Onkelz', '--- {}\n', NULL, NULL, 'draft', 'Importer::Music::Artist', '2011-09-26 05:57:54')
124
+  (0.2ms) RELEASE SAVEPOINT active_record_1
125
+  (0.2ms) SAVEPOINT active_record_1
126
+ Music::Artist Load (21.3ms) SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE (music_artists.name = 'Böhse Onkelz')
127
+  (0.1ms) RELEASE SAVEPOINT active_record_1
128
+  (0.2ms) SAVEPOINT active_record_1
129
+  (0.8ms) UPDATE `imports` SET `state` = 'processed', `updated_at` = '2011-09-26 05:57:54', `parameters` = '--- {}\n' WHERE `imports`.`type` IN ('Importer::Music::Artist') AND `imports`.`id` = 16
130
+  (0.2ms) RELEASE SAVEPOINT active_record_1
131
+ Music::Artist Load (0.9ms) SELECT `music_artists`.* FROM `music_artists` ORDER BY `music_artists`.`id` DESC LIMIT 1
132
+  (20.1ms) SELECT COUNT(*) FROM `music_artists`
133
+  (3.9ms) ROLLBACK
134
+  (0.2ms) BEGIN
135
+  (0.3ms) SAVEPOINT active_record_1
136
+  (0.2ms) ROLLBACK TO SAVEPOINT active_record_1
137
+  (0.1ms) SAVEPOINT active_record_1
138
+ Music::Artist Load (0.5ms) SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE (no_relations.name = 'Böhse Onkelz')
139
+ Mysql2::Error: Unknown column 'no_relations.name' in 'where clause': SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE (no_relations.name = 'Böhse Onkelz')
140
+  (0.1ms) RELEASE SAVEPOINT active_record_1
141
+  (0.3ms) SAVEPOINT active_record_1
142
+  (0.2ms) ROLLBACK TO SAVEPOINT active_record_1
143
+  (0.0ms) ROLLBACK
144
+  (0.2ms) BEGIN
145
+  (0.2ms) SAVEPOINT active_record_1
146
+  (0.9ms) ROLLBACK TO SAVEPOINT active_record_1
147
+  (0.1ms) SAVEPOINT active_record_1
148
+ Music::Artist Load (0.5ms) SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE (no_relations.name = 'Böhse Onkelz')
149
+ Mysql2::Error: Unknown column 'no_relations.name' in 'where clause': SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE (no_relations.name = 'Böhse Onkelz')
150
+  (0.1ms) RELEASE SAVEPOINT active_record_1
151
+  (0.1ms) ROLLBACK
152
+  (0.2ms) BEGIN
153
+  (0.2ms) SAVEPOINT active_record_1
154
+  (0.2ms) ROLLBACK TO SAVEPOINT active_record_1
155
+  (0.1ms) SAVEPOINT active_record_1
156
+ Music::Artist Load (0.6ms) SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE (no_relations.name = 'Böhse Onkelz')
157
+ Mysql2::Error: Unknown column 'no_relations.name' in 'where clause': SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE (no_relations.name = 'Böhse Onkelz')
158
+  (0.1ms) RELEASE SAVEPOINT active_record_1
159
+  (0.1ms) ROLLBACK
160
+  (0.2ms) BEGIN
161
+  (0.1ms) SAVEPOINT active_record_1
162
+  (0.2ms) ROLLBACK TO SAVEPOINT active_record_1
163
+  (0.1ms) SAVEPOINT active_record_1
164
+ Music::Artist Load (1.8ms) SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE (music_artists.name = 'Böhse Onkelz')
165
+  (0.8ms) SHOW VARIABLES like 'max_allowed_packet';
166
+ Class Create Many Without Validations Or Callbacks (0.3ms) INSERT INTO `music_artists` (`name`,`created_at`,`updated_at`) VALUES ('Böhse Onkelz','2011-09-26 06:16:31','2011-09-26 06:16:31') ON DUPLICATE KEY UPDATE `music_artists`.`updated_at`=VALUES(`updated_at`)
167
+  (0.1ms) RELEASE SAVEPOINT active_record_1
168
+  (0.4ms) SAVEPOINT active_record_1
169
+  (0.2ms) ROLLBACK TO SAVEPOINT active_record_1
170
+ Music::Artist Load (0.7ms) SELECT `music_artists`.* FROM `music_artists` ORDER BY `music_artists`.`id` DESC LIMIT 1
171
+  (0.2ms) SAVEPOINT active_record_1
172
+  (0.2ms) ROLLBACK TO SAVEPOINT active_record_1
173
+  (0.1ms) SAVEPOINT active_record_1
174
+ Music::Artist Load (0.4ms) SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE (music_artists.name = 'Böhse Onkelz')
175
+  (0.1ms) RELEASE SAVEPOINT active_record_1
176
+  (1.4ms) SAVEPOINT active_record_1
177
+  (0.5ms) ROLLBACK TO SAVEPOINT active_record_1
178
+ Music::Artist Load (0.6ms) SELECT `music_artists`.* FROM `music_artists` ORDER BY `music_artists`.`id` DESC LIMIT 1
179
+  (0.3ms) SELECT COUNT(*) FROM `music_artists`
180
+  (31.6ms) ROLLBACK
181
+  (0.1ms) BEGIN
182
+  (0.2ms) SAVEPOINT active_record_1
183
+  (0.1ms) ROLLBACK TO SAVEPOINT active_record_1
184
+  (0.1ms) SAVEPOINT active_record_1
185
+  (0.1ms) RELEASE SAVEPOINT active_record_1
186
+  (0.1ms) ROLLBACK
187
+  (0.2ms) BEGIN
188
+  (0.3ms) SAVEPOINT active_record_1
189
+  (0.1ms) ROLLBACK TO SAVEPOINT active_record_1
190
+  (0.1ms) SAVEPOINT active_record_1
191
+  (0.1ms) RELEASE SAVEPOINT active_record_1
192
+  (0.1ms) ROLLBACK
193
+  (0.2ms) BEGIN
194
+  (0.1ms) SAVEPOINT active_record_1
195
+  (0.3ms) ROLLBACK TO SAVEPOINT active_record_1
196
+  (0.1ms) SAVEPOINT active_record_1
197
+ Music::Artist Load (0.5ms) SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE (music_artists.name = 'Böhse Onkelz')
198
+  (0.6ms) SHOW VARIABLES like 'max_allowed_packet';
199
+ Class Create Many Without Validations Or Callbacks (0.3ms) INSERT INTO `music_artists` (`name`,`created_at`,`updated_at`) VALUES ('Böhse Onkelz','2011-09-26 06:36:58','2011-09-26 06:36:58') ON DUPLICATE KEY UPDATE `music_artists`.`updated_at`=VALUES(`updated_at`)
200
+  (0.2ms) RELEASE SAVEPOINT active_record_1
201
+  (1.0ms) SAVEPOINT active_record_1
202
+  (0.3ms) ROLLBACK TO SAVEPOINT active_record_1
203
+ Music::Artist Load (0.6ms) SELECT `music_artists`.* FROM `music_artists` ORDER BY `music_artists`.`id` DESC LIMIT 1
204
+  (0.2ms) SAVEPOINT active_record_1
205
+  (0.3ms) ROLLBACK TO SAVEPOINT active_record_1
206
+  (1.6ms) SAVEPOINT active_record_1
207
+ Music::Artist Load (0.4ms) SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE (music_artists.name = 'Böhse Onkelz')
208
+  (0.1ms) RELEASE SAVEPOINT active_record_1
209
+  (0.1ms) SAVEPOINT active_record_1
210
+  (0.3ms) ROLLBACK TO SAVEPOINT active_record_1
211
+ Music::Artist Load (0.4ms) SELECT `music_artists`.* FROM `music_artists` ORDER BY `music_artists`.`id` DESC LIMIT 1
212
+  (0.2ms) SELECT COUNT(*) FROM `music_artists`
213
+  (4.8ms) ROLLBACK
214
+  (0.2ms) BEGIN
215
+  (0.3ms) SAVEPOINT active_record_1
216
+ SQL (1.5ms) INSERT INTO `imports` (`author_id`, `created_at`, `email`, `exception`, `input`, `parameters`, `parent_id`, `parent_type`, `state`, `type`, `updated_at`) VALUES (NULL, '2011-09-26 09:51:42', NULL, NULL, 'Böhse Onkelz', '--- {}\n', NULL, NULL, 'draft', 'Import::NoRelation', '2011-09-26 09:51:42')
217
+  (0.1ms) RELEASE SAVEPOINT active_record_1
218
+  (0.2ms) SAVEPOINT active_record_1
219
+ Music::Artist Load (0.4ms) SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE (music_artists.name = 'Böhse Onkelz')
220
+  (0.5ms) SHOW VARIABLES like 'max_allowed_packet';
221
+ Class Create Many Without Validations Or Callbacks (0.3ms) INSERT INTO `music_artists` (`name`,`created_at`,`updated_at`) VALUES ('Böhse Onkelz','2011-09-26 09:51:42','2011-09-26 09:51:42') ON DUPLICATE KEY UPDATE `music_artists`.`updated_at`=VALUES(`updated_at`)
222
+  (0.1ms) RELEASE SAVEPOINT active_record_1
223
+  (0.2ms) SAVEPOINT active_record_1
224
+  (34.5ms) UPDATE `imports` SET `state` = 'processed', `updated_at` = '2011-09-26 09:51:42', `parameters` = '--- {}\n' WHERE `imports`.`type` IN ('Import::NoRelation') AND `imports`.`id` = 17
225
+  (0.3ms) RELEASE SAVEPOINT active_record_1
226
+ Music::Artist Load (0.5ms) SELECT `music_artists`.* FROM `music_artists` ORDER BY `music_artists`.`id` DESC LIMIT 1
227
+  (1.2ms) SAVEPOINT active_record_1
228
+ SQL (0.4ms) INSERT INTO `imports` (`author_id`, `created_at`, `email`, `exception`, `input`, `parameters`, `parent_id`, `parent_type`, `state`, `type`, `updated_at`) VALUES (NULL, '2011-09-26 09:51:42', NULL, NULL, 'Böhse Onkelz', '--- {}\n', NULL, NULL, 'draft', 'Import::NoRelation', '2011-09-26 09:51:42')
229
+  (0.2ms) RELEASE SAVEPOINT active_record_1
230
+  (0.1ms) SAVEPOINT active_record_1
231
+ Music::Artist Load (0.4ms) SELECT music_artists.id AS id, music_artists.name AS name FROM music_artists WHERE (music_artists.name = 'Böhse Onkelz')
232
+  (0.1ms) RELEASE SAVEPOINT active_record_1
233
+  (1.1ms) SAVEPOINT active_record_1
234
+  (0.6ms) UPDATE `imports` SET `state` = 'processed', `updated_at` = '2011-09-26 09:51:42', `parameters` = '--- {}\n' WHERE `imports`.`type` IN ('Import::NoRelation') AND `imports`.`id` = 18
235
+  (0.2ms) RELEASE SAVEPOINT active_record_1
236
+ Music::Artist Load (0.5ms) SELECT `music_artists`.* FROM `music_artists` ORDER BY `music_artists`.`id` DESC LIMIT 1
237
+  (0.3ms) SELECT COUNT(*) FROM `music_artists`
238
+  (29.4ms) ROLLBACK
@@ -1,13 +1,18 @@
1
+ # encoding: utf-8
1
2
  require 'spec_helper'
2
3
 
3
4
  describe Import::NoRelation do
4
5
  it "should" do
5
- import = Importer::Music::Artist.new(:input => 'Paradise Lost')
6
-
7
- import.save
8
-
9
- import.process
6
+ 2.times do
7
+ import = Import::NoRelation.new(:resource_class => Music::Artist, :input => 'Böhse Onkelz')
8
+
9
+ import.save
10
+
11
+ import.process
12
+
13
+ Music::Artist.last.name.should == 'Böhse Onkelz'
14
+ end
10
15
 
11
- Music::Artist.last.name.should == 'Paradise Lost'
16
+ Music::Artist.count == 1
12
17
  end
13
18
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: 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:
@@ -13,7 +13,7 @@ date: 2011-09-26 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &77265660 !ruby/object:Gem::Requirement
16
+ requirement: &86102640 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.1.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *77265660
24
+ version_requirements: *86102640
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: valium
27
- requirement: &77264520 !ruby/object:Gem::Requirement
27
+ requirement: &86102240 !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: *77264520
35
+ version_requirements: *86102240
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: state_machine
38
- requirement: &77263130 !ruby/object:Gem::Requirement
38
+ requirement: &86101890 !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: *77263130
46
+ version_requirements: *86101890
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: activerecord-import
49
- requirement: &77262260 !ruby/object:Gem::Requirement
49
+ requirement: &86101490 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *77262260
57
+ version_requirements: *86101490
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: mysql2
60
- requirement: &77224380 !ruby/object:Gem::Requirement
60
+ requirement: &86100950 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *77224380
68
+ version_requirements: *86100950
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
- requirement: &77219270 !ruby/object:Gem::Requirement
71
+ requirement: &86100320 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 2.6.0
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *77219270
79
+ version_requirements: *86100320
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rspec-rails
82
- requirement: &77218520 !ruby/object:Gem::Requirement
82
+ requirement: &86099570 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *77218520
90
+ version_requirements: *86099570
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: capybara
93
- requirement: &77189070 !ruby/object:Gem::Requirement
93
+ requirement: &86095440 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *77189070
101
+ version_requirements: *86095440
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: factory_girl_rails
104
- requirement: &77186930 !ruby/object:Gem::Requirement
104
+ requirement: &86095050 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *77186930
112
+ version_requirements: *86095050
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: guard-rspec
115
- requirement: &77186210 !ruby/object:Gem::Requirement
115
+ requirement: &86094480 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *77186210
123
+ version_requirements: *86094480
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: sdoc
126
- requirement: &77185460 !ruby/object:Gem::Requirement
126
+ requirement: &86093920 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ! '>='
@@ -131,7 +131,7 @@ dependencies:
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *77185460
134
+ version_requirements: *86093920
135
135
  description: Data entity importer for Ruby and asynchronous handling wrapped around
136
136
  activerecord-import and featured by valium and state_machine.
137
137
  email:
@@ -152,6 +152,7 @@ files:
152
152
  - lib/generators/import/install/install_generator.rb
153
153
  - lib/generators/import/install/templates/migrations/1_create_imports.rb
154
154
  - lib/import.rb
155
+ - lib/import/importable.rb
155
156
  - lib/import/no_relation.rb
156
157
  - lib/import/resource.rb
157
158
  - lib/import/version.rb
@@ -166,14 +167,12 @@ files:
166
167
  - spec/dummy/app/helpers/application_helper.rb
167
168
  - spec/dummy/app/mailers/.gitkeep
168
169
  - spec/dummy/app/models/.gitkeep
169
- - spec/dummy/app/models/importer/music/artist.rb
170
170
  - spec/dummy/app/models/music/artist.rb
171
171
  - spec/dummy/app/views/layouts/application.html.erb
172
172
  - spec/dummy/config.ru
173
173
  - spec/dummy/config/application.rb
174
174
  - spec/dummy/config/boot.rb
175
175
  - spec/dummy/config/database.example.yml
176
- - spec/dummy/config/database.yml
177
176
  - spec/dummy/config/environment.rb
178
177
  - spec/dummy/config/environments/development.rb
179
178
  - spec/dummy/config/environments/production.rb
@@ -216,7 +215,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
216
215
  version: '0'
217
216
  segments:
218
217
  - 0
219
- hash: -456035567
218
+ hash: -444372351
220
219
  required_rubygems_version: !ruby/object:Gem::Requirement
221
220
  none: false
222
221
  requirements:
@@ -225,7 +224,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
225
224
  version: '0'
226
225
  segments:
227
226
  - 0
228
- hash: -456035567
227
+ hash: -444372351
229
228
  requirements: []
230
229
  rubyforge_project:
231
230
  rubygems_version: 1.8.5
@@ -1,2 +0,0 @@
1
- class Importer::Music::Artist < Import::NoRelation
2
- end
@@ -1,42 +0,0 @@
1
- # MySQL. Versions 4.1 and 5.0 are recommended.
2
- #
3
- # Install the MYSQL driver
4
- # gem install mysql2
5
- #
6
- # Ensure the MySQL gem is defined in your Gemfile
7
- # gem 'mysql2'
8
- #
9
- # And be sure to use new-style password hashing:
10
- # http://dev.mysql.com/doc/refman/5.0/en/old-client.html
11
- development:
12
- adapter: mysql2
13
- encoding: utf8
14
- reconnect: false
15
- database: dummy_import_development
16
- pool: 5
17
- username: root
18
- password: zero2005
19
- socket: /var/run/mysqld/mysqld.sock
20
-
21
- # Warning: The database defined as "test" will be erased and
22
- # re-generated from your development database when you run "rake".
23
- # Do not set this db to the same as development or production.
24
- test:
25
- adapter: mysql2
26
- encoding: utf8
27
- reconnect: false
28
- database: dummy_import_test
29
- pool: 5
30
- username: root
31
- password: zero2005
32
- socket: /var/run/mysqld/mysqld.sock
33
-
34
- production:
35
- adapter: mysql2
36
- encoding: utf8
37
- reconnect: false
38
- database: dummy_import_production
39
- pool: 5
40
- username: root
41
- password: zero2005
42
- socket: /var/run/mysqld/mysqld.sock