rokaki 0.9.0 → 0.10.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: 231b27e39d8bc7c95a1b3d217bd28cf9129fa9463e949b7d8626ea5213fefdbc
4
- data.tar.gz: b533f1aae5281fbf5403b81dd81d2ac483a231eb419510abb3df7348017b24a5
3
+ metadata.gz: 5dac3a2881b83e34f6e0ee5717c4103212b3c4606b0ca05420338544a56cdffd
4
+ data.tar.gz: 594b1e1ff90e0a86674ed06e0de962a3cf622814cc87f02317a1da4ddcceb437
5
5
  SHA512:
6
- metadata.gz: 726dd3cea7f2f9e6c83c1456503bd16d2b71a844514a7740873b86f0122602a598ca059ebb1a6609104e029ab913723d812e9ea041b9fcd280cf48cea87c42cb
7
- data.tar.gz: c3b130ad1a46c837e932868f57372b794e7cd1ed6d1c5d1aaf852391fb7cf4a82b228306a2c710a88b6ecd0d2f85697c4c019e769f50beec3bad4c1bd6dc6ff3
6
+ metadata.gz: 1246c456cd8c613d8288a5d6bc69c65eedd67545b854b2185f512b071a04e1341c9bffe9f86a713ab9106842a8b015a73b0f8f55e9d0fecf8741b47e824c015b
7
+ data.tar.gz: 2429fb0148ca0705edcf02bb434541968db87a7bda6cd26a0945d1ccec660b6a9ca45ff9f5798aeeedfd4f89371f3c1575f2d0f79d1914a695b4f898d35bf4b4
@@ -42,7 +42,7 @@ jobs:
42
42
 
43
43
  # Initializes the CodeQL tools for scanning.
44
44
  - name: Initialize CodeQL
45
- uses: github/codeql-action/init@v1
45
+ uses: github/codeql-action/init@v3
46
46
  with:
47
47
  languages: ${{ matrix.language }}
48
48
  # If you wish to specify custom queries, you can do so here or in a config file.
@@ -53,7 +53,7 @@ jobs:
53
53
  # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
54
54
  # If this step fails, then you should remove it and run the build manually (see below)
55
55
  - name: Autobuild
56
- uses: github/codeql-action/autobuild@v1
56
+ uses: github/codeql-action/autobuild@v3
57
57
 
58
58
  # ℹ️ Command-line programs to run using the OS shell.
59
59
  # 📚 https://git.io/JvXDl
@@ -67,4 +67,4 @@ jobs:
67
67
  # make release
68
68
 
69
69
  - name: Perform CodeQL Analysis
70
- uses: github/codeql-action/analyze@v1
70
+ uses: github/codeql-action/analyze@v3
@@ -0,0 +1,39 @@
1
+ name: Run RSpec tests
2
+ on: [push]
3
+ jobs:
4
+ run-rspec-tests:
5
+ runs-on: ubuntu-latest
6
+ services:
7
+ mysql:
8
+ image: mysql:9.4
9
+ env:
10
+ MYSQL_DATABASE: rokaki
11
+ MYSQL_USER: rokaki
12
+ MYSQL_PASSWORD: rokaki
13
+ MYSQL_ROOT_PASSWORD: rokaki
14
+ ports:
15
+ - 3306:3306
16
+ options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
17
+
18
+ postgres:
19
+ image: postgres:13
20
+ env:
21
+ POSTGRES_USER: postgres
22
+ POSTGRES_PASSWORD: "postgres"
23
+ POSTGRES_DB: rokaki
24
+ ports:
25
+ - 5432:5432
26
+ # needed because the postgres container does not provide a healthcheck
27
+ options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
28
+ steps:
29
+ - uses: actions/checkout@v2
30
+ - name: Set up Ruby
31
+ uses: ruby/setup-ruby@v1
32
+ with:
33
+ # Not needed with a .ruby-version file
34
+ ruby-version: 3.3.0
35
+ # runs 'bundle install' and caches installed gems automatically
36
+ bundler-cache: true
37
+ - name: Run tests
38
+ run: |
39
+ ./spec/ordered_run.sh
data/Gemfile.lock CHANGED
@@ -1,50 +1,66 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rokaki (0.9.0)
4
+ rokaki (0.10.0)
5
5
  activesupport
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activemodel (7.1.3.2)
11
- activesupport (= 7.1.3.2)
12
- activerecord (7.1.3.2)
13
- activemodel (= 7.1.3.2)
14
- activesupport (= 7.1.3.2)
10
+ activemodel (8.0.3)
11
+ activesupport (= 8.0.3)
12
+ activerecord (8.0.3)
13
+ activemodel (= 8.0.3)
14
+ activesupport (= 8.0.3)
15
15
  timeout (>= 0.4.0)
