rails_optimizer 0.1.5 → 0.2.0

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
- SHA1:
3
- metadata.gz: 13f77501d80e64390517d2db18dfc1a3fb81616e
4
- data.tar.gz: 997d8440d4c375a378d48275bdcc63f683e3fa39
2
+ SHA256:
3
+ metadata.gz: 2a70969d26fb8c6f7e10d076d0d773a85f8c196c09e56494c5cc7707a6861222
4
+ data.tar.gz: 7a3d74687e69d53d289582128bf14e1092467ecaafa094a29add6c7cfcaab1a4
5
5
  SHA512:
6
- metadata.gz: 2380df7b3ed1dd6c38ce960b16f05212b41ec64d5a9f9de3aa24de8e6eeb97d7c71198a0fe1a13c59b2a3fb09404599e9fe560a289e4db51d9142a31624dc4bf
7
- data.tar.gz: '08656e5c75acf0e1cf2a6acfd631ae245fce975681e69a23dc1ea36209c8c3c5c586d97f9ada4c4a160743b0a7a4d79aa96860028d47ec185e049745d962e991'
6
+ metadata.gz: cd2be7a17816296ad15d5677c25b701abf437f77df5046e14182a96916e90931d668cbfa1759e55cd2bb972c4b4811dd914c912462f0f8ea43a05785dae81b84
7
+ data.tar.gz: 82c0eae0f03d3d14cddc0f57e592be30a0bb05be5ca2b81d1d3269f0dac4528f39beecd2db4c49808403874f326bc5612d3eec5eefff03bb6483140022a80b51
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rails_optimizer (0.1.4)
4
+ rails_optimizer (0.1.9)
5
5
  activerecord
6
6
  activesupport
7
7
 
@@ -1,4 +1,8 @@
1
1
  require "rails_optimizer/version"
2
+ require "rails_optimizer/association"
3
+ require "rails_optimizer/belongs_to"
4
+ require "rails_optimizer/has_one"
5
+ require "rails_optimizer/reflection"
2
6
 
3
7
  module RailsOptimizer
4
8
  class Error < StandardError; end
@@ -13,42 +17,20 @@ module RailsOptimizer
13
17
  end
14
18
  end
15
19
 
16
- def self.scoped proc
17
- return proc.call if proc
18
- all
19
- end
20
-
21
- def self.finded obj, relation_name
22
- fk = foreign_key(obj, relation_name)
23
- find(obj.read_attribute(fk.to_sym)) unless obj.read_attribute(fk.to_sym).blank?
24
- end
25
-
26
- def self.foreign_key(obj, relation_name)
27
- obj.class.reflections[relation_name.to_s].foreign_key
20
+ def self.has_one(name, scope = nil, **options)
21
+ super
22
+ RailsOptimizer::HasOne._define(self,name)
28
23
  end
29
24
 
30
25
  def self.belongs_to(name, scope = nil, **options)
31
26
  super
32
- define_method name.to_s do |*args|
33
- super if arsg.empty?
34
- klass = if options[:polymorphic]
35
- read_attribute("#{name}_type".to_sym)
36
- else
37
- name.to_s
38
- end.classify.constantize.select(*args).scoped(scope).finded(self, name)
39
- end
27
+ RailsOptimizer::BelongsTo._define(self, name)
40
28
  end
41
29
 
42
- def self.has_one(name, scope = nil, **options)
43
- super
44
- define_method name.to_s do |*args|
45
- fk = self.class.foreign_key(name).to_sym
46
- if args.empty?
47
- name.to_s.classify.constantize.select("*").scoped(scope).find_by(fk => id)
48
- else
49
- name.to_s.classify.constantize.select(:id, *args).scoped(scope).find_by(fk => id)
50
- end
51
- end
30
+ def self.execute(&method)
31
+ return all unless block_given?
32
+ class_eval(&method)
52
33
  end
34
+
53
35
  end
54
36
  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
@@ -0,0 +1,34 @@
1
+ module RailsOptimizer
2
+ class BelongsTo < Association
3
+
4
+ def self._define(owner, name )
5
+ owner.__send__(:define_method, name) do |*args|
6
+ return RailsOptimizer::BelongsTo.new(self, name, *args).get_target
7
+ end
8
+ end
9
+
10
+ def get_target
11
+ super do
12
+ if args.empty?
13
+ klass
14
+ else
15
+ klass.select(*args)
16
+ end
17
+ .execute(&reflection_scope)
18
+ .execute(&finded)
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def finded
25
+ id = owner.read_attribute(foreign_key)
26
+ proc { send(:find_by, {id: id}) }
27
+ end
28
+
29
+ def foreign_key
30
+ reflection.foreign_key.to_sym
31
+ end
32
+
33
+ end
34
+ end
@@ -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
@@ -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.5"
2
+ VERSION = "0.2.0"
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.5
4
+ version: 0.2.0
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-08 00:00:00.000000000 Z
11
+ date: 2021-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -57,6 +57,10 @@ files:
57
57
  - bin/console
58
58
  - bin/setup
59
59
  - lib/rails_optimizer.rb
60
+ - lib/rails_optimizer/association.rb
61
+ - lib/rails_optimizer/belongs_to.rb
62
+ - lib/rails_optimizer/has_one.rb
63
+ - lib/rails_optimizer/reflection.rb
60
64
  - lib/rails_optimizer/version.rb
61
65
  - rails_optimizer.gemspec
62
66
  homepage: https://github.com/ITSesocio/rails_optimizer
@@ -66,7 +70,7 @@ metadata:
66
70
  allowed_push_host: https://rubygems.org
67
71
  homepage_uri: https://github.com/ITSesocio/rails_optimizer
68
72
  source_code_uri: https://github.com/ITSesocio/rails_optimizer
69
- post_install_message:
73
+ post_install_message:
70
74
  rdoc_options: []
71
75
  require_paths:
72
76
  - lib
@@ -81,9 +85,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
81
85
  - !ruby/object:Gem::Version
82
86
  version: '0'
83
87
  requirements: []
84
- rubyforge_project:
85
- rubygems_version: 2.6.14.1
86
- signing_key:
88
+ rubygems_version: 3.0.3
89
+ signing_key:
87
90
  specification_version: 4
88
91
  summary: Optimze some rails methods
89
92
  test_files: []