rails_optimizer 0.1.8 → 0.2.3

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
- SHA1:
3
- metadata.gz: 07471bbbc0f17cc67af8e6a2aa3ca044ae3c3583
4
- data.tar.gz: 542301109d50edcc8312f6b15f63ce0549dc41ee
2
+ SHA256:
3
+ metadata.gz: 13f81883ca5abcc97b363818ed7d08a73a3d69fd3679f6741b62ab09fdd08c71
4
+ data.tar.gz: 38698dcc08709b8b791e284b57b7ca03e2ec282a0e74ea997c7d40e365dbb185
5
5
  SHA512:
6
- metadata.gz: 50a778ca853bf9f22c62c58c64de441b9d66f0ca69038137f6f54175878ea9f791f84f699f1cea384fc26434eb568922e22bcfd030ff94e3acdbc94a0d4ccf1f
7
- data.tar.gz: 5752120565190145cbadcb7336045f28c9345504a1571e2b2b8a342cc1886fa4f6107714779234b491b274237f7785b0158e2045798cbaa207e7ba837e3a115e
6
+ metadata.gz: 27a4f2e4d60ee240dca864c1ffc7d5eadc9bb60b292e2cd10d1780c0ca890f949d773228c5fc6b51597b78db70a485b12984acf6c5c7ab1298137669f2459fa3
7
+ data.tar.gz: bd659a74fe311cc0bedf2e0b2d818ee0ac0cc4cc5628beb226d566eb9228156e34cd728dddc0cd71ae7807074536f7d996ac8415da4928147bf118fb612a2afb
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rails_optimizer (0.1.7)
4
+ rails_optimizer (0.2.1)
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
@@ -7,24 +9,10 @@ module RailsOptimizer
7
9
  extend ActiveSupport::Concern
8
10
 
9
11
  included do
10
- def save
11
- if has_changes_to_save?
12
- super
13
- else
14
- true
15
- end
16
- end
17
-
12
+
18
13
  def self.has_one(name, scope = nil, **options)
19
14
  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
15
+ RailsOptimizer::HasOne._define(self,name)
28
16
  end
29
17
 
30
18
  def self.belongs_to(name, scope = nil, **options)
@@ -32,8 +20,9 @@ module RailsOptimizer
32
20
  RailsOptimizer::BelongsTo._define(self, name)
33
21
  end
34
22
 
35
- def self.execute(&block)
36
- block.call(self) || all
23
+ def self.execute(&method)
24
+ return all unless block_given?
25
+ class_eval(&method)
37
26
  end
38
27
 
39
28
  end
@@ -0,0 +1,28 @@
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
+
23
+ def get_target
24
+ return owner.association(name.to_sym).target if owner.association(name.to_sym).loaded?
25
+ yield if block_given?
26
+ end
27
+ end
28
+ 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|
@@ -15,30 +8,22 @@ module RailsOptimizer
15
8
  end
16
9
 
17
10
  def get_target
18
- if args.empty?
19
- klass
20
- else
21
- klass.select(*args)
11
+ super do
12
+ if args.empty?
13
+ klass
14
+ else
15
+ klass.select(*args)
16
+ end
17
+ .execute(&reflection_scope)
18
+ .execute(&finded)
22
19
  end
23
- .execute{reflection_scope}
24
- .execute{ |obj| finded(obj)}
25
20
  end
26
21
 
27
22
  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) )
23
+
24
+ def finded
25
+ id = owner.read_attribute(foreign_key)
26
+ proc { send(:find_by, {id: id}) }
42
27
  end
43
28
 
44
29
  def foreign_key
@@ -0,0 +1,29 @@
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
+ super do
13
+ if args.empty?
14
+ klass
15
+ else
16
+ klass.select(*args)
17
+ end.execute(&reflection_scope).execute(&finded)
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def finded
24
+ finder = {reflection.foreign_key.to_sym => owner.id}
25
+ proc { send(:find_by, **finder) }
26
+ end
27
+ end
28
+
29
+ end
@@ -1,3 +1,3 @@
1
1
  module RailsOptimizer
2
- VERSION = "0.1.8"
2
+ VERSION = "0.2.3"
3
3
  end
Binary file
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.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Facundo A. Díaz Martínez
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-09 00:00:00.000000000 Z
11
+ date: 2021-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -57,9 +57,12 @@ 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
65
+ - rails_optimizer-0.2.2.gem
63
66
  - rails_optimizer.gemspec
64
67
  homepage: https://github.com/ITSesocio/rails_optimizer
65
68
  licenses:
@@ -68,7 +71,7 @@ metadata:
68
71
  allowed_push_host: https://rubygems.org
69
72
  homepage_uri: https://github.com/ITSesocio/rails_optimizer
70
73
  source_code_uri: https://github.com/ITSesocio/rails_optimizer
71
- post_install_message:
74
+ post_install_message:
72
75
  rdoc_options: []
73
76
  require_paths:
74
77
  - lib
@@ -83,9 +86,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
86
  - !ruby/object:Gem::Version
84
87
  version: '0'
85
88
  requirements: []
86
- rubyforge_project:
87
- rubygems_version: 2.6.14.1
88
- signing_key:
89
+ rubygems_version: 3.0.3
90
+ signing_key:
89
91
  specification_version: 4
90
92
  summary: Optimze some rails methods
91
93
  test_files: []