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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a24b88309e9f96d1e6cd205addfd4e9e4c6c8b0f9e84d1eb7e04c1c2538841af
|
4
|
+
data.tar.gz: 4525937c547907d0485358a2b7a2f38d5a7df7dfd8ce635cd9b888a6c0609aeb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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 &&
|
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
|
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.
|
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-
|
11
|
+
date: 2019-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|