rails_optimizer 0.1.8 → 0.1.9

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