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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1b4c50fb537aace7ecdf5be404764e05072c943556715daa724cd17870a914e8
4
- data.tar.gz: 410a8da439eceead2fb6ee1488ed89e095c71418ea55afe5c26ed2684fee58f2
3
+ metadata.gz: 2cc1ed8e5808c360702ca89d65b4edf2ea18c141177f7e20e8b3686abd21d3a7
4
+ data.tar.gz: ac03748843c779f8155505ec7b14ce4ad81e23c2149d7b95140cc46c234a9344
5
5
  SHA512:
6
- metadata.gz: 7056ecbe66dc5dfbdf46016ca7095ba5429fed6c9ea20c7b79f5e096ceb0b74508bbbf372f6411214ffef8de592bc4e65ad7aeb5b6dfa5babc823772ca09bdc5
7
- data.tar.gz: 1c619c848753a5940851d50bf46664716d8ef005a7a1d7efcb5b1fc37ba32fd6a062cb382587d158e6871f70efca38736a8f8bdfaf4c6b4b9705a4275b3695eb
6
+ metadata.gz: ca69035951a3ec0b706a0567dbe12834540ae7c12ee30d68d178393c7a395a143aa0af50670b2af60d3ade4e9c31c59940ad0ef2bce0e6948048b4f30a6b2ab9
7
+ data.tar.gz: 6f4c50687a0817e221b2fd224319cc1fe7e7d6e70209c866dffdea742dec9b574cd7f62b80d6d601b8384bfbdbe8cd9bc04d5775dfce61b116d7991ee3f5d184
@@ -48,7 +48,7 @@ module Norairrecord
48
48
  end
49
49
 
50
50
  define_method("#{method_name}=".to_sym) do |value|
51
- self[options.fetch(:column)] = Array(value).map(&:id).reverse
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 update(id, update_hash = {}, options = {})
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 create(fields, options = {})
104
- new(fields).tap { |record| record.save(options) }
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.new(fields, id:, created_at:)
120
+ clazz._new(fields, id:, created_at:)
114
121
  else
115
- self.new(fields, id: id, created_at: created_at)
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.new(fields)], merge_fields, options)&.dig(:records, 0)
260
- record ? new(record) : nil
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 []=(key, value)
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.update(self.id, updates, options).reject { |key, _| updated_keys.include?(key) })
320
+ @fields.merge!(self.class._update(self.id, updates, options).reject { |key, _| updated_keys.include?(key) })
312
321
  end
313
322
 
314
- def create(options = {})
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 save(options = {})
335
- return create(options) if new_record?
343
+ def _save(options = {})
344
+ return _create(options) if new_record?
336
345
  return true if @updated_keys.empty?
337
- self.fields = self.class.update(self.id, self.update_hash, options)
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(:[]=) do |key, value|
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
- save
418
+ _save
405
419
  else
406
420
  self.patch(txn_updates)
407
421
  end
@@ -1,3 +1,3 @@
1
1
  module Norairrecord
2
- VERSION = "0.4.1"
2
+ VERSION = "0.5.0"
3
3
  end
data/norairrecord.gemspec CHANGED
@@ -27,4 +27,5 @@ Gem::Specification.new do |spec|
27
27
 
28
28
  spec.add_development_dependency "bundler", "~> 2"
29
29
  spec.add_development_dependency "rake"
30
+ spec.add_development_dependency "rspec", "~> 3.0"
30
31
  end
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.1
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-08-04 00:00:00.000000000 Z
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