better_record 0.22.5 → 0.22.6

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: f4d23ae910e5777201c932f569405099050acae9761fcbc320f5da78d8c6b08a
4
- data.tar.gz: 0a5901d81b9468f06bf7fa58bba90449cfc84126d3333a14d7ce007e7305a7a4
3
+ metadata.gz: a24b88309e9f96d1e6cd205addfd4e9e4c6c8b0f9e84d1eb7e04c1c2538841af
4
+ data.tar.gz: 4525937c547907d0485358a2b7a2f38d5a7df7dfd8ce635cd9b888a6c0609aeb
5
5
  SHA512:
6
- metadata.gz: ad293180c34f9fa78a089b59452230550599db7f73cac893d080bce986b44d9cabb9bfa3b6ed62d461477965672a31808c9c055f98e5b640b81cf32103d7a64c
7
- data.tar.gz: 42dd7e2e3ece6d1b6f7ba797e30bceed78ebb36f9677c0b9e1ede660b4738875558da1df4e747614598320cb970e17b5116d6804016cdfa2463e02a6baa5489e
6
+ metadata.gz: da437ec12b078e879d4e65ec7c1d09c1b9966a06158412e485938a3dbd0f61ae9b073ca5ea791944cf0fea9a0b13adf7115f7eab7e2066dbef8a4f26db85e914
7
+ data.tar.gz: dc700fda50ac668eba00991a64307d631698218210e938b2f5b9929cbf4d98f1591e500fe70d0b8bc74a06bbf7f58102071531f7fc2788ed19abc7e6de251ff6
data/lib/better_record.rb CHANGED
@@ -42,6 +42,12 @@ module BetterRecord
42
42
  attrs_hash.dup
43
43
  end
44
44
 
45
+ def model_index_by_table_name(reset = false)
46
+ @index_by_table_name = nil if reset
47
+
48
+ @index_by_table_name ||= ActiveRecord::Base.descendants.reject(&:abstract_class).index_by(&:table_name)
49
+ end
50
+
45
51
  attr_accessor *ATTRIBUTE_METHODS
46
52
 
47
53
  # ATTRIBUTE_METHODS.each do |method|
@@ -12,7 +12,8 @@ module BetterRecord
12
12
  included do
13
13
  def klass
14
14
  type = owner[reflection.foreign_type]
15
- type.presence && type.capitalize.singularize.constantize
15
+ type.presence &&
16
+ BetterRecord.model_index_by_table_name[type] ||= find_model_from_table_name(type)
16
17
  end
17
18
 
18
19
  def replace_keys record
@@ -23,6 +24,47 @@ module BetterRecord
23
24
  def get_type_value record
24
25
  BetterRecord::PolymorphicOverride.polymorphic_value(record.class, reflection.options)
25
26
  end
27
+
28
+ def find_model_from_table_name(type)
29
+ found_model = nil
30
+
31
+ begin
32
+ found_model = sub_string.classify.constantize
33
+ return found_model
34
+ rescue
35
+ found_model = nil
36
+ end
37
+
38
+ permeate_options(type.to_s.underscore).each do |sub_string|
39
+ begin
40
+ found_model = sub_string.classify.constantize
41
+ rescue
42
+ found_model = nil
43
+ end
44
+ break if found_model
45
+ end
46
+
47
+ raise "Model Not Found: #{type}" unless found_model
48
+
49
+ found_model
50
+ end
51
+
52
+ def permeate_options(type)
53
+ str = type.dup.sub(/^_+/, '').gsub(/_+/, '_')
54
+ Enumerator.new do |y|
55
+ if str =~ /_/
56
+ split_str = str.split('_')
57
+
58
+ underscores = str.gsub(/[^_]+/, '').split('')
59
+
60
+ [*underscores, *Array.new(underscores.size, '/')].permutation(underscores.size).each do |mutation|
61
+ y << split_str.zip(mutation).flatten.join
62
+ end
63
+ else
64
+ y << str
65
+ end
66
+ end
67
+ end
26
68
  end
27
69
  end
28
70
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BetterRecord
4
- VERSION = '0.22.5'
4
+ VERSION = '0.22.6'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: better_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.22.5
4
+ version: 0.22.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sampson Crowley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-22 00:00:00.000000000 Z
11
+ date: 2019-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails