bricolage 6.0.0beta1 → 6.0.0beta6

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
2
  SHA256:
3
- metadata.gz: 111b4bb62234f5a428ccd1da5a5ee2d6d4b1a051c8fda9ddd6fac3e590356797
4
- data.tar.gz: 77c3857f92a721503bd07f6e235c81f454d61e3a55e111e7a2c0ce72efa8f6ed
3
+ metadata.gz: d057475396d2f1e47cfccc490ec4ab07467c0056f519abd5a7c9bafdfdb63714
4
+ data.tar.gz: 252a0d2c7cb00f1fee102b25eec0b0f0a52919652f2210e2a8c877ec9e532638
5
5
  SHA512:
6
- metadata.gz: ca02be7fe28f3323f8dcfa1f9c88a0dd70050f7af75109ee077d0347a5f7a4420bb7f7a6b80d9ad207bd447b640089b979e319fa9ed3cf3465e11039327bc2f3
7
- data.tar.gz: 7d9d77d27f31d5368a694b9514a1276532335e1f980b2dd45fa77b7a4f30cc500b4dc1fb6a99a0a2f5dd35b42c9e155201764ba3d1d9a253b52790acf1f92857
6
+ metadata.gz: 685f46050cb796689a9756387dabad8dcae318e6f7ae342f130d0b470b2375986b36aba65284d3cb516bdf9630aae8372eb47426f314dd233abea50bc087c86b
7
+ data.tar.gz: b50a8d23ec9b1df0e0303b0d6dee90a1c896fabb085943557158e61504107b64fbeaadfc15b83931a56db987ad524933281403ef1f0c41f56e2a0e5b7ac8c043
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.0
data/README.md CHANGED
@@ -11,6 +11,9 @@ See LICENSES file for details.
11
11
 
12
12
  ## Running Test
13
13
 
14
+ Create bricolage_test database and user on your local machine.
15
+ See config/test/datasource.yml for details. Then type:
16
+
14
17
  % rake test
15
18
 
16
19
  ## How to use
data/RELEASE.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # Bricolage Release Note
2
2
 
3
+ ## version 6.0.0 beta 6
4
+
5
+ - [new] Now you can refer job file local variables from job parameters.
6
+
7
+ ## version 6.0.0 beta 5
8
+
9
+ - [new] Supports Ruby 3.0.
10
+
11
+ ## version 6.0.0 beta 4
12
+
13
+ - [fix] rebuild-rename did not work with ALTER RENAME syntax error.
14
+
15
+ ## version 6.0.0 beta 3
16
+
17
+ - [new] Upgrades pg from 0.18 to 1.2.
18
+
19
+ ## version 6.0.0 beta 2
20
+
21
+ - [fix] Always transmit error messages from jobs in the jobnet.
22
+
23
+ ## version 6.0.0 beta 1
24
+
25
+ - [new] Introduces database queue. Database queue saves job states in the PostgreSQL instance, we now can run bricolage on container environment.
26
+ - [new] Default log level is DEBUG on development environment, INFO on production environment.
27
+ - [new] Only updating query is logged as INFO level. Read-only queries are logged in DEBUG level.
28
+
3
29
  ## version 5.30.0
4
30
 
5
31
  - [new] streaming_load: new option --ctl-ds to change S3 data source for metadata files.
data/Rakefile CHANGED
@@ -1,3 +1,13 @@
1
+ require 'rake/testtask'
2
+
1
3
  task :test do
2
- load "#{__dir__}/test/all.rb"
4
+ desc 'Run tests'
5
+ Rake::TestTask.new do |t|
6
+ # To run test cases of specific file(s), Use:
7
+ # % rake test TEST=test/test_specified_path.rb
8
+ t.libs << "test"
9
+ t.test_files = Dir["test/**/test_*.rb"]
10
+ t.verbose = true
11
+ t.warning = true
12
+ end
3
13
  end
data/bricolage.gemspec CHANGED
@@ -16,12 +16,13 @@ Gem::Specification.new do |s|
16
16
  s.executables = s.files.grep(%r{bin/}).map {|path| File.basename(path) }
17
17
  s.require_path = 'lib'
18
18
 
19
- s.required_ruby_version = '>= 2.0.0'
20
- s.add_dependency 'pg', '~> 0.18.0'
21
- s.add_dependency 'aws-sdk-s3', '~> 1'
22
- s.add_dependency 'aws-sdk-sns', '~> 1'
23
- s.add_development_dependency 'test-unit'
24
- s.add_development_dependency 'rake'
25
- s.add_development_dependency 'mocha'
26
- s.add_development_dependency 'pry-byebug'
19
+ s.required_ruby_version = '>= 2.4.0'
20
+ s.add_dependency 'pg', '~> 1.2.3'
21
+ s.add_dependency 'aws-sdk-s3', '~> 1.64'
22
+ s.add_dependency 'aws-sdk-sns', '~> 1.23'
23
+ s.add_dependency 'nokogiri' # aws-sdk-core requires this
24
+ s.add_development_dependency 'test-unit', '~> 3.3'
25
+ s.add_development_dependency 'rake', '~> 13.0'
26
+ s.add_development_dependency 'mocha', '~> 1.11'
27
+ s.add_development_dependency 'pry-byebug', '~> 3.9'
27
28
  end
@@ -0,0 +1,9 @@
1
+ test_db:
2
+ type: psql
3
+ host: localhost
4
+ port: 5432
5
+ database: bricolage_test
6
+ username: bricolage_test
7
+ password: bricolage_test
8
+ encoding: utf8
9
+ sql_log_level: DEBUG
@@ -21,18 +21,18 @@ JobClass.define('rebuild-rename') {
21
21
 
22
22
  script {|params, script|
23
23
  script.task(params['data-source']) {|task|
24
- dest_table = '$dest_table'
25
- prev_table = '${dest_table}_old'
26
- work_table = '${dest_table}_wk'
24
+ dest_table = params['dest-table']
25
+ prev_table = TableSpec.parse("#{dest_table}_old")
26
+ work_table = TableSpec.parse("#{dest_table}_wk")
27
27
 
28
28
  task.transaction {
29
29
  # CREATE
30
30
  task.drop_force prev_table
31
31
  task.drop_force work_table
32
- task.exec params['table-def'].replace(/\$\{?dest_table\}?\b/, work_table)
32
+ task.exec params['table-def'].replace(/\$\{?dest_table\}?\b/, work_table.to_s)
33
33
 
34
34
  # INSERT
35
- task.exec params['sql-file'].replace(/\$\{?dest_table\}?\b/, work_table)
35
+ task.exec params['sql-file'].replace(/\$\{?dest_table\}?\b/, work_table.to_s)
36
36
 
37
37
  # GRANT
38
38
  task.grant_if params['grant'], work_table
@@ -45,8 +45,8 @@ JobClass.define('rebuild-rename') {
45
45
  # RENAME
46
46
  task.transaction {
47
47
  task.create_dummy_table dest_table
48
- task.rename_table dest_table, prev_table
49
- task.rename_table work_table, dest_table
48
+ task.rename_table dest_table, prev_table.name
49
+ task.rename_table work_table, dest_table.name
50
50
  }
51
51
  }
52
52
  }
@@ -144,7 +144,7 @@ class StreamingLoadJobClass < RubyJobClass
144
144
  @ds.open {|conn|
145
145
  execute_update conn, "delete #{log_table_wk};"
146
146
  execute_update conn, load_log_copy_stmt(log_table_wk, log_url, @src.credential_string)
147
- loaded, not_loaded = partition_loaded_objects(conn, objects, log_table_wk)
147
+ loaded, _not_loaded = partition_loaded_objects(conn, objects, log_table_wk)
148
148
  loaded.each do |obj|
149
149
  obj.dequeue(force: true, noop: @noop)
150
150
  end
@@ -32,7 +32,7 @@ module Bricolage
32
32
  end
33
33
 
34
34
  def eruby(text, path)
35
- erb = ERB.new(text, nil, '%-')
35
+ erb = ERB.new(text, trim_mode: '%-')
36
36
  erb.filename = path.to_s
37
37
  push_base_dir(path) {
38
38
  erb.result(binding())
@@ -141,7 +141,7 @@ module Bricolage
141
141
  end
142
142
 
143
143
  def clear_lock(jobnet_id)
144
- records = connect {|conn|
144
+ connect {|conn|
145
145
  conn.execute_update(<<~EndSQL)
146
146
  update jobnets
147
147
  set
@@ -6,7 +6,7 @@ module Bricolage
6
6
  class FileDataSource < DataSource
7
7
  declare_type 'file'
8
8
 
9
- def initialize(opts)
9
+ def initialize
10
10
  end
11
11
 
12
12
  def new_task
@@ -4,8 +4,7 @@ module Bricolage
4
4
  class GenericDataSource < DataSource
5
5
  declare_type 'generic'
6
6
 
7
- # FIXME: keyword argument placeholder is required
8
- def initialize(**)
7
+ def initialize
9
8
  end
10
9
 
11
10
  def new_task
data/lib/bricolage/job.rb CHANGED
@@ -6,6 +6,7 @@ require 'bricolage/variables'
6
6
  require 'bricolage/configloader'
7
7
  require 'bricolage/loglocator'
8
8
  require 'bricolage/exception'
9
+ require 'tmpdir'
9
10
  require 'fileutils'
10
11
 
11
12
  module Bricolage
@@ -50,6 +51,8 @@ module Bricolage
50
51
  end
51
52
 
52
53
  attr_reader :id
54
+ attr_reader :job_class
55
+ attr_reader :context
53
56
 
54
57
  def class_id
55
58
  @job_class.id
@@ -96,6 +99,7 @@ module Bricolage
96
99
  base_vars = Variables.union(
97
100
  # ^ Low precedence
98
101
  @global_variables,
102
+ job_file_rest_vars,
99
103
  cmd_v_opt_vars,
100
104
  job_v_opt_vars
101
105
  # v High precedence
@@ -151,9 +155,7 @@ module Bricolage
151
155
  end
152
156
 
153
157
  def execute_in_process(log_locator:)
154
- # ??? FIXME: status_path should be independent from log_path.
155
- # Also, status_path should be defined regardless of log_path.
156
- status_path = log_locator.path ? "#{log_locator.path}.status" : nil
158
+ status_path = "#{Dir.tmpdir}/bricolage.#{$$}.status.#{"%010x" % rand(1000000000000)}"
157
159
  isolate_process(status_path) {
158
160
  log_locator.redirect_stdouts {
159
161
  do_execute
@@ -57,7 +57,7 @@ module Bricolage
57
57
  case
58
58
  when seconds > 60 * 60
59
59
  h, secs = seconds.divmod(60 * 60)
60
- m, s = secs.divmod(60)
60
+ m, _sec = secs.divmod(60)
61
61
  "%d hours %d minutes" % [h, m]
62
62
  when seconds > 60
63
63
  "%d minutes %d seconds" % seconds.divmod(60)
@@ -117,21 +117,28 @@ module Bricolage
117
117
  raise ParameterError, "could not read password: #{path}, #{user}"
118
118
  end
119
119
 
120
- def open(&block)
120
+ def open
121
121
  retries = (ENV['BRICOLAGE_OPEN_RETRY_LIMIT'] || DEFAULT_RETRY_LIMIT).to_i
122
122
  begin
123
123
  conn = PostgresConnection.open_data_source(self)
124
- conn.execute_query('select 1'){}
124
+ conn.execute_query('select 1') {}
125
125
  rescue PG::ConnectionBad, PG::UnableToSend => ex
126
+ conn.close rescue nil
126
127
  retries -= 1
127
128
  if retries >= 0
128
- logger.warn "Retry PG connection for execute query: #{ex.message}"
129
+ logger.warn "Could not open postgres connection; retry: #{ex.message}"
129
130
  sleep 1
130
131
  retry
132
+ else
133
+ raise
131
134
  end
132
135
  end
133
136
  if block_given?
134
- yield conn
137
+ begin
138
+ yield conn
139
+ ensure
140
+ conn.close
141
+ end
135
142
  else
136
143
  return conn
137
144
  end
@@ -140,23 +147,35 @@ module Bricolage
140
147
  def open_shared_connection
141
148
  raise ParameterError, 'open_shared_connection require block' unless block_given?
142
149
  conn = nil
143
- if @connection_pool.empty?
144
- conn = open
145
- else
146
- begin
147
- conn = @connection_pool.shift
148
- conn.execute_query('select 1'){}
149
- rescue
150
- conn.close
150
+ until conn
151
+ if conn_tmp = @connection_pool.shift
152
+ begin
153
+ conn_tmp.query('select 1') {}
154
+ rescue PG::ConnectionBad, PG::UnableToSend
155
+ # retry
156
+ else
157
+ # no exception occured
158
+ conn = conn_tmp
159
+ conn_tmp = nil
160
+ ensure
161
+ if conn_tmp
162
+ conn_tmp.close
163
+ conn_tmp = nil
164
+ end
165
+ end
166
+ else
167
+ # Get a fresh connection instead of pooled connections.
151
168
  conn = open
152
169
  end
153
170
  end
154
-
155
- yield conn
156
- ensure
157
- @connection_pool.push(conn)
171
+ begin
172
+ yield conn
173
+ ensure
174
+ @connection_pool.push(conn)
175
+ end
158
176
  end
159
177
 
178
+ # not MT-safe
160
179
  def clear_connection_pool
161
180
  @connection_pool.map(&:close)
162
181
  @connection_pool = []
@@ -50,8 +50,7 @@ module Bricolage
50
50
  class RubyDataSource < DataSource
51
51
  declare_type 'ruby'
52
52
 
53
- # FIXME: keyword argument placeholder is required
54
- def initialize(**)
53
+ def initialize
55
54
  end
56
55
 
57
56
  def new_task
@@ -32,7 +32,7 @@ module Bricolage
32
32
 
33
33
  def psql_serialize_vacuum_end
34
34
  if enable_vacuum_lock?
35
- path, timeout = vacuum_lock_parameters
35
+ path, _timeout = vacuum_lock_parameters
36
36
  "\\! rm -f #{path}"
37
37
  else
38
38
  ';'
@@ -88,7 +88,7 @@ module Bricolage
88
88
 
89
89
  def VacuumLock.cleanup_vacuum_lock
90
90
  return unless enable_vacuum_lock?
91
- path, timeout = vacuum_lock_parameters
91
+ path, _timeout = vacuum_lock_parameters
92
92
  if locking?(path)
93
93
  $stderr.puts "remove VACUUM lock by #{Process.pid}"
94
94
  FileUtils.rm_f path
@@ -1,4 +1,4 @@
1
1
  module Bricolage
2
2
  APPLICATION_NAME = 'Bricolage'
3
- VERSION = '6.0.0beta1'
3
+ VERSION = '6.0.0beta6'
4
4
  end
data/schema/Dockerfile CHANGED
@@ -1,13 +1,16 @@
1
- FROM ruby:2.6.5-stretch
1
+ FROM ruby:3.0-slim
2
2
 
3
3
  RUN apt-get update -qq && apt-get install -y build-essential libpq-dev libpq5 postgresql-client
4
4
 
5
- COPY ./Gemfile /tmp/Gemfile
6
- COPY ./Gemfile.lock /tmp/Gemfile.lock
7
- RUN cd /tmp && bundle install -j4 --deployment --without 'development test'
8
-
9
5
  WORKDIR /app
10
- COPY . /app
11
- RUN cp -a /tmp/vendor /app/
6
+
7
+ COPY ./Gemfile .
8
+ COPY ./Gemfile.lock .
9
+ RUN gem install bundler:2.2.15 && \
10
+ bundle config set --local deployment true && \
11
+ bundle config set --local without 'development test' && \
12
+ bundle install -j4
13
+
14
+ COPY . .
12
15
 
13
16
  CMD ["bundle", "exec", "ridgepole", "-f", "Schemafile", "-c", "database.yml", "--merge", "--dry-run"]
data/schema/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem 'ridgepole'
4
+ gem 'activerecord', '~> 6.0.0' # activerecord 6.1 did not work with check_constraint
4
5
  gem 'pg'
data/schema/Gemfile.lock CHANGED
@@ -1,37 +1,38 @@
1
1
  GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
- activemodel (5.2.4.3)
5
- activesupport (= 5.2.4.3)
6
- activerecord (5.2.4.3)
7
- activemodel (= 5.2.4.3)
8
- activesupport (= 5.2.4.3)
9
- arel (>= 9.0)
10
- activesupport (5.2.4.3)
4
+ activemodel (6.0.3.6)
5
+ activesupport (= 6.0.3.6)
6
+ activerecord (6.0.3.6)
7
+ activemodel (= 6.0.3.6)
8
+ activesupport (= 6.0.3.6)
9
+ activesupport (6.0.3.6)
11
10
  concurrent-ruby (~> 1.0, >= 1.0.2)
12
11
  i18n (>= 0.7, < 2)
13
12
  minitest (~> 5.1)
14
13
  tzinfo (~> 1.1)
15
- arel (9.0.0)
16
- concurrent-ruby (1.1.6)
17
- diffy (3.3.0)
18
- i18n (1.8.2)
14
+ zeitwerk (~> 2.2, >= 2.2.2)
15
+ concurrent-ruby (1.1.8)
16
+ diffy (3.4.0)
17
+ i18n (1.8.10)
19
18
  concurrent-ruby (~> 1.0)
20
- minitest (5.14.1)
21
- pg (1.1.4)
22
- ridgepole (0.7.7)
23
- activerecord (>= 5.0.1, < 6)
19
+ minitest (5.14.4)
20
+ pg (1.2.3)
21
+ ridgepole (0.9.2)
22
+ activerecord (>= 5.1, < 6.2)
24
23
  diffy
25
24
  thread_safe (0.3.6)
26
- tzinfo (1.2.7)
25
+ tzinfo (1.2.9)
27
26
  thread_safe (~> 0.1)
27
+ zeitwerk (2.4.2)
28
28
 
29
29
  PLATFORMS
30
30
  ruby
31
31
 
32
32
  DEPENDENCIES
33
+ activerecord (~> 6.0.0)
33
34
  pg
34
35
  ridgepole
35
36
 
36
37
  BUNDLED WITH
37
- 1.17.2
38
+ 2.2.15
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bricolage
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.0beta1
4
+ version: 6.0.0beta6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Minero Aoki
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-27 00:00:00.000000000 Z
11
+ date: 2021-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg
@@ -16,98 +16,112 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.18.0
19
+ version: 1.2.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.18.0
26
+ version: 1.2.3
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: aws-sdk-s3
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1'
33
+ version: '1.64'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1'
40
+ version: '1.64'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: aws-sdk-sns
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1'
47
+ version: '1.23'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1'
54
+ version: '1.23'
55
55
  - !ruby/object:Gem::Dependency
56
- name: test-unit
56
+ name: nokogiri
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
- type: :development
62
+ type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: test-unit
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.3'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.3'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rake
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - ">="
87
+ - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '0'
89
+ version: '13.0'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - ">="
94
+ - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '0'
96
+ version: '13.0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: mocha
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - ">="
101
+ - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '0'
103
+ version: '1.11'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - ">="
108
+ - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: '0'
110
+ version: '1.11'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: pry-byebug
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
- - - ">="
115
+ - - "~>"
102
116
  - !ruby/object:Gem::Version
103
- version: '0'
117
+ version: '3.9'
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
- - - ">="
122
+ - - "~>"
109
123
  - !ruby/object:Gem::Version
110
- version: '0'
124
+ version: '3.9'
111
125
  description: Redshift-oriented Data Warehouse Batch Framework
112
126
  email: aamine@loveruby.net
113
127
  executables:
@@ -117,6 +131,7 @@ extensions: []
117
131
  extra_rdoc_files: []
118
132
  files:
119
133
  - ".gitignore"
134
+ - ".ruby-version"
120
135
  - Gemfile
121
136
  - LICENSES
122
137
  - README.md
@@ -125,6 +140,7 @@ files:
125
140
  - bin/bricolage
126
141
  - bin/bricolage-jobnet
127
142
  - bricolage.gemspec
143
+ - config/test/datasource.yml
128
144
  - jobclass/adhoc.rb
129
145
  - jobclass/create.rb
130
146
  - jobclass/createview.rb
@@ -194,7 +210,7 @@ homepage: https://github.com/bricolages/bricolage
194
210
  licenses:
195
211
  - MIT
196
212
  metadata: {}
197
- post_install_message:
213
+ post_install_message:
198
214
  rdoc_options: []
199
215
  require_paths:
200
216
  - lib
@@ -202,15 +218,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
202
218
  requirements:
203
219
  - - ">="
204
220
  - !ruby/object:Gem::Version
205
- version: 2.0.0
221
+ version: 2.4.0
206
222
  required_rubygems_version: !ruby/object:Gem::Requirement
207
223
  requirements:
208
224
  - - ">"
209
225
  - !ruby/object:Gem::Version
210
226
  version: 1.3.1
211
227
  requirements: []
212
- rubygems_version: 3.1.2
213
- signing_key:
228
+ rubygems_version: 3.2.3
229
+ signing_key:
214
230
  specification_version: 4
215
231
  summary: SQL Batch Framework
216
232
  test_files: []