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 +8 -8
- data/lib/generators/rails/templates/spreadsheet.rb +3 -3
- data/lib/rails_spreadsheet_reader/base.rb +10 -4
- data/lib/rails_spreadsheet_reader/row_collection.rb +6 -10
- data/lib/rails_spreadsheet_reader/version.rb +1 -1
- data/spec/base_spec.rb +5 -5
- data/spec/spreadsheets/custom_persist_spreadsheet.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ODY3Y2JmNGUwZWQzMTdiMjEyZTFkMDBiNDVmNTEzY2VmZjdlNTUxNg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MDlkZjk2ODI0NmQ2NzkwMTU4YmNlMjk5NGI4MTE2YzlmN2E3NWFhNw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YTNlMThjMGMxNWNkN2Y2NzNmY2I1YTEyMjJiYjdjNDI4ZThhMTdkMTQxOGM2
|
10
|
+
N2Q2YTVhYjQyNTg4MWNmMDhiZGZjYmRiNDNiYmMzYTM1ZDhiZmZlNzU3ZjNj
|
11
|
+
NGEyNTE3MmY5YjNmMmZmNWJkM2I2ZDBlN2JlMWUyZDNlMTg0YWM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
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
|
-
#
|
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
|
-
|
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
|
-
|
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? ?
|
28
|
+
invalid? ? invalid_rows.map(&:errors).flatten : []
|
33
29
|
end
|
34
30
|
|
35
31
|
def each(&block)
|
data/spec/base_spec.rb
CHANGED
@@ -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.
|
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.
|
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.
|
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-
|
11
|
+
date: 2016-01-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|