junk_drawer 1.8.0 → 2.1.0

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
2
  SHA256:
3
- metadata.gz: 3530e5bd07d747b2cd7d34ffe7b48df7833f031a1f5dc43ee9c803b1422bff7d
4
- data.tar.gz: 9abd08c0735f544d9e065b62df069a854e4e3411b3c3252b906c5a1682fdcece
3
+ metadata.gz: fb074cd886fb860ab99a8fef9fcd1b2437a082c3a14a924f1df363a2f2616523
4
+ data.tar.gz: dd1ea2729b10fa222cc49b7f3a73a7739bf6f1809713310f3df42fdb7eb9162b
5
5
  SHA512:
6
- metadata.gz: 349d50e5b1fe6c431fedb262a1736e922110ec414388b7efc43f73d348e0788be2f9535ffede6482eb25f2838b5aaedd7cc419da2874623df8fc71cd345b7737
7
- data.tar.gz: f8621c8eac83068c5e6d7efc832501cac8e2bb1d06ac7d3efdf729313400e83da01863c3a38e3a6cbd8e4ba9f8bfda24f7cf76e7e7fb57357ed8d59a1f3f6d57
6
+ metadata.gz: a21e6187ae652a1e7e3696cd5012f1bc4acf0c6af3f46e2782280b89d9a6aad4712aa33c83fe6396358d7a0743ad7c2c31fdeaef0c220517ce7955a253b72c58
7
+ data.tar.gz: 10c8f9997ef835f4dfb318ed9f9e7de52e357732d97e5165ccb0bfc4307228f16f1aaff878edbfa1e73dc88268344e6c83f721da6873383b176038965117e49f
@@ -9,11 +9,14 @@ on:
9
9
  jobs:
10
10
  test:
11
11
  runs-on: ubuntu-latest
12
+ env:
13
+ BUNDLE_GEMFILE: gemfiles/rails_${{ matrix.rails }}.gems
12
14
  strategy:
13
15
  matrix:
14
- ruby: [2.4, 2.5, 2.6, 2.7]
15
- postgres: [10, 11, 12, 13, 14]
16
- name: Ruby ${{ matrix.ruby }} x Postgres ${{ matrix.postgres }}
16
+ ruby: ['3.0', '3.1', '3.2']
17
+ postgres: [12, 13, 14]
18
+ rails: ['7.0']
19
+ name: Ruby ${{ matrix.ruby }} x Postgres ${{ matrix.postgres }} x Rails ${{ matrix.rails }}
17
20
 
18
21
  services:
19
22
  postgres:
data/.rubocop.yml CHANGED
@@ -1,9 +1,18 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
1
3
  require: rubocop-rspec
2
4
 
3
5
  AllCops:
4
6
  DefaultFormatter: fuubar
5
7
  TargetRubyVersion: 2.3
6
8
  DisplayCopNames: true
9
+ NewCops: enable
10
+
11
+ Layout/AccessModifierIndentation:
12
+ EnforcedStyle: outdent
13
+
14
+ Layout/EmptyLinesAroundClassBody:
15
+ EnforcedStyle: empty_lines
7
16
 
8
17
  Lint/AmbiguousBlockAssociation:
9
18
  Exclude:
@@ -13,27 +22,34 @@ Metrics/AbcSize:
13
22
  Exclude:
14
23
  - lib/junk_drawer/rails/bulk_updatable.rb
15
24
 
16
- Metrics/MethodLength:
17
- Exclude:
18
- - lib/junk_drawer/rails/bulk_updatable.rb
19
-
20
25
  Metrics/BlockLength:
21
26
  Exclude:
22
27
  - junk_drawer.gemspec
23
28
  - spec/**/*
24
29
 
30
+ Metrics/MethodLength:
31
+ Exclude:
32
+ - lib/junk_drawer/rails/bulk_updatable.rb
33
+
34
+ Naming/VariableNumber:
35
+ EnforcedStyle: snake_case
36
+
37
+ RSpec/AnyInstance: { Enabled: false } # broken, re-enable after upgrade
38
+ RSpec/DescribeClass: { Enabled: false } # broken, re-enable after upgrade
39
+
25
40
  RSpec/ExampleLength:
26
41
  Enabled: false
27
42
 
43
+ RSpec/FilePath:
44
+ IgnoreMethods: true
45
+ Exclude:
46
+ - spec/junk_drawer/rails/bulk_updatable_spec.rb
47
+
28
48
  RSpec/MultipleExpectations:
29
49
  Enabled: false
30
50
 
31
- # default disabled rules
32
- Style/AutoResourceCleanup:
33
- Enabled: true
34
-
51
+ # non-conventional rules
35
52
  Style/CollectionMethods:
36
- Enabled: true
37
53
  PreferredMethods:
38
54
  collect: 'map'
39
55
  collect!: 'map!'
@@ -41,62 +57,14 @@ Style/CollectionMethods:
41
57
  find: 'detect'
42
58
  find_all: 'select'
43
59
 
44
- Style/FirstArrayElementLineBreak:
45
- Enabled: true
46
-
47
- Style/FirstHashElementLineBreak:
48
- Enabled: true
49
-
50
- Style/FirstMethodArgumentLineBreak:
51
- Enabled: true
52
-
53
- Style/FirstMethodParameterLineBreak:
54
- Enabled: true
55
-
56
- Style/MultilineArrayBraceLayout:
57
- Enabled: true
58
-
59
- Style/MultilineHashBraceLayout:
60
- Enabled: true
61
-
62
- Style/MultilineMethodCallBraceLayout:
63
- Enabled: true
64
-
65
- Style/MultilineMethodDefinitionBraceLayout:
66
- Enabled: true
67
-
68
- Style/OptionHash:
69
- Enabled: true
70
-
71
- Style/Send:
72
- Enabled: true
73
-
74
- RSpec/FilePath:
75
- IgnoreMethods: true
76
- Exclude:
77
- - spec/junk_drawer/rails/bulk_updatable_spec.rb
78
-
79
- RSpec/VerifiedDoubles:
80
- Enabled: true
81
-
82
- # non-conventional rules
83
60
  Style/LambdaCall:
84
61
  EnforcedStyle: braces
85
62
 
86
- Style/EmptyLinesAroundClassBody:
87
- EnforcedStyle: empty_lines
88
-
89
- Style/AccessModifierIndentation:
90
- EnforcedStyle: outdent
91
-
92
- Style/TrailingCommaInLiteral:
93
- EnforcedStyleForMultiline: comma
94
-
95
63
  Style/TrailingCommaInArguments:
96
64
  EnforcedStyleForMultiline: consistent_comma
97
65
 
98
- Style/TrailingCommaInArguments:
99
- EnforcedStyleForMultiline: consistent_comma
66
+ Style/TrailingCommaInArrayLiteral:
67
+ EnforcedStyleForMultiline: comma
100
68
 
