rails_event_store 0.30.0 → 0.34.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a3d4e0009af4124fcd60998861a6a397048887b9e5b3ea57dcf5356b2fd3c2c0
4
- data.tar.gz: f62347ca2d8bf35e365647b09720c6410cb0096b1c512f11176c77f09cc7a808
3
+ metadata.gz: 6b49527704051efaa6da205c5b8b29d7f3ac4e64ea40140ee025388d3a633697
4
+ data.tar.gz: 1d11601df7b08bd465ed6d0cf9148d2a5354f510f3518f3715aad2cbb3529687
5
5
  SHA512:
6
- metadata.gz: 59fd5ddb62bf2fb5e4db8c28771a1888b63bb6b2bbf3e16b0fc703d50a6e2956e65218eb0d6eb5fd3df417b8d49dc0c04a8eb8296a8e686ce32ee1b3721cfce0
7
- data.tar.gz: 8b2720a1bd23f634d5ae5475cad76e39c2a5845f73e99b4059421818af5b2bf34f278186bf807fdb615b146581055e10ab950c6079364262564eb5d789c0cb55
6
+ metadata.gz: 564be64cbbb736bf85b5e45a6f79da57f3b7f0dfb0c6d0ad800e218bdac5e6cb6190ada11703af6ebb7d45bf905a9d5e566951ab713edee9f6a15fbb7c3b8e5b
7
+ data.tar.gz: aa43290fe05178d900bf9e401de737fd809d4b7a20bbdd128a378ba586a706bb70084dcdf1cc24d14d397376f9e71c6b75a515e81d48600c0e142cabe978ea99
data/Gemfile CHANGED
@@ -2,10 +2,12 @@ source 'https://rubygems.org'
2
2
  gemspec
3
3
 
4
4
  gem 'ruby_event_store', path: '../ruby_event_store'
5
+ gem 'ruby_event_store-browser', path: '../ruby_event_store-browser'
5
6
  gem 'rails_event_store_active_record', path: '../rails_event_store_active_record'
6
7
  gem 'aggregate_root', path: '../aggregate_root'
7
8
  gem 'bounded_context', path: '../bounded_context'
8
9
  gem 'protobuf_nested_struct'
10
+ gem 'sidekiq'
9
11
 
10
12
  if v = ENV['RAILS_VERSION']
11
13
  gem 'rails', v
data/Makefile CHANGED
@@ -1,10 +1,11 @@
1
1
  GEM_VERSION = $(shell cat ../RES_VERSION)
2
2
  GEM_NAME = rails_event_store
3
3
  REQUIRE = $(GEM_NAME)
4
- IGNORE = RailsEventStore.const_missing \
5
- RailsEventStore::Client\#initialize \
6
- RailsEventStore::AsyncProxyStrategy::AfterCommit::AsyncRecord\#rolledback! \
7
- RailsEventStore::AsyncProxyStrategy::AfterCommit::AsyncRecord\#before_committed!
4
+ IGNORE = RailsEventStore::Client\#initialize \
5
+ RailsEventStore::AfterCommitAsyncDispatcher::AsyncRecord\#rolledback! \
6
+ RailsEventStore::AsyncProxyStrategy::AfterCommit* \
7
+ RailsEventStore::ActiveJobDispatcher* \
8
+
8
9
  SUBJECT ?= RailsEventStore*
9
10
 
10
11
  install: ## Install gem dependencies
@@ -23,7 +24,7 @@ test: ## Run unit tests
23
24
 
24
25
  mutate: test ## Run mutation tests
25
26
  @echo "Running mutation tests"
26
- @bundle exec mutant --include lib \
27
+ @MUTATING=true bundle exec mutant --include lib \
27
28
  $(addprefix --require ,$(REQUIRE)) \
28
29
  $(addprefix --ignore-subject ,$(IGNORE)) \
29
30
  --use rspec "$(SUBJECT)"
@@ -1,71 +1,33 @@
1
1
  require 'active_job'
2
2
 
3
3
  module RailsEventStore
4
- module AsyncProxyStrategy
5
- class AfterCommit
6
- def call(klass, event)
7
- if ActiveRecord::Base.connection.transaction_open?
8
- ActiveRecord::Base.
9
- connection.
10
- current_transaction.
11
- add_record(AsyncRecord.new(klass, event))
12
- else
13
- klass.perform_later(YAML.dump(event))
14
- end
15
- end
16
-
17
- private
18
- class AsyncRecord
19
- def initialize(klass, event)
20
- @klass = klass
21
- @event = event
22
- end
23
-
24
- def committed!
25
- @klass.perform_later(YAML.dump(@event))
26
- end
4
+ # @deprecated Use RailsEventStore::ComposedDispatcher and RailsEventStore::ActiveJobScheduler instead
5
+ class ActiveJobDispatcher < RubyEventStore::AsyncDispatcher
6
+ def initialize(proxy_strategy: AsyncProxyStrategy::Inline.new)
7
+ super(proxy_strategy: proxy_strategy, scheduler: ActiveJobScheduler.new)
8
+ warn <<~EOW
9
+ RailsEventStore::ActiveJobDispatcher has been deprecated.
27
10
 
28
- def rolledback!(*)
29
- end
11
+ Use RailsEventStore::ComposedDispatcher and RailsEventStore::ActiveJobScheduler instead
12
+ EOW
13
+ end
30
14
 
31
- def before_committed!
32
- end
15
+ # @deprecated Use RailsEventStore::ActiveJobScheduler with RubyEventStore::ImmediateAsyncDispatcher or RailsEventStore::AfterCommitAsyncDispatcher instead
16
+ class ActiveJobScheduler
17
+ def initialize
18
+ warn <<~EOW
19
+ RailsEventStore::ActiveJobDispatcher::ActiveJobScheduler has been deprecated.
33
20
 
34
- def add_to_transaction
35
- AfterCommit.new.call(@klass, @event)
36
- end
21
+ Use RailsEventStore::ActiveJobScheduler with RubyEventStore::ImmediateAsyncDispatcher or RailsEventStore::AfterCommitAsyncDispatcher instead
22
+ EOW
37
23
  end
38
- end
39
-
40
- class Inline
41
- def call(klass, event)
42
- klass.perform_later(YAML.dump(event))
24
+ def call(klass, serialized_event)
25
+ klass.perform_later(serialized_event.to_h)
43
26
  end
44
- end
45
- end
46
27
 
47
- class ActiveJobDispatcher < RubyEventStore::PubSub::Dispatcher
48
- def initialize(proxy_strategy: AsyncProxyStrategy::Inline.new)
49
- @async_proxy_strategy = proxy_strategy
50
- end
51
-
52
- def call(subscriber, event)
53
- if async_handler?(subscriber)
54
- @async_proxy_strategy.call(subscriber, event)
55
- else
56
- super
28
+ def async_handler?(klass)
29
+ Class === klass && klass < ActiveJob::Base
57
30
  end
58
31
  end
59
-
60
- def verify(subscriber)
61
- super unless async_handler?(subscriber)
62
- end
63
-
64
- private
65
-
66
- def async_handler?(klass)
67
- Class === klass && klass < ActiveJob::Base
68
- end
69
-
70
32
  end
71
- end
33
+ end
@@ -0,0 +1,11 @@
1
+ module RailsEventStore
2
+ class ActiveJobScheduler
3
+ def call(klass, serialized_event)
4
+ klass.perform_later(serialized_event.to_h)
5
+ end
6
+
7
+ def verify(subscriber)
8
+ Class === subscriber && !!(subscriber < ActiveJob::Base)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,52 @@
1
+ module RailsEventStore
2
+ class AfterCommitAsyncDispatcher
3
+ def initialize(scheduler:)
4
+ @scheduler = scheduler
5
+ end
6
+
7
+ def call(subscriber, _, serialized_event)
8
+ run do
9
+ @scheduler.call(subscriber, serialized_event)
10
+ end
11
+ end
12
+
13
+ def run(&schedule_proc)
14
+ if ActiveRecord::Base.connection.transaction_open?
15
+ ActiveRecord::Base.
16
+ connection.
17
+ current_transaction.
18
+ add_record(AsyncRecord.new(self, schedule_proc))
19
+ else
20
+ yield
21
+ end
22
+ end
23
+
24
+ def verify(subscriber)
25
+ @scheduler.verify(subscriber)
26
+ end
27
+
28
+ private
29
+ class AsyncRecord
30
+ def initialize(dispatcher, schedule_proc)
31
+ @dispatcher = dispatcher
32
+ @schedule_proc = schedule_proc
33
+ end
34
+
35
+ def committed!
36
+ schedule_proc.call
37
+ end
38
+
39
+ def rolledback!(*)
40
+ end
41
+
42
+ def before_committed!
43
+ end
44
+
45
+ def add_to_transaction
46
+ dispatcher.run(&schedule_proc)
47
+ end
48
+
49
+ attr_reader :schedule_proc, :dispatcher
50
+ end
51
+ end
52
+ end
@@ -1,23 +1,32 @@
1
1
  require 'ruby_event_store'
2
+ require 'rails_event_store/async_proxy_strategy'
2
3
  require 'rails_event_store/active_job_dispatcher'
4
+ require 'rails_event_store/async_handler_helpers'
5
+ require 'rails_event_store/link_by_metadata'
6
+ require 'rails_event_store/after_commit_async_dispatcher'
7
+ require 'rails_event_store/active_job_scheduler'
3
8
  require 'rails_event_store/client'
4
9
  require 'rails_event_store/version'
5
10
  require 'rails_event_store/railtie'
6
- require 'rails_event_store/deprecations'
11
+ require 'rails_event_store/browser'
7
12
 
8
13
  module RailsEventStore
9
- Event = RubyEventStore::Event
10
- InMemoryRepository = RubyEventStore::InMemoryRepository
11
- EventBroker = RubyEventStore::PubSub::Broker
12
- Projection = RubyEventStore::Projection
13
- WrongExpectedEventVersion = RubyEventStore::WrongExpectedEventVersion
14
- InvalidExpectedVersion = RubyEventStore::InvalidExpectedVersion
15
- IncorrectStreamData = RubyEventStore::IncorrectStreamData
16
- EventNotFound = RubyEventStore::EventNotFound
17
- SubscriberNotExist = RubyEventStore::SubscriberNotExist
18
- InvalidHandler = RubyEventStore::InvalidHandler
19
- InvalidPageStart = RubyEventStore::InvalidPageStart
20
- InvalidPageSize = RubyEventStore::InvalidPageSize
21
- GLOBAL_STREAM = RubyEventStore::GLOBAL_STREAM
22
- PAGE_SIZE = RubyEventStore::PAGE_SIZE
23
- end
14
+ Event = RubyEventStore::Event
15
+ InMemoryRepository = RubyEventStore::InMemoryRepository
16
+ Subscriptions = RubyEventStore::PubSub::Subscriptions
17
+ Projection = RubyEventStore::Projection
18
+ WrongExpectedEventVersion = RubyEventStore::WrongExpectedEventVersion
19
+ InvalidExpectedVersion = RubyEventStore::InvalidExpectedVersion
20
+ IncorrectStreamData = RubyEventStore::IncorrectStreamData
21
+ EventNotFound = RubyEventStore::EventNotFound
22
+ SubscriberNotExist = RubyEventStore::SubscriberNotExist
23
+ InvalidHandler = RubyEventStore::InvalidHandler
24
+ InvalidPageStart = RubyEventStore::InvalidPageStart
25
+ InvalidPageSize = RubyEventStore::InvalidPageSize
26
+ CorrelatedCommands = RubyEventStore::CorrelatedCommands
27
+ GLOBAL_STREAM = RubyEventStore::GLOBAL_STREAM
28
+ PAGE_SIZE = RubyEventStore::PAGE_SIZE
29
+ AsyncProxyStrategy::Inline = RubyEventStore::AsyncProxyStrategy::Inline
30
+ AsyncDispatcher = RubyEventStore::AsyncDispatcher
31
+ ImmediateAsyncDispatcher = RubyEventStore::ImmediateAsyncDispatcher
32
+ end
@@ -0,0 +1,20 @@
1
+ module RailsEventStore
2
+
3
+ module AsyncHandler
4
+ def perform(payload)
5
+ super(Rails.configuration.event_store.deserialize(payload))
6
+ end
7
+ end
8
+
9
+ module CorrelatedHandler
10
+ def perform(event)
11
+ Rails.configuration.event_store.with_metadata(
12
+ correlation_id: event.metadata[:correlation_id] || event.event_id,
13
+ causation_id: event.event_id
14
+ ) do
15
+ super
16
+ end
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,48 @@
1
+ module RailsEventStore
2
+ module AsyncProxyStrategy
3
+ # @deprecated Use RailsEventStore::AfterCommitAsyncDispatcher instead
4
+ class AfterCommit
5
+ def initialize
6
+ warn <<~EOW
7
+ RailsEventStore::AsyncProxyStrategy::AfterCommit has been deprecated.
8
+
9
+ Use RailsEventStore::AfterCommitAsyncDispatcher instead
10
+ EOW
11
+ end
12
+
13
+ def call(schedule_proc)
14
+ if ActiveRecord::Base.connection.transaction_open?
15
+ ActiveRecord::Base.
16
+ connection.
17
+ current_transaction.
18
+ add_record(AsyncRecord.new(schedule_proc))
19
+ else
20
+ schedule_proc.call
21
+ end
22
+ end
23
+
24
+ private
25
+ class AsyncRecord
26
+ def initialize(schedule_proc)
27
+ @schedule_proc = schedule_proc
28
+ end
29
+
30
+ def committed!
31
+ schedule_proc.call
32
+ end
33
+
34
+ def rolledback!(*)
35
+ end
36
+
37
+ def before_committed!
38
+ end
39
+
40
+ def add_to_transaction
41
+ AfterCommit.new.call(schedule_proc)
42
+ end
43
+
44
+ attr_reader :schedule_proc
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,5 @@
1
+ require 'ruby_event_store/browser/app'
2
+
3
+ module RailsEventStore
4
+ Browser = RubyEventStore::Browser::App.for(event_store_locator: -> { Rails.configuration.event_store })
5
+ end
@@ -4,13 +4,16 @@ module RailsEventStore
4
4
 
5
5
  def initialize(repository: RailsEventStoreActiveRecord::EventRepository.new,
6
6
  mapper: RubyEventStore::Mappers::Default.new,
7
- event_broker: EventBroker.new(dispatcher: ActiveJobDispatcher.new),
8
- request_metadata: default_request_metadata,
9
- page_size: PAGE_SIZE)
10
- super(repository: repository,
7
+ subscriptions: RubyEventStore::PubSub::Subscriptions.new,
8
+ dispatcher: RubyEventStore::ComposedDispatcher.new(
9
+ RubyEventStore::ImmediateAsyncDispatcher.new(scheduler: ActiveJobScheduler.new),
10
+ RubyEventStore::PubSub::Dispatcher.new),
11
+ request_metadata: default_request_metadata)
12
+ super(repository: RubyEventStore::InstrumentedRepository.new(repository, ActiveSupport::Notifications),
11
13
  mapper: mapper,
12
- event_broker: event_broker,
13
- page_size: page_size)
14
+ subscriptions: subscriptions,
15
+ dispatcher: RubyEventStore::InstrumentedDispatcher.new(dispatcher, ActiveSupport::Notifications)
16
+ )
14
17
  @request_metadata = request_metadata
15
18
  end
16
19
 
@@ -0,0 +1,27 @@
1
+ module RailsEventStore
2
+
3
+ class LinkByMetadata < RubyEventStore::LinkByMetadata
4
+ def initialize(event_store: Rails.configuration.event_store, key:, prefix: nil)
5
+ super
6
+ end
7
+ end
8
+
9
+ class LinkByCorrelationId < RubyEventStore::LinkByCorrelationId
10
+ def initialize(event_store: Rails.configuration.event_store, prefix: nil)
11
+ super
12
+ end
13
+ end
14
+
15
+ class LinkByCausationId < RubyEventStore::LinkByCausationId
16
+ def initialize(event_store: Rails.configuration.event_store, prefix: nil)
17
+ super
18
+ end
19
+ end
20
+
21
+ class LinkByEventType < RubyEventStore::LinkByEventType
22
+ def initialize(event_store: Rails.configuration.event_store, prefix: nil)
23
+ super
24
+ end
25
+ end
26
+
27
+ end
@@ -1,3 +1,3 @@
1
1
  module RailsEventStore
2
- VERSION = "0.30.0"
2
+ VERSION = "0.34.0"
3
3
  end
@@ -31,13 +31,15 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency 'rails', '~> 5.2'
32
32
  spec.add_development_dependency 'sqlite3'
33
33
  spec.add_development_dependency 'rack-test'
34
- spec.add_development_dependency 'mutant-rspec', '~> 0.8.14'
34
+ spec.add_development_dependency 'mutant-rspec', '= 0.8.17'
35
35
  spec.add_development_dependency 'google-protobuf', '~> 3.5.1.2'
36
+ spec.add_development_dependency 'pry'
36
37
 
37
- spec.add_dependency 'ruby_event_store', '= 0.30.0'
38
- spec.add_dependency 'rails_event_store_active_record', '= 0.30.0'
39
- spec.add_dependency 'aggregate_root', '= 0.30.0'
40
- spec.add_dependency 'bounded_context', '= 0.30.0'
38
+ spec.add_dependency 'ruby_event_store', '= 0.34.0'
39
+ spec.add_dependency 'ruby_event_store-browser', '= 0.34.0'
40
+ spec.add_dependency 'rails_event_store_active_record', '= 0.34.0'
41
+ spec.add_dependency 'aggregate_root', '= 0.34.0'
42
+ spec.add_dependency 'bounded_context', '= 0.34.0'
41
43
  spec.add_dependency 'activesupport', '>= 3.0'
42
44
  spec.add_dependency 'activemodel', '>= 3.0'
43
45
  spec.add_dependency 'activejob', '>= 3.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_event_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.30.0
4
+ version: 0.34.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arkency
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-31 00:00:00.000000000 Z
11
+ date: 2018-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -98,16 +98,16 @@ dependencies:
98
98
  name: mutant-rspec
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
101
+ - - '='
102
102
  - !ruby/object:Gem::Version
103
- version: 0.8.14
103
+ version: 0.8.17
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - "~>"
108
+ - - '='
109
109
  - !ruby/object:Gem::Version
110
- version: 0.8.14
110
+ version: 0.8.17
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: google-protobuf
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -122,62 +122,90 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: 3.5.1.2
125
+ - !ruby/object:Gem::Dependency
126
+ name: pry
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: ruby_event_store
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
143
  - - '='
130
144
  - !ruby/object:Gem::Version
131
- version: 0.30.0
145
+ version: 0.34.0
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '='
151
+ - !ruby/object:Gem::Version
152
+ version: 0.34.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: ruby_event_store-browser
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '='
158
+ - !ruby/object:Gem::Version
159
+ version: 0.34.0
132
160
  type: :runtime
133
161
  prerelease: false
134
162
  version_requirements: !ruby/object:Gem::Requirement
135
163
  requirements:
136
164
  - - '='
137
165
  - !ruby/object:Gem::Version
138
- version: 0.30.0
166
+ version: 0.34.0
139
167
  - !ruby/object:Gem::Dependency
140
168
  name: rails_event_store_active_record
141
169
  requirement: !ruby/object:Gem::Requirement
142
170
  requirements:
143
171
  - - '='
144
172
  - !ruby/object:Gem::Version
145
- version: 0.30.0
173
+ version: 0.34.0
146
174
  type: :runtime
147
175
  prerelease: false
148
176
  version_requirements: !ruby/object:Gem::Requirement
149
177
  requirements:
150
178
  - - '='
151
179
  - !ruby/object:Gem::Version
152
- version: 0.30.0
180
+ version: 0.34.0
153
181
  - !ruby/object:Gem::Dependency
154
182
  name: aggregate_root
155
183
  requirement: !ruby/object:Gem::Requirement
156
184
  requirements:
157
185
  - - '='
158
186
  - !ruby/object:Gem::Version
159
- version: 0.30.0
187
+ version: 0.34.0
160
188
  type: :runtime
161
189
  prerelease: false
162
190
  version_requirements: !ruby/object:Gem::Requirement
163
191
  requirements:
164
192
  - - '='
165
193
  - !ruby/object:Gem::Version
166
- version: 0.30.0
194
+ version: 0.34.0
167
195
  - !ruby/object:Gem::Dependency
168
196
  name: bounded_context
169
197
  requirement: !ruby/object:Gem::Requirement
170
198
  requirements:
171
199
  - - '='
172
200
  - !ruby/object:Gem::Version
173
- version: 0.30.0
201
+ version: 0.34.0
174
202
  type: :runtime
175
203
  prerelease: false
176
204
  version_requirements: !ruby/object:Gem::Requirement
177
205
  requirements:
178
206
  - - '='
179
207
  - !ruby/object:Gem::Version
180
- version: 0.30.0
208
+ version: 0.34.0
181
209
  - !ruby/object:Gem::Dependency
182
210
  name: activesupport
183
211
  requirement: !ruby/object:Gem::Requirement
@@ -247,14 +275,18 @@ files:
247
275
  - README.md
248
276
  - lib/rails_event_store.rb
249
277
  - lib/rails_event_store/active_job_dispatcher.rb
278
+ - lib/rails_event_store/active_job_scheduler.rb
279
+ - lib/rails_event_store/after_commit_async_dispatcher.rb
250
280
  - lib/rails_event_store/all.rb
281
+ - lib/rails_event_store/async_handler_helpers.rb
282
+ - lib/rails_event_store/async_proxy_strategy.rb
283
+ - lib/rails_event_store/browser.rb
251
284
  - lib/rails_event_store/client.rb
252
- - lib/rails_event_store/deprecations.rb
285
+ - lib/rails_event_store/link_by_metadata.rb
253
286
  - lib/rails_event_store/middleware.rb
254
287
  - lib/rails_event_store/railtie.rb
255
288
  - lib/rails_event_store/version.rb
256
289
  - rails_event_store.gemspec
257
- - tmp/.keep
258
290
  homepage: https://railseventstore.org
259
291
  licenses:
260
292
  - MIT
@@ -1,7 +0,0 @@
1
- module RailsEventStore
2
- def self.const_missing(const_name)
3
- super unless const_name == :MethodNotDefined
4
- warn "`RailsEventStore::MethodNotDefined` has been deprecated. Use `RailsEventStore::InvalidHandler` instead."
5
- InvalidHandler
6
- end
7
- end
data/tmp/.keep DELETED
File without changes