orthoses-rails 0.2.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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