dynamic-records-meritfront 3.0.23 → 3.0.24

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: abe695f1cafabc83e3776b7f2527ca1647102cf8cc3aafc45bae0a5a5adb288f
4
- data.tar.gz: 44125e65532fc6aaee3de08f506194ea3a6718ae24434a5c45268f374fc4192d
3
+ metadata.gz: 7452d0058119526d1ece08203106f8ae07da51f41e22f764c4d5262d2340e7f4
4
+ data.tar.gz: 88fc11727ba9a6d016afb22ec03beafc30412e37502daf35e33dce6532ef02b1
5
5
  SHA512:
6
- metadata.gz: d9eab130e60095e150b352098e32442377398c735920676a2221586e82996d1d7eeabfd2f081306d4d0cb48c211dc8951d216fe92a66b30adf16fa0648d72189
7
- data.tar.gz: 1d5d4a226354ee08fd8bad951814f03bb0ca4199e5eea2c37516f76639beaf446a111d90cce8495ee4a01a92f0fbdda223f5a27e4f64296e7ca73f7f06dbf3e2
6
+ metadata.gz: 69eff49f3efbfd1261477cd3b895786a0dc97ca09e2933aab4471eea85c61f4e54651d37a4d3138e4c9d7c64f4802c3fda0d45152d84598e206072a14b828089
7
+ data.tar.gz: e6a26b39284b4b80891fed68af41d930b1d12e83aaadad45c8d6fee4c9f1bfadbaebd3ff56407a09b5714f2248d3cf39cdb58a37cc4a8835241933294f99a2d9
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dynamic-records-meritfront (3.0.23)
4
+ dynamic-records-meritfront (3.0.24)
5
5
  hashid-rails
6
6
 
7
7
  GEM
@@ -26,7 +26,7 @@ GEM
26
26
  concurrent-ruby (~> 1.0)
27
27
  minitest (5.17.0)
28
28
  rake (12.3.3)
29
- tzinfo (2.0.5)
29
+ tzinfo (2.0.6)
30
30
  concurrent-ruby (~> 1.0)
31
31
 
32
32
  PLATFORMS
@@ -1,5 +1,5 @@
1
1
 
2
2
  module DynamicRecordsMeritfront
3
- VERSION = '3.0.23'
3
+ VERSION = '3.0.24'
4
4
  end
5
5
  #this file gets overwritten automatically on minor updates, major ones need to be manually changed
@@ -22,7 +22,7 @@ module DynamicRecordsMeritfront
22
22
  #Note we defined here as it breaks early on as Rails.application returns nil
23
23
  PROJECT_NAME = Rails.application.class.to_s.split("::").first.to_s.downcase
24
24
  DYNAMIC_SQL_RAW = true
25
-
25
+ attr_accessor :dynamic_reflections
26
26
  end
27
27
 
28
28
  class DynamicSqlVariables
@@ -86,7 +86,7 @@ module DynamicRecordsMeritfront
86
86
  DateTime => ActiveModel::Type::DateTime,
87
87
  Time => ActiveModel::Type::Time,
88
88
  Float => ActiveModel::Type::Float,
89
- NilClass => ActiveModel::Type::Boolean,
89
+ NilClass => ActiveModel::Type::Boolean,
90
90
  Array => Proc.new{ |first_el_class| ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Array.new(DB_TYPE_MAPS[first_el_class].new) }
91
91
  }
92
92
 
@@ -106,11 +106,7 @@ module DynamicRecordsMeritfront
106
106
 
107
107
  type = DB_TYPE_MAPS[v.class]
108
108
  if type.nil?
109
- # if v.class == NilClass
110
- # raise StandardError.new("")
111
- # else
112
- raise StandardError.new("#{name} (of value: #{v}, class: #{v.class}) unsupported class for ApplicationRecord#headache_sql")
113
- # end
109
+ raise StandardError.new("#{name} (of value: #{v}, class: #{v.class}) unsupported class for ApplicationRecord#headache_sql")
114
110
  elsif type.class == Proc
115
111
  a = v[0]
116
112
  # if a.nil?
@@ -168,35 +164,86 @@ module DynamicRecordsMeritfront
168
164
 
169
165
  def questionable_attribute_set(atr, value, as_default: false, push: false)
170
166
  #this is needed on initalization of a new variable after the actual thing has been made already.
167
+ #this is used for attaching records to other records in one-to-one or one-to-many
168
+
169
+ #basically the way this works is by using singletons to paper over the fact that normal reflections
170
+ #even exist. We dont integrate at all with their patterns as they use some crazy delegation stuff
171
+ #that messes just about everything up.
172
+
173
+ #man i thought i was meta coding, these association people just want to see the world burn.
174
+
175
+ #keeping the old code commented for a while because this area keeps breaking and i want a log of what i have tried.
176
+
177
+ self.dynamic_reflections ||= []
178
+
179
+ unless dynamic_reflections.include?(atr.to_s)
180
+ self.dynamic_reflections << atr.to_s
181
+ singleton_class.instance_eval do
182
+ attr_accessor atr.to_sym
183
+ end
184
+ end
185
+ # # if _reflections.keys.include? atr.to_s
186
+ # has_method = methods.include?(atr.to_sym)
187
+ #
188
+ # DevScript.ping(has_method)
189
+ # override = (not(has_method) or (
190
+ # _reflections.keys.include? atr.to_s
191
+ # and not
192
+
193
+ # )
194
+ # DevScript.ping(override)
195
+
196
+ # if override
197
+
198
+
199
+ # end
200
+ #elsif
201
+
202
+ #end
171
203
 
