rails_spreadsheet_reader 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- M2Y1MmFmMGEyMmQzYWY3OGE0ZDM3ZjkzNmI5YmViMzhhMDYxM2FjYg==
4
+ ODY3Y2JmNGUwZWQzMTdiMjEyZTFkMDBiNDVmNTEzY2VmZjdlNTUxNg==
5
5
  data.tar.gz: !binary |-
6
- NTJlNzBjZDE0NzMxY2JkMTc5Y2FhODdmZjk1OGI1NWM5MjAwMThkYg==
6
+ MDlkZjk2ODI0NmQ2NzkwMTU4YmNlMjk5NGI4MTE2YzlmN2E3NWFhNw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NzgxMzg5NDdlMTY4N2ZmYThiZTVjYWYwNDY0YTc4ODA1MzM1NzBjODNhNWEz
10
- MDUwMTE5ZDg0OWNhM2FhYmZjZTI0MDI4NGUxN2UyOGNkNmY0ZGU0ZWI3Njc4
11
- ZjQ0YmE3NTViYjUxZGFhZjg5ZjM2N2U1NjQ5MDY1M2UwZGU0Yjg=
9
+ YTNlMThjMGMxNWNkN2Y2NzNmY2I1YTEyMjJiYjdjNDI4ZThhMTdkMTQxOGM2
10
+ N2Q2YTVhYjQyNTg4MWNmMDhiZGZjYmRiNDNiYmMzYTM1ZDhiZmZlNzU3ZjNj
11
+ NGEyNTE3MmY5YjNmMmZmNWJkM2I2ZDBlN2JlMWUyZDNlMTg0YWM=
12
12
  data.tar.gz: !binary |-
13
- ZDk1M2YxMTc5YmNmYjhiYTQwYTY2YmM3ODU0NjVlZGEyMTQ0NGM4MDFhZDNm
14
- YWQzNmRkYjk3MGYwNmU1Yzc1Yzc4YThkYmU0NDZkZGIzNjM1ZTk1ODE4YzFj
15
- Yjk0YTI4MzYwMWUxMjkxMzY0ZTAyOGI4Y2QwMzJmMDI5Y2MwOTc=
13
+ ZmY4YzExZDIxNWQ2MjUzZmIwMGQ5N2M1NWU3MGRiNDY0Mjc0MTY2N2QzNGQ3
14
+ MzIxMmNjMzRiMjM5ZjAwNTY1OGVkYmIzOTZlNDNjMzY1ODAxNDQxMWU4MTEw
15
+ OTc0NTQ1MTJkZTRiN2FiYzhhZDM5ZmI2MzhhN2M2OWI5M2JlN2U=
@@ -20,7 +20,7 @@ class <%= @spreadsheet_name %>Spreadsheet < RailsSpreadsheetReader::Base
20
20
 
21
21
  # Returns 1 or more ActiveRecord classes where data will be saved
22
22
  def self.models
23
- <%= @models.count == 1 ? @models.first : @models.join(', ') %>
23
+ [<%= @models.count == 1 ? @models.first : @models.join(', ') %>]
24
24
  end
25
25
 
26
26
  # Map a spreadsheet instance to model parameters
@@ -31,8 +31,8 @@ class <%= @spreadsheet_name %>Spreadsheet < RailsSpreadsheetReader::Base
31
31
  <% end %>
32
32
 
33
33
  # Persist
34
- #def persist
35
- # Create or save your record. By default, it will use your methods
34
+ #def persist!!
35
+ # create! or save! your records. By default, it will use your methods
36
36
  # defined above (<%= @models.map{|m| m.downcase}.join(', ') %>)
37
37
  #end
38
38
 
@@ -37,14 +37,14 @@ module RailsSpreadsheetReader
37
37
  @last_record = record
38
38
  end
39
39
 
40
- def models
40
+ def self.models
41
41
  fail(
42
42
  MethodNotImplementedError,
43
43
  'Please implement this method in your class.'
44
44
  )
45
45
  end
46
46
 
47
- def persist
47
+ def persist!
48
48
  models = self.class.models.is_a?(Array) ? self.class.models : [self.class.models]
49
49
  models.each do |model|
50
50
  method_name = model.model_name.human.downcase
@@ -153,14 +153,16 @@ module RailsSpreadsheetReader
153
153
  # If any of validations fail ActiveRecord::RecordInvalid gets raised.
154
154
  # If any of the before_* callbacks return false the action is cancelled and save! raises ActiveRecord::RecordNotSaved.
155
155
  begin
156
- row.persist
156
+ row.persist!
157
157
  rescue ActiveRecord::RecordInvalid => e