101
- Style/VariableNumber:
102
- EnforcedStyle: snake_case
69
+ Style/TrailingCommaInHashLiteral:
70
+ EnforcedStyleForMultiline: comma
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,111 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config --auto-gen-only-exclude --exclude-limit 400`
3
+ # on 2023-05-16 20:46:21 UTC using RuboCop version 1.49.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 1
10
+ # This cop supports safe autocorrection (--autocorrect).
11
+ # Configuration parameters: Severity, Include.
12
+ # Include: **/*.gemspec
13
+ Gemspec/RequireMFA:
14
+ Exclude:
15
+ - 'junk_drawer.gemspec'
16
+
17
+ # Offense count: 1
18
+ # Configuration parameters: Severity, Include.
19
+ # Include: **/*.gemspec
20
+ Gemspec/RequiredRubyVersion:
21
+ Exclude:
22
+ - 'junk_drawer.gemspec'
23
+
24
+ # Offense count: 2
25
+ # This cop supports safe autocorrection (--autocorrect).
26
+ # Configuration parameters: EnforcedStyle, IndentationWidth.
27
+ # SupportedStyles: aligned, indented
28
+ Layout/LineEndStringConcatenationIndentation:
29
+ Exclude:
30
+ - 'lib/junk_drawer/callable.rb'
31
+ - 'lib/junk_drawer/rails/bulk_updatable.rb'
32
+
33
+ # Offense count: 4
34
+ # This cop supports safe autocorrection (--autocorrect).
35
+ # Configuration parameters: EnforcedStyle, IndentationWidth.
36
+ # SupportedStyles: aligned, indented, indented_relative_to_receiver
37
+ Layout/MultilineMethodCallIndentation:
38
+ Exclude:
39
+ - 'spec/support/shared_examples/bulk_updatable_model.rb'
40
+
41
+ # Offense count: 14
42
+ # Configuration parameters: AllowedMethods.
43
+ # AllowedMethods: enums
44
+ Lint/ConstantDefinitionInBlock:
45
+ Exclude:
46
+ - 'spec/junk_drawer/callable_spec.rb'
47
+ - 'spec/junk_drawer/notifier/honeybadger_strategy_spec.rb'
48
+ - 'spec/junk_drawer/notifier/null_strategy_spec.rb'
49
+ - 'spec/support/shared_examples/bulk_updatable_model.rb'
50
+
51
+ # Offense count: 1
52
+ # Configuration parameters: MaximumRangeSize.
53
+ Lint/MissingCopEnableDirective:
54
+ Exclude:
55
+ - 'spec/junk_drawer/callable_spec.rb'
56
+
57
+ # Offense count: 1
58
+ Lint/MissingSuper:
59
+ Exclude:
60
+ - 'lib/junk_drawer/callable.rb'
61
+
62
+ # Offense count: 1
63
+ # Configuration parameters: AllowedMethods, AllowedPatterns, Max.
64
+ Metrics/CyclomaticComplexity:
65
+ Exclude:
66
+ - 'lib/junk_drawer/rails/bulk_updatable.rb'
67
+
68
+ # Offense count: 1
69
+ # Configuration parameters: CountComments, Max, CountAsOne.
70
+ Metrics/ModuleLength:
71
+ Exclude:
72
+ - 'lib/junk_drawer/rails/bulk_updatable.rb'
73
+
74
+ # Offense count: 1
75
+ # This cop supports safe autocorrection (--autocorrect).
76
+ # Configuration parameters: EnforcedStyle.
77
+ # SupportedStyles: be, be_nil
78
+ RSpec/BeNil:
79
+ Exclude:
80
+ - 'spec/junk_drawer_spec.rb'
81
+
82
+ # Offense count: 5
83
+ # This cop supports unsafe autocorrection (--autocorrect-all).
84
+ # Configuration parameters: SkipBlocks, EnforcedStyle.
85
+ # SupportedStyles: described_class, explicit
86
+ RSpec/DescribedClass:
87
+ Exclude:
88
+ - 'spec/junk_drawer/notifier_spec.rb'
89
+ - 'spec/junk_drawer/rails/bulk_updatable_spec.rb'
90
+
91
+ # Offense count: 14
92
+ RSpec/LeakyConstantDeclaration:
93
+ Exclude:
94
+ - 'spec/junk_drawer/callable_spec.rb'
95
+ - 'spec/junk_drawer/notifier/honeybadger_strategy_spec.rb'
96
+ - 'spec/junk_drawer/notifier/null_strategy_spec.rb'
97
+ - 'spec/support/shared_examples/bulk_updatable_model.rb'
98
+
99
+ # Offense count: 1
100
+ RSpec/StubbedMock:
101
+ Exclude:
102
+ - 'spec/junk_drawer/callable_spec.rb'
103
+
104
+ # Offense count: 2
105
+ # This cop supports safe autocorrection (--autocorrect).
106
+ # Configuration parameters: EnforcedStyle.
107
+ # SupportedStyles: braces, no_braces
108
+ Style/HashAsLastArrayItem:
109
+ Exclude:
110
+ - 'spec/junk_drawer/notifier/honeybadger_strategy_spec.rb'
111
+ - 'spec/support/shared_examples/bulk_updatable_model.rb'
data/Gemfile CHANGED
@@ -3,8 +3,3 @@
3
3
  source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
-
7
- gem 'activerecord', '~> 5.2.0'
8
- gem 'activesupport', '~> 5.2.0'
9
- gem 'hstore_accessor', '~> 1.1.1'
10
- gem 'jsonb_accessor', '~> 1.3.6'
data/README.md CHANGED
@@ -219,7 +219,8 @@ MyModel.bulk_update([my_model_1, my_model_2])
219
219
  ```
220
220
 
221
221
  This will generate a single SQL query to update both of the records in the
222
- database.
222
+ database. If `prepared_statements` is set to true, `BulkUpdatable` will generate
223
+ queries that use bind parameters.
223
224
 
224
225
  #### Caveats
225
226
 
@@ -255,7 +256,7 @@ In order to run tests against different Rails versions, you can use
255
256
  `BUNDLE_GEMFILE`:
256
257
 
257
258
  ```sh
258
- $ BUNDLE_GEMFILE=gemfiles/rails_4.2.gems rake spec
259
+ $ BUNDLE_GEMFILE=gemfiles/rails_7.0.gems rake spec
259
260
  ```
260
261
 
261
262
  ## Contributing
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec path: '../'
6
+
7
+ gem 'activerecord', '~> 7.0.0'
8
+ gem 'activesupport', '~> 7.0.0'
9
+ gem 'jsonb_accessor', '~> 1.3'
10
+ gem 'pg', '~> 1.4'
data/junk_drawer.gemspec CHANGED
@@ -21,17 +21,15 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.required_ruby_version = '>= 2.1'
23
23
 
24
- spec.add_runtime_dependency 'ruby2_keywords', '~> 0.0.2'
25
24
  spec.add_development_dependency 'guard', '~> 2.14'
26
25
  spec.add_development_dependency 'guard-rspec', '~> 4.7'
27
26
  spec.add_development_dependency 'guard-rubocop', '~> 1.2'
28
- spec.add_development_dependency 'pg', '~> 0.20'
29
27
  spec.add_development_dependency 'pry', '~> 0.10'
30
- spec.add_development_dependency 'pry-byebug', '~> 3.6.0'
31
- spec.add_development_dependency 'rake', '~> 12.0'
28
+ spec.add_development_dependency 'pry-byebug', '~> 3.10.1'
29
+ spec.add_development_dependency 'rake', '~> 13.0'
32
30
  spec.add_development_dependency 'rspec', '~> 3.0'
33
- spec.add_development_dependency 'rubocop', '~> 0.48.1'
34
- spec.add_development_dependency 'rubocop-rspec', '~> 1.15.0'
31
+ spec.add_development_dependency 'rubocop', '1.49.0'
32
+ spec.add_development_dependency 'rubocop-rspec', '2.19.0'
35
33
  spec.add_development_dependency 'simplecov', '~> 0.14'
36
34
  spec.add_development_dependency 'with_model', '~> 2.0'
37
35
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ruby2_keywords'
4
-
5
3
  module JunkDrawer
6
4
  # error to be thrown by Callable
7
5
  class CallableError < StandardError
@@ -21,8 +19,8 @@ module JunkDrawer
21
19
  # an instance. It also causes an error to be raised if a public instance
22
20
  # method is defined with a name other than `call`
23
21
  module ClassMethods
24
- ruby2_keywords def call(*args, &block)
25
- new.(*args, &block)
22
+ def call(*args, **kwargs, &block)
23
+ new.(*args, **kwargs, &block)
26
24
  end
27
25
 
28
26
  def to_proc
@@ -27,8 +27,8 @@ module JunkDrawer
27
27
  null: NullStrategy,
28
28
  }.freeze
29
29
 
30
- def call(*args)
31
- self.class.strategy.(*args)
30
+ def call(*args, **kwargs)
31
+ self.class.strategy.(*args, **kwargs)
32
32
  end
