ntq_excelsior 0.4.0 → 0.4.1
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 +4 -4
- data/README.md +6 -1
- data/lib/ntq_excelsior/importer.rb +24 -8
- data/lib/ntq_excelsior/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2f5bdfecae33f17efa14aaac26fcfd4d2ebdc9e0117e5dc924e10c1b36022970
|
|
4
|
+
data.tar.gz: 8771fc83edec065d107912d57e45e8982a804c303ccea0b035bf206f2feaec51
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: af4d4102f6ab0ad3d2cd82e75c2cb98bd114b84b798b3736b8de5bb32029da9754e7f7b378533f8c849ad99c7339a5ea170f9e4f8127f0d97dbc0e72d0537cf1
|
|
7
|
+
data.tar.gz: b0e9d976d84e39e76f47e5c60ae21aa7194e54c66ab910cbc6d568d4d6d3773a4235edfdc8844310e1a4ebc37f1e361e3b241aea9bfe03e55bff7414835d88a6
|
data/README.md
CHANGED
|
@@ -87,7 +87,7 @@ send_data stream, type: 'application/xlsx', filename: "filename.xlsx"
|
|
|
87
87
|
```ruby
|
|
88
88
|
class UserImporter < NtqExcelsior::Importer
|
|
89
89
|
|
|
90
|
-
model_klass User
|
|
90
|
+
model_klass "User"
|
|
91
91
|
|
|
92
92
|
primary_key :id
|
|
93
93
|
|
|
@@ -112,6 +112,11 @@ class UserImporter < NtqExcelsior::Importer
|
|
|
112
112
|
end
|
|
113
113
|
end
|
|
114
114
|
end
|
|
115
|
+
|
|
116
|
+
importer = UserImporter.new
|
|
117
|
+
importer.file = file
|
|
118
|
+
result = importer.import
|
|
119
|
+
# { success_count: 2, error_lines: [] }
|
|
115
120
|
```
|
|
116
121
|
|
|
117
122
|
## Development
|
|
@@ -7,6 +7,10 @@ module NtqExcelsior
|
|
|
7
7
|
|
|
8
8
|
class << self
|
|
9
9
|
|
|
10
|
+
def autosave(value = nil)
|
|
11
|
+
@autosave ||= value
|
|
12
|
+
end
|
|
13
|
+
|
|
10
14
|
def spreadsheet_options(value = nil)
|
|
11
15
|
@spreadsheet_options ||= value
|
|
12
16
|
end
|
|
@@ -61,10 +65,10 @@ module NtqExcelsior
|
|
|
61
65
|
spreadsheet.sheet(spreadsheet.sheets[0]).parse(header_search: required_headers)
|
|
62
66
|
end
|
|
63
67
|
|
|
64
|
-
def detect_header_scheme
|
|
68
|
+
def detect_header_scheme
|
|
65
69
|
return @header_scheme if @header_scheme
|
|
66
70
|
@header_scheme = {}
|
|
67
|
-
l =
|
|
71
|
+
l = spreadsheet_data[0].dup
|
|
68
72
|
|
|
69
73
|
self.class.schema.each do |field, column_config|
|
|
70
74
|
header = column_config.is_a?(Hash) ? column_config[:header] : column_config
|
|
@@ -84,7 +88,7 @@ module NtqExcelsior
|
|
|
84
88
|
def parse_line(line)
|
|
85
89
|
parsed_line = {}
|
|
86
90
|
line.each do |header, value|
|
|
87
|
-
header_scheme = detect_header_scheme
|
|
91
|
+
header_scheme = detect_header_scheme
|
|
88
92
|
if header.to_s == self.class.primary_key.to_s
|
|
89
93
|
parsed_line[self.class.primary_key] = value
|
|
90
94
|
next
|
|
@@ -109,20 +113,32 @@ module NtqExcelsior
|
|
|
109
113
|
# id for default query in model
|
|
110
114
|
# line in case an override is needed to find correct record
|
|
111
115
|
def find_or_initialize_record(line)
|
|
112
|
-
|
|
116
|
+
return nil unless self.class.primary_key && self.class.model_klass
|
|
113
117
|
|
|
114
|
-
self.class.model_klass.find_or_initialize_by("#{self.class.primary_key}": line[self.class.primary_key.to_sym])
|
|
118
|
+
self.class.model_klass.constantize.find_or_initialize_by("#{self.class.primary_key}": line[self.class.primary_key.to_sym])
|
|
115
119
|
end
|
|
116
120
|
|
|
117
121
|
def import_line(line, save: true)
|
|
118
122
|
record = find_or_initialize_record(line)
|
|
123
|
+
@success = false
|
|
124
|
+
@action = nil
|
|
125
|
+
@errors = []
|
|
119
126
|
|
|
120
127
|
yield(record, line) if block_given?
|
|
121
128
|
|
|
122
|
-
|
|
123
|
-
|
|
129
|
+
if (self.class.autosave.nil? || self.class.autosave)
|
|
130
|
+
@action = record.persisted? ? 'update' : 'create'
|
|
131
|
+
if save
|
|
132
|
+
@success = record.save
|
|
133
|
+
else
|
|
134
|
+
@success = record.valid?
|
|
135
|
+
end
|
|
136
|
+
@errors = record.errors.full_messages.concat(@errors) if record.errors.any?
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
return { status: :success, action: @action } if @success
|
|
124
140
|
|
|
125
|
-
return { status: :error, errors:
|
|
141
|
+
return { status: :error, errors: @errors.join(", ") }
|
|
126
142
|
end
|
|
127
143
|
|
|
128
144
|
def import(save: true, status_tracker: nil)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ntq_excelsior
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kevin
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-02-
|
|
11
|
+
date: 2023-02-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: caxlsx
|