orthoses-rails 0.9.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +20 -65
  3. data/lib/generators/orthoses/rails/install_generator.rb +18 -0
  4. data/lib/generators/orthoses/rails/templates/rails.rake +31 -0
  5. data/lib/orthoses/active_record/belongs_to.rb +15 -4
  6. data/lib/orthoses/active_record/enum.rb +5 -0
  7. data/lib/orthoses/active_record/generated_attribute_methods.rb +47 -55
  8. data/lib/orthoses/active_record/has_many.rb +15 -4
  9. data/lib/orthoses/active_record/has_one.rb +12 -2
  10. data/lib/orthoses/active_record/relation.rb +56 -0
  11. data/lib/orthoses/active_record/secure_token.rb +28 -0
  12. data/lib/orthoses/active_record.rb +37 -0
  13. data/lib/orthoses/active_storage/attached/model.rb +47 -0
  14. data/lib/orthoses/active_storage.rb +3 -0
  15. data/lib/orthoses/active_support/aliasing.rb +34 -0
  16. data/lib/orthoses/active_support/delegation.rb +17 -6
  17. data/lib/orthoses/active_support/time_with_zone.rb +30 -21
  18. data/lib/orthoses/active_support.rb +1 -0
  19. data/lib/orthoses/rails/application.rb +47 -0
  20. data/lib/orthoses/rails/version.rb +1 -1
  21. data/lib/orthoses/rails.rb +4 -2
  22. metadata +13 -45
  23. data/examples/rails/Gemfile +0 -16
  24. data/examples/rails/Gemfile.lock +0 -179
  25. data/examples/rails/Rakefile +0 -328
  26. data/examples/rails/config/database.yml +0 -8
  27. data/examples/rails/config/storage.yml +0 -3
  28. data/examples/rails/known_sig/actionpack/7.0/action_controller/metal.rbs +0 -4
  29. data/examples/rails/known_sig/activemodel/7.0/active_model/serialization.rbs +0 -4
  30. data/examples/rails/known_sig/activemodel/7.0/active_model/validations.rbs +0 -4
  31. data/examples/rails/known_sig/activerecord/6.0/_active_record_relation.rbs +0 -49
  32. data/examples/rails/known_sig/activerecord/6.0/_active_record_relation_class_methods.rbs +0 -45
  33. data/examples/rails/known_sig/activerecord/6.0/active_record/result.rbs +0 -5
  34. data/examples/rails/known_sig/activerecord/6.1/_active_record_relation.rbs +0 -49
  35. data/examples/rails/known_sig/activerecord/6.1/_active_record_relation_class_methods.rbs +0 -45
  36. data/examples/rails/known_sig/activerecord/6.1/active_record/result.rbs +0 -5
  37. data/examples/rails/known_sig/activerecord/7.0/_active_record_relation.rbs +0 -49
  38. data/examples/rails/known_sig/activerecord/7.0/_active_record_relation_class_methods.rbs +0 -45
  39. data/examples/rails/known_sig/activerecord/7.0/active_record/encryption/context.rbs +0 -9
  40. data/examples/rails/known_sig/activerecord/7.0/active_record/result.rbs +0 -5
  41. data/examples/rails/known_sig/activesupport/7.0/active_support/callbacks/callback_chain.rbs +0 -9
  42. data/examples/rails/known_sig/activesupport/7.0/active_support/duration.rbs +0 -4
  43. data/examples/rails/known_sig/activesupport/7.0/active_support/hash_with_indifferent_access.rbs +0 -6
  44. data/examples/rails/known_sig/activesupport/7.0/active_support/multibyte/chars.rbs +0 -7
  45. data/examples/rails/known_sig/activesupport/7.0/active_support/time_with_zone.rbs +0 -5
  46. data/examples/rails/known_sig/activesupport/7.0/active_support/time_zone.rbs +0 -3
  47. data/examples/rails/known_sig/activesupport/7.0/date.rbs +0 -6
  48. data/examples/rails/known_sig/activesupport/7.0/date_and_time/zones.rbs +0 -4
  49. data/examples/rails/known_sig/activesupport/7.0/hash_with_indifferent_access.rbs +0 -2
  50. data/examples/rails/known_sig/activesupport/7.0/integer.rbs +0 -9
  51. data/examples/rails/known_sig/activesupport/7.0/numeric.rbs +0 -15
  52. data/examples/rails/known_sig/activesupport/7.0/string.rbs +0 -4
  53. data/examples/rails/known_sig/activesupport/7.0/time.rbs +0 -46
  54. data/examples/rails/tasks/action_pack.rake +0 -141
  55. data/examples/rails/tasks/action_view.rake +0 -77
  56. data/examples/rails/tasks/active_job.rake +0 -99
  57. data/examples/rails/tasks/active_model.rake +0 -46
  58. data/examples/rails/tasks/active_record.rake +0 -88
  59. data/examples/rails/tasks/active_storage.rake +0 -94
  60. data/examples/rails/tasks/active_support.rake +0 -99
  61. data/examples/rails/tasks/railties.rake +0 -34
  62. data/orthoses-rails.gemspec +0 -36
