db_fuel 1.1.0.pre.alpha → 1.2.1.pre.alpha.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -14,7 +14,8 @@ module DbFuel
14
14
  class Base < Burner::JobWithRegister
15
15
  attr_reader :model,
16
16
  :provider,
17
- :query
17
+ :query,
18
+ :debug
18
19
 
19
20
  # Arguments:
20
21
  # - model: Dbee Model configuration
@@ -25,13 +26,15 @@ module DbFuel
25
26
  name:,
26
27
  model: {},
27
28
  query: {},
28
- register: Burner::DEFAULT_REGISTER
29
+ register: Burner::DEFAULT_REGISTER,
30
+ debug: false
29
31
  )
30
32
  super(name: name, register: register)
31
33
 
32
34
  @model = ::Dbee::Model.make(model)
33
35
  @provider = ::Dbee::Providers::ActiveRecordProvider.new
34
36
  @query = ::Dbee::Query.make(query)
37
+ @debug = debug || false
35
38
 
36
39
  freeze
37
40
  end
@@ -47,6 +50,12 @@ module DbFuel
47
50
 
48
51
  payload[register] = records
49
52
  end
53
+
54
+ def debug_detail(output, message)
55
+ return unless debug
56
+
57
+ output.detail(message)
58
+ end
50
59
  end
51
60
  end
52
61
  end
@@ -18,16 +18,48 @@ module DbFuel
18
18
  # Expected Payload[register] input: nothing
19
19
  # Payload[register] output: array of objects.
20
20
  class Query < Base
21
+ # Arguments:
22
+ # - name: Name of job.
23
+ # - model: Dbee Model configuration
24
+ # - query: Dbee Query configuration
25
+ #
26
+ # - register: Name of the register to use for gathering the IN clause values and where
27
+ # to store the resulting recordset.
28
+ #
29
+ # - debug: If debug is set to true (defaults to false) then the SQL statements
30
+ # will be printed in the output. Only use this option while
31
+ # debugging issues as it will fill
32
+ # up the output with (potentially too much) data.
33
+ def initialize(
34
+ name:,
35
+ model: {},
36
+ query: {},
37
+ register: Burner::DEFAULT_REGISTER,
38
+ debug: false
39
+ )
40
+ super(
41
+ model: model,
42
+ name: name,
43
+ query: query,
44
+ register: register,
45
+ debug: debug
46
+ )
47
+ end
48
+
21
49
  def perform(output, payload)
22
- records = execute(sql)
50
+ records = execute(sql(output))
23
51
 
24
52
  load_register(records, output, payload)
25
53
  end
26
54
 
27
55
  private
28
56
 
29
- def sql
30
- ::Dbee.sql(model, query, provider)
57
+ def sql(output)
58
+ sql_statement = ::Dbee.sql(model, query, provider)
59
+
60
+ debug_detail(output, "Query SQL: #{sql_statement}")
61
+
62
+ sql_statement
31
63
  end
32
64
  end
33
65
  end
@@ -32,6 +32,11 @@ module DbFuel
32
32
  # - register: Name of the register to use for gathering the IN clause values and where
33
33
  # to store the resulting recordset.
34
34
  # - separator: Character to use to split the key-path for nested object support.
35
+ #
36
+ # - debug: If debug is set to true (defaults to false) then the SQL statements
37
+ # will be printed in the output. Only use this option while
38
+ # debugging issues as it will fill
39
+ # up the output with (potentially too much) data.
35
40
  def initialize(
36
41
  name:,
37
42
  key:,
@@ -39,7 +44,8 @@ module DbFuel
39
44
  model: {},
40
45
  query: {},
41
46
  register: Burner::DEFAULT_REGISTER,
42
- separator: ''
47
+ separator: '',
48
+ debug: false
43
49
  )
44
50
  raise ArgumentError, 'key is required' if key.to_s.empty?
45
51
 
@@ -51,12 +57,13 @@ module DbFuel
51
57
  model: model,
52
58
  name: name,
53
59
  query: query,
54
- register: register
60
+ register: register,
61
+ debug: debug
55
62
  )
56
63
  end
57
64
 
58
65
  def perform(output, payload)
59
- records = execute(sql(payload))
66
+ records = execute(sql(output, payload))
60
67
 
61
68
  load_register(records, output, payload)
62
69
  end
@@ -90,8 +97,13 @@ module DbFuel
90
97
  )
91
98
  end
92
99
 
93
- def sql(payload)
94
- ::Dbee.sql(model, compile_dbee_query(payload), provider)
100
+ def sql(output, payload)
101
+ dbee_query = compile_dbee_query(payload)
102
+ sql_statement = ::Dbee.sql(model, dbee_query, provider)
103
+
104
+ debug_detail(output, "Range SQL: #{sql_statement}")
105
+
106
+ sql_statement
95
107
  end
96
108
  end
97
109
  end
@@ -8,3 +8,4 @@
8
8
  #
9
9
 
10
10
  require_relative 'modeling/keyed_column'
11
+ require_relative 'modeling/attribute_renderer_set'
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright (c) 2020-present, Blue Marble Payroll, LLC
5
+ #
6
+ # This source code is licensed under the MIT license found in the
7
+ # LICENSE file in the root directory of this source tree.
8
+ #
9
+
10
+ module DbFuel
11
+ module Modeling
12
+ # Creates attribute renderers based on attributes passed.
13
+ # Also constains methods to transform attribute renderers
14
+ # and include timestamp attributes if needed.
15
+ class AttributeRendererSet
16
+ CREATED_AT = :created_at
17
+ NOW_TYPE = 'r/value/now'
18
+ UPDATED_AT = :updated_at
19
+
20
+ attr_reader :attribute_renderers, :resolver
21
+
22
+ def initialize(attributes: [], resolver: nil)
23
+ raise ArgumentError, 'resolver is required' unless resolver
24
+
25
+ @resolver = resolver
26
+ @attribute_renderers = make_attribute_renderers(attributes)
27
+
28
+ freeze
29
+ end
30
+
31
+ # Adds the attributes for created_at and updated_at to the currrent attribute renderers.
32
+ def timestamp_created_attribute_renderers
33
+ timestamp_attributes = [created_at_timestamp_attribute, updated_at_timestamp_attribute]
34
+
35
+ timestamp_attributes.map do |a|
36
+ Burner::Modeling::AttributeRenderer.new(a, resolver)
37
+ end + attribute_renderers
38
+ end
39
+
40
+ # Adds the attribute for updated_at to the currrent attribute renderers.
41
+ def timestamp_updated_attribute_renderers
42
+ timestamp_attributes = [updated_at_timestamp_attribute]
43
+
44
+ timestamp_attributes.map do |a|
45
+ Burner::Modeling::AttributeRenderer.new(a, resolver)
46
+ end + attribute_renderers
47
+ end
48
+
49
+ def make_attribute_renderers(attributes)
50
+ Burner::Modeling::Attribute
51
+ .array(attributes)
52
+ .map { |a| Burner::Modeling::AttributeRenderer.new(a, resolver) }
53
+ end
54
+
55
+ def transform(attribute_renderers, row, time)
56
+ attribute_renderers.each_with_object({}) do |attribute_renderer, memo|
57
+ value = attribute_renderer.transform(row, time)
58
+
59
+ resolver.set(memo, attribute_renderer.key, value)
60
+ end
61
+ end
62
+
63
+ private
64
+
65
+ def created_at_timestamp_attribute
66
+ timestamp_attribute(CREATED_AT)
67
+ end
68
+
69
+ def updated_at_timestamp_attribute
70
+ timestamp_attribute(UPDATED_AT)
71
+ end
72
+
73
+ def timestamp_attribute(key)
74
+ Burner::Modeling::Attribute.make(
75
+ key: key,
76
+ transformers: [
77
+ { type: NOW_TYPE }
78
+ ]
79
+ )
80
+ end
81
+ end
82
+ end
83
+ end
@@ -9,9 +9,9 @@
9
9
 
10
10
  module DbFuel
11
11
  module Modeling
12
- # Connects a hash key to a sql column. By default if a column is not given then its
12
+ # Connects a hash key to a SQL column. By default if a column is not given then its
13
13
  # key will be used for both. The general use case for this is for mapping objects
14
- # to sql and sql to objects.
14
+ # to SQL and SQL to objects.
15
15
  class KeyedColumn
16
16
  acts_as_hashable
17
17
 
@@ -8,5 +8,5 @@
8
8
  #
9
9
 
10
10
  module DbFuel
11
- VERSION = '1.1.0-alpha'
11
+ VERSION = '1.2.1-alpha.1'
12
12
  end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: db_fuel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0.pre.alpha
4
+ version: 1.2.1.pre.alpha.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Ruggio
8
- autorequire:
8
+ - John Bosko
9
+ autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2020-11-25 00:00:00.000000000 Z
12
+ date: 2021-01-15 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: activerecord
@@ -162,14 +163,14 @@ dependencies:
162
163
  requirements:
163
164
  - - "~>"
164
165
  - !ruby/object:Gem::Version
165
- version: 0.90.0
166
+ version: 1.7.0
166
167
  type: :development
167
168
  prerelease: false
168
169
  version_requirements: !ruby/object:Gem::Requirement
169
170
  requirements:
170
171
  - - "~>"
171
172
  - !ruby/object:Gem::Version
172
- version: 0.90.0
173
+ version: 1.7.0
173
174
  - !ruby/object:Gem::Dependency
174
175
  name: simplecov
175
176
  requirement: !ruby/object:Gem::Requirement
@@ -216,6 +217,7 @@ description: " This library adds database-centric jobs to the Burner library.
216
217
  does not ship with database jobs out of the box.\n"
217
218
  email:
218
219
  - mruggio@bluemarblepayroll.com
220
+ - jbosko@bluemarblepayroll.com
219
221
  executables: []
220
222
  extensions: []
221
223
  extra_rdoc_files: []
@@ -224,6 +226,7 @@ files:
224
226
  - ".gitignore"
225
227
  - ".rubocop.yml"
226
228
  - ".ruby-version"
229
+ - ".tool-versions"
227
230
  - ".travis.yml"
228
231
  - CHANGELOG.md
229
232
  - CODE_OF_CONDUCT.md
@@ -236,14 +239,19 @@ files:
236
239
  - db_fuel.gemspec
237
240
  - exe/.gitkeep
238
241
  - lib/db_fuel.rb
242
+ - lib/db_fuel/db_provider.rb
239
243
  - lib/db_fuel/library.rb
240
244
  - lib/db_fuel/library/active_record/base.rb
245
+ - lib/db_fuel/library/active_record/find_or_insert.rb
241
246
  - lib/db_fuel/library/active_record/insert.rb
242
247
  - lib/db_fuel/library/active_record/update.rb
248
+ - lib/db_fuel/library/active_record/update_all.rb
249
+ - lib/db_fuel/library/active_record/upsert.rb
243
250
  - lib/db_fuel/library/dbee/base.rb
244
251
  - lib/db_fuel/library/dbee/query.rb
245
252
  - lib/db_fuel/library/dbee/range.rb
246
253
  - lib/db_fuel/modeling.rb
254
+ - lib/db_fuel/modeling/attribute_renderer_set.rb
247
255
  - lib/db_fuel/modeling/keyed_column.rb
248
256
  - lib/db_fuel/version.rb
249
257
  homepage: https://github.com/bluemarblepayroll/db_fuel
@@ -255,7 +263,7 @@ metadata:
255
263
  documentation_uri: https://www.rubydoc.info/gems/db_fuel
256
264
  homepage_uri: https://github.com/bluemarblepayroll/db_fuel
257
265
  source_code_uri: https://github.com/bluemarblepayroll/db_fuel
258
- post_install_message:
266
+ post_install_message:
259
267
  rdoc_options: []
260
268
  require_paths:
261
269
  - lib
@@ -271,7 +279,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
271
279
  version: 1.3.1
272
280
  requirements: []
273
281
  rubygems_version: 3.0.3
274
- signing_key:
282
+ signing_key:
275
283
  specification_version: 4
276
284
  summary: Dbee and ActiveRecord jobs for Burner
277
285
  test_files: []