ntq_excelsior 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
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