@@ -20,14 +20,16 @@ module Orthoses
20
20
  delegate.captures.each do |capture|
21
21
  receiver_name = Utils.module_name(capture.method.receiver) or next
22
22
  receiver_content = store[receiver_name]
23
+ prefix = capture.argument[:private] ? "private " : ""
23
24
 
24
25
  case capture.argument[:to]
26
+ # delegate :foo, to: Foo
25
27
  when Module
26
28
  to_module_name = Utils.module_name(capture.argument[:to]) or next
27
29
  capture.argument[:methods].each do |arg|
28
30
  if sig = resource.build_signature(to_module_name, arg, :singleton, false)
29
31
  receiver_content << "# defined by `delegate` to: #{to_module_name}"
30
- receiver_content << sig
32
+ receiver_content << "#{prefix}#{sig}"
31
33
  else
32
34
  Orthoses.logger.warn("[ActiveSupport::Delegation] Ignore since missing type for #{to_module_name}.#{arg.inspect} in #{capture.argument.inspect}")
33
35
  end
@@ -35,20 +37,28 @@ module Orthoses
35
37
  else
36
38
  to_name = capture.argument[:to].to_s.to_sym
37
39
  tag, to_return_type = resource.find(receiver_name, to_name, :instance, false)
38
- raise "bug" if tag == :multi
40
+ if tag == :multi
41
+ to_return_type = if to_return_type.length == 1
42
+ to_return_type.first.type.return_type
43
+ else
44
+ nil
45
+ end
46
+ end
39
47
 
40
48
  case to_return_type
41
49
  when nil, RBS::Types::Bases::Any
50
+ # no type found
42
51
  capture.argument[:methods].each do |method|
43
52
  receiver_content << "# defined by `delegate` to: #{to_return_type}##{to_name}"
44
- receiver_content << "def #{method}: (*untyped, **untyped) -> untyped"
53
+ receiver_content << "#{prefix}def #{method}: (*untyped, **untyped) -> untyped"
45
54
  end
46
55
  else
56
+ # found return type in store or env
47
57
  to_typename = to_return_type.name.relative!.to_s
48
58
  capture.argument[:methods].each do |method|
49
59
  if sig = resource.build_signature(to_typename, method, :instance, true)
50
60
  receiver_content << "# defined by `delegate` to #{to_return_type}##{to_name}"
51
- receiver_content << sig
61
+ receiver_content << "#{prefix}#{sig}"
52
62
  else
53
63
  Orthoses.logger.warn("[ActiveSupport::Delegation] Ignore since missing type for #{to_typename}##{method.inspect} in #{capture.argument.inspect}")
54
64
  end
@@ -73,6 +83,7 @@ module Orthoses
73
83
  typename = TypeName(mod_name).absolute!
74
84
 
75
85
  if definition_method = build_definition(typename, kind)&.methods&.[](name)
86
+ # found in env
76
87
  return [:multi, definition_method.defs.map(&:type)]
77
88
  end
78
89
  resolve_type_by_name(@store[mod_name].to_decl.members, name, kind, argument)
