rails_optimizer 0.1.7 → 0.1.8

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
  SHA1:
3
- metadata.gz: 0dc3f68cf2eb84764efca80777738c551537ee33
4
- data.tar.gz: beb196f15f49ee0c8c48d37e6950c490ed4fcbbd
3
+ metadata.gz: 07471bbbc0f17cc67af8e6a2aa3ca044ae3c3583
4
+ data.tar.gz: 542301109d50edcc8312f6b15f63ce0549dc41ee
5
5
  SHA512:
6
- metadata.gz: a35ebf74d2a112055ec3b33b68411a6ff714710b85c44add6d1851980e17346fb2795cb7e94e42f03bb09fd2fc0786122fd2a57454e0282fa40756bdf55b2e43
7
- data.tar.gz: 1850a36c5e5532467bc65da93beae6bdb6deccb66c94aeb7d3ac6e215d7914f7c0ce44b98726557e902b96dce0aba391fd93190becdb6958a98b2b3bf657bb39
6
+ metadata.gz: 50a778ca853bf9f22c62c58c64de441b9d66f0ca69038137f6f54175878ea9f791f84f699f1cea384fc26434eb568922e22bcfd030ff94e3acdbc94a0d4ccf1f
7
+ data.tar.gz: 5752120565190145cbadcb7336045f28c9345504a1571e2b2b8a342cc1886fa4f6107714779234b491b274237f7785b0158e2045798cbaa207e7ba837e3a115e
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rails_optimizer (0.1.6)
4
+ rails_optimizer (0.1.7)
5
5
  activerecord
6
6
  activesupport
7
7
 
@@ -1,4 +1,6 @@
1
1
  require "rails_optimizer/version"
2
+ require "rails_optimizer/belongs_to"
3
+ require "rails_optimizer/reflection"
2
4
 
3
5
  module RailsOptimizer
4
6
  class Error < StandardError; end
@@ -27,41 +29,12 @@ module RailsOptimizer
27
29
 
28
30
  def self.belongs_to(name, scope = nil, **options)
29
31
  super
30
- _define(name, scope, options)
32
+ RailsOptimizer::BelongsTo._define(self, name)
31
33
  end
32
34
 
33
- private
34
-
35
- def self.scoped proc
36
- return proc.call if proc
37
- all
38
- end
39
-
40
- def self.finded obj, relation_name
41
- fk = foreign_key(obj, relation_name)
42
- find(obj.read_attribute(fk.to_sym)) unless obj.read_attribute(fk.to_sym).blank?
43
- end
44
-
45
- def self.foreign_key(obj, relation_name)
46
- obj.class.reflections[relation_name.to_s].foreign_key
47
- end
48
-
49
-
50
-
51
- def self._define(name, scope=nil, **options)
52
- define_method name.to_s do |*args|
53
- klass = if options[:polymorphic]
54
- read_attribute("#{name}_type".to_sym).constantize
55
- else
56
- _reflections[name.to_s].klass
57
- end
58
- if args.empty?
59
- klass.select('*').scoped(scope).finded(self, name)
60
- else
61
- klass.select(*args).scoped(scope).finded(self, name)
62
- end
63
- end
64
- end
35
+ def self.execute(&block)
36
+ block.call(self) || all
37
+ end
65
38
 
66
39
  end
67
40
  end
@@ -0,0 +1,49 @@
1
+ module RailsOptimizer
2
+ class BelongsTo
3
+ attr_accessor :klass, :name, :args, :reflection, :owner
4
+
5
+ def initialize(owner, name, *args)
6
+ @owner = owner
7
+ @name = name.to_s
8
+ @args = *args
9
+ end
10
+
11
+ def self._define(owner, name )
12
+ owner.__send__(:define_method, name) do |*args|
13
+ return RailsOptimizer::BelongsTo.new(self, name, *args).get_target
14
+ end
15
+ end
16
+
17
+ def get_target
18
+ if args.empty?
19
+ klass
20
+ else
21
+ klass.select(*args)
22
+ end
23
+ .execute{reflection_scope}
24
+ .execute{ |obj| finded(obj)}
25
+ end
26
+
27
+ private
28
+ def reflection
29
+ @reflection ||= RailsOptimizer::Reflection.new(owner, name)
30
+ end
31
+
32
+ def klass
33
+ reflection.klass
34
+ end
35
+
36
+ def reflection_scope
37
+ reflection.scope
38
+ end
39
+
40
+ def finded(obj)
41
+ obj.find( owner.read_attribute(foreign_key) )
42
+ end
43
+
44
+ def foreign_key
45
+ reflection.foreign_key.to_sym
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,34 @@
1
+ module RailsOptimizer
2
+ class Reflection
3
+ attr_accessor :owner, :name, :foreign_key
4
+
5
+ def initialize(owner, name)
6
+ @owner = owner
7
+ @name = name
8
+ end
9
+
10
+ def klass
11
+ if reflection.polymorphic?
12
+ owner.read_attribute(foreign_type).constantize
13
+ else
14
+ reflection.klass
15
+ end
16
+ end
17
+
18
+ def scope
19
+ reflection.scope
20
+ end
21
+
22
+ def reflection
23
+ @reflection ||= owner._reflections[name]
24
+ end
25
+
26
+ def foreign_type
27
+ reflection.foreign_type
28
+ end
29
+
30
+ def foreign_key
31
+ reflection.foreign_key
32
+ end
33
+ end
34
+ end
@@ -1,3 +1,3 @@
1
1
  module RailsOptimizer
2
- VERSION = "0.1.7"
2
+ VERSION = "0.1.8"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_optimizer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Facundo A. Díaz Martínez
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-08 00:00:00.000000000 Z
11
+ date: 2021-01-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -57,6 +57,8 @@ files:
57
57
  - bin/console
58
58
  - bin/setup
59
59
  - lib/rails_optimizer.rb
60
+ - lib/rails_optimizer/belongs_to.rb
61
+ - lib/rails_optimizer/reflection.rb
60
62
  - lib/rails_optimizer/version.rb
61
63
  - rails_optimizer.gemspec
62
64
  homepage: https://github.com/ITSesocio/rails_optimizer