16
- activesupport (7.1.3.2)
16
+ activesupport (8.0.3)
17
17
  base64
18
+ benchmark (>= 0.3)
18
19
  bigdecimal
19
- concurrent-ruby (~> 1.0, >= 1.0.2)
20
+ concurrent-ruby (~> 1.0, >= 1.3.1)
20
21
  connection_pool (>= 2.2.5)
21
22
  drb
22
23
  i18n (>= 1.6, < 2)
24
+ logger (>= 1.4.2)
23
25
  minitest (>= 5.1)
24
- mutex_m
25
- tzinfo (~> 2.0)
26
- base64 (0.2.0)
27
- bigdecimal (3.1.7)
28
- byebug (11.1.3)
26
+ securerandom (>= 0.3)
27
+ tzinfo (~> 2.0, >= 2.0.5)
28
+ uri (>= 0.13.1)
29
+ base64 (0.3.0)
30
+ benchmark (0.4.1)
31
+ bigdecimal (3.2.3)
32
+ byebug (12.0.0)
29
33
  coderay (1.1.3)
30
- concurrent-ruby (1.2.3)
31
- connection_pool (2.4.1)
32
- database_cleaner-active_record (2.1.0)
34
+ concurrent-ruby (1.3.5)
35
+ connection_pool (2.5.4)
36
+ database_cleaner-active_record (2.2.2)
33
37
  activerecord (>= 5.a)
34
- database_cleaner-core (~> 2.0.0)
38
+ database_cleaner-core (~> 2.0)
35
39
  database_cleaner-core (2.0.1)
36
- diff-lcs (1.5.1)
37
- drb (2.2.1)
38
- factory_bot (6.4.6)
39
- activesupport (>= 5.0.0)
40
- ffi (1.16.3)
41
- formatador (1.1.0)
42
- guard (2.18.1)
40
+ diff-lcs (1.6.2)
41
+ drb (2.2.3)
42
+ factory_bot (6.5.5)
43
+ activesupport (>= 6.1.0)
44
+ ffi (1.17.2-aarch64-linux-gnu)
45
+ ffi (1.17.2-aarch64-linux-musl)
46
+ ffi (1.17.2-arm-linux-gnu)
47
+ ffi (1.17.2-arm-linux-musl)
48
+ ffi (1.17.2-arm64-darwin)
49
+ ffi (1.17.2-x86-linux-gnu)
50
+ ffi (1.17.2-x86-linux-musl)
51
+ ffi (1.17.2-x86_64-darwin)
52
+ ffi (1.17.2-x86_64-linux-gnu)
53
+ ffi (1.17.2-x86_64-linux-musl)
54
+ formatador (1.2.1)
55
+ reline
56
+ guard (2.19.1)
43
57
  formatador (>= 0.2.4)
44
58
  listen (>= 2.7, < 4.0)
59
+ logger (~> 1.6)
45
60
  lumberjack (>= 1.0.12, < 2.0)
46
61
  nenv (~> 0.1)
47
62
  notiffany (~> 0.0)
63
+ ostruct (~> 0.6)
48
64
  pry (>= 0.13.0)
49
65
  shellany (~> 0.0)
50
66
  thor (>= 0.18.1)
@@ -53,60 +69,75 @@ GEM
53
69
  guard (~> 2.1)
54
70
  guard-compat (~> 1.1)
55
71
  rspec (>= 2.99.0, < 4.0)
56
- i18n (1.14.4)
72
+ i18n (1.14.7)
57
73
  concurrent-ruby (~> 1.0)
74
+ io-console (0.8.1)
58
75
  listen (3.9.0)
59
76
  rb-fsevent (~> 0.10, >= 0.10.3)
60
77
  rb-inotify (~> 0.9, >= 0.9.10)
61
- lumberjack (1.2.10)
78
+ logger (1.7.0)
79
+ lumberjack (1.4.2)
62
80
  method_source (1.1.0)
63
- minitest (5.22.3)
64
- mutex_m (0.2.0)
81
+ minitest (5.25.5)
82
+ mysql2 (0.5.7)
83
+ bigdecimal
65
84
  nenv (0.3.0)
66
85
  notiffany (0.1.3)
67
86
  nenv (~> 0.1)
68
87
  shellany (~> 0.0)
69
- pg (1.5.6)
70
- pry (0.14.2)
88
+ ostruct (0.6.3)
89
+ pg (1.6.2)
90
+ pg (1.6.2-aarch64-linux)
91
+ pg (1.6.2-aarch64-linux-musl)
92
+ pg (1.6.2-arm64-darwin)
93
+ pg (1.6.2-x86_64-darwin)
94
+ pg (1.6.2-x86_64-linux)
95
+ pg (1.6.2-x86_64-linux-musl)
96
+ pry (0.15.2)
71
97
  coderay (~> 1.1)
72
98
  method_source (~> 1.0)
73
- pry-byebug (3.10.1)
74
- byebug (~> 11.0)
75
- pry (>= 0.13, < 0.15)
76
- rake (13.2.1)
99
+ pry-byebug (3.11.0)
100
+ byebug (~> 12.0)
101
+ pry (>= 0.13, < 0.16)
102
+ rake (13.3.0)
77
103
  rb-fsevent (0.11.2)
78
- rb-inotify (0.10.1)
104
+ rb-inotify (0.11.1)
79
105
  ffi (~> 1.0)
80
- rspec (3.13.0)
106
+ reline (0.6.2)
107
+ io-console (~> 0.5)
108
+ rspec (3.13.1)
81
109
  rspec-core (~> 3.13.0)
82
110
  rspec-expectations (~> 3.13.0)
83
111
  rspec-mocks (~> 3.13.0)
84
- rspec-core (3.13.0)
112
+ rspec-core (3.13.5)
85
113
  rspec-support (~> 3.13.0)
86
- rspec-expectations (3.13.0)
114
+ rspec-expectations (3.13.5)
87
115
  diff-lcs (>= 1.2.0, < 2.0)
88
116
  rspec-support (~> 3.13.0)
89
- rspec-mocks (3.13.0)
117
+ rspec-mocks (3.13.5)
90
118
  diff-lcs (>= 1.2.0, < 2.0)
91
119
  rspec-support (~> 3.13.0)
92
- rspec-support (3.13.1)
120
+ rspec-support (3.13.6)
121
+ securerandom (0.4.1)
93
122
  shellany (0.0.1)
94
- sqlite3 (2.0.1-aarch64-linux-gnu)
95
- sqlite3 (2.0.1-aarch64-linux-musl)
96
- sqlite3 (2.0.1-arm-linux-gnu)
97
- sqlite3 (2.0.1-arm-linux-musl)
98
- sqlite3 (2.0.1-arm64-darwin)
99
- sqlite3 (2.0.1-x86-linux-gnu)
100
- sqlite3 (2.0.1-x86-linux-musl)
101
- sqlite3 (2.0.1-x86_64-darwin)
102
- sqlite3 (2.0.1-x86_64-linux-gnu)
103
- sqlite3 (2.0.1-x86_64-linux-musl)
104
- thor (1.3.1)
105
- timeout (0.4.1)
123
+ sqlite3 (2.7.4-aarch64-linux-gnu)
124
+ sqlite3 (2.7.4-aarch64-linux-musl)
125
+ sqlite3 (2.7.4-arm-linux-gnu)
126
+ sqlite3 (2.7.4-arm-linux-musl)
127
+ sqlite3 (2.7.4-arm64-darwin)
128
+ sqlite3 (2.7.4-x86-linux-gnu)
129
+ sqlite3 (2.7.4-x86-linux-musl)
130
+ sqlite3 (2.7.4-x86_64-darwin)
131
+ sqlite3 (2.7.4-x86_64-linux-gnu)
132
+ sqlite3 (2.7.4-x86_64-linux-musl)
133
+ thor (1.4.0)
134
+ timeout (0.4.3)
106
135
  tzinfo (2.0.6)
107
136
  concurrent-ruby (~> 1.0)
137
+ uri (1.0.3)
108
138
 
109
139
  PLATFORMS
140
+ aarch64-linux
110
141
  aarch64-linux-gnu
111
142
  aarch64-linux-musl
112
143
  arm-linux-gnu
@@ -115,6 +146,7 @@ PLATFORMS
115
146
  x86-linux-gnu
116
147
  x86-linux-musl
117
148
  x86_64-darwin
149
+ x86_64-linux
118
150
  x86_64-linux-gnu
119
151
  x86_64-linux-musl
120
152
 
@@ -125,6 +157,7 @@ DEPENDENCIES
125
157
  factory_bot
126
158
  guard
127
159
  guard-rspec
160
+ mysql2
128
161
  pg
129
162
  pry
130
163
  pry-byebug
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2019 Steve Martin
3
+ Copyright (c) 2025 Steve Martin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -422,13 +422,20 @@ filterable.results
422
422
  ### Ruby setup
423
423
  After checking out the repo, run `bin/setup` to install dependencies.
424
424
 
425
- ### Setting up the test database
425
+ ### Setting up the test databases
426
426
 
427
+ #### Postgres
427
428
  ```
428
429
  docker pull postgres
429
430
  docker run --name rokaki-postgres -e POSTGRES_USER=rokaki -e POSTGRES_PASSWORD=rokaki -d -p 5432:5432 postgres
430
431
  ```
431
432
 
433
+ #### Mysql
434
+ ```
435
+ docker pull mysql
436
+ docker run --name rokaki-mysql -e MYSQL_ROOT_PASSWORD=rokaki -e MYSQL_PASSWORD=rokaki -e MYSQL_DATABASE=rokaki -e MYSQL_USER=rokaki -d -p 3306:3306 mysql:latest mysqld
437
+ ```
438
+
432
439
  Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
433
440
 
434
441
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
@@ -33,13 +33,29 @@ module Rokaki
33
33
  @filter_template = "@model = #{prefix}filter_#{name} if #{filter};"
34
34
  end
35
35
 
36
+ def case_sensitive
37
+ if db == :postgres
38
+ 'LIKE'
39
+ elsif db == :mysql
40
+ 'LIKE BINARY'
41
+ end
42
+ end
43
+
44
+ def case_insensitive
45
+ if db == :postgres
46
+ 'ILIKE'
47
+ elsif db == :mysql
48
+ 'LIKE'
49
+ end
50
+ end
51
+
36
52
  def _chain_filter_type(key)
37
53
  filter = "#{prefix}#{key}"
38
54
  query = ''
39
55
 
40
56
  if like_semantics && mode = like_semantics[key]
41
57
  query = build_like_query(
42
- type: 'LIKE',
58
+ type: case_sensitive,
43
59
  query: query,
44
60
  filter: filter,
45
61
  mode: mode,
@@ -47,7 +63,7 @@ module Rokaki
47
63
  )
48
64
  elsif i_like_semantics && mode = i_like_semantics[key]
49
65
  query = build_like_query(
50
- type: 'ILIKE',
66
+ type: case_insensitive,
51
67
  query: query,
52
68
  filter: filter,
53
69
  mode: mode,
@@ -60,6 +76,20 @@ module Rokaki
60
76
  @filter_query = query
61
77
  end
62
78
 
79
+ # # @model.where('`authors`.`first_name` LIKE BINARY :query', query: "%teev%").or(@model.where('`authors`.`first_name` LIKE BINARY :query', query: "%imi%"))
80
+ # if Array == filter
81
+ # first_term = filter.unshift
82
+ # query = "@model.where(\"#{key} #{type} ANY (ARRAY[?])\", "
83
+ # query += "prepare_terms(#{first_term}, :#{mode}))"
84
+ # filter.each { |term|
85
+ # query += ".or(@model.where(\"#{key} #{type} ANY (ARRAY[?])\", "
86
+ # query += "prepare_terms(#{first_term}, :#{mode})))"
87
+ # }
88
+ # else
89
+ # query = "@model.where(\"#{key.to_s.split(".").map { |item| "`#{item}`" }.join(".")} #{type.to_s.upcase} :query\", "
90
+ # query += "query: prepare_terms(#{filter}, \"#{type.to_s.upcase}\", :#{search_mode}))"
91
+ # end
92
+
63
93
  def build_like_query(type:, query:, filter:, mode:, key:)
64
94
  if db == :postgres
65
95
  query = "@model.where(\"#{key} #{type} ANY (ARRAY[?])\", "
@@ -65,6 +65,22 @@ module Rokaki
65
65
  current_like_key
66
66
  end
67
67
 
68
+ def case_sensitive
69
+ if db == :postgres
70
+ 'LIKE'
71
+ elsif db == :mysql
72
+ 'LIKE BINARY'
73
+ end
74
+ end
75
+
76
+ def case_insensitive
77
+ if db == :postgres
78
+ 'ILIKE'
79
+ elsif db == :mysql
80
+ 'LIKE'
81
+ end
82
+ end
83
+
68
84
  def _build_deep_chain(keys)
69
85
  name = ''
70
86
  count = keys.size - 1
@@ -80,9 +96,9 @@ module Rokaki
80
96
  leaf = nil
81
97
 
82
98
  if search_mode = find_like_key(keys)
83
- type = 'LIKE'
99
+ type = case_sensitive
84
100
  elsif search_mode = find_i_like_key(keys)
85
- type = 'ILIKE'
101
+ type = case_insensitive
86
102
  end
87
103
  leaf = keys.pop
88
104
 
@@ -144,7 +160,6 @@ module Rokaki
144
160
  query = "where(\"#{key}.#{leaf} #{type} :query\", "
145
161
  query += "query: \"%\#{#{filter}}%\")" if search_mode == :circumfix
146
162
  query += "query: \"%\#{#{filter}}\")" if search_mode == :prefix
147
- query += "query: \"\#{#{filter}}%\")" if search_mode == :suffix
148
163
  end
149
164
 
150
165
  query
@@ -227,9 +227,7 @@ module Rokaki
227
227
  query += "prepare_terms(#{filter}, :#{search_mode}))"
228
228
  else
229
229
  query = "where(\"#{key_leaf} #{type.to_s.upcase} :query\", "
230
- query += "query: \"%\#{#{filter}}%\")" if search_mode == :circumfix
231
- query += "query: \"%\#{#{filter}}\")" if search_mode == :prefix
232
- query += "query: \"\#{#{filter}}%\")" if search_mode == :suffix
230
+ query += "query: prepare_regex_terms(#{filter}, :#{search_mode}))"
233
231
  end
234
232
 
235
233
  query
@@ -19,6 +19,34 @@ module Rokaki
19
19
  end
20
20
  end
21
21
 
22
+ def prepare_regex_terms(param, mode)
23
+ if Array === param
24
+ param_map = param.map { |term| ".*#{term}.*" } if mode == :circumfix
25
+ param_map = param.map { |term| ".*#{term}" } if mode == :prefix
26
+ param_map = param.map { |term| "#{term}.*" } if mode == :suffix
27
+ return param_map.join("|")
28
+ else
29
+ return [".*#{param}.*"] if mode == :circumfix
30
+ return [".*#{param}"] if mode == :prefix
31
+ return ["#{param}.*"] if mode == :suffix
32
+ end
33
+ end
34
+
35
+ # "SELECT `articles`.* FROM `articles` INNER JOIN `authors` ON `authors`.`id` = `articles`.`author_id` WHERE (`authors`.`first_name` LIKE BINARY '%teev%' OR `authors`.`first_name` LIKE BINARY '%arv%')"
36
+ def prepare_or_terms(param, type, mode)
37
+ if Array === param
38
+ param_map = param.map { |term| "%#{term}%" } if mode == :circumfix
39
+ param_map = param.map { |term| "%#{term}" } if mode == :prefix
40
+ param_map = param.map { |term| "#{term}%" } if mode == :suffix
41
+
42
+ return param_map.join(" OR #{type} ")
43
+ else
44
+ return ["%#{param}%"] if mode == :circumfix
45
+ return ["%#{param}"] if mode == :prefix
46
+ return ["#{param}%"] if mode == :suffix
47
+ end
48
+ end
49
+
22
50
 
23
51
  module ClassMethods
24
52
  include Filterable::ClassMethods
@@ -143,17 +171,40 @@ module Rokaki
143
171
  end
144
172
  end
145
173
 
146
- def filter_model(model_class)
174
+ def filter_db(db)
175
+ @_filter_db = db
176
+ end
177
+
178
+ def filter_model(model_class, db: nil)
179
+ @_filter_db = db if db
147
180
  @model = (model_class.is_a?(Class) ? model_class : Object.const_get(model_class.capitalize))
148
181
  class_eval "def set_model; @model ||= #{@model}; end;"
149
182
  end
150
183
 
184
+ def case_sensitive
185
+ if @_filter_db == :postgres
186
+ 'LIKE'
187
+ elsif @_filter_db == :mysql
188
+ # 'LIKE BINARY'
189
+ 'REGEXP'
190
+ end
191
+ end
192
+
193
+ def case_insensitive
194
+ if @_filter_db == :postgres
195
+ 'ILIKE'
196
+ elsif @_filter_db == :mysql
197
+ # 'LIKE'
198
+ 'REGEXP'
199
+ end
200
+ end
201
+
151
202
  def like(args)
152
203
  raise ArgumentError, 'argument mush be a hash' unless args.is_a? Hash
153
204
  @_like_semantics = (@_like_semantics || {}).merge(args)
154
205
 
155
206
  like_keys = LikeKeys.new(args)
156
- like_filters(like_keys, term_type: :like)
207
+ like_filters(like_keys, term_type: case_sensitive)
157
208
  end
158
209
 
159
210
  def ilike(args)
@@ -161,7 +212,7 @@ module Rokaki
161
212
  @i_like_semantics = (@i_like_semantics || {}).merge(args)
162
213
 
163
214
  like_keys = LikeKeys.new(args)
164
- like_filters(like_keys, term_type: :ilike)
215
+ like_filters(like_keys, term_type: case_insensitive)
165
216
  end
166
217
 
167
218
  # the model method is called to instatiate @model from the
@@ -1,3 +1,3 @@
1
1
  module Rokaki
2
- VERSION = "0.9.0"
2
+ VERSION = "0.10.0"
3
3
  end
data/rokaki.gemspec CHANGED
@@ -44,6 +44,7 @@ Gem::Specification.new do |spec|
44
44
  spec.add_development_dependency 'factory_bot'
45
45
 
46
46
  spec.add_development_dependency 'pg'
47
+ spec.add_development_dependency 'mysql2'
47
48
  spec.add_development_dependency 'sqlite3'
48
49
  spec.add_development_dependency 'database_cleaner-active_record'
49
50
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rokaki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Martin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-04-21 00:00:00.000000000 Z
11
+ date: 2025-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -164,6 +164,20 @@ dependencies:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: mysql2
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
167
181
  - !ruby/object:Gem::Dependency
168
182
  name: sqlite3
169
183
  requirement: !ruby/object:Gem::Requirement
@@ -200,6 +214,7 @@ extensions: []
200
214
  extra_rdoc_files: []
201
215
  files:
202
216
  - ".github/workflows/codeql-analysis.yml"
217
+ - ".github/workflows/spec.yml"
203
218
  - ".gitignore"
204
219
  - ".rspec"
205
220
  - ".ruby-version"