bulk_loader 0.2.0 → 0.3.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 +4 -4
- data/.rubocop.yml +7 -1
- data/lib/bulk_loader/attribute.rb +2 -0
- data/lib/bulk_loader/class_attribute.rb +12 -0
- data/lib/bulk_loader/dsl.rb +7 -4
- data/lib/bulk_loader/lazy.rb +1 -0
- data/lib/bulk_loader/loader.rb +2 -0
- data/lib/bulk_loader/version.rb +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6dece1077abb8076b7b22b30d4db5565f175417fe29e17043e6e2e1f226684c
|
4
|
+
data.tar.gz: d6af0bf31f863df6a00bd90a057e74becbc3e67bc140f54a2dc07297914ef0e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c49b93dbcd1cd1d09cf50085022bcb2198a6771cd4db44c42e607eb0eca42937c26c6727133d3b8556d5022871f48c6a16997ecd81eae2d9c6041b61c0990804
|
7
|
+
data.tar.gz: b899710ae8b53ab5fdeb399c122f35d50c0db73994fcffc3132d37c5794fc6ef97eb5d02522216daef2efc7fc84d0e069a985655b3423aeb89a7c43cf5ac403c
|
data/.rubocop.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# See default settings https://github.com/bbatsov/rubocop/blob/master/config/enabled.yml
|
2
2
|
AllCops:
|
3
|
-
TargetRubyVersion: 2.
|
3
|
+
TargetRubyVersion: 2.4
|
4
4
|
DisplayCopNames: true
|
5
5
|
Exclude:
|
6
6
|
- '*.gemspec'
|
@@ -10,6 +10,12 @@ AllCops:
|
|
10
10
|
- 'Rakefile'
|
11
11
|
- 'example/**/*'
|
12
12
|
|
13
|
+
Metrics/AbcSize:
|
14
|
+
Max: 17
|
15
|
+
|
16
|
+
Metrics/MethodLength:
|
17
|
+
Max: 14
|
18
|
+
|
13
19
|
Metrics/BlockLength:
|
14
20
|
Exclude:
|
15
21
|
- 'spec/**/*'
|
@@ -16,6 +16,7 @@ module BulkLoader
|
|
16
16
|
|
17
17
|
def method_missing(name, *args)
|
18
18
|
return super unless @class_attribute.include?(name)
|
19
|
+
|
19
20
|
names = [name].freeze
|
20
21
|
define_singleton_method(name) do
|
21
22
|
attr = lazy(name)
|
@@ -27,6 +28,7 @@ module BulkLoader
|
|
27
28
|
|
28
29
|
def respond_to_missing?(name, include_private)
|
29
30
|
return true if @class_attribute.include?(name)
|
31
|
+
|
30
32
|
super
|
31
33
|
end
|
32
34
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module BulkLoader
|
4
|
+
class LoaderNotFoundError < StandardError; end
|
5
|
+
|
4
6
|
class ClassAttribute
|
5
7
|
def initialize
|
6
8
|
@loader_of = {}
|
@@ -19,6 +21,8 @@ module BulkLoader
|
|
19
21
|
|
20
22
|
loader_names = [loader_names] unless loader_names.is_a?(Array)
|
21
23
|
loader_names.each do |name|
|
24
|
+
raise LoaderNotFoundError, "bulk_loader :#{name} is not defined" unless @loader_of[name]
|
25
|
+
|
22
26
|
@loader_of[name].load(attrs.map { |attr| attr.lazy(name) }, *args)
|
23
27
|
end
|
24
28
|
end
|
@@ -32,6 +36,14 @@ module BulkLoader
|
|
32
36
|
"#<BulkLoader::ClassAttribute:#{object_id} #{loader_inspect}>"
|
33
37
|
end
|
34
38
|
|
39
|
+
def dup
|
40
|
+
new_object = self.class.new
|
41
|
+
each do |key, loader|
|
42
|
+
new_object.define_loader(key, loader)
|
43
|
+
end
|
44
|
+
new_object
|
45
|
+
end
|
46
|
+
|
35
47
|
private
|
36
48
|
|
37
49
|
def loader_inspect
|
data/lib/bulk_loader/dsl.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'weakref'
|
4
|
-
|
5
3
|
module BulkLoader
|
6
4
|
module DSL
|
7
5
|
module ClassMethods
|
@@ -9,7 +7,12 @@ module BulkLoader
|
|
9
7
|
# If you pass name, mapping, options argument, you can define loader
|
10
8
|
# if you does not want to export name to object, pass export: false to options.
|
11
9
|
def bulk_loader(*args, &block)
|
12
|
-
@bulk_loader ||=
|
10
|
+
@bulk_loader ||= if superclass.respond_to?(:bulk_loader)
|
11
|
+
superclass.bulk_loader.dup
|
12
|
+
else
|
13
|
+
BulkLoader::ClassAttribute.new
|
14
|
+
end
|
15
|
+
|
13
16
|
return @bulk_loader if args.empty?
|
14
17
|
|
15
18
|
name, mapping, options = *args
|
@@ -34,7 +37,7 @@ module BulkLoader
|
|
34
37
|
return @bulk_loader if @bulk_loader
|
35
38
|
|
36
39
|
class_attribute = self.class.bulk_loader
|
37
|
-
@bulk_loader = BulkLoader::Attribute.new(class_attribute,
|
40
|
+
@bulk_loader = BulkLoader::Attribute.new(class_attribute, self)
|
38
41
|
end
|
39
42
|
end
|
40
43
|
end
|
data/lib/bulk_loader/lazy.rb
CHANGED
data/lib/bulk_loader/loader.rb
CHANGED
@@ -35,6 +35,7 @@ module BulkLoader
|
|
35
35
|
end
|
36
36
|
result_of = @block.call(mapping_of.keys, *args)
|
37
37
|
raise 'block shuold return Hash' unless result_of.is_a?(Hash)
|
38
|
+
|
38
39
|
result_of
|
39
40
|
end
|
40
41
|
|
@@ -52,6 +53,7 @@ module BulkLoader
|
|
52
53
|
def set_result_to_lazy_objs(result_of, lazy_obj_of, mapping_of)
|
53
54
|
result_of.each do |mapped_target, value|
|
54
55
|
next unless mapping_of[mapped_target]
|
56
|
+
|
55
57
|
mapping_of[mapped_target].each do |target|
|
56
58
|
lazy_obj_of[target]&.set(value)
|
57
59
|
end
|
data/lib/bulk_loader/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bulk_loader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Keiji Yoshimi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-09-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -152,8 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
152
|
- !ruby/object:Gem::Version
|
153
153
|
version: '0'
|
154
154
|
requirements: []
|
155
|
-
|
156
|
-
rubygems_version: 2.6.14
|
155
|
+
rubygems_version: 3.0.3
|
157
156
|
signing_key:
|
158
157
|
specification_version: 4
|
159
158
|
summary: utility to avoid N+1 queries
|