@@ -85,7 +96,7 @@ module Orthoses
85
96
  when :singleton
86
97
  @definition_builder.build_singleton(typename)
87
98
  else
88
- raise "big"
99
+ raise "bug"
89
100
  end
90
101
  rescue RuntimeError => e
91
102
  if e.message.match?(/\AUnknown name for/)
@@ -115,7 +126,7 @@ module Orthoses
115
126
  when RBS::AST::Members::MethodDefinition
116
127
  next unless member.name == name && member.kind == kind
117
128
  if argument
118
- return [:multi, member.types]
129
+ return [:multi, member.overloads.map { |o| o.method_type }]
119
130
  else
120
131
  method_type = member.overloads.map(&:method_type).find do |method_type|
121
132
  method_type.type.required_positionals.empty? && method_type.type.required_keywords.empty?
@@ -13,6 +13,7 @@ module Orthoses
13
13
  store = @loader.call
14
14
 
15
15
  time_with_zone_store = store["ActiveSupport::TimeWithZone"]
16
+ time_with_zone_store.body.replace(filter_decl(time_with_zone_store))
16
17
  each_line_from_core_time_definition(store) do |line|
17
18
  time_with_zone_store << line
18
19
  end
@@ -22,19 +23,28 @@ module Orthoses
22
23
 
23
24
  private
24
25
 
25
- NOT_DELEGATE_METHODS = Set.new(%i[
26
- utc
27
- getgm
28
- getutc
29
- gmtime
30
- localtime
31
- ])
32
-
33
26
  TYPE_MERGE_METHODS = Set.new(%i[
34
27
  +
35
28
  -
36
29
  ])
37
30
 
31
+ TIME_MODULES = [
32
+ TypeName("::Time"),
33
+ TypeName("::DateAndTime::Zones"),
34
+ TypeName("::DateAndTime::Calculations"),
35
+ TypeName("::DateAndTime::Compatibility")
36
+ ]
37
+
38
+ def filter_decl(time_with_zone_store)
39
+ writer = RBS::Writer.new(out: StringIO.new)
40
+ time_with_zone_store.to_decl.members.each do |member|
41
+ # ActiveSupport::TimeWithZone.name has been deprecated
42
+ next if member.instance_of?(RBS::AST::Members::MethodDefinition) && member.kind == :singleton && member.name == :name
43
+ writer.write_member(member)
44
+ end
45
+ writer.out.string.each_line.to_a
46
+ end
47
+
38
48
  def add_signature(env, content)
39
49
  buffer, directives, decls = RBS::Parser.parse_signature(content.to_rbs)
40
50
  env.add_signature(buffer: buffer, directives: directives, decls: decls)
@@ -56,35 +66,34 @@ module Orthoses
56
66
  add_signature(env, store["ActiveSupport::TimeWithZone"])
57
67
 
58
68
  builder = RBS::DefinitionBuilder.new(env: env.resolve_type_names)
59
- one_ancestors = builder.ancestor_builder.one_instance_ancestors(type_name_time)
60
- one_ancestors.included_modules.each do |included_module|
61
- yield "include #{included_module.source.name}"
62
- end
63
69
  twz_methods = builder.build_instance(type_name_time_with_zone).methods
64
70
  builder.build_instance(type_name_time).methods.each do |sym, definition_method|
71
+ next if twz_methods.has_key?(sym) && !TYPE_MERGE_METHODS.include?(sym)
65
72
  next if !definition_method.public?
66
- definition_method.defs.reject! do |type_def|
67
- type_def.implemented_in != type_name_time
73
+
74
+ # delegate to ::Time method
75
+ definition_method.defs.select! do |type_def|
76
+ TIME_MODULES.include?(type_def.implemented_in)
68
77
  end
69
78
  next if definition_method.defs.empty?
70
79
 
