orthoses-rails 1.7.0 → 1.8.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: 5c9d1d7f1892b862cf30852db780a75b61d1ff5a47d27f2be74ac1b65ee3b320
4
- data.tar.gz: 7a7165512a1d9926a14d6a0fb871463cf8ea14bd8b8cfe2f7801c1397d2c48b1
3
+ metadata.gz: 1b4970c303a0f5df274a367939d30c03d7e7734d58845325423aae75e53827bf
4
+ data.tar.gz: ca40d8c7996291b6dbcf0db78ae817ec7ef1eb8f5a6eef8a4ab0b9cb07b14ddb
5
5
  SHA512:
6
- metadata.gz: cc87995c26444744860c7feb523d08d13511c301ca1dbdcfa889b265f51031c1e3cbfc3629c63f8752f7d82b759d113342ec535f604330286e674542e5ace36d
7
- data.tar.gz: 66892e6e434cb9a80cefd3128852a4d66ab5e2401b1dda6fcedd6fa1183b2ea6f4c97a70c716609fc5b178af829878518c61efe5af91169fe0e5276ce799f77c
6
+ metadata.gz: 04fa7b44b4dd3f3649e19859cc03ece90758517631dae4f054adcd81bc7935414b0551311a9c6b906e6ab9db1deaca1014f760d858b0c4e58e8f410197ff5b89
7
+ data.tar.gz: 715ad56b1ff3c8699c4cb0abbd789483087afc50f5c1585b8ecc3a06691e79e7566c2d87ee26d5c145524cb99fdc7f54e58757117f47caa3fea5bf3b648e2ea9
@@ -23,7 +23,7 @@ module Orthoses
23
23
  opt = "#{type}?"
24
24
 
25
25
  [
26
- "def #{ref.name}: () -> #{opt}",
26
+ "%a{implicitly-returns-nil} def #{ref.name}: () -> #{type}",
27
27
  "def #{ref.name}=: (#{opt}) -> #{opt}",
28
28
  "def reload_#{ref.name}: () -> #{opt}",
29
29
  ].tap do |ary|
@@ -7,8 +7,9 @@ module Orthoses
7
7
  # >= 7.0
8
8
  # def enum(name = nil, values = nil, **options)
9
9
  class Enum
10
- def initialize(loader)
10
+ def initialize(loader, strict_limit: 8)
11
11
  @loader = loader
12
+ @strict_limit = strict_limit
12
13
  end
13
14
 
14
15
  def call
@@ -84,18 +85,23 @@ module Orthoses
84
85
  end
85
86
 
86
87
  # Expressing type casting.
87
- store[base_name] << "def #{name}: () -> (#{pairs.keys.map { |k| "\"#{k}\"" }.join(" | ")})"
88
- symbol_pattern = if pairs.keys.any? { |key| key.match?(/[^a-zA-Z_]/) }
89
- "(Symbol) -> void"
88
+ overloads = [] #: Array[String]
89
+ if pairs.length <= @strict_limit
90
+ if pairs.keys.any? { |key| key.match?(/[^a-zA-Z_]/) }
91
+ overloads << "(Symbol) -> void"
92
+ else
93
+ overloads << "(#{pairs.keys.map{|key|key.to_sym.inspect}.join(" | ")}) -> void"
94
+ end
95
+ overloads << "(#{pairs.keys.map{|key|key.to_s.inspect}.join(" | ")}) -> void"
96
+ overloads << "(#{pairs.values.map(&:inspect).join(" | ")}) -> void"
97
+ store[base_name] << "def #{name}: () -> (#{pairs.keys.map { |k| "\"#{k}\"" }.join(" | ")})"
98
+ store[base_name] << "def #{name}=: #{overloads.join(" | ")}"
90
99
  else
91
- "(#{pairs.keys.map{|key|key.to_sym.inspect}.join(" | ")}) -> void"
100
+ overloads << "(Symbol | String) -> void"
101
+ overloads << "(#{pairs.values.map { |v| Orthoses::Utils.object_to_rbs(v) }.uniq.join(" | ")}) -> void"
102
+ store[base_name] << "def #{name}: () -> String"
103
+ store[base_name] << "def #{name}=: #{overloads.join(" | ")}"
92
104
  end
93
- overloads = [
94
- symbol_pattern,
95
- "(#{pairs.keys.map{|key|key.to_s.inspect}.join(" | ")}) -> void",
96
- "(#{pairs.values.map(&:inspect).join(" | ")}) -> void",
97
- ]
98
- store[base_name] << "def #{name}=: #{overloads.join(" | ")}"
99
105
  end
100
106
  end
101
107
  end
@@ -3,8 +3,9 @@
3
3
  module Orthoses
4
4
  module ActiveRecord
5
5
  class Relation
6
- def initialize(loader)
6
+ def initialize(loader, strict: false)
7
7
  @loader = loader
8
+ @strict = strict
8
9
  end
9
10
 
10
11
  def call
@@ -24,10 +25,12 @@ module Orthoses
24
25
  klass.singleton_methods(false).each do |singleton_method|
25
26
  c << "def #{singleton_method}: (*untyped, **untyped) -> untyped"
