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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4443b707f72d72748af1e8d5c728aef25ea2f7175704f653bebf2b1897ea1784
4
- data.tar.gz: 7fdc4700b25c1d5773638186fb5e22f2afd9fa956cf755a5f4c6eccf4fb4f5d3
3
+ metadata.gz: 2f5bdfecae33f17efa14aaac26fcfd4d2ebdc9e0117e5dc924e10c1b36022970
4
+ data.tar.gz: 8771fc83edec065d107912d57e45e8982a804c303ccea0b035bf206f2feaec51
5
5
  SHA512:
6
- metadata.gz: eb6b8a3fbe5ccf2ef25eb5ae3156e40c33fe8d3d67dda073b44a986fe0d4003e6a13ccd871868f2823259e06bd3b89a8c05fac433410927bdcd4337110aacdda
7
- data.tar.gz: d0e1c3218ca3f1d85d627a35e594772df18cbe87ba7d6af5e37ad4932c4bb2acfa5823896e6e62457286b9125aefa57435bcdb0f2d450e7ca7a494f68df74b48
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(line)
68
+ def detect_header_scheme
65
69
  return @header_scheme if @header_scheme
66
70
  @header_scheme = {}
67
- l = line.dup
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(line)
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
- raise "Primary key must be set for using the default find_or_initialize" unless self.class.primary_key
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
- status = {}
123
- return { status: :success } if record.save
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: record.errors.full_messages.join(", ") }
141
+ return { status: :error, errors: @errors.join(", ") }
126
142
  end
127
143
 
128
144
  def import(save: true, status_tracker: nil)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NtqExcelsior
4
- VERSION = "0.4.0"
4
+ VERSION = "0.4.1"
5
5
  end
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.0
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-24 00:00:00.000000000 Z
11
+ date: 2023-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: caxlsx