rails_spreadsheet_reader 0.2.1 → 0.3.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 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