norairrecord 0.4.1 → 0.5.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 +4 -4
- data/lib/norairrecord/table.rb +31 -17
- data/lib/norairrecord/version.rb +1 -1
- data/norairrecord.gemspec +1 -0
- metadata +16 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2cc1ed8e5808c360702ca89d65b4edf2ea18c141177f7e20e8b3686abd21d3a7
|
|
4
|
+
data.tar.gz: ac03748843c779f8155505ec7b14ce4ad81e23c2149d7b95140cc46c234a9344
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ca69035951a3ec0b706a0567dbe12834540ae7c12ee30d68d178393c7a395a143aa0af50670b2af60d3ade4e9c31c59940ad0ef2bce0e6948048b4f30a6b2ab9
|
|
7
|
+
data.tar.gz: 6f4c50687a0817e221b2fd224319cc1fe7e7d6e70209c866dffdea742dec9b574cd7f62b80d6d601b8384bfbdbe8cd9bc04d5775dfce61b116d7991ee3f5d184
|
data/lib/norairrecord/table.rb
CHANGED
|
@@ -48,7 +48,7 @@ module Norairrecord
|
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
define_method("#{method_name}=".to_sym) do |value|
|
|
51
|
-
|
|
51
|
+
__set_field(options.fetch(:column), Array(value).map(&:id).reverse)
|
|
52
52
|
end
|
|
53
53
|
end
|
|
54
54
|
|
|
@@ -83,7 +83,7 @@ module Norairrecord
|
|
|
83
83
|
records(filter: formula, sort:).sort_by { |record| or_args.index(record.id) }
|
|
84
84
|
end
|
|
85
85
|
|
|
86
|
-
def
|
|
86
|
+
def _update(id, update_hash = {}, options = {})
|
|
87
87
|
# To avoid trying to update computed fields we *always* use PATCH
|
|
88
88
|
body = {
|
|
89
89
|
fields: update_hash,
|
|
@@ -100,19 +100,26 @@ module Norairrecord
|
|
|
100
100
|
end
|
|
101
101
|
end
|
|
102
102
|
|
|
103
|
-
def
|
|
104
|
-
new(
|
|
103
|
+
def _new(*args, **kwargs)
|
|
104
|
+
new(*args, **kwargs)
|
|
105
105
|
end
|
|
106
106
|
|
|
107
|
+
def _create(fields, options = {})
|
|
108
|
+
_new(fields).tap { |record| record._save(options) }
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
alias update _update
|
|
112
|
+
alias create _create
|
|
113
|
+
|
|
107
114
|
def new_with_subtype(fields, id:, created_at:)
|
|
108
115
|
if @subtype_column
|
|
109
116
|
clazz = self
|
|
110
117
|
st = @subtype_mapping[fields[@subtype_column]]
|
|
111
118
|
raise Norairrecord::UnknownTypeError, "#{fields[@subtype_column]}?????" if @subtype_strict && st.nil?
|
|
112
119
|
clazz = Kernel.const_get(st) if st
|
|
113
|
-
clazz.
|
|
120
|
+
clazz._new(fields, id:, created_at:)
|
|
114
121
|
else
|
|
115
|
-
self.
|
|
122
|
+
self._new(fields, id: id, created_at: created_at)
|
|
116
123
|
end
|
|
117
124
|
end
|
|
118
125
|
|
|
@@ -256,8 +263,8 @@ module Norairrecord
|
|
|
256
263
|
end
|
|
257
264
|
|
|
258
265
|
def upsert(fields, merge_fields, options = {})
|
|
259
|
-
record = batch_upsert([self.
|
|
260
|
-
record ?
|
|
266
|
+
record = batch_upsert([self._new(fields)], merge_fields, options)&.dig(:records, 0)
|
|
267
|
+
record ? _new(record) : nil
|
|
261
268
|
end
|
|
262
269
|
|
|
263
270
|
def batch_save(records)
|
|
@@ -297,7 +304,7 @@ module Norairrecord
|
|
|
297
304
|
fields[key]
|
|
298
305
|
end
|
|
299
306
|
|
|
300
|
-
def
|
|
307
|
+
def __set_field(key, value)
|
|
301
308
|
validate_key(key)
|
|
302
309
|
return if fields[key] == value # no-op
|
|
303
310
|
|
|
@@ -305,13 +312,15 @@ module Norairrecord
|
|
|
305
312
|
fields[key] = value
|
|
306
313
|
end
|
|
307
314
|
|
|
315
|
+
alias []= __set_field
|
|
316
|
+
|
|
308
317
|
def patch(updates = {}, options = {})
|
|
309
318
|
updates.reject! { |key, value| @fields[key] == value }
|
|
310
319
|
return @fields if updates.empty? # don't hit AT if we don't have real changes
|
|
311
|
-
@fields.merge!(self.class.
|
|
320
|
+
@fields.merge!(self.class._update(self.id, updates, options).reject { |key, _| updated_keys.include?(key) })
|
|
312
321
|
end
|
|
313
322
|
|
|
314
|
-
def
|
|
323
|
+
def _create(options = {})
|
|
315
324
|
raise Error, "Record already exists (record has an id)" unless new_record?
|
|
316
325
|
|
|
317
326
|
body = {
|
|
@@ -331,12 +340,15 @@ module Norairrecord
|
|
|
331
340
|
end
|
|
332
341
|
end
|
|
333
342
|
|
|
334
|
-
def
|
|
335
|
-
return
|
|
343
|
+
def _save(options = {})
|
|
344
|
+
return _create(options) if new_record?
|
|
336
345
|
return true if @updated_keys.empty?
|
|
337
|
-
self.fields = self.class.
|
|
346
|
+
self.fields = self.class._update(self.id, self.update_hash, options)
|
|
338
347
|
end
|
|
339
348
|
|
|
349
|
+
alias create _create
|
|
350
|
+
alias save _save
|
|
351
|
+
|
|
340
352
|
def update_hash
|
|
341
353
|
Hash[@updated_keys.map { |key|
|
|
342
354
|
[key, fields[key]]
|
|
@@ -390,18 +402,20 @@ module Norairrecord
|
|
|
390
402
|
def transaction(&block)
|
|
391
403
|
txn_updates = {}
|
|
392
404
|
|
|
393
|
-
singleton_class.define_method(:original_setter, method(:
|
|
405
|
+
singleton_class.define_method(:original_setter, method(:__set_field))
|
|
394
406
|
|
|
395
|
-
define_singleton_method(:
|
|
407
|
+
define_singleton_method(:__set_field) do |key, value|
|
|
396
408
|
txn_updates[key] = value
|
|
397
409
|
end
|
|
398
410
|
|
|
411
|
+
singleton_class.send(:alias_method, :[]=, :__set_field)
|
|
412
|
+
|
|
399
413
|
begin
|
|
400
414
|
result = yield self
|
|
401
415
|
@updated_keys -= txn_updates.keys
|
|
402
416
|
if new_record?
|
|
403
417
|
@fields.merge!(txn_updates)
|
|
404
|
-
|
|
418
|
+
_save
|
|
405
419
|
else
|
|
406
420
|
self.patch(txn_updates)
|
|
407
421
|
end
|
data/lib/norairrecord/version.rb
CHANGED
data/norairrecord.gemspec
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: norairrecord
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- nora
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2025-
|
|
11
|
+
date: 2025-11-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: faraday
|
|
@@ -86,6 +86,20 @@ dependencies:
|
|
|
86
86
|
- - ">="
|
|
87
87
|
- !ruby/object:Gem::Version
|
|
88
88
|
version: '0'
|
|
89
|
+
- !ruby/object:Gem::Dependency
|
|
90
|
+
name: rspec
|
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - "~>"
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: '3.0'
|
|
96
|
+
type: :development
|
|
97
|
+
prerelease: false
|
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
99
|
+
requirements:
|
|
100
|
+
- - "~>"
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: '3.0'
|
|
89
103
|
description: screwed a cookie to the tabel
|
|
90
104
|
email:
|
|
91
105
|
- nora@hcb.pizza
|