rails_optimizer 0.1.8 → 0.1.9

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: 07471bbbc0f17cc67af8e6a2aa3ca044ae3c3583
4
- data.tar.gz: 542301109d50edcc8312f6b15f63ce0549dc41ee
3
+ metadata.gz: db80c5f0e72c9cb288873b9f318e5dc3baafdd67
4
+ data.tar.gz: 0a101ae1ad6cb41b9243aebbd8760ed61c74ce7b
5
5
  SHA512:
6
- metadata.gz: 50a778ca853bf9f22c62c58c64de441b9d66f0ca69038137f6f54175878ea9f791f84f699f1cea384fc26434eb568922e22bcfd030ff94e3acdbc94a0d4ccf1f
7
- data.tar.gz: 5752120565190145cbadcb7336045f28c9345504a1571e2b2b8a342cc1886fa4f6107714779234b491b274237f7785b0158e2045798cbaa207e7ba837e3a115e
6
+ metadata.gz: 76a6df566e037c10afd6c2b79567ae9bb1fcebbc440a3cbad10ea66cf5cb0512faf3f53ba1aab51049736c6af69588eaf2646400f3ebaf9cb10bb01d850690b4
7
+ data.tar.gz: 8fec9fdae029505fdfd1d4814ea618a751649d69f643619310236704df2081a668ad809bcce459c5f8c1be88419993e5fc10910df63364e67915da800b05c408
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rails_optimizer (0.1.7)
4
+ rails_optimizer (0.1.8)
5
5
  activerecord
6
6
  activesupport
7
7
 
@@ -1,5 +1,7 @@
1
1
  require "rails_optimizer/version"
2
+ require "rails_optimizer/association"
2
3
  require "rails_optimizer/belongs_to"
4
+ require "rails_optimizer/has_one"
3
5
  require "rails_optimizer/reflection"
4
6
 
5
7
  module RailsOptimizer
@@ -17,14 +19,7 @@ module RailsOptimizer
17
19
 
18
20
  def self.has_one(name, scope = nil, **options)
19
21
  super
20
- define_method name.to_s do |*args|
21
- fk = self.class.foreign_key(name).to_sym
22
- if args.empty?
23
- name.to_s.classify.constantize.select("*").scoped(scope).find_by(fk => id)
24
- else
25
- name.to_s.classify.constantize.select(:id, *args).scoped(scope).find_by(fk => id)
26
- end
27
- end
22
+ RailsOptimizer::HasOne._define(self,name)
28
23
  end
29
24
 
30
25
  def self.belongs_to(name, scope = nil, **options)
@@ -32,8 +27,9 @@ module RailsOptimizer
32
27
  RailsOptimizer::BelongsTo._define(self, name)
33
28
  end
34
29
 
35
- def self.execute(&block)
36
- block.call(self) || all
30
+ def self.execute(&method)
31
+ return all unless block_given?
32
+ class_eval(&method)
37
33
  end
38
34
 
39
35
  end
@@ -0,0 +1,23 @@
1
+ module RailsOptimizer
2
+ class Association
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 reflection
12
+ @reflection ||= RailsOptimizer::Reflection.new(owner, name)
13
+ end
14
+
15
+ def klass
16
+ reflection.klass
17
+ end
18
+
19
+ def reflection_scope
20
+ reflection.scope
21
+ end
22
+ end
23
+ end
@@ -1,12 +1,5 @@
1
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
2
+ class BelongsTo < Association
10
3
 
11
4
  def self._define(owner, name )
12
5
  owner.__send__(:define_method, name) do |*args|
@@ -20,25 +13,15 @@ module RailsOptimizer
20
13
  else
21
14
  klass.select(*args)
22
15
  end
23
- .execute{reflection_scope}
24
- .execute{ |obj| finded(obj)}
16
+ .execute(&reflection_scope)
17
+ .execute(&finded)
25
18
  end
26
19
 
27
20
  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) )
21
+
22
+ def finded
23
+ id = owner.read_attribute(foreign_key)
24
+ proc { send(:find, id) }
42
25
  end
43
26
 
44
27
  def foreign_key
@@ -0,0 +1,35 @@
1
+ module RailsOptimizer
2
+ class HasOne < Association
3
+
4
+
5
+ def self._define(owner, name )
6
+ owner.__send__(:define_method, name) do |*args|
7
+ return RailsOptimizer::HasOne.new(self, name, *args).get_target
8
+ end
9
+ end
10
+
11
+ def get_target
12
+ if args.empty?
13
+ klass
14
+ else
15
+ klass.select(*args)
16
+ end.execute(&reflection_scope).execute(&finded)
17
+ end
18
+
19
+ private
20
+
21
+ def finded
22
+ finder = {reflection.foreign_key.to_sym => owner.id}
23
+ proc { send(:find_by, **finder) }
24
+ end
25
+ end
26
+
27
+ define_method name.to_s do |*args|
28
+ fk = self.class.foreign_key(name).to_sym
29
+ if args.empty?
30
+ name.to_s.classify.constantize.select("*").scoped(scope).find_by(fk => id)
31
+ else
32
+ name.to_s.classify.constantize.select(:id, *args).scoped(scope).find_by(fk => id)
33
+ end
34
+ end
35
+ end
@@ -1,3 +1,3 @@
1
1
  module RailsOptimizer
2
- VERSION = "0.1.8"
2
+ VERSION = "0.1.9"
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.8
4
+ version: 0.1.9
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-09 00:00:00.000000000 Z
11
+ date: 2021-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -57,7 +57,9 @@ files:
57
57
  - bin/console
58
58
  - bin/setup
59
59
  - lib/rails_optimizer.rb
60
+ - lib/rails_optimizer/association.rb
60
61
  - lib/rails_optimizer/belongs_to.rb
62
+ - lib/rails_optimizer/has_one.rb
61
63
  - lib/rails_optimizer/reflection.rb
62
64
  - lib/rails_optimizer/version.rb
63
65
  - rails_optimizer.gemspec