orthoses-rails 1.7.0 → 1.8.0

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