71
- if !NOT_DELEGATE_METHODS.include?(sym)
72
- definition_method.method_types.each do |method_type|
73
- rt = method_type.type.return_type
74
- if rt.instance_of?(RBS::Types::ClassInstance) && rt.name.to_s == "::Time"
75
- rt.instance_variable_set(:@name, RBS::Types::Bases::Self.new(location: nil))
76
- end
80
+ definition_method.method_types.each do |method_type|
81
+ rt = method_type.type.return_type
82
+ if rt.instance_of?(RBS::Types::ClassInstance) && rt.name.to_s == "::Time"
83
+ rt.instance_variable_set(:@name, RBS::Types::Bases::Self.new(location: nil))
77
84
  end
78
85
  end
79
86
 
80
87
  if definition_method.alias_of.nil?
81
88
  method_types = definition_method.method_types
82
89
 
90
+ # merge method types (e.g. :+, :-
91
+ # TimeWithZone -delegate-> Time(core_ext) -delegate-> Time(core)
83
92
  if TYPE_MERGE_METHODS.include?(sym)
84
93
  if twz_definition_method = twz_methods[sym]
85
94
  twz_definition_method.defs.each do |type_def|
86
95
  if type_def.implemented_in == type_name_time_with_zone
87
- method_types << type_def.type
96
+ method_types.unshift(type_def.type)
88
97
  end
89
98
  end
90
99
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'active_support/aliasing'
3
4
  require_relative 'active_support/class_attribute'
4
5
  require_relative 'active_support/concern'
5
6
  require_relative 'active_support/configurable'
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Orthoses
4
+ module Rails
5
+ class Application
6
+ class Loader
7
+ def call
8
+ ::Rails.application.initialize!
9
+ ::Rails.application.eager_load!
10
+ end
11
+ end
12
+
13
+ def initialize(loader)
14
+ @loader = loader
15
+ end
16
+
17
+ def call
18
+ loader = @loader
19
+ Orthoses::Builder.new do
20
+ use Orthoses::ActiveModel::HasSecurePassword
21
+
22
+ use Orthoses::ActiveRecord::BelongsTo
23
+ use Orthoses::ActiveRecord::DelegatedType
24
+ use Orthoses::ActiveRecord::Enum
25
+ use Orthoses::ActiveRecord::GeneratedAttributeMethods
26
+ use Orthoses::ActiveRecord::HasMany
27
+ use Orthoses::ActiveRecord::HasOne
28
+ use Orthoses::ActiveRecord::Relation
29
+ use Orthoses::ActiveRecord::Scope
30
+ use Orthoses::ActiveRecord::SecureToken
31
+
32
+ if defined?(::ActiveStorage)
33
+ use Orthoses::ActiveStorage::Attached::Model
34
+ end
35
+
36
+ use Orthoses::ActiveSupport::Aliasing
37
+ use Orthoses::ActiveSupport::ClassAttribute
38
+ use Orthoses::ActiveSupport::Concern
39
+ use Orthoses::ActiveSupport::Delegation
40
+ use Orthoses::ActiveSupport::Configurable
41
+ use Orthoses::ActiveSupport::MattrAccessor
42
+ reset_runner loader
43
+ end.call
44
+ end
45
+ end
46
+ end
47
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Orthoses
4
4
  module Rails
5
- VERSION = "0.9.0"
5
+ VERSION = "1.1.0"
6
6
  end
7
7
  end
@@ -2,9 +2,11 @@
2
2
 
3
3
  require 'orthoses'
4
4
 
5
- require_relative "rails/version"
6
-
7
5
  require_relative 'active_model'
8
6
  require_relative 'active_record'
7
+ require_relative 'active_storage'
9
8
  require_relative 'active_support'
10
9
  require_relative 'railties'
10
+
11
+ require_relative "rails/application"
12
+ require_relative "rails/version"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: orthoses-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ksss
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-04-02 00:00:00.000000000 Z
11
+ date: 2023-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: orthoses
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.6'
19
+ version: '1.10'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.6'
26
+ version: '1.10'
27
27
  description: Orthoses middleware collection for Ruby on Rails
28
28
  email:
29
29
  - co000ri@gmail.com
@@ -34,45 +34,8 @@ files:
34
34
  - CODE_OF_CONDUCT.md
35
35
  - LICENSE.txt
