journaled 4.1.0 → 4.2.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: 88602263644ea51719a18c5ee3e719d2c13a9e69049e1f20a52a44edc38a0835
4
- data.tar.gz: c7cafdb9f305e51c3590d09815d5d6f909db496866c774ab442ffaa334be927c
3
+ metadata.gz: bfdabb8b24bdfdf23c4f77ec819f03e89a4a0239ed997368eb1f07ac0bc2cd5b
4
+ data.tar.gz: 97eeec1dfa22f7b683f23e322eb663e6fae4b47e0c2786690c4f44166b8cca51
5
5
  SHA512:
6
- metadata.gz: 6bf229efd53882ed50931c964c1564b01603fa22ea2083b8a6039d0a0ed972d2cdc7bfc5913a9e9539d7dd023294c2a226963e2e2a526bf857926afe3e0c76c0
7
- data.tar.gz: cf7b28c58c40c9ee8348df60095a7b544c0a8b0ea448ffa20021aceda61ae2feda61110ef9685756d4bac7d3d887e12a181f1840d435b2d2f85aeba5d8a52e45
6
+ metadata.gz: 78c8b888f9c00a084e8d60c2f271d56a9a188f60287cb30edfbadc7a4f9fc1c3fc3210c763e757658a0040fb57f6f94f1a713fc1f95942db801e2e114dd50ec3
7
+ data.tar.gz: f0e56609680ecfc3e1f3f3a9d2ba801515762311307f0a208757a70a82ff7c37ba6af040f8ee5a64ebbf7a08a910579c27d65e940680b2406383b8eca022f323
data/Rakefile CHANGED
@@ -4,37 +4,23 @@ rescue LoadError
4
4
  puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
5
  end
6
6
 
7
- require 'rdoc/task'
8
-
9
- RDoc::Task.new(:rdoc) do |rdoc|
10
- rdoc.rdoc_dir = 'rdoc'
11
- rdoc.title = 'Journaled'
12
- rdoc.options << '--line-numbers'
13
- rdoc.rdoc_files.include('README.rdoc')
14
- rdoc.rdoc_files.include('lib/**/*.rb')
15
- end
16
-
17
- APP_RAKEFILE = File.expand_path('spec/dummy/Rakefile', __dir__)
18
- load 'rails/tasks/engine.rake'
19
-
20
7
  Bundler::GemHelper.install_tasks
21
8
 
22
- if %w(development test).include? Rails.env
23
- require 'rspec/core'
24
- require 'rspec/core/rake_task'
25
- RSpec::Core::RakeTask.new
9
+ require 'rubocop/rake_task'
10
+ RuboCop::RakeTask.new
26
11
 
27
- require 'rubocop/rake_task'
28
- RuboCop::RakeTask.new
12
+ require 'rspec/core'
13
+ require 'rspec/core/rake_task'
14
+ RSpec::Core::RakeTask.new(:spec)
29
15
 
30
- task(:default).clear
16
+ def default_task
31
17
  if ENV['APPRAISAL_INITIALIZED'] || ENV['CI']
32
- task default: %i(rubocop spec)
18
+ %i(rubocop spec)
33
19
  else
34
20
  require 'appraisal'
35
21
  Appraisal::Task.new
36
- task default: :appraisal
22
+ %i(appraisal)
37
23
  end
38
-
39
- task 'db:test:prepare' => 'db:setup'
40
24
  end
25
+
26
+ task(:default).clear.enhance(default_task)
@@ -39,8 +39,8 @@ module Journaled::Changes
39
39
  end
40
40
  end
41
41
 
42
- def update_columns(attributes, force: false)
43
- unless force || self.class.journaled_attribute_names.empty?
42
+ def update_columns(attributes, opts = { force: false })
43
+ unless opts[:force] || self.class.journaled_attribute_names.empty?
44
44
  conflicting_journaled_attribute_names = self.class.journaled_attribute_names & attributes.keys.map(&:to_sym)
45
45
  raise(<<~ERROR) if conflicting_journaled_attribute_names.present?
46
46
  #update_columns aborted by Journaled::Changes due to journaled attributes:
@@ -56,7 +56,7 @@ module Journaled::Changes
56
56
  end
57
57
 
58
58
  class_methods do
59
- def journal_changes_to(*attribute_names, as:, enqueue_with: {}) # rubocop:disable Naming/UncommunicativeMethodParamName
59
+ def journal_changes_to(*attribute_names, as:, enqueue_with: {}) # rubocop:disable Naming/MethodParameterName
60
60
  if attribute_names.empty? || attribute_names.any? { |n| !n.is_a?(Symbol) }
61
61
  raise "one or more symbol attribute_name arguments is required"
62
62
  end
@@ -69,8 +69,8 @@ module Journaled::Changes
69
69
  end
70
70
 
71
71
  if Rails::VERSION::MAJOR > 5 || (Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR >= 2)
72
- def delete(id_or_array, force: false)
73
- if force || journaled_attribute_names.empty?
72
+ def delete(id_or_array, opts = { force: false })
73
+ if opts[:force] || journaled_attribute_names.empty?
74
74
  where(primary_key => id_or_array).delete_all(force: true)
75
75
  else
76
76
  raise(<<~ERROR)
@@ -2,20 +2,20 @@ class Journaled::Change
2
2
  include Journaled::Event
3
3
 
4
4
  attr_reader :table_name,
5
- :record_id,
6
- :database_operation,
7
- :logical_operation,
8
- :changes,
9
- :journaled_stream_name,
10
- :journaled_enqueue_opts,
11
- :actor
5
+ :record_id,
6
+ :database_operation,
7
+ :logical_operation,
8
+ :changes,
9
+ :journaled_stream_name,
10
+ :journaled_enqueue_opts,
11
+ :actor
12
12
 
13
13
  journal_attributes :table_name,
14
- :record_id,
15
- :database_operation,
16
- :logical_operation,
17
- :changes,
18
- :actor
14
+ :record_id,
15
+ :database_operation,
16
+ :logical_operation,
17
+ :changes,
18
+ :actor
19
19
 
20
20
  def initialize(table_name:,
21
21
  record_id:,
@@ -1,5 +1,6 @@
1
1
  class Journaled::ChangeWriter
2
2
  attr_reader :model, :change_definition
3
+
3
4
  delegate :attribute_names, :logical_operation, to: :change_definition
4
5
 
5
6
  def initialize(model:, change_definition:)
@@ -52,8 +53,8 @@ class Journaled::ChangeWriter
52
53
  private
53
54
 
54
55
  def pluck_changed_values(change_hash, index:)
55
- change_hash.each_with_object({}) do |(k, v), result|
56
- result[k] = v[index]
56
+ change_hash.transform_values do |v|
57
+ v[index]
57
58
  end
58
59
  end
59
60
 
@@ -28,12 +28,13 @@ class Journaled::Writer
28
28
  validate!
29
29
  Journaled::DeliveryJob
30
30
  .set(journaled_enqueue_opts.reverse_merge(priority: Journaled.job_priority))
31
- .perform_later(delivery_perform_args)
31
+ .perform_later(**delivery_perform_args)
32
32
  end
33
33
 
34
34
  private
35
35
 
36
36
  attr_reader :journaled_event
37
+
37
38
  delegate(*EVENT_METHOD_NAMES, to: :journaled_event)
38
39
 
39
40
  def validate!
@@ -1,14 +1,15 @@
1
1
  module Journaled::RelationChangeProtection
2
- def update_all(updates, force: false) # rubocop:disable Metrics/AbcSize, Metrics/PerceivedComplexity
3
- unless force || !@klass.respond_to?(:journaled_attribute_names) || @klass.journaled_attribute_names.empty?
4
- conflicting_journaled_attribute_names = if updates.is_a?(Hash)
5
- @klass.journaled_attribute_names & updates.keys.map(&:to_sym)
6
- elsif updates.is_a?(String)
7
- @klass.journaled_attribute_names.select do |a|
8
- updates.match?(/\b(?<!')#{a}(?!')\b/)
9
- end
10
- else
11
- raise "unsupported type '#{updates.class}' for 'updates'"
2
+ def update_all(updates, opts = { force: false }) # rubocop:disable Metrics/AbcSize
3
+ unless opts[:force] || !@klass.respond_to?(:journaled_attribute_names) || @klass.journaled_attribute_names.empty?
4
+ conflicting_journaled_attribute_names = case updates
5
+ when Hash
6
+ @klass.journaled_attribute_names & updates.keys.map(&:to_sym)
7
+ when String
8
+ @klass.journaled_attribute_names.select do |a|
9
+ updates.match?(/\b(?<!')#{a}(?!')\b/)
10
+ end
11
+ else
12
+ raise "unsupported type '#{updates.class}' for 'updates'"
12
13
  end
13
14
  raise(<<~ERROR) if conflicting_journaled_attribute_names.present?
14
15
  .update_all aborted by Journaled::Changes due to journaled attributes:
@@ -1,3 +1,3 @@
1
1
  module Journaled
2
- VERSION = "4.1.0".freeze
2
+ VERSION = "4.2.0".freeze
3
3
  end
data/lib/journaled.rb CHANGED
@@ -20,7 +20,7 @@ module Journaled
20
20
  end
21
21
 
22
22
  def enabled?
23
- !['0', 'false', false, 'f', ''].include?(ENV.fetch('JOURNALED_ENABLED', !development_or_test?))
23
+ ['0', 'false', false, 'f', ''].exclude?(ENV.fetch('JOURNALED_ENABLED', !development_or_test?))
24
24
  end
25
25
 
26
26
  def schema_providers
@@ -53,7 +53,7 @@ module Journaled
53
53
 
54
54
  def self.tagged(**tags)
55
55
  existing_tags = Current.tags
56
- tag!(tags)
56
+ tag!(**tags)
57
57
  yield
58
58
  ensure
59
59
  Current.tags = existing_tags
data/spec/dummy/config.ru CHANGED
@@ -1,4 +1,4 @@
1
1
  # This file is used by Rack-based servers to start the application.
2
2
 
3
- require ::File.expand_path('../config/environment', __FILE__)
3
+ require ::File.expand_path('config/environment', __dir__)
4
4
  run Rails.application
@@ -21,7 +21,7 @@ RSpec.describe Journaled::DeliveryJob do
21
21
  end
22
22
 
23
23
  it 'makes requests to AWS to put the event on the Kinesis with the correct body' do
24
- event = described_class.perform_now(args)
24
+ event = described_class.perform_now(**args)
25
25
 
26
26
  expect(event.shard_id).to eq '101'
27
27
  expect(event.sequence_number).to eq '101123'
@@ -60,7 +60,7 @@ RSpec.describe Journaled::DeliveryJob do
60
60
  end
61
61
 
62
62
  it 'initializes a Kinesis client with assume role credentials' do
63
- described_class.perform_now(args)
63
+ described_class.perform_now(**args)
64
64
 
65
65
  expect(Aws::AssumeRoleCredentials).to have_received(:new).with(
66
66
  client: aws_sts_client,
@@ -74,7 +74,7 @@ RSpec.describe Journaled::DeliveryJob do
74
74
  let(:stream_name) { nil }
75
75
 
76
76
  it 'raises an KeyError error' do
77
- expect { described_class.perform_now(args) }.to raise_error ArgumentError, 'missing keyword: stream_name'
77
+ expect { described_class.perform_now(**args) }.to raise_error ArgumentError, 'missing keyword: stream_name'
78
78
  end
79
79
  end
80
80
 
@@ -99,7 +99,7 @@ RSpec.describe Journaled::DeliveryJob do
99
99
  end
100
100
 
101
101
  it 'makes requests to AWS to put the event on the Kinesis with the correct body' do
102
- event = described_class.perform_now(args)
102
+ event = described_class.perform_now(**args)
103
103
 
104
104
  expect(event.shard_id).to eq '101'
105
105
  expect(event.sequence_number).to eq '101123'
@@ -119,7 +119,7 @@ RSpec.describe Journaled::DeliveryJob do
119
119
  end
120
120
 
121
121
  it 'makes requests to AWS to put the event on the Kinesis with the correct body' do
122
- event = described_class.perform_now(args)
122
+ event = described_class.perform_now(**args)
123
123
 
124
124
  expect(event.shard_id).to eq '101'
125
125
  expect(event.sequence_number).to eq '101123'
@@ -138,7 +138,7 @@ RSpec.describe Journaled::DeliveryJob do
138
138
 
139
139
  it 'catches the error and re-raises a subclass of NotTrulyExceptionalError and logs about the failure' do
140
140
  allow(Rails.logger).to receive(:error)
141
- expect { described_class.perform_now(args) }.to raise_error described_class::KinesisTemporaryFailure
141
+ expect { described_class.perform_now(**args) }.to raise_error described_class::KinesisTemporaryFailure
142
142
  expect(Rails.logger).to have_received(:error).with(
143
143
  "Kinesis Error - Server Error occurred - Aws::Kinesis::Errors::InternalFailure",
144
144
  ).once
@@ -152,7 +152,7 @@ RSpec.describe Journaled::DeliveryJob do
152
152
 
153
153
  it 'catches the error and re-raises a subclass of NotTrulyExceptionalError and logs about the failure' do
154
154
  allow(Rails.logger).to receive(:error)
155
- expect { described_class.perform_now(args) }.to raise_error described_class::KinesisTemporaryFailure
155
+ expect { described_class.perform_now(**args) }.to raise_error described_class::KinesisTemporaryFailure
156
156
  expect(Rails.logger).to have_received(:error).with(/\AKinesis Error/).once
157
157
  end
158
158
  end
@@ -163,7 +163,7 @@ RSpec.describe Journaled::DeliveryJob do
163
163
  end
164
164
 
165
165
  it 'raises an error that subclasses Aws::Kinesis::Errors::ServiceError' do
166
- expect { described_class.perform_now(args) }.to raise_error Aws::Kinesis::Errors::ServiceError
166
+ expect { described_class.perform_now(**args) }.to raise_error Aws::Kinesis::Errors::ServiceError
167
167
  end
168
168
  end
169
169
 
@@ -173,7 +173,7 @@ RSpec.describe Journaled::DeliveryJob do
173
173
  end
174
174
 
175
175
  it 'raises an AccessDeniedException error' do
176
- expect { described_class.perform_now(args) }.to raise_error Aws::Kinesis::Errors::AccessDeniedException
176
+ expect { described_class.perform_now(**args) }.to raise_error Aws::Kinesis::Errors::AccessDeniedException
177
177
  end
178
178
  end
179
179
 
@@ -184,7 +184,7 @@ RSpec.describe Journaled::DeliveryJob do
184
184
 
185
185
  it 'catches the error and re-raises a subclass of NotTrulyExceptionalError and logs about the failure' do
186
186
  allow(Rails.logger).to receive(:error)
187
- expect { described_class.perform_now(args) }.to raise_error described_class::KinesisTemporaryFailure
187
+ expect { described_class.perform_now(**args) }.to raise_error described_class::KinesisTemporaryFailure
188
188
  expect(Rails.logger).to have_received(:error).with(
189
189
  "Kinesis Error - Networking Error occurred - Seahorse::Client::NetworkingError",
190
190
  ).once
@@ -75,12 +75,10 @@ RSpec.describe Journaled do
75
75
  end
76
76
 
77
77
  around do |example|
78
- begin
79
- example.run
80
- ensure
81
- ActiveJob::Base.queue_adapter = :test
82
- ActiveJob::Base.enable_test_adapter(ActiveJob::QueueAdapters::TestAdapter.new)
83
- end
78
+ example.run
79
+ ensure
80
+ ActiveJob::Base.queue_adapter = :test
81
+ ActiveJob::Base.enable_test_adapter(ActiveJob::QueueAdapters::TestAdapter.new)
84
82
  end
85
83
 
86
84
  it 'does not raise an error' do
@@ -32,8 +32,8 @@ RSpec.describe Journaled::Actor do
32
32
 
33
33
  allow(subject).to receive(:current_user).and_return(nil)
34
34
 
35
- expect(Journaled::Current.journaled_actor_proc.call).to eq nil
36
- expect(Journaled::Current.actor).to eq nil
35
+ expect(Journaled::Current.journaled_actor_proc.call).to be_nil
36
+ expect(Journaled::Current.actor).to be_nil
37
37
  end
38
38
 
39
39
  it "Stores a thunk returning current_user if it is set when called" do
@@ -139,7 +139,7 @@ RSpec.describe Journaled::ChangeWriter do
139
139
  end
140
140
 
141
141
  it "doesn't set journaled_stream_name if model class doesn't respond to it" do
142
- expect(subject.journaled_change_for("update", {}).journaled_stream_name).to eq(nil)
142
+ expect(subject.journaled_change_for("update", {}).journaled_stream_name).to be_nil
143
143
  end
144
144
 
145
145
  context "with journaled default app name set" do
@@ -8,7 +8,7 @@ RSpec.describe Journaled::JsonSchemaModel::Validator do
8
8
  let(:attributes_to_validate) do
9
9
  {
10
10
  some_string: some_string_value,
11
- some_decimal: 0.1.to_d,
11
+ some_decimal: BigDecimal('0.1'),
12
12
  some_time: Time.zone.parse('2017-01-20 15:16:17 -05:00'),
13
13
  some_int: some_int_value,
14
14
  some_optional_string: some_optional_string_value,
@@ -66,7 +66,7 @@ RSpec.describe Journaled::JsonSchemaModel::Validator do
66
66
  context 'when all the required fields are provided' do
67
67
  context 'when all the fields are provided' do
68
68
  it 'is valid' do
69
- expect(subject.validate!(json_to_validate)).to eq true
69
+ expect(subject.validate!(json_to_validate)).to be true
70
70
  end
71
71
  end
72
72
 
@@ -74,7 +74,7 @@ RSpec.describe Journaled::JsonSchemaModel::Validator do
74
74
  let(:attributes_to_validate) do
75
75
  {
76
76
  some_string: some_string_value,
77
- some_decimal: 0.1.to_d,
77
+ some_decimal: BigDecimal('0.1'),
78
78
  some_time: Time.zone.parse('2017-01-20 15:16:17 -05:00'),
79
79
  some_int: some_int_value,
80
80
  some_nullable_field: some_nullable_field,
@@ -82,7 +82,7 @@ RSpec.describe Journaled::JsonSchemaModel::Validator do
82
82
  end
83
83
 
84
84
  it 'is valid' do
85
- expect(subject.validate!(json_to_validate)).to eq true
85
+ expect(subject.validate!(json_to_validate)).to be true
86
86
  end
87
87
  end
88
88
 
@@ -90,7 +90,7 @@ RSpec.describe Journaled::JsonSchemaModel::Validator do
90
90
  let(:some_nullable_optional_field) { nil }
91
91
 
92
92
  it 'is valid' do
93
- expect(subject.validate!(json_to_validate)).to eq true
93
+ expect(subject.validate!(json_to_validate)).to be true
94
94
  end
95
95
  end
96
96
 
@@ -107,7 +107,7 @@ RSpec.describe Journaled::JsonSchemaModel::Validator do
107
107
  let(:attributes_to_validate) do
108
108
  {
109
109
  some_string: some_string_value,
110
- some_decimal: 0.1.to_d,
110
+ some_decimal: BigDecimal('0.1'),
111
111
  some_time: Time.zone.parse('2017-01-20 15:16:17 -05:00'),
112
112
  }
113
113
  end
@@ -119,9 +119,9 @@ RSpec.describe Journaled::Writer do
119
119
  it 'defaults to the global default' do
120
120
  expect { subject.journal! }.to change {
121
121
  if Rails::VERSION::MAJOR < 6
122
- enqueued_jobs.select { |j| j[:job] == Journaled::DeliveryJob }.count
122
+ enqueued_jobs.count { |j| j[:job] == Journaled::DeliveryJob }
123
123
  else
124
- enqueued_jobs.select { |j| j['job_class'] == 'Journaled::DeliveryJob' && j['priority'] == 999 }.count
124
+ enqueued_jobs.count { |j| j['job_class'] == 'Journaled::DeliveryJob' && j['priority'] == 999 }
125
125
  end
126
126
  }.from(0).to(1)
127
127
  end
@@ -133,9 +133,9 @@ RSpec.describe Journaled::Writer do
133
133
  it 'enqueues a Journaled::DeliveryJob with the given priority' do
134
134
  expect { subject.journal! }.to change {
135
135
  if Rails::VERSION::MAJOR < 6
136
- enqueued_jobs.select { |j| j[:job] == Journaled::DeliveryJob }.count
136
+ enqueued_jobs.count { |j| j[:job] == Journaled::DeliveryJob }
137
137
  else
138
- enqueued_jobs.select { |j| j['job_class'] == 'Journaled::DeliveryJob' && j['priority'] == 13 }.count
138
+ enqueued_jobs.count { |j| j['job_class'] == 'Journaled::DeliveryJob' && j['priority'] == 13 }
139
139
  end
140
140
  }.from(0).to(1)
141
141
  end
data/spec/rails_helper.rb CHANGED
@@ -7,7 +7,7 @@ require 'timecop'
7
7
  require 'webmock/rspec'
8
8
  require 'journaled/rspec'
9
9
 
10
- Dir[Rails.root.join('..', 'support', '**', '*.rb')].each { |f| require f }
10
+ Dir[Rails.root.join('../support/**/*.rb')].sort.each { |f| require f }
11
11
 
12
12
  RSpec.configure do |config|
13
13
  config.use_transactional_fixtures = true
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,10 @@
1
1
  rails_env = ENV['RAILS_ENV'] ||= 'test'
2
+ require 'uncruft'
2
3
  require File.expand_path('dummy/config/environment.rb', __dir__)
3
4
 
5
+ Rails.application.config.active_record.sqlite3.represent_boolean_as_integer = true if Rails::VERSION::MAJOR < 6
6
+ Rails.application.config.active_record.legacy_connection_handling = false if Rails::VERSION::MAJOR >= 7
7
+
4
8
  Rails.configuration.database_configuration[rails_env].tap do |c|
5
9
  ActiveRecord::Tasks::DatabaseTasks.create(c)
6
10
  ActiveRecord::Base.establish_connection(c)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: journaled
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.0
4
+ version: 4.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jake Lipson
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2021-11-04 00:00:00.000000000 Z
14
+ date: 2022-03-17 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activejob
@@ -87,18 +87,18 @@ dependencies:
87
87
  name: appraisal
88
88
  requirement: !ruby/object:Gem::Requirement
89
89
  requirements:
90
- - - "~>"
90
+ - - ">="
91
91
  - !ruby/object:Gem::Version
92
- version: 2.2.0
92
+ version: '0'
93
93
  type: :development
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
- - - "~>"
97
+ - - ">="
98
98
  - !ruby/object:Gem::Version
99
- version: 2.2.0
99
+ version: '0'
100
100
  - !ruby/object:Gem::Dependency
101
- name: rspec-rails
101
+ name: betterlint
102
102
  requirement: !ruby/object:Gem::Requirement
103
103
  requirements:
104
104
  - - ">="
@@ -126,19 +126,19 @@ dependencies:
126
126
  - !ruby/object:Gem::Version
127
127
  version: '0'
128
128
  - !ruby/object:Gem::Dependency
129
- name: rubocop-betterment
129
+ name: rspec-rails
130
130
  requirement: !ruby/object:Gem::Requirement
131
131
  requirements:
132
- - - "~>"
132
+ - - ">="
133
133
  - !ruby/object:Gem::Version
134
- version: '1.3'
134
+ version: '0'
135
135
  type: :development
136
136
  prerelease: false
137
137
  version_requirements: !ruby/object:Gem::Requirement
138
138
  requirements:
139
- - - "~>"
139
+ - - ">="
140
140
  - !ruby/object:Gem::Version
141
- version: '1.3'
141
+ version: '0'
142
142
  - !ruby/object:Gem::Dependency
143
143
  name: spring
144
144
  requirement: !ruby/object:Gem::Requirement
@@ -195,6 +195,20 @@ dependencies:
195
195
  - - ">="
196
196
  - !ruby/object:Gem::Version
197
197
  version: '0'
198
+ - !ruby/object:Gem::Dependency
199
+ name: uncruft
200
+ requirement: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - ">="
203
+ - !ruby/object:Gem::Version
204
+ version: '0'
205
+ type: :development
206
+ prerelease: false
207
+ version_requirements: !ruby/object:Gem::Requirement
208
+ requirements:
209
+ - - ">="
210
+ - !ruby/object:Gem::Version
211
+ version: '0'
198
212
  - !ruby/object:Gem::Dependency
199
213
  name: webmock
200
214
  requirement: !ruby/object:Gem::Requirement
@@ -289,7 +303,8 @@ files:
289
303
  homepage: http://github.com/Betterment/journaled
290
304
  licenses:
291
305
  - MIT
292
- metadata: {}
306
+ metadata:
307
+ rubygems_mfa_required: 'true'
293
308
  post_install_message:
294
309
  rdoc_options: []
295
310
  require_paths:
@@ -298,14 +313,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
298
313
  requirements:
299
314
  - - ">="
300
315
  - !ruby/object:Gem::Version
301
- version: '0'
316
+ version: '2.6'
302
317
  required_rubygems_version: !ruby/object:Gem::Requirement
303
318
  requirements:
304
319
  - - ">="
305
320
  - !ruby/object:Gem::Version
306
321
  version: '0'
307
322
  requirements: []
308
- rubygems_version: 3.0.1
323
+ rubygems_version: 3.3.5
309
324
  signing_key:
310
325
  specification_version: 4
311
326
  summary: Journaling for Betterment apps.