158
158
  row.record_with_error = e.record
159
159
  collection.invalid_row = row
160
+ row.check_record_with_error
160
161
  rollback
161
162
  rescue ActiveRecord::RecordNotSaved => e
162
163
  row.model_with_error = e.record
163
164
  collection.invalid_row = row
165
+ row.check_record_with_error
164
166
  rollback
165
167
  end
166
168
  end
@@ -169,7 +171,11 @@ module RailsSpreadsheetReader
169
171
  end
170
172
 
171
173
  def self.open(spreadsheet_file)
172
- Roo::Spreadsheet.open(spreadsheet_file)
174
+ if spreadsheet_file.respond_to?(:original_filename)
175
+ Roo::Spreadsheet.open(spreadsheet_file.path, extension: File.extname(spreadsheet_file.original_filename).delete('.'))
176
+ else
177
+ Roo::Spreadsheet.open(spreadsheet_file)
178
+ end
173
179
  end
174
180
 
175
181
  # Read and validates the given #spreadsheet_file. Persistence is triggered
@@ -12,16 +12,12 @@ module RailsSpreadsheetReader
12
12
  self.rows << row
13
13
  end
14
14
 
15
+ def invalid_rows
16
+ rows.reject(&:valid?)
17
+ end
18
+
15
19
  def valid?
16
- valid = true
17
- rows.each do |row|
18
- if row.invalid?
19
- self.invalid_row = row
20
- valid = false
21
- break
22
- end
23
- end
24
- valid
20
+ invalid_rows.empty?
25
21
  end
26
22
 
27
23
  def invalid?
@@ -29,7 +25,7 @@ module RailsSpreadsheetReader
29
25
  end
30
26
 
31
27
  def errors
32
- invalid? ? self.invalid_row.errors : []
28
+ invalid? ? invalid_rows.map(&:errors).flatten : []
33
29
  end
34
30
 
35
31
  def each(&block)
@@ -1,3 +1,3 @@
1
1
  module RailsSpreadsheetReader
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -65,8 +65,8 @@ describe RailsSpreadsheetReader::Base do
65
65
  file = test_file 'users_invalid', :csv
66
66
  row_collection = UserSpreadsheet.read(file)
67
67
  expect(row_collection.valid?).to eq(false)
68
- expect(row_collection.invalid_row.row_number).to eq(2)
69
- expect(row_collection.errors.full_messages).to eq(["Email can't be blank"])
68
+ expect(row_collection.invalid_rows.first.row_number).to eq(2)
69
+ expect(row_collection.errors.first.full_messages).to eq(["Email can't be blank"])
70
70
  end
71
71
 
72
72
  it 'A row with an invalid record should be invalid' do
@@ -82,7 +82,7 @@ describe RailsSpreadsheetReader::Base do
82
82
  params.delete('id')
83
83
  expect(User.exists?(params)).to eq(false)
84
84
  row = UserSpreadsheet.new(params)
85
- row.persist
85
+ row.persist!
86
86
  expect(User.exists?(params)).to eq(true)
87
87
  end
88
88
 
@@ -92,7 +92,7 @@ describe RailsSpreadsheetReader::Base do
92
92
  UserSpreadsheet.headers
93
93
  UserSpreadsheet.models
94
94
  row = UserSpreadsheet.new(params)
95
- expect { row.persist }.to raise_error(ActiveRecord::RecordInvalid)
95
+ expect { row.persist! }.to raise_error(ActiveRecord::RecordInvalid)
96
96
  end
97
97
 
98
98
  it 'Should not save records to database when failing' do
@@ -131,7 +131,7 @@ describe RailsSpreadsheetReader::Base do
131
131
  file = test_file 'users_invalid', :csv
132
132
  result = UserInvalidSpreadsheet.read(file)
133
133
  expect(result.valid?).to eq(false)
134
- expect(result.invalid_row.errors[:username]).to eq(["Username already defined in excel at row 4"])
134
+ expect(result.invalid_rows.first.errors[:username]).to eq(["Username already defined in excel at row 4"])
135
135
  end
136
136
 
137
137
  end
@@ -19,7 +19,7 @@ class CustomPersistSpreadsheet < RailsSpreadsheetReader::Base
19
19
  { name: enterprise_name }
20
20
  end
21
21
 
22
- def persist
22
+ def persist!
23
23
  enterprise = Enterprise.find_or_create_by(name: enterprise_name)
24
24
  Employee.create!(name: enterprise_name, enterprise: enterprise)
25
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_spreadsheet_reader
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - muzk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-21 00:00:00.000000000 Z
11
+ date: 2016-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler