rbs_rails 0.12.1 → 0.13.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 +4 -4
- data/.github/workflows/ci.yml +1 -1
- data/.github/workflows/release.yml +27 -0
- data/CHANGELOG.md +56 -0
- data/Gemfile +7 -1
- data/Gemfile.lock +111 -93
- data/README.md +46 -1
- data/Rakefile +7 -2
- data/example/rbs_rails.rb +27 -0
- data/exe/rbs_rails +6 -0
- data/lib/generators/rbs_rails/install_generator.rb +1 -10
- data/lib/rbs_rails/active_record/enum.rb +81 -0
- data/lib/rbs_rails/active_record.rb +233 -143
- data/lib/rbs_rails/cli/configuration.rb +66 -0
- data/lib/rbs_rails/cli.rb +173 -0
- data/lib/rbs_rails/dependency_builder.rb +25 -8
- data/lib/rbs_rails/path_helpers.rb +14 -2
- data/lib/rbs_rails/rake_task.rb +38 -40
- data/lib/rbs_rails/util/file_writer.rb +22 -0
- data/lib/rbs_rails/util.rb +11 -4
- data/lib/rbs_rails/version.rb +1 -1
- data/lib/rbs_rails.rb +5 -2
- data/rbs_collection.lock.yaml +86 -38
- data/rbs_collection.yaml +1 -16
- data/rbs_rails.gemspec +1 -0
- data/sig/{install_generator.rbs → generators/rbs_rails/install_generator.rbs} +2 -0
- data/sig/rbs_rails/active_record/enum.rbs +26 -0
- data/sig/rbs_rails/active_record.rbs +67 -49
- data/sig/rbs_rails/cli/configuration.rbs +37 -0
- data/sig/rbs_rails/cli.rbs +35 -0
- data/sig/rbs_rails/dependency_builder.rbs +7 -3
- data/sig/rbs_rails/path_helpers.rbs +13 -6
- data/sig/rbs_rails/rake_task.rbs +7 -6
- data/sig/rbs_rails/util/file_writer.rbs +16 -0
- data/sig/rbs_rails/util.rbs +7 -2
- data/sig/rbs_rails/utils/file_writer.rbs +4 -0
- data/sig/rbs_rails/version.rbs +5 -1
- data/sig/rbs_rails.rbs +6 -3
- metadata +32 -8
- data/sig/_internal/activerecord.rbs +0 -4
- data/sig/parser.rbs +0 -14
- data/sig/rake.rbs +0 -6
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
require 'active_support/lazy_load_hooks'
|
|
2
|
+
|
|
3
|
+
module RbsRails
|
|
4
|
+
module ActiveRecord
|
|
5
|
+
module Enum
|
|
6
|
+
IGNORED_ENUM_KEYS = %i[prefix suffix default scopes]
|
|
7
|
+
|
|
8
|
+
# @rbs!
|
|
9
|
+
# type definitions = Hash[Symbol, Array[Symbol] | Hash[Symbol, untyped]]
|
|
10
|
+
# type options = Hash[Symbol, untyped]
|
|
11
|
+
# type enum_definitions = Array[[definitions, options]]
|
|
12
|
+
#
|
|
13
|
+
# @enum_definitions: enum_definitions
|
|
14
|
+
|
|
15
|
+
def enum(*args, **options) #: void
|
|
16
|
+
super # steep:ignore
|
|
17
|
+
|
|
18
|
+
name, values = args #: [Symbol, Array[Symbol]?]
|
|
19
|
+
if values
|
|
20
|
+
# Enum definitions are passed via array argument
|
|
21
|
+
# ex. enum :status, [:temporary, :accepted]
|
|
22
|
+
definitions = { name => values }
|
|
23
|
+
else
|
|
24
|
+
# Enum definitions are passed via keyword arguments
|
|
25
|
+
# ex. enum :status, temporary: 1, accepted: 2
|
|
26
|
+
values = options.slice!(*IGNORED_ENUM_KEYS)
|
|
27
|
+
definitions = { name => values }
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
@enum_definitions ||= [] #: enum_definitions
|
|
31
|
+
@enum_definitions&.append([definitions, options])
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def enum_definitions #: Array[[Symbol, String]]
|
|
35
|
+
@enum_definitions&.flat_map do |(definitions, options)|
|
|
36
|
+
definitions.flat_map do |name, values|
|
|
37
|
+
labels = case values
|
|
38
|
+
when Array
|
|
39
|
+
values
|
|
40
|
+
when Hash
|
|
41
|
+
values.keys
|
|
42
|
+
end
|
|
43
|
+
labels.map do |label|
|
|
44
|
+
[name, enum_method_name(name, label, options)] #: [Symbol, String]
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end.to_a
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# @rbs name: Symbol
|
|
51
|
+
# @rbs label: Symbol
|
|
52
|
+
# @rbs options: Hash[Symbol, untyped]
|
|
53
|
+
private def enum_method_name(name, label, options) #: String
|
|
54
|
+
enum_prefix = options[:_prefix] || options[:prefix]
|
|
55
|
+
enum_suffix = options[:_suffix] || options[:suffix]
|
|
56
|
+
|
|
57
|
+
if enum_prefix == true
|
|
58
|
+
prefix = "#{name}_"
|
|
59
|
+
elsif enum_prefix
|
|
60
|
+
prefix = "#{enum_prefix}_"
|
|
61
|
+
end
|
|
62
|
+
if enum_suffix == true
|
|
63
|
+
suffix = "_#{name}"
|
|
64
|
+
elsif enum_suffix
|
|
65
|
+
suffix = "_#{enum_suffix}"
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
enum_method_name = "#{prefix}#{label}#{suffix}"
|
|
69
|
+
|
|
70
|
+
# Make enum_method_name friendly
|
|
71
|
+
# refs: https://github.com/rails/rails/blob/v8.0.0/activerecord/lib/active_record/enum.rb#L270
|
|
72
|
+
enum_method_name.gsub(/[\W&&[:ascii:]]+/, "_")
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
ActiveSupport.on_load(:active_record) do
|
|
79
|
+
# @type self: singleton(ActiveRecord::Base)
|
|
80
|
+
extend RbsRails::ActiveRecord::Enum
|
|
81
|
+
end
|