orthoses-rails 0.2.0 → 0.5.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.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/examples/rails/Rakefile +315 -0
  3. data/examples/rails/config/database.yml +8 -0
  4. data/examples/rails/config/storage.yml +3 -0
  5. data/examples/rails/gemfiles/Gemfile_6_0 +16 -0
  6. data/examples/rails/gemfiles/Gemfile_6_0.lock +172 -0
  7. data/examples/rails/gemfiles/Gemfile_6_1 +15 -0
  8. data/examples/rails/gemfiles/Gemfile_6_1.lock +173 -0
  9. data/examples/rails/gemfiles/Gemfile_7_0 +15 -0
  10. data/examples/rails/gemfiles/Gemfile_7_0.lock +172 -0
  11. data/examples/rails/tasks/active_job.rake +95 -0
  12. data/examples/rails/tasks/active_model.rake +46 -0
  13. data/examples/rails/tasks/active_record.rake +83 -0
  14. data/examples/rails/tasks/active_storage.rake +94 -0
  15. data/examples/rails/tasks/active_support.rake +92 -0
  16. data/lib/orthoses/active_model/has_secure_password.rb +12 -5
  17. data/lib/orthoses/active_model.rb +3 -0
  18. data/lib/orthoses/active_record/query_methods.rb +32 -0
  19. data/lib/orthoses/active_record.rb +7 -0
  20. data/lib/orthoses/active_support/class_attribute.rb +25 -14
  21. data/lib/orthoses/active_support/configurable.rb +36 -0
  22. data/lib/orthoses/active_support/delegation.rb +158 -0
  23. data/lib/orthoses/active_support/mattr_accessor.rb +18 -10
  24. data/lib/orthoses/active_support/time_with_zone.rb +34 -18
  25. data/lib/orthoses/active_support.rb +22 -0
  26. data/lib/orthoses/rails/version.rb +1 -1
  27. data/lib/orthoses/rails.rb +3 -11
  28. data/orthoses-rails.gemspec +1 -1
  29. metadata +25 -8
  30. data/lib/orthoses/active_support/concern.rb +0 -24
  31. data/lib/orthoses/active_support/known_sig/active_support/time_with_zone.rbs +0 -4
  32. data/lib/orthoses/active_support/known_sig/time.rbs +0 -64
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fdff122ed7b5425e10cdf2fa105b8ffb7a583554589f93f8703bb014abbbafd0
4
- data.tar.gz: 6d991ce9480237d0f605bbb3935c50f072c6794594b037e459ef3c0dfdcb92c3
3
+ metadata.gz: bf5adf50ae35b548291c69ba03b7eb6086e1214c863b83c85de0af3c81de3b17
4
+ data.tar.gz: a162e4dc8583a4a738ac38b41ee7fb65db67349e08b2ead5f8bfc41bc3b057c1
5
5
  SHA512:
6
- metadata.gz: 2f1c3be987e9a8096a89918e4c16ef4ad8170c9e77d3e7a074541c98f4255944dde188b74f3d4693764e1f77d7fc600f6e67f9be6309aa2c433cecc746439af3
7
- data.tar.gz: 49eaa832bc2a488b0b390df8fa962990898c6e9873f1476e9eae17d94073f9bc2e538be6fba54ebeaca7e33cc4245f0a68fff705f069e009c8284973d14906b8
6
+ metadata.gz: 8c5494faf887bb600e081967321ec6c25e24610206de9014323f13e6b43147711eb05fd1d670f815adca2739f8f80988823a5c7b06adcc193092144b7aafb0d3
7
+ data.tar.gz: 119911fd1cd01d7fc059fc3c23f989573771126a5ca4aa4a7091a7ca604a0a6d5d86726eda48312969695a30ec70498dd2af060231abca09aecb56212cfa2b68
@@ -0,0 +1,315 @@
1
+ ## run `$ rake`
2
+
3
+ def switch_branch(name)
4
+ cd "_src" do
5
+ sh "git switch #{name}"
6
+ end
7
+ end
8
+
9
+ def generate(out_dir, version)
10
+ require 'orthoses'
11
+ require 'orthoses-rails'
12
+ require 'openssl'
13
+ require 'cgi'
14
+ require 'uri'
15
+
16
+ Orthoses.logger.level = :error
17
+
18
+ loader = -> () {
19
+ require "active_support/all"
20
+ require "active_record"
21
+ require "active_job"
22
+ require "active_model"
23
+ require "active_storage/engine"
24
+ require "action_dispatch"
25
+ require "action_mailbox"
26
+ require "action_mailer"
27
+ require "action_pack"
28
+ require "action_text"
29
+ require "action_view"
30
+
31
+ [
32
+ ActiveSupport,
33
+ ActiveModel,
34
+ ActiveJob,
35
+ ActiveRecord,
36
+ ActiveStorage,
37
+ ActionDispatch,
38
+ ActionMailbox,
39
+ ActionMailer,
40
+ ActionText,
41
+ ActionView,
42
+ ].each do |rails_mod|
43
+ rails_mod.eager_load!
44
+ Orthoses::Utils.each_const_recursive(rails_mod, on_error: -> (e) {
45
+ Orthoses.logger.warn "skip load const by [#{e.root}][#{e.const}](#{e.error.class})#{e.error.message}"
46
+ })
47
+ v = rails_mod.respond_to?(:version) ? rails_mod.version : nil
48
+ puts "loaded #{rails_mod}: v#{v}"
49
+ end
50
+ eval(<<~RUBY)
51
+ module Dummy
52
+ class Application < Rails::Application
53
+ config.load_defaults #{version.to_s}
54
+ config.active_storage.service = :local
55
+ end
56
+ end
57
+ RUBY
58
+ ENV['RAILS_ENV'] = 'development'
59
+ Rails.application.initialize!
60
+ }
61
+ Orthoses::Builder.new do
62
+ use Orthoses::CreateFileByName,
63
+ base_dir: "#{out_dir}/#{version}",
64
+ header: "# !!! GENERATED CODE !!!\n# Please see generators/rails-generator"
65
+ use Orthoses::AvoidRecursiveAncestorError
66
+ use Orthoses::Filter,
67
+ if: -> (name, content) {
68
+ # OMG, both ERB and Erb are exist...
69
+ return false if name.start_with?("Erb")
70
+
71
+ # ArgumentError
72
+ return false if name.start_with?("I18n::Tests")
73
+
74
+ # FIXME: too hard
75
+ return false if name.include?("::Generators")
76
+
77
+ # Ignore known sig
78
+ return false if Orthoses::Utils.rbs_defined_class?(name, collection: true) && content.body.empty?
79
+
80
+ true
81
+ }
82
+ use Orthoses::Constant,
83
+ strict: false,
84
+ if: -> (current, const, _val, _rbs) {
85
+ !Orthoses::Utils.rbs_defined_const?("#{current}::#{const}", collection: true)
86
+ },
87
+ on_error: -> (e) {
88
+ Orthoses.logger.warn "[Orthoses::Constant] skip load const by #{e.root}[::#{e.const}] (#{e.error.class}) #{e.error.message}"
89
+ }
90
+ Orthoses::ActiveSupport.each do |middleware, **args|
91
+ use middleware, **args
92
+ end
93
+ use Orthoses::ActiveRecord::QueryMethods
94
+ use Orthoses::LoadRBS,
95
+ paths: -> { Orthoses::PathHelper.best_version_paths(::ActiveRecord::VERSION::STRING, "known_sig/activerecord") }
96
+ use Orthoses::LoadRBS,
97
+ paths: -> { Orthoses::PathHelper.best_version_paths(::ActiveModel::VERSION::STRING, "known_sig/activemodel") }
98
+ use Orthoses::LoadRBS,
99
+ paths: -> { Orthoses::PathHelper.best_version_paths(::ActiveSupport::VERSION::STRING, "known_sig/activesupport") }
100
+ # # require in method
101
+ use Orthoses::Tap do |store|
102
+ store.delete("DummyERB")
103
+ store.delete("DummyCompiler")
104
+ end
105
+ # see activerecord/lib/active_record/migration/compatibility.rb
106
+ use Orthoses::Tap do |store|
107
+ # TODO: make middleware
108
+ if defined?(ActiveRecord::Migration::Compatibility::V7_0)
109
+ store["ActiveRecord::Migration::Compatibility::V6_1"].header = nil
110
+ store["ActiveRecord::Migration::Compatibility::V7_0"].header = "class ActiveRecord::Migration::Compatibility::V7_0 < ActiveRecord::Migration::Current"
111
+ elsif defined?(ActiveRecord::Migration::Compatibility::V6_1)
112
+ store["ActiveRecord::Migration::Compatibility::V6_0"].header = nil
113
+ store["ActiveRecord::Migration::Compatibility::V6_1"].header = "class ActiveRecord::Migration::Compatibility::V6_1 < ActiveRecord::Migration::Current"
114
+ elsif defined?(ActiveRecord::Migration::Compatibility::V6_0)
115
+ store["ActiveRecord::Migration::Compatibility::V5_2"].header = nil
116
+ store["ActiveRecord::Migration::Compatibility::V6_0"].header = "class ActiveRecord::Migration::Compatibility::V6_0 < ActiveRecord::Migration::Current"
117
+ end
118
+ end
119
+ # class_eval in #each
120
+ # see activerecord/lib/active_record/migration/command_recorder.rb
121
+ use Orthoses::Tap do |store|
122
+ content = store["ActiveRecord::Migration::CommandRecorder"]
123
+ ActiveRecord::Migration::CommandRecorder::ReversibleAndIrreversibleMethods.each do |method|
124
+ content << "def #{method}: (*untyped args) ?{ () -> void } -> untyped"
125
+ end
126
+ end
127
+ # class_eval in #each
128
+ # see activerecord/lib/active_record/migration/command_recorder.rb
129
+ use Orthoses::Tap do |store|
130
+ content = store["ActiveRecord::Migration::CommandRecorder::StraightReversions"]
131
+ {
132
+ execute_block: :execute_block,
133
+ create_table: :drop_table,
134
+ create_join_table: :drop_join_table,
135
+ add_column: :remove_column,
136
+ add_index: :remove_index,
137
+ add_timestamps: :remove_timestamps,
138
+ add_reference: :remove_reference,
139
+ add_foreign_key: :remove_foreign_key,
140
+ add_check_constraint: :remove_check_constraint,
141
+ enable_extension: :disable_extension
142
+ }.each do |cmd, inv|
143
+ [[inv, cmd], [cmd, inv]].uniq.each do |method, inverse|
144
+ content << "def invert_#{method}: (untyped args) ?{ () -> void } -> [Symbol, untyped, Proc]"
145
+ end
146
+ end
147
+ end
148
+ # singleton_class.class_eval in included
149
+ use Orthoses::Tap do |store|
150
+ store["ActiveRecord::ModelSchema"].body.tap do |body|
151
+ body.delete("alias _inheritance_column= inheritance_column=")
152
+ body.delete("alias inheritance_column= real_inheritance_column=")
153
+ end
154
+ end
155
+ # alias in included block
156
+ use Orthoses::Tap do |store|
157
+ store["ActiveRecord::ConnectionAdapters::ColumnMethods"].body.tap do |body|
158
+ body.delete("alias blob binary")
159
+ body.delete("alias numeric decimal")
160
+ end
161
+ end
162
+ # > Use async_exec instead of exec_params on pg versions before 1.1
163
+ use Orthoses::Tap do |store|
164
+ store["PG::Connection"].body.clear
165
+ end
166
+ # Entrust to auto super class
167
+ use Orthoses::Tap do |store|
168
+ store.each do |_, content|
169
+ if content.header&.include?(" < Type::")
170
+ content.header.sub!(/ < Type::(.*)/, " < ::ActiveModel::Type::\\1")
171
+ end
172
+ # delegate to auto_header
173
+ if content.header&.start_with?("class Arel")
174
+ content.header = nil
175
+ end
176
+ end
177
+ store["ActionView::Helpers::Tags::CollectionRadioButtons::RadioButtonBuilder"].header = nil
178
+ store["ActionView::Helpers::Tags::CollectionCheckBoxes::CheckBoxBuilder"].header = nil
179
+ store["ActionView::SyntaxErrorInTemplate"].header = nil
180
+ # MigrationProxy cannot resolve name since class alias.
181
+ store["ActiveRecord::NullMigration"].header = nil
182
+ end
183
+ use Orthoses::DelegateClass
184
+ use Orthoses::Attribute
185
+ use Orthoses::Mixin,
186
+ if: -> (base_mod, how, mod) {
187
+ mod != Enumerable # TODO
188
+ }
189
+ use Orthoses::RBSPrototypeRB,
190
+ paths: Dir.glob('_src/{railties,action{cable,mailbox,mailer,pack,text,view},active{job,model,record,storage,support}}/{app,lib}/**/*.rb'),
191
+ constant_filter: -> (member) { false },
192
+ mixin_filter: -> (member) { false },
193
+ attribute_filter: -> (member) { false }
194
+ use Orthoses::Autoload
195
+ run loader
196
+ end.call
197
+
198
+ # $ cat out/7.0/**/*.rbs | wc
199
+ # 69763 339342 2606899
200
+ end
201
+
202
+ def generate_test_script(gem:, version:, export:, stdlib_dependencies:, gem_dependencies:, rails_dependencies:)
203
+ Pathname(export).join('_scripts').tap(&:mkdir).join('test').write(<<~SHELL)
204
+ #!/usr/bin/env bash
205
+
206
+ # !!! GENERATED CODE !!!
207
+ # Please see generators/rails-generator
208
+
209
+ # set -eou => Exit command with non-zero status code, Output logs of every command executed, Treat unset variables as an error when substituting.
210
+ set -eou pipefail
211
+ # Internal Field Separator - Linux shell variable
212
+ IFS=$'\n\t'
213
+ # Print shell input lines
214
+ set -v
215
+
216
+ # Set RBS_DIR variable to change directory to execute type checks using `steep check`
217
+ RBS_DIR=$(cd $(dirname $0)/..; pwd)
218
+ # Set REPO_DIR variable to validate RBS files added to the corresponding folder
219
+ REPO_DIR=$(cd $(dirname $0)/../../..; pwd)
220
+ # Validate RBS files, using the bundler environment present
221
+ bundle exec rbs --repo=$REPO_DIR #{stdlib_dependencies.map{"-r #{_1}"}.join(" ")} \\
222
+ #{gem_dependencies.map{"-r #{_1}"}.join(" ")} \\
223
+ -r #{gem} validate --silent
224
+
225
+ cd ${RBS_DIR}/_test
226
+ # Run type checks
227
+ bundle exec steep check
228
+ SHELL
229
+
230
+ sh "chmod +x #{Pathname(export).join('_scripts').join('test')}"
231
+
232
+ Pathname(export).join('_test').tap(&:mkdir).join('Steepfile').write(<<~RUBY)
233
+ # !!! GENERATED CODE !!!
234
+ # Please see generators/rails-generator
235
+
236
+ D = Steep::Diagnostic
237
+
238
+ target :test do
239
+ signature "."
240
+ check "."
241
+
242
+ repo_path "../../../"
243
+
244
+ #{stdlib_dependencies.map{" library \"#{_1}\""}.join("\n")}
245
+ #{gem_dependencies.map{" library \"#{_1}\""}.join("\n")}
246
+
247
+ library "#{gem}:#{version}"
248
+
249
+ configure_code_diagnostics(D::Ruby.all_error)
250
+ end
251
+ RUBY
252
+ end
253
+
254
+ VERSIONS = %w[
255
+ 6.0
256
+ 6.1
257
+ 7.0
258
+ ]
259
+ Object.private_constant :VERSIONS
260
+
261
+ GEMS = %w[
262
+ active_support
263
+ active_model
264
+ active_record
265
+ active_job
266
+ active_storage
267
+ ]
268
+ Object.private_constant :GEMS
269
+
270
+ task :clean do
271
+ FileUtils.rm_rf("out")
272
+ end
273
+
274
+ namespace :bundle do
275
+ task :update do
276
+ VERSIONS.each do |version|
277
+ sh "BUNDLE_GEMFILE=gemfiles/Gemfile_#{version.tr('.', '_')} bundle update"
278
+ end
279
+ end
280
+ end
281
+
282
+ VERSIONS.each do |version|
283
+ namespace version do
284
+ desc "run all version=#{version}"
285
+ task :all => [
286
+ "#{version}:generate",
287
+ *(GEMS.map{"#{version}:#{_1}:export"}),
288
+ # *(GEMS.map{"#{version}:#{_1}:validate"}),
289
+ # *(GEMS.map{"#{version}:#{_1}:install"})
290
+ ]
291
+
292
+ desc "generate version=#{version}"
293
+ task :generate do |t|
294
+ gemfile = File.expand_path("gemfiles/Gemfile_#{version.tr('.', '_')}")
295
+ sh "BUNDLE_GEMFILE=#{gemfile} bundle install"
296
+ sh "BUNDLE_GEMFILE=#{gemfile} bundle exec rake #{t.name}_exec"
297
+ end
298
+
299
+ task :generate_exec do
300
+ switch_branch("#{version.tr('.', '-')}-stable")
301
+ generate("out", version)
302
+ end
303
+ end
304
+ end
305
+
306
+ load 'tasks/active_job.rake'
307
+ load 'tasks/active_model.rake'
308
+ load 'tasks/active_record.rake'
309
+ load 'tasks/active_storage.rake'
310
+ load 'tasks/active_support.rake'
311
+
312
+ task default: [
313
+ :clean,
314
+ *(VERSIONS.map {"#{_1}:all"})
315
+ ]
@@ -0,0 +1,8 @@
1
+ development:
2
+ primary: &primary
3
+ adapter: sqlite3
4
+ pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
5
+ timeout: 5000
6
+ database: ':memory:'
7
+ replica:
8
+ <<: *primary
@@ -0,0 +1,3 @@
1
+ local:
2
+ service: Disk
3
+ root: <%= Rails.root.join("storage") %>
@@ -0,0 +1,16 @@
1
+ source "https://rubygems.org"
2
+
3
+ ruby "~> 3.1.0"
4
+
5
+ gemspec path: '../../../'
6
+
7
+ gem "rails", ">= 6.0", "< 6.1"
8
+ gem "sqlite3"
9
+ # gem "orthoses", path: "../../../../orthoses"
10
+
11
+ if RUBY_VERSION >= "3.1"
12
+ gem "net-smtp", require: false
13
+ gem "net-imap", require: false
14
+ gem "net-pop", require: false
15
+ gem "psych", "~> 3"
16
+ end
@@ -0,0 +1,172 @@
1
+ PATH
2
+ remote: ../../..
3
+ specs:
4
+ orthoses-rails (0.4.0)
5
+ orthoses (>= 0.10)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ actioncable (6.0.5)
11
+ actionpack (= 6.0.5)
12
+ nio4r (~> 2.0)
13
+ websocket-driver (>= 0.6.1)
14
+ actionmailbox (6.0.5)
15
+ actionpack (= 6.0.5)
16
+ activejob (= 6.0.5)
17
+ activerecord (= 6.0.5)
18
+ activestorage (= 6.0.5)
19
+ activesupport (= 6.0.5)
20
+ mail (>= 2.7.1)
21
+ actionmailer (6.0.5)
22
+ actionpack (= 6.0.5)
23
+ actionview (= 6.0.5)
24
+ activejob (= 6.0.5)
25
+ mail (~> 2.5, >= 2.5.4)
26
+ rails-dom-testing (~> 2.0)
27
+ actionpack (6.0.5)
28
+ actionview (= 6.0.5)
29
+ activesupport (= 6.0.5)
30
+ rack (~> 2.0, >= 2.0.8)
31
+ rack-test (>= 0.6.3)
32
+ rails-dom-testing (~> 2.0)
33
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
34
+ actiontext (6.0.5)
35
+ actionpack (= 6.0.5)
36
+ activerecord (= 6.0.5)
37
+ activestorage (= 6.0.5)
38
+ activesupport (= 6.0.5)
39
+ nokogiri (>= 1.8.5)
40
+ actionview (6.0.5)
41
+ activesupport (= 6.0.5)
42
+ builder (~> 3.1)
43
+ erubi (~> 1.4)
44
+ rails-dom-testing (~> 2.0)
45
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
46
+ activejob (6.0.5)
47
+ activesupport (= 6.0.5)
48
+ globalid (>= 0.3.6)
49
+ activemodel (6.0.5)
50
+ activesupport (= 6.0.5)
51
+ activerecord (6.0.5)
52
+ activemodel (= 6.0.5)
53
+ activesupport (= 6.0.5)
54
+ activestorage (6.0.5)
55
+ actionpack (= 6.0.5)
56
+ activejob (= 6.0.5)
57
+ activerecord (= 6.0.5)
58
+ marcel (~> 1.0)
59
+ activesupport (6.0.5)
60
+ concurrent-ruby (~> 1.0, >= 1.0.2)
61
+ i18n (>= 0.7, < 2)
62
+ minitest (~> 5.1)
63
+ tzinfo (~> 1.1)
64
+ zeitwerk (~> 2.2, >= 2.2.2)
65
+ builder (3.2.4)
66
+ concurrent-ruby (1.1.10)
67
+ crass (1.0.6)
68
+ digest (3.1.0)
69
+ erubi (1.10.0)
70
+ globalid (1.0.0)
71
+ activesupport (>= 5.0)
72
+ i18n (1.10.0)
73
+ concurrent-ruby (~> 1.0)
74
+ loofah (2.18.0)
75
+ crass (~> 1.0.2)
76
+ nokogiri (>= 1.5.9)
77
+ mail (2.7.1)
78
+ mini_mime (>= 0.1.1)
79
+ marcel (1.0.2)
80
+ method_source (1.0.0)
81
+ mini_mime (1.1.2)
82
+ mini_portile2 (2.8.0)
83
+ minitest (5.16.1)
84
+ net-imap (0.2.3)
85
+ digest
86
+ net-protocol
87
+ strscan
88
+ net-pop (0.1.1)
89
+ digest
90
+ net-protocol
91
+ timeout
92
+ net-protocol (0.1.3)
93
+ timeout
94
+ net-smtp (0.3.1)
95
+ digest
96
+ net-protocol
97
+ timeout
98
+ nio4r (2.5.8)
99
+ nokogiri (1.13.6)
100
+ mini_portile2 (~> 2.8.0)
101
+ racc (~> 1.4)
102
+ orthoses (0.10.0)
103
+ rbs (~> 2.0)
104
+ psych (3.3.2)
105
+ racc (1.6.0)
106
+ rack (2.2.3.1)
107
+ rack-test (2.0.0)
108
+ rack (>= 1.3)
109
+ rails (6.0.5)
110
+ actioncable (= 6.0.5)
111
+ actionmailbox (= 6.0.5)
112
+ actionmailer (= 6.0.5)
113
+ actionpack (= 6.0.5)
114
+ actiontext (= 6.0.5)
115
+ actionview (= 6.0.5)
116
+ activejob (= 6.0.5)
117
+ activemodel (= 6.0.5)
118
+ activerecord (= 6.0.5)
119
+ activestorage (= 6.0.5)
120
+ activesupport (= 6.0.5)
121
+ bundler (>= 1.3.0)
122
+ railties (= 6.0.5)
123
+ sprockets-rails (>= 2.0.0)
124
+ rails-dom-testing (2.0.3)
125
+ activesupport (>= 4.2.0)
126
+ nokogiri (>= 1.6)
127
+ rails-html-sanitizer (1.4.3)
128
+ loofah (~> 2.3)
129
+ railties (6.0.5)
130
+ actionpack (= 6.0.5)
131
+ activesupport (= 6.0.5)
132
+ method_source
133
+ rake (>= 0.8.7)
134
+ thor (>= 0.20.3, < 2.0)
135
+ rake (13.0.6)
136
+ rbs (2.6.0)
137
+ sprockets (4.1.0)
138
+ concurrent-ruby (~> 1.0)
139
+ rack (> 1, < 3)
140
+ sprockets-rails (3.4.2)
141
+ actionpack (>= 5.2)
142
+ activesupport (>= 5.2)
143
+ sprockets (>= 3.0.0)
144
+ sqlite3 (1.4.4)
145
+ strscan (3.0.3)
146
+ thor (1.2.1)
147
+ thread_safe (0.3.6)
148
+ timeout (0.3.0)
149
+ tzinfo (1.2.9)
150
+ thread_safe (~> 0.1)
151
+ websocket-driver (0.7.5)
152
+ websocket-extensions (>= 0.1.0)
153
+ websocket-extensions (0.1.5)
154
+ zeitwerk (2.6.0)
155
+
156
+ PLATFORMS
157
+ ruby
158
+
159
+ DEPENDENCIES
160
+ net-imap
161
+ net-pop
162
+ net-smtp
163
+ orthoses-rails!
164
+ psych (~> 3)
165
+ rails (>= 6.0, < 6.1)
166
+ sqlite3
167
+
168
+ RUBY VERSION
169
+ ruby 3.1.1p18
170
+
171
+ BUNDLED WITH
172
+ 2.3.9
@@ -0,0 +1,15 @@
1
+ source "https://rubygems.org"
2
+
3
+ ruby "~> 3.1.0"
4
+
5
+ gemspec path: '../../../'
6
+
7
+ gem "rails", ">= 6.1", "< 7"
8
+ gem "sqlite3"
9
+ # gem "orthoses", path: "../../../../orthoses"
10
+
11
+ if RUBY_VERSION >= "3.1"
12
+ gem "net-smtp", require: false
13
+ gem "net-imap", require: false
14
+ gem "net-pop", require: false
15
+ end