deimos-ruby 1.6.1 → 1.8.0.pre.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +9 -0
  3. data/.rubocop.yml +15 -13
  4. data/.ruby-version +1 -1
  5. data/CHANGELOG.md +30 -0
  6. data/Gemfile.lock +87 -80
  7. data/README.md +139 -15
  8. data/Rakefile +1 -1
  9. data/deimos-ruby.gemspec +3 -2
  10. data/docs/ARCHITECTURE.md +144 -0
  11. data/docs/CONFIGURATION.md +27 -0
  12. data/lib/deimos.rb +7 -6
  13. data/lib/deimos/active_record_consume/batch_consumption.rb +159 -0
  14. data/lib/deimos/active_record_consume/batch_slicer.rb +27 -0
  15. data/lib/deimos/active_record_consume/message_consumption.rb +58 -0
  16. data/lib/deimos/active_record_consume/schema_model_converter.rb +52 -0
  17. data/lib/deimos/active_record_consumer.rb +33 -75
  18. data/lib/deimos/active_record_producer.rb +23 -0
  19. data/lib/deimos/batch_consumer.rb +2 -140
  20. data/lib/deimos/config/configuration.rb +28 -10
  21. data/lib/deimos/consume/batch_consumption.rb +148 -0
  22. data/lib/deimos/consume/message_consumption.rb +93 -0
  23. data/lib/deimos/consumer.rb +79 -69
  24. data/lib/deimos/kafka_message.rb +1 -1
  25. data/lib/deimos/kafka_source.rb +29 -23
  26. data/lib/deimos/kafka_topic_info.rb +1 -1
  27. data/lib/deimos/message.rb +6 -1
  28. data/lib/deimos/metrics/provider.rb +0 -2
  29. data/lib/deimos/poll_info.rb +9 -0
  30. data/lib/deimos/tracing/provider.rb +0 -2
  31. data/lib/deimos/utils/db_poller.rb +149 -0
  32. data/lib/deimos/utils/db_producer.rb +8 -3
  33. data/lib/deimos/utils/deadlock_retry.rb +68 -0
  34. data/lib/deimos/utils/lag_reporter.rb +19 -26
  35. data/lib/deimos/version.rb +1 -1
  36. data/lib/generators/deimos/db_poller/templates/migration +11 -0
  37. data/lib/generators/deimos/db_poller/templates/rails3_migration +16 -0
  38. data/lib/generators/deimos/db_poller_generator.rb +48 -0
  39. data/lib/tasks/deimos.rake +7 -0
  40. data/spec/active_record_batch_consumer_spec.rb +481 -0
  41. data/spec/active_record_consume/batch_slicer_spec.rb +42 -0
  42. data/spec/active_record_consume/schema_model_converter_spec.rb +105 -0
  43. data/spec/active_record_consumer_spec.rb +22 -11
  44. data/spec/active_record_producer_spec.rb +66 -88
  45. data/spec/batch_consumer_spec.rb +23 -7
  46. data/spec/config/configuration_spec.rb +4 -0
  47. data/spec/consumer_spec.rb +8 -8
  48. data/spec/deimos_spec.rb +57 -49
  49. data/spec/handlers/my_batch_consumer.rb +6 -1
  50. data/spec/handlers/my_consumer.rb +6 -1
  51. data/spec/kafka_source_spec.rb +53 -0
  52. data/spec/message_spec.rb +19 -0
  53. data/spec/producer_spec.rb +3 -3
  54. data/spec/rake_spec.rb +1 -1
  55. data/spec/schemas/com/my-namespace/MySchemaCompound-key.avsc +18 -0
  56. data/spec/schemas/com/my-namespace/Wibble.avsc +43 -0
  57. data/spec/spec_helper.rb +61 -6
  58. data/spec/utils/db_poller_spec.rb +320 -0
  59. data/spec/utils/deadlock_retry_spec.rb +74 -0
  60. data/spec/utils/lag_reporter_spec.rb +29 -22
  61. metadata +61 -20
  62. data/lib/deimos/base_consumer.rb +0 -104
  63. data/lib/deimos/utils/executor.rb +0 -124
  64. data/lib/deimos/utils/platform_schema_validation.rb +0 -0
  65. data/lib/deimos/utils/signal_handler.rb +0 -68
  66. data/spec/utils/executor_spec.rb +0 -53
  67. data/spec/utils/signal_handler_spec.rb +0 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0226368aa5a493ec167e0cd4b0d03eeb8ac9e3efe8c2518fbe869275f6b7b10b'
4
- data.tar.gz: 94afab34fb599d3cc0a5336a0af1ab8458621c8655c22de6882d1b87a645d8bf
3
+ metadata.gz: 82c1b89b49622cb0d47a7a7aa56e076d908785906581f9f0772f09679acd6895
4
+ data.tar.gz: eeadf1d1a63db1407a81ef1f993be1b8d421e8e2624b9f42c324a2dad776bd1c
5
5
  SHA512:
6
- metadata.gz: ee0516157c9fedd3e0ad9ff5dab95afbd9d3eee0975c899ede0f8104c1c9b5e992117221a8e42772f397abc3b8e70c755a90423a8d3daf93fd949751b3095f38
7
- data.tar.gz: e42ad9fca0314bfa6cf5f764f7369a22a28d60c4d395b219df2d0c1ad1bb0c2d45a37d9e5eeb76984dbd7d122f211f4f8bbf8a5d0198108346bc8c16df795266
6
+ metadata.gz: 6a85cd1d407c11d4becb6d6d11636623b96c706325f8bbca52caf4bf0cdce079df65432cb076d01503a4d4d977c8a662c22622e27193aeafc87ffbdc8d934045
7
+ data.tar.gz: '08f9b75f3057071f41effaf870f8d0927dca85d647726ba833371001c470a7a062ee74ac63b5acc2f284493d3a32373ffb6c3ca96f9428ffb762c83cfd804c42'
@@ -20,6 +20,9 @@ jobs:
20
20
  # Bundle install dependencies in /tmp/
21
21
  # so Dockerfile does not copy them since
22
22
  # its base image is different than CircleCI
23
+ - run:
24
+ name: Install bundler
25
+ command: gem install bundler:2.1.4
23
26
  - run:
24
27
  name: Bundle install
25
28
  command: bundle install --path vendor/bundle --jobs=4 --retry=3
@@ -40,6 +43,9 @@ jobs:
40
43
  steps:
41
44
  - attach_workspace:
42
45
  at: ~/workspace
46
+ - run:
47
+ name: Install bundler
48
+ command: gem install bundler:2.1.4
43
49
  - run:
44
50
  name: Point bundle to vendor/bundle
45
51
  command: bundle --path vendor/bundle
@@ -50,6 +56,9 @@ jobs:
50
56
  steps:
51
57
  - attach_workspace:
52
58
  at: ~/workspace
59
+ - run:
60
+ name: Install bundler
61
+ command: gem install bundler:2.1.4
53
62
  - run:
54
63
  name: Point bundle to vendor/bundle
55
64
  command: bundle --path vendor/bundle
@@ -1,10 +1,11 @@
1
1
  require: rubocop-rspec
2
2
 
3
3
  AllCops:
4
- TargetRubyVersion: 2.3
4
+ TargetRubyVersion: 2.4
5
5
  Exclude:
6
6
  - lib/deimos/monkey_patches/*.rb
7
7
  - vendor/**/*
8
+ NewCops: enable
8
9
 
9
10
  # class Plumbus
10
11
  # private
@@ -34,6 +35,12 @@ Layout/DotPosition:
34
35
  Layout/EmptyLinesAroundBlockBody:
35
36
  Enabled: false
36
37
 
38
+ Layout/LineLength:
39
+ Max: 100
40
+ Severity: refactor
41
+ Exclude:
42
+ - 'spec/**/*'
43
+
37
44
  # foo = if expression
38
45
  # 'bar'
39
46
  # end
@@ -82,12 +89,6 @@ Metrics/CyclomaticComplexity:
82
89
  Severity: refactor
83
90
  Max: 20
84
91
 
85
- Metrics/LineLength:
86
- Max: 100
87
- Severity: refactor
88
- Exclude:
89
- - 'spec/**/*'
90
-
91
92
  Metrics/MethodLength:
92
93
  Severity: refactor
93
94
  Max: 30
@@ -123,12 +124,6 @@ Style/BlockDelimiters:
123
124
  # some_method(x, y, {a: 1, b: 2})
124
125
  # some_method(x, y, {a: 1, b: 2}, a: 1, b: 2)
125
126
 
126
- # good
127
- # some_method(x, y, a: 1, b: 2)
128
- # some_method(x, y, {a: 1, b: 2}, {a: 1, b: 2})
129
- Style/BracesAroundHashParameters:
130
- EnforcedStyle: context_dependent
131
-
132
127
  # Enable both this:
133
128
  # MyModule::MyClass
134
129
  # and this:
@@ -179,6 +174,13 @@ Style/GuardClause:
179
174
  Style/HashSyntax:
180
175
  EnforcedStyle: ruby19_no_mixed_keys
181
176
 
177
+ # We are still unofficially targeting Ruby 2.3
178
+ Style/HashTransformKeys:
179
+ Enabled: false
180
+
181
+ Style/HashTransformValues:
182
+ Enabled: false
183
+
182
184
  Style/IfUnlessModifier:
183
185
  Enabled: false
184
186
 
@@ -1 +1 @@
1
- 2.5.1
1
+ 2.5.3
@@ -7,6 +7,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## UNRELEASED
9
9
 
10
+ ## 1.8.0-beta1 - 2020-07-06
11
+ ### Features :star:
12
+ - Added `ActiveRecordConsumer` batch mode
13
+
14
+ ### Fixes :wrench:
15
+ - Lag calculation can be incorrect if no messages are being consumed.
16
+ - Fixed bug where printing messages on a MessageSizeTooLarge
17
+ error didn't work.
18
+
19
+ ### Roadmap
20
+ - Moved SignalHandler and Executor to the `sigurd` gem.
21
+
22
+ ## 1.7.0-beta1 - 2020-05-12
23
+ ### Features :star:
24
+ - Added the DB Poller feature / process.
25
+
26
+ ## 1.6.4 - 2020-05-11
27
+ - Fixed the payload logging fix for errored messages as well.
28
+
29
+ ## 1.6.3 - 2020-05-04
30
+ ### Fixes :wrench:
31
+ - Fixed the payload logging fix.
32
+
33
+ ## 1.6.2 - 2020-05-04
34
+ ### Fixes :wrench:
35
+ - When saving records via `ActiveRecordConsumer`, update `updated_at` to today's time
36
+ even if nothing else was saved.
37
+ - When logging payloads and metadata, decode them first.
38
+ - Fixes bug in `KafkaSource` that crashes when importing a mix of existing and new records with the `:on_duplicate_key_update` option.
39
+
10
40
  ## [1.6.1] - 2020-04-20
11
41
  ### Fixes :wrench:
12
42
  - Re-consuming a message after crashing would try to re-decode message keys.
@@ -1,83 +1,85 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- deimos-ruby (1.6.1)
4
+ deimos-ruby (1.7.0.pre.beta1)
5
5
  avro_turf (~> 0.11)
6
6
  phobos (~> 1.9)
7
7
  ruby-kafka (~> 0.7)
8
+ sigurd (= 0.0.1)
8
9
 
9
10
  GEM
10
11
  remote: https://rubygems.org/
11
12
  specs:
12
- actioncable (5.2.4)
13
- actionpack (= 5.2.4)
13
+ actioncable (5.2.4.2)
14
+ actionpack (= 5.2.4.2)
14
15
  nio4r (~> 2.0)
15
16
  websocket-driver (>= 0.6.1)
16
- actionmailer (5.2.4)
17
- actionpack (= 5.2.4)
18
- actionview (= 5.2.4)
19
- activejob (= 5.2.4)
17
+ actionmailer (5.2.4.2)
18
+ actionpack (= 5.2.4.2)
19
+ actionview (= 5.2.4.2)
20
+ activejob (= 5.2.4.2)
20
21
  mail (~> 2.5, >= 2.5.4)
21
22
  rails-dom-testing (~> 2.0)
22
- actionpack (5.2.4)
23
- actionview (= 5.2.4)
24
- activesupport (= 5.2.4)
25
- rack (~> 2.0)
23
+ actionpack (5.2.4.2)
24
+ actionview (= 5.2.4.2)
25
+ activesupport (= 5.2.4.2)
26
+ rack (~> 2.0, >= 2.0.8)
26
27
  rack-test (>= 0.6.3)
27
28
  rails-dom-testing (~> 2.0)
28
29
  rails-html-sanitizer (~> 1.0, >= 1.0.2)
29
- actionview (5.2.4)
30
- activesupport (= 5.2.4)
30
+ actionview (5.2.4.2)
31
+ activesupport (= 5.2.4.2)
31
32
  builder (~> 3.1)
32
33
  erubi (~> 1.4)
33
34
  rails-dom-testing (~> 2.0)
34
35
  rails-html-sanitizer (~> 1.0, >= 1.0.3)
35
- activejob (5.2.4)
36
- activesupport (= 5.2.4)
36
+ activejob (5.2.4.2)
37
+ activesupport (= 5.2.4.2)
37
38
  globalid (>= 0.3.6)
38
- activemodel (5.2.4)
39
- activesupport (= 5.2.4)
40
- activerecord (5.2.4)
41
- activemodel (= 5.2.4)
42
- activesupport (= 5.2.4)
39
+ activemodel (5.2.4.2)
40
+ activesupport (= 5.2.4.2)
41
+ activerecord (5.2.4.2)
42
+ activemodel (= 5.2.4.2)
43
+ activesupport (= 5.2.4.2)
43
44
  arel (>= 9.0)
44
- activerecord-import (1.0.3)
45
+ activerecord-import (1.0.4)
45
46
  activerecord (>= 3.2)
46
- activestorage (5.2.4)
47
- actionpack (= 5.2.4)
48
- activerecord (= 5.2.4)
47
+ activestorage (5.2.4.2)
48
+ actionpack (= 5.2.4.2)
49
+ activerecord (= 5.2.4.2)
49
50
  marcel (~> 0.3.1)
50
- activesupport (5.2.4)
51
+ activesupport (5.2.4.2)
51
52
  concurrent-ruby (~> 1.0, >= 1.0.2)
52
53
  i18n (>= 0.7, < 2)
53
54
  minitest (~> 5.1)
54
55
  tzinfo (~> 1.1)
55
56
  arel (9.0.0)
56
57
  ast (2.4.0)
57
- avro (1.9.1)
58
+ avro (1.9.2)
58
59
  multi_json
59
60
  avro_turf (0.11.0)
60
61
  avro (>= 1.7.7, < 1.10)
61
62
  excon (~> 0.45)
62
63
  builder (3.2.4)
63
64
  coderay (1.1.2)
64
- concurrent-ruby (1.1.5)
65
- concurrent-ruby-ext (1.1.5)
66
- concurrent-ruby (= 1.1.5)
67
- crass (1.0.5)
68
- ddtrace (0.30.0)
65
+ concurrent-ruby (1.1.6)
66
+ concurrent-ruby-ext (1.1.6)
67
+ concurrent-ruby (= 1.1.6)
68
+ crass (1.0.6)
69
+ database_cleaner (1.8.5)
70
+ ddtrace (0.35.1)
69
71
  msgpack
70
72
  diff-lcs (1.3)
71
73
  digest-crc (0.5.1)
72
- dogstatsd-ruby (4.5.0)
74
+ dogstatsd-ruby (4.8.0)
73
75
  erubi (1.9.0)
74
76
  excon (0.73.0)
75
77
  exponential-backoff (0.0.4)
76
- ffi (1.11.3)
78
+ ffi (1.12.2)
77
79
  formatador (0.2.5)
78
80
  globalid (0.4.2)
79
81
  activesupport (>= 4.2.0)
80
- guard (2.16.1)
82
+ guard (2.16.2)
81
83
  formatador (>= 0.2.4)
82
84
  listen (>= 2.7, < 4.0)
83
85
  lumberjack (>= 1.0.12, < 2.0)
@@ -94,7 +96,7 @@ GEM
94
96
  guard-rubocop (1.3.0)
95
97
  guard (~> 2.0)
96
98
  rubocop (~> 0.20)
97
- i18n (1.7.0)
99
+ i18n (1.8.2)
98
100
  concurrent-ruby (~> 1.0)
99
101
  jaro_winkler (1.5.4)
100
102
  listen (3.2.1)
@@ -104,33 +106,33 @@ GEM
104
106
  logging (2.2.2)
105
107
  little-plugger (~> 1.1)
106
108
  multi_json (~> 1.10)
107
- loofah (2.4.0)
109
+ loofah (2.5.0)
108
110
  crass (~> 1.0.2)
109
111
  nokogiri (>= 1.5.9)
110
- lumberjack (1.0.13)
112
+ lumberjack (1.2.4)
111
113
  mail (2.7.1)
112
114
  mini_mime (>= 0.1.1)
113
115
  marcel (0.3.3)
114
116
  mimemagic (~> 0.3.2)
115
- method_source (0.9.2)
116
- mimemagic (0.3.3)
117
+ method_source (1.0.0)
118
+ mimemagic (0.3.5)
117
119
  mini_mime (1.0.2)
118
120
  mini_portile2 (2.4.0)
119
- minitest (5.13.0)
120
- msgpack (1.3.1)
121
+ minitest (5.14.0)
122
+ msgpack (1.3.3)
121
123
  multi_json (1.14.1)
122
124
  mysql2 (0.5.3)
123
125
  nenv (0.3.0)
124
126
  nio4r (2.5.2)
125
- nokogiri (1.10.8)
127
+ nokogiri (1.10.9)
126
128
  mini_portile2 (~> 2.4.0)
127
129
  notiffany (0.1.3)
128
130
  nenv (~> 0.1)
129
131
  shellany (~> 0.0)
130
132
  parallel (1.19.1)
131
- parser (2.6.5.0)
133
+ parser (2.7.1.2)
132
134
  ast (~> 2.4.0)
133
- pg (1.1.4)
135
+ pg (1.2.3)
134
136
  phobos (1.9.0)
135
137
  activesupport (>= 3.0.0)
136
138
  concurrent-ruby (>= 1.0.2)
@@ -139,69 +141,74 @@ GEM
139
141
  logging
140
142
  ruby-kafka
141
143
  thor
142
- pry (0.12.2)
143
- coderay (~> 1.1.0)
144
- method_source (~> 0.9.0)
145
- rack (2.0.8)
144
+ pry (0.13.1)
145
+ coderay (~> 1.1)
146
+ method_source (~> 1.0)
147
+ rack (2.2.3)
146
148
  rack-test (1.1.0)
147
149
  rack (>= 1.0, < 3)
148
- rails (5.2.4)
149
- actioncable (= 5.2.4)
150
- actionmailer (= 5.2.4)
151
- actionpack (= 5.2.4)
152
- actionview (= 5.2.4)
153
- activejob (= 5.2.4)
154
- activemodel (= 5.2.4)
155
- activerecord (= 5.2.4)
156
- activestorage (= 5.2.4)
157
- activesupport (= 5.2.4)
150
+ rails (5.2.4.2)
151
+ actioncable (= 5.2.4.2)
152
+ actionmailer (= 5.2.4.2)
153
+ actionpack (= 5.2.4.2)
154
+ actionview (= 5.2.4.2)
155
+ activejob (= 5.2.4.2)
156
+ activemodel (= 5.2.4.2)
157
+ activerecord (= 5.2.4.2)
158
+ activestorage (= 5.2.4.2)
159
+ activesupport (= 5.2.4.2)
158
160
  bundler (>= 1.3.0)
159
- railties (= 5.2.4)
161
+ railties (= 5.2.4.2)
160
162
  sprockets-rails (>= 2.0.0)
161
163
  rails-dom-testing (2.0.3)
162
164
  activesupport (>= 4.2.0)
163
165
  nokogiri (>= 1.6)
164
166
  rails-html-sanitizer (1.3.0)
165
167
  loofah (~> 2.3)
166
- railties (5.2.4)
167
- actionpack (= 5.2.4)
168
- activesupport (= 5.2.4)
168
+ railties (5.2.4.2)
169
+ actionpack (= 5.2.4.2)
170
+ activesupport (= 5.2.4.2)
169
171
  method_source
170
172
  rake (>= 0.8.7)
171
173
  thor (>= 0.19.0, < 2.0)
172
174
  rainbow (3.0.0)
173
175
  rake (13.0.1)
174
- rb-fsevent (0.10.3)
175
- rb-inotify (0.10.0)
176
+ rb-fsevent (0.10.4)
177
+ rb-inotify (0.10.1)
176
178
  ffi (~> 1.0)
179
+ rexml (3.2.4)
177
180
  rspec (3.9.0)
178
181
  rspec-core (~> 3.9.0)
179
182
  rspec-expectations (~> 3.9.0)
180
183
  rspec-mocks (~> 3.9.0)
181
- rspec-core (3.9.0)
182
- rspec-support (~> 3.9.0)
183
- rspec-expectations (3.9.0)
184
+ rspec-core (3.9.2)
185
+ rspec-support (~> 3.9.3)
186
+ rspec-expectations (3.9.1)
184
187
  diff-lcs (>= 1.2.0, < 2.0)
185
188
  rspec-support (~> 3.9.0)
186
- rspec-mocks (3.9.0)
189
+ rspec-mocks (3.9.1)
187
190
  diff-lcs (>= 1.2.0, < 2.0)
188
191
  rspec-support (~> 3.9.0)
189
- rspec-support (3.9.0)
192
+ rspec-support (3.9.3)
190
193
  rspec_junit_formatter (0.4.1)
191
194
  rspec-core (>= 2, < 4, != 2.12.0)
192
- rubocop (0.77.0)
195
+ rubocop (0.82.0)
193
196
  jaro_winkler (~> 1.5.1)
194
197
  parallel (~> 1.10)
195
- parser (>= 2.6)
198
+ parser (>= 2.7.0.1)
196
199
  rainbow (>= 2.2.2, < 4.0)
200
+ rexml
197
201
  ruby-progressbar (~> 1.7)
198
- unicode-display_width (>= 1.4.0, < 1.7)
199
- rubocop-rspec (1.37.1)
202
+ unicode-display_width (>= 1.4.0, < 2.0)
203
+ rubocop-rspec (1.39.0)
200
204
  rubocop (>= 0.68.1)
201
205
  ruby-kafka (0.7.10)
202
206
  digest-crc
203
207
  ruby-progressbar (1.10.1)
204
208
  shellany (0.0.1)
209
+ sigurd (0.0.1)
210
+ concurrent-ruby (~> 1)
211
+ exponential-backoff
205
212
  sprockets (4.0.0)
206
213
  concurrent-ruby (~> 1.0)
207
214
  rack (> 1, < 3)
@@ -209,15 +216,15 @@ GEM
209
216
  actionpack (>= 4.0)
210
217
  activesupport (>= 4.0)
211
218
  sprockets (>= 3.0.0)
212
- sqlite3 (1.4.1)
219
+ sqlite3 (1.4.2)
213
220
  thor (1.0.1)
214
221
  thread_safe (0.3.6)
215
- tzinfo (1.2.5)
222
+ tzinfo (1.2.7)
216
223
  thread_safe (~> 0.1)
217
- unicode-display_width (1.6.0)
224
+ unicode-display_width (1.7.0)
218
225
  websocket-driver (0.7.1)
219
226
  websocket-extensions (>= 0.1.0)
220
- websocket-extensions (0.1.4)
227
+ websocket-extensions (0.1.5)
221
228
 
222
229
  PLATFORMS
223
230
  ruby
@@ -226,7 +233,7 @@ DEPENDENCIES
226
233
  activerecord (~> 5.2)
227
234
  activerecord-import
228
235
  avro (~> 1.9)
229
- bundler (~> 1)
236
+ database_cleaner (~> 1.7)
230
237
  ddtrace (~> 0.11)
231
238
  deimos-ruby!
232
239
  dogstatsd-ruby (~> 4.2)
@@ -235,7 +242,7 @@ DEPENDENCIES
235
242
  guard-rubocop (~> 1)
236
243
  mysql2 (~> 0.5)
237
244
  pg (~> 1.1)
238
- rails (~> 5.2)
245
+ rails (~> 5.2, >= 5.2.4.2)
239
246
  rake (~> 13)
240
247
  rspec (~> 3)
241
248
  rspec_junit_formatter (~> 0.3)
@@ -244,4 +251,4 @@ DEPENDENCIES
244
251
  sqlite3 (~> 1.3)
245
252
 
246
253
  BUNDLED WITH
247
- 1.17.3
254
+ 2.1.4