172
- #note that the below is the value lookup for ActiveModel, but values seems to have all the database columns
173
- #in it anyways
174
- #
175
- # def key?(name)
176
- # (values.key?(name) || types.key?(name) || @attributes.key?(name)) && self[name].initialized?
177
- # end
178
- raise StandardError.new('bad options') if as_default and push
179
204
  if as_default
180
- unless self.respond_to? atr
181
- #make sure its accesible in some way
182
- values = @attributes.instance_variable_get(:@values)
183
- if not values.keys.include?(atr)
184
- values[atr] = value
185
- end
205
+ if self.method(atr.to_sym).call().nil?
206
+ self.method("#{atr}=".to_sym).call(value)
207
+ # DevScript.ping("atr #{atr} def #{value}")
186
208
  end
209
+ elsif push
210
+ self.method(atr.to_sym).call().push value
211
+ # DevScript.ping("atr #{atr} push #{value}")
187
212
  else
188
- #no getter/setter methodsout, probably catches missing methods and then redirects to attributes. Lots of magic.
189
- # After multiple attempts, I gave up, so now we use eval. I guess I cant be too mad about magic as
190
- # that seems to be my bread and butter. Hope eval doesnt make it go too slow. Guess everything is evaled
191
- # on some level though?
192
- s = self #afraid self will be a diffrent self in eval. Possibly depending on parser. IDK. Just seemed risky.
193
- if push
194
- eval "s.#{atr} << value"
195
- else
196
- eval "s.#{atr} = value"
197
- end
213
+ self.method("#{atr}=".to_sym).call(value)
214
+ # DevScript.ping("atr #{atr} set #{value}")
198
215
  end
199
216
 
217
+ # raise StandardError.new('bad options') if as_default and push
218
+ # if as_default
219
+ # unless self.respond_to? atr
220
+ # #make sure its accesible in some way
221
+ # values = @attributes.instance_variable_get(:@values)
222
+ # if not values.keys.include?(atr)
223
+ # values[atr] = value
224
+ # end
225
+ # end
226
+ # else
227
+ # if self.reflections.keys.include? atr.to_s
228
+ #
229
+ # else
230
+ # values ||= @attributes.instance_variable_get(:@values)
231
+ # values[atr] << value
232
+ #
233
+ #
234
+ # end
235
+ # #no getter/setter methodsout, probably catches missing methods and then redirects to attributes. Lots of magic.
236
+ # # After multiple attempts, I gave up, so now we use eval. I guess I cant be too mad about magic as
237
+ # # that seems to be my bread and butter. Hope eval doesnt make it go too slow. Guess everything is evaled
238
+ # # on some level though?
239
+ # s = self #afraid self will be a diffrent self in eval. Possibly depending on parser. IDK. Just seemed risky.
240
+ # if push
241
+ # eval "s.#{atr} << value"
242
+ # else
243
+ # eval "s.#{atr} = value"
244
+ # end
245
+ # end
246
+
200
247
  # atr = atr.to_s
201
248
  # setter = "#{atr}="
202
249
  # if respond_to?(setter)
@@ -232,6 +279,9 @@ module DynamicRecordsMeritfront
232
279
  #basically the same as the upstream active record function (as of october 25 2022 on AR V7.0.4)
233
280
  #except that I changed self.class.attribute_names -> self.attribute_names to pick up our
234
281
  #dynamic insanity. Was this a good idea? Well I guess its better than not doing it
282
+
283
+ #I also added dynamic_reflections
284
+
235
285
  inspection = if defined?(@attributes) && @attributes
236
286
  self.attribute_names.filter_map do |name|
237
287
  if _has_attribute?(name)
@@ -242,7 +292,16 @@ module DynamicRecordsMeritfront
242
292
  "not initialized"
243
293
  end
244
294
 
245
- "#<#{self.class} #{inspection}>"
295
+ self.dynamic_reflections ||= []
296
+ dyna = dynamic_reflections.map{|dr|
297
+ self.method(dr.to_sym).call()
298
+ }
299
+
300
+ if dyna.any?
301
+ "#<#{self.class} #{inspection} | #{dyna.to_s}>"
302
+ else
303
+ "#<#{self.class} #{inspection} >"
304
+ end
246
305
  end
247
306
 
248
307
  module ClassMethods
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynamic-records-meritfront
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.23
4
+ version: 3.0.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luke Clancy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-02-02 00:00:00.000000000 Z
11
+ date: 2023-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashid-rails