import 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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