26
27
  end
27
- (klass.singleton_class.included_modules - ::ActiveRecord::Relation.included_modules).each do |mod|
28
- mname = Utils.module_name(mod) or next
29
- store[mname].header = "module #{mname}"
30
- c << "include #{mname}"
28
+ if @strict
29
+ (klass.singleton_class.included_modules - ::ActiveRecord::Relation.included_modules).each do |mod|
30
+ mname = Utils.module_name(mod) or next
31
+ store[mname].header = "module #{mname}"
32
+ c << "include #{mname}"
33
+ end
31
34
  end
32
35
  end
33
36
 
@@ -36,7 +36,7 @@ module Orthoses
36
36
  def members_prototype_of(mod_name)
37
37
  mod = Object.const_get(mod_name)
38
38
  runtime = ::RBS::Prototype::Runtime.new(patterns: nil, env: nil, merge: false)
39
- type_name = TypeName(mod_name)
39
+ type_name = ::RBS::TypeName.parse(mod_name)
40
40
  [].tap do |members|
41
41
  runtime.generate_methods(mod, type_name, members)
42
42
  end
@@ -80,7 +80,7 @@ module Orthoses
80
80
  end
81
81
 
82
82
  def find(mod_name, name, kind, argument)
83
- typename = TypeName(mod_name).absolute!
83
+ typename = ::RBS::TypeName.parse(mod_name).absolute!
84
84
 
85
85
  if definition_method = build_definition(typename, kind)&.methods&.[](name)
86
86
  # found in env
@@ -29,10 +29,10 @@ module Orthoses
29
29
  ])
30
30
 
31
31
  TIME_MODULES = Set.new([
32
- TypeName("::Time"),
33
- TypeName("::DateAndTime::Zones"),
34
- TypeName("::DateAndTime::Calculations"),
35
- TypeName("::DateAndTime::Compatibility")
32
+ ::RBS::TypeName.parse("::Time"),
33
+ ::RBS::TypeName.parse("::DateAndTime::Zones"),
34
+ ::RBS::TypeName.parse("::DateAndTime::Calculations"),
35
+ ::RBS::TypeName.parse("::DateAndTime::Compatibility")
36
36
  ])
37
37
 
38
38
  NONEED_METHODS = Set.new(%i[
@@ -65,8 +65,8 @@ module Orthoses
65
65
  end
66
66
 
67
67
  def each_line_from_core_time_definition(store)
68
- type_name_time = TypeName("::Time")
69
- type_name_time_with_zone = TypeName("::ActiveSupport::TimeWithZone")
68
+ type_name_time = ::RBS::TypeName.parse("::Time")
69
+ type_name_time_with_zone = ::RBS::TypeName.parse("::ActiveSupport::TimeWithZone")
70
70
  env = Utils.rbs_environment(collection: true, cache: false)
71
71
 
72
72
  add_signature(env, store["Time"])
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Orthoses
4
4
  module Rails
5
- VERSION = "1.7.0"
5
+ VERSION = "1.8.0"
6
6
  end
7
7
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'orthoses'
4
+ require_relative 'shims'
4
5
 
5
6
  require_relative 'action_mailer'
6
7
  require_relative 'active_model'
@@ -0,0 +1,18 @@
1
+ # RBS 3.8
2
+ unless RBS::TypeName.singleton_class.method_defined?(:parse)
3
+ module RBS
4
+ class TypeName
5
+ def self.parse(string)
6
+ absolute = string.start_with?("::")
7
+
8
+ *path, name = string.delete_prefix("::").split("::").map(&:to_sym)
9
+ raise unless name
10
+
11
+ TypeName.new(
12
+ name: name,
13
+ namespace: RBS::Namespace.new(path: path, absolute: absolute)
14
+ )
15
+ end
16
+ end
17
+ end
18
+ end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: orthoses-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ksss
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2024-10-25 00:00:00.000000000 Z
10
+ date: 2025-02-04 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: orthoses
@@ -69,6 +68,7 @@ files:
69
68
  - lib/orthoses/rails/version.rb
70
69
  - lib/orthoses/railties.rb
71
70
  - lib/orthoses/railties/mixin.rb
71
+ - lib/orthoses/shims.rb
72
72
  - sig/orthoses/rails.rbs
73
73
  homepage: https://github.com/ksss/orthoses-rails
74
74
  licenses:
@@ -77,7 +77,6 @@ metadata:
77
77
  homepage_uri: https://github.com/ksss/orthoses-rails
78
78
  source_code_uri: https://github.com/ksss/orthoses-rails
79
79
  changelog_uri: https://github.com/ksss/orthoses-rails
80
- post_install_message:
81
80
  rdoc_options: []
82
81
  require_paths:
83
82
  - lib
@@ -92,8 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
91
  - !ruby/object:Gem::Version
93
92
  version: '0'
94
93
  requirements: []
95
- rubygems_version: 3.5.16
96
- signing_key:
94
+ rubygems_version: 3.6.2
97
95
  specification_version: 4
98
96
  summary: Orthoses middleware collection for Ruby on Rails
99
97
  test_files: []