36
36
  - README.md
37
- - examples/rails/Gemfile
38
- - examples/rails/Gemfile.lock
39
- - examples/rails/Rakefile
40
- - examples/rails/config/database.yml
41
- - examples/rails/config/storage.yml
42
- - examples/rails/known_sig/actionpack/7.0/action_controller/metal.rbs
43
- - examples/rails/known_sig/activemodel/7.0/active_model/serialization.rbs
44
- - examples/rails/known_sig/activemodel/7.0/active_model/validations.rbs
45
- - examples/rails/known_sig/activerecord/6.0/_active_record_relation.rbs
46
- - examples/rails/known_sig/activerecord/6.0/_active_record_relation_class_methods.rbs
47
- - examples/rails/known_sig/activerecord/6.0/active_record/result.rbs
48
- - examples/rails/known_sig/activerecord/6.1/_active_record_relation.rbs
49
- - examples/rails/known_sig/activerecord/6.1/_active_record_relation_class_methods.rbs
50
- - examples/rails/known_sig/activerecord/6.1/active_record/result.rbs
51
- - examples/rails/known_sig/activerecord/7.0/_active_record_relation.rbs
52
- - examples/rails/known_sig/activerecord/7.0/_active_record_relation_class_methods.rbs
53
- - examples/rails/known_sig/activerecord/7.0/active_record/encryption/context.rbs
54
- - examples/rails/known_sig/activerecord/7.0/active_record/result.rbs
55
- - examples/rails/known_sig/activesupport/7.0/active_support/callbacks/callback_chain.rbs
56
- - examples/rails/known_sig/activesupport/7.0/active_support/duration.rbs
57
- - examples/rails/known_sig/activesupport/7.0/active_support/hash_with_indifferent_access.rbs
58
- - examples/rails/known_sig/activesupport/7.0/active_support/multibyte/chars.rbs
59
- - examples/rails/known_sig/activesupport/7.0/active_support/time_with_zone.rbs
60
- - examples/rails/known_sig/activesupport/7.0/active_support/time_zone.rbs
61
- - examples/rails/known_sig/activesupport/7.0/date.rbs
62
- - examples/rails/known_sig/activesupport/7.0/date_and_time/zones.rbs
63
- - examples/rails/known_sig/activesupport/7.0/hash_with_indifferent_access.rbs
64
- - examples/rails/known_sig/activesupport/7.0/integer.rbs
65
- - examples/rails/known_sig/activesupport/7.0/numeric.rbs
66
- - examples/rails/known_sig/activesupport/7.0/string.rbs
67
- - examples/rails/known_sig/activesupport/7.0/time.rbs
68
- - examples/rails/tasks/action_pack.rake
69
- - examples/rails/tasks/action_view.rake
70
- - examples/rails/tasks/active_job.rake
71
- - examples/rails/tasks/active_model.rake
72
- - examples/rails/tasks/active_record.rake
73
- - examples/rails/tasks/active_storage.rake
74
- - examples/rails/tasks/active_support.rake
75
- - examples/rails/tasks/railties.rake
37
+ - lib/generators/orthoses/rails/install_generator.rb
38
+ - lib/generators/orthoses/rails/templates/rails.rake
76
39
  - lib/orthoses-rails.rb
77
40
  - lib/orthoses/active_model.rb
78
41
  - lib/orthoses/active_model/has_secure_password.rb
@@ -84,8 +47,13 @@ files:
84
47
  - lib/orthoses/active_record/has_many.rb
85
48
  - lib/orthoses/active_record/has_one.rb
86
49
  - lib/orthoses/active_record/query_methods.rb
50
+ - lib/orthoses/active_record/relation.rb
87
51
  - lib/orthoses/active_record/scope.rb
52
+ - lib/orthoses/active_record/secure_token.rb
53
+ - lib/orthoses/active_storage.rb
54
+ - lib/orthoses/active_storage/attached/model.rb
88
55
  - lib/orthoses/active_support.rb
56
+ - lib/orthoses/active_support/aliasing.rb
89
57
  - lib/orthoses/active_support/class_attribute.rb
