better_record 0.22.5 → 0.22.6

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: 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