33
33
 
34
34
  end
@@ -3,6 +3,7 @@
3
3
  require 'active_support/all'
4
4
  require 'active_record'
5
5
  require 'active_record/connection_adapters/postgresql_adapter'
6
+ require 'active_record/relation/query_attribute'
6
7
 
7
8
  module JunkDrawer
8
9
  # module to allow bulk updates for `ActiveRecord` models
@@ -11,15 +12,35 @@ module JunkDrawer
11
12
  objects = objects.select(&:changed?)
12
13
  return unless objects.any?
13
14
 
14
- unique_objects = uniquify_and_merge(objects)
15
- changed_attributes = extract_changed_attributes(unique_objects)
16
- query = build_query_for(unique_objects, changed_attributes)
17
- connection.execute(query)
15
+ if connection.prepared_statements
16
+ build_and_exec_prepared_query(objects)
17
+ else
18
+ build_and_exec_unprepared_query(objects)
19
+ end
18
20
  objects.each(&:changes_applied)
19
21
  end
20
22
 
21
23
  private
22
24
 
25
+ def build_and_exec_prepared_query(objects)
26
+ unique_objects = uniquify_and_merge(objects)
27
+ changed_attributes = extract_changed_attributes(unique_objects)
28
+ changed_attributes.unshift('id')
29
+
30
+ unique_objects.each_slice(batch_size(changed_attributes)) do |batch|
31
+ query = build_prepared_query_for(batch, changed_attributes)
32
+ values = values_for_objects(batch, changed_attributes)
33
+ connection.exec_query(query, "#{name} Bulk Update", values, prepare: true)
34
+ end
35
+ end
36
+
37
+ def build_and_exec_unprepared_query(objects)
38
+ unique_objects = uniquify_and_merge(objects)
39
+ changed_attributes = extract_changed_attributes(unique_objects)
40
+ query = build_unprepared_query_for(unique_objects, changed_attributes)
41
+ connection.execute(query)
42
+ end
43
+
23
44
  def uniquify_and_merge(objects)
24
45
  grouped_objects = objects.group_by(&:id).values
25
46
  grouped_objects.each do |group|
@@ -40,19 +61,20 @@ module JunkDrawer
40
61
  objects.each { |object| object.updated_at = now }
41
62
 
42
63
  changed_attributes = objects.flat_map(&:changed).uniq
43
- if ::ActiveRecord::VERSION::MAJOR >= 5
44
- column_names & changed_attributes
45
- else
46
- # to remove virtual columns from jsonb_accessor 0.3.3
47
- columns.select(&:sql_type).map(&:name) & changed_attributes
48
- end
64
+ column_names & changed_attributes
49
65
  end
50
66
 
51
- def build_query_for(objects, attributes)
52
- object_values = objects.map do |object|
53
- sanitized_values(object, attributes)
54
- end.join(', ')
67
+ def build_unprepared_query_for(objects, attributes)
68
+ object_values = objects.map { |object| sanitized_values(object, attributes) }
69
+ build_query_for(attributes.unshift('id'), object_values.join(', '))
70
+ end
71
+
72
+ def build_prepared_query_for(objects, attributes)
73
+ object_placeholders = build_placeholders(objects, attributes)
74
+ build_query_for(attributes, object_placeholders)
75
+ end
55
76
 
77
+ def build_query_for(attributes, values)
56
78
  assignment_query = attributes.map do |attribute|
57
79
  quoted_column_name = connection.quote_column_name(attribute)
58
80
  "#{quoted_column_name} = tmp_table.#{quoted_column_name}"
@@ -60,11 +82,50 @@ module JunkDrawer
60
82
 
61
83
  "UPDATE #{table_name} " \
62
84
  "SET #{assignment_query} " \
63
- "FROM (VALUES #{object_values}) " \
64
- "AS tmp_table(id, #{attributes.join(', ')}) " \
85
+ "FROM (VALUES #{values}) " \
86
+ "AS tmp_table(#{attributes.join(', ')}) " \
65
87
  "WHERE #{table_name}.id = tmp_table.id"
66
88
  end
67
89
 
90
+ def build_placeholders(objects, attributes)
91
+ index = 0
92
+ objects.map do
93
+ attribute_placeholders = attributes.map do |attribute|
94
+ index += 1
95
+ attribute_placeholder(attribute, index)
96
+ end.join(', ')
97
+
98
+ "(#{attribute_placeholders})"
99
+ end.join(', ')
100
+ end
101
+
102
+ def attribute_placeholder(attribute, index)
103
+ # AR internal `columns_hash`
104
+ column = columns_hash[attribute.to_s]
105
+
106
+ type_cast = "::#{column.sql_type}"
107
+ type_cast = "#{type_cast}[]" if column.array
108
+
109
+ "$#{index}#{type_cast}"
110
+ end
111
+
112
+ def values_for_objects(objects, attributes)
113
+ objects.flat_map { |object| values_for_object(object, attributes) }
114
+ end
115
+
116
+ def values_for_object(object, attributes)
117
+ attributes.map do |attribute|
118
+ value = object[attribute]
119
+
120
+ # AR internal `columns_hash`
121
+ column = columns_hash[attribute.to_s]
122
+
123
+ # AR internal `type_for_attribute`
124
+ type = type_for_attribute(column.name)
125
+ ActiveRecord::Relation::QueryAttribute.new(column.name, value, type)
126
+ end
127
+ end
128
+
68
129
  def sanitized_values(object, attributes)
69
130
  postgres_values = attributes.map do |attribute|
70
131
  value = object[attribute]
@@ -77,18 +138,15 @@ module JunkDrawer
77
138
  type_cast = "::#{column.sql_type}"
78
139
  type_cast = "#{type_cast}[]" if column.array
79
140
 
80
- "#{connection.quote(serialized_value(type, value))}#{type_cast}"
141
+ "#{connection.quote(type.serialize(value))}#{type_cast}"
81
142
  end
82
143
 
83
144
  "(#{[object.id, *postgres_values].join(', ')})"
84
145
  end
85
146
 
86
- def serialized_value(type, value)
87
- if ::ActiveRecord::VERSION::MAJOR >= 5
88
- type.serialize(value)
89
- else
90
- type.type_cast_for_database(value)
91
- end
147
+ def batch_size(attribute_names)
148
+ max_bind_params = connection.__send__(:bind_params_length)
149
+ max_bind_params / attribute_names.length
92
150
  end
93
151
  end
94
152
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JunkDrawer
4
- VERSION = '1.8.0'
4
+ VERSION = '2.1.0'
5
5
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: junk_drawer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Fletcher
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-11-28 00:00:00.000000000 Z
11
+ date: 2023-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: ruby2_keywords
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 0.0.2
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: 0.0.2
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: guard
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -66,20 +52,6 @@ dependencies:
66
52
  - - "~>"
67
53
  - !ruby/object:Gem::Version
68
54
  version: '1.2'
69
- - !ruby/object:Gem::Dependency
70
- name: pg
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '0.20'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '0.20'
83
55
  - !ruby/object:Gem::Dependency
84
56
  name: pry
85
57
  requirement: !ruby/object:Gem::Requirement
@@ -100,28 +72,28 @@ dependencies:
100
72
  requirements:
101
73
  - - "~>"
102
74
  - !ruby/object:Gem::Version
103
- version: 3.6.0
75
+ version: 3.10.1
104
76
  type: :development
105
77
  prerelease: false
106
78
  version_requirements: !ruby/object:Gem::Requirement
107
79
  requirements:
108
80
  - - "~>"
109
81
  - !ruby/object:Gem::Version
110
- version: 3.6.0
82
+ version: 3.10.1
111
83
  - !ruby/object:Gem::Dependency
112
84
  name: rake
113
85
  requirement: !ruby/object:Gem::Requirement
114
86
  requirements:
115
87
  - - "~>"
116
88
  - !ruby/object:Gem::Version
117
- version: '12.0'
89
+ version: '13.0'
118
90
  type: :development
119
91
  prerelease: false
120
92
  version_requirements: !ruby/object:Gem::Requirement
121
93
  requirements:
122
94
  - - "~>"
123
95
  - !ruby/object:Gem::Version
124
- version: '12.0'
96
+ version: '13.0'
125
97
  - !ruby/object:Gem::Dependency
126
98
  name: rspec
127
99
  requirement: !ruby/object:Gem::Requirement
@@ -140,30 +112,30 @@ dependencies:
140
112
  name: rubocop
141
113
  requirement: !ruby/object:Gem::Requirement
142
114
  requirements:
143
- - - "~>"
115
+ - - '='
144
116
  - !ruby/object:Gem::Version
145
- version: 0.48.1
117
+ version: 1.49.0
146
118
  type: :development
147
119
  prerelease: false
148
120
  version_requirements: !ruby/object:Gem::Requirement
149
121
  requirements:
150
- - - "~>"
122
+ - - '='
151
123
  - !ruby/object:Gem::Version
152
- version: 0.48.1
124
+ version: 1.49.0
153
125
  - !ruby/object:Gem::Dependency
154
126
  name: rubocop-rspec
155
127
  requirement: !ruby/object:Gem::Requirement
156
128
  requirements:
157
- - - "~>"
129
+ - - '='
158
130
  - !ruby/object:Gem::Version
159
- version: 1.15.0
131
+ version: 2.19.0
160
132
  type: :development
161
133
  prerelease: false
162
134
  version_requirements: !ruby/object:Gem::Requirement
163
135
  requirements:
164
- - - "~>"
136
+ - - '='
165
137
  - !ruby/object:Gem::Version
166
- version: 1.15.0
138
+ version: 2.19.0
167
139
  - !ruby/object:Gem::Dependency
168
140
  name: simplecov
169
141
  requirement: !ruby/object:Gem::Requirement
@@ -203,6 +175,7 @@ files:
203
175
  - ".gitignore"
204
176
  - ".rspec"
205
177
  - ".rubocop.yml"
178
+ - ".rubocop_todo.yml"
206
179
  - CODE_OF_CONDUCT.md
207
180
  - Gemfile
208
181
  - Guardfile
@@ -211,9 +184,7 @@ files:
211
184
  - Rakefile
212
185
  - bin/console
213
186
  - bin/setup
214
- - bin/test
215
- - gemfiles/rails_4.2.gems
216
- - gemfiles/rails_5.0.gems
187
+ - gemfiles/rails_7.0.gems
217
188
  - junk_drawer.gemspec
218
189
  - lib/junk_drawer.rb
219
190
  - lib/junk_drawer/callable.rb
@@ -243,7 +214,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
243
214
  - !ruby/object:Gem::Version
244
215
  version: '0'
245
216
  requirements: []
246
- rubygems_version: 3.2.32
217
+ rubygems_version: 3.4.10
247
218
  signing_key:
248
219
  specification_version: 4
249
220
  summary: random useful Ruby utilities
data/bin/test DELETED
@@ -1,3 +0,0 @@
1
- (export BUNDLE_GEMFILE=Gemfile; bundle && bundle exec rake)
2
- (export BUNDLE_GEMFILE=gemfiles/rails_5.0.gems; bundle && bundle exec rake spec)
3
- (export BUNDLE_GEMFILE=gemfiles/rails_4.2.gems; bundle && bundle exec rake spec)
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- gemspec path: '../'
6
-
7
- gem 'activerecord', '~> 4.2.0'
8
- gem 'activesupport', '~> 4.2.0'
9
- gem 'hstore_accessor', '~> 1.1.1'
10
- gem 'jsonb_accessor', '~> 0.3.3'
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- gemspec path: '../'
6
-
7
- gem 'activerecord', '~> 5.0.0'
8
- gem 'activesupport', '~> 5.0.0'
9
- gem 'hstore_accessor', '~> 1.1.1'
10
- gem 'jsonb_accessor', '~> 1.0.0'