90
58
  - lib/orthoses/active_support/concern.rb
91
59
  - lib/orthoses/active_support/configurable.rb
@@ -93,10 +61,10 @@ files:
93
61
  - lib/orthoses/active_support/mattr_accessor.rb
94
62
  - lib/orthoses/active_support/time_with_zone.rb
95
63
  - lib/orthoses/rails.rb
64
+ - lib/orthoses/rails/application.rb
96
65
  - lib/orthoses/rails/version.rb
97
66
  - lib/orthoses/railties.rb
98
67
  - lib/orthoses/railties/mixin.rb
99
- - orthoses-rails.gemspec
100
68
  - sig/orthoses/rails.rbs
101
69
  homepage: https://github.com/ksss/orthoses-rails
102
70
  licenses:
@@ -120,7 +88,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
88
  - !ruby/object:Gem::Version
121
89
  version: '0'
122
90
  requirements: []
123
- rubygems_version: 3.4.6
91
+ rubygems_version: 3.4.10
124
92
  signing_key:
125
93
  specification_version: 4
126
94
  summary: Orthoses middleware collection for Ruby on Rails
@@ -1,16 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- ruby ">= 3.1.0"
4
-
5
- gemspec path: '../../'
6
-
7
- gem "rails", path: "_src"
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
@@ -1,179 +0,0 @@
1
- PATH
2
- remote: ../..
3
- specs:
4
- orthoses-rails (0.7.0)
5
- orthoses (~> 1.0)
6
-
7
- PATH
8
- remote: _src
9
- specs:
10
- actioncable (7.0.3.1)
11
- actionpack (= 7.0.3.1)
12
- activesupport (= 7.0.3.1)
13
- nio4r (~> 2.0)
14
- websocket-driver (>= 0.6.1)
15
- actionmailbox (7.0.3.1)
16
- actionpack (= 7.0.3.1)
17
- activejob (= 7.0.3.1)
18
- activerecord (= 7.0.3.1)
19
- activestorage (= 7.0.3.1)
20
- activesupport (= 7.0.3.1)
21
- mail (>= 2.7.1)
22
- net-imap
23
- net-pop
24
- net-smtp
25
- actionmailer (7.0.3.1)
26
- actionpack (= 7.0.3.1)
27
- actionview (= 7.0.3.1)
28
- activejob (= 7.0.3.1)
29
- activesupport (= 7.0.3.1)
30
- mail (~> 2.5, >= 2.5.4)
31
- net-imap
32
- net-pop
33
- net-smtp
34
- rails-dom-testing (~> 2.0)
35
- actionpack (7.0.3.1)
36
- actionview (= 7.0.3.1)
37
- activesupport (= 7.0.3.1)
38
- rack (~> 2.0, >= 2.2.0)
39
- rack-test (>= 0.6.3)
40
- rails-dom-testing (~> 2.0)
41
- rails-html-sanitizer (~> 1.0, >= 1.2.0)
42
- actiontext (7.0.3.1)
43
- actionpack (= 7.0.3.1)
44
- activerecord (= 7.0.3.1)
45
- activestorage (= 7.0.3.1)
46
- activesupport (= 7.0.3.1)
47
- globalid (>= 0.6.0)
48
- nokogiri (>= 1.8.5)
49
- actionview (7.0.3.1)
50
- activesupport (= 7.0.3.1)
51
- builder (~> 3.1)
52
- erubi (~> 1.4)
53
- rails-dom-testing (~> 2.0)
54
- rails-html-sanitizer (~> 1.1, >= 1.2.0)
55
- activejob (7.0.3.1)
56
- activesupport (= 7.0.3.1)
57
- globalid (>= 0.3.6)
58
- activemodel (7.0.3.1)
59
- activesupport (= 7.0.3.1)
60
- activerecord (7.0.3.1)
61
- activemodel (= 7.0.3.1)
62
- activesupport (= 7.0.3.1)
63
- activestorage (7.0.3.1)
64
- actionpack (= 7.0.3.1)
65
- activejob (= 7.0.3.1)
66
- activerecord (= 7.0.3.1)
67
- activesupport (= 7.0.3.1)
68
- marcel (~> 1.0)
69
- mini_mime (>= 1.1.0)
70
- activesupport (7.0.3.1)
71
- concurrent-ruby (~> 1.0, >= 1.0.2)
72
- i18n (>= 1.6, < 2)
73
- minitest (>= 5.1)
74
- tzinfo (~> 2.0)
75
- rails (7.0.3.1)
76
- actioncable (= 7.0.3.1)
77
- actionmailbox (= 7.0.3.1)
78
- actionmailer (= 7.0.3.1)
79
- actionpack (= 7.0.3.1)
80
- actiontext (= 7.0.3.1)
81
- actionview (= 7.0.3.1)
82
- activejob (= 7.0.3.1)
83
- activemodel (= 7.0.3.1)
84
- activerecord (= 7.0.3.1)
85
- activestorage (= 7.0.3.1)
86
- activesupport (= 7.0.3.1)
87
- bundler (>= 1.15.0)
88
- railties (= 7.0.3.1)
89
- railties (7.0.3.1)
90
- actionpack (= 7.0.3.1)
91
- activesupport (= 7.0.3.1)
92
- method_source
93
- rake (>= 12.2)
94
- thor (~> 1.0)
95
- zeitwerk (~> 2.5)
96
-
97
- GEM
98
- remote: https://rubygems.org/
99
- specs:
100
- builder (3.2.4)
101
- concurrent-ruby (1.1.10)
102
- crass (1.0.6)
103
- digest (3.1.0)
104
- erubi (1.11.0)
105
- globalid (1.0.0)
106
- activesupport (>= 5.0)
107
- i18n (1.12.0)
108
- concurrent-ruby (~> 1.0)
109
- loofah (2.18.0)
110
- crass (~> 1.0.2)
111
- nokogiri (>= 1.5.9)
112
- mail (2.7.1)
113
- mini_mime (>= 0.1.1)
114
- marcel (1.0.2)
115
- method_source (1.0.0)
116
- mini_mime (1.1.2)
117
- mini_portile2 (2.8.0)
118
- minitest (5.16.3)
119
- net-imap (0.2.3)
120
- digest
121
- net-protocol
122
- strscan
123
- net-pop (0.1.1)
124
- digest
125
- net-protocol
126
- timeout
127
- net-protocol (0.1.3)
128
- timeout
129
- net-smtp (0.3.1)
130
- digest
131
- net-protocol
132
- timeout
133
- nio4r (2.5.8)
134
- nokogiri (1.13.8)
135
- mini_portile2 (~> 2.8.0)
136
- racc (~> 1.4)
137
- orthoses (1.0.0)
138
- rbs (~> 2.0)
139
- psych (3.3.3)
140
- racc (1.6.0)
141
- rack (2.2.4)
142
- rack-test (2.0.2)
143
- rack (>= 1.3)
144
- rails-dom-testing (2.0.3)
145
- activesupport (>= 4.2.0)
146
- nokogiri (>= 1.6)
147
- rails-html-sanitizer (1.4.3)
148
- loofah (~> 2.3)
149
- rake (13.0.6)
150
- rbs (2.6.0)
151
- sqlite3 (1.5.0)
152
- mini_portile2 (~> 2.8.0)
153
- strscan (3.0.4)
154
- thor (1.2.1)
155
- timeout (0.3.0)
156
- tzinfo (2.0.5)
157
- concurrent-ruby (~> 1.0)
158
- websocket-driver (0.7.5)
159
- websocket-extensions (>= 0.1.0)
160
- websocket-extensions (0.1.5)
161
- zeitwerk (2.6.0)
162
-
163
- PLATFORMS
164
- arm64-darwin-21
165
-
166
- DEPENDENCIES
167
- net-imap
168
- net-pop
169
- net-smtp
170
- orthoses-rails!
171
- psych (~> 3)
172
- rails!
173
- sqlite3
174
-
175
- RUBY VERSION
176
- ruby 3.1.1p18
177
-
178
- BUNDLED WITH
179
- 2.3.16