rbs_activerecord 1.0.0 → 1.1.1

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: b4083cdfd1907ddd9ba845bf3535ed264504753c6fe80c08ac723891a0c990aa
4
- data.tar.gz: 8825d942ba46a8b35cd4aa3d57ef723aa7fbc51333d7fe30bdca1b143ed73693
3
+ metadata.gz: e0ea3c8187e852192d22a16567b163eb0247b233d60503bee24527acbdc3a2cd
4
+ data.tar.gz: 73925718cdda63a38c982df326c6e34245f72a1bf7960415921ffb2105de6b66
5
5
  SHA512:
6
- metadata.gz: '07838fda26b2d56872fa91f7d3d9a89b2eb89c5c93591722547ca27af65d65ff72ae1703c8366d4c556559d18cbcc8668930c8c4e2bbb7c89aaaa3e1b7ec84a3'
7
- data.tar.gz: 605694bc6458aa4f6076d89add3a162c66edceefd357f2402e989a093f898b853f1d363cf7d121a4e5e49befa4747bd99c2ae9a52f2a89502f25361ee1865ccf
6
+ metadata.gz: d420a8c6d38af18a3928713eccd59403703cee04c7692a8c042eb381866af371b830501cecdca8a40e21797f620ae24d83428d3c86bd3b32954319b8c85fc9c3
7
+ data.tar.gz: 361fc238a0c34c0721f0ee12f54e1aa8a5a0d95aca361cbdb06e9e21220c1c15c36058b80c0c2a6c5e16aa76c2402d31eae6ce6a5a223a7f3747af2241b8e9ea
@@ -7,6 +7,7 @@
7
7
  "cSpell.words": [
8
8
  "activerecord",
9
9
  "codebases",
10
- "Cyclomatic"
10
+ "Cyclomatic",
11
+ "kaminari"
11
12
  ]
12
13
  }
data/README.md CHANGED
@@ -6,23 +6,53 @@ rbs_activerecord is a RBSGenerator for models built with ActiveRecord.
6
6
 
7
7
  Add a new entry to your Gemfile and run `bundle install`:
8
8
 
9
- group :development do
10
- gem 'rbs_activerecord', require: false
11
- end
9
+ group :development do
10
+ gem 'rbs_activerecord', require: false
11
+ end
12
12
 
13
13
  After the installation, please run rake task generator:
14
14
 
15
- bundle exec rails g rbs_activerecord:install
15
+ bundle exec rails g rbs_activerecord:install
16
16
 
17
17
  ## Usage
18
18
 
19
19
  Run `rbs:activerecord:setup` task:
20
20
 
21
- bundle exec rake rbs:activerecord:setup
21
+ bundle exec rake rbs:activerecord:setup
22
22
 
23
23
  Then rbs_activerecord will scan your code and generate RBS files into
24
24
  `sig/activerecord` directory.
25
25
 
26
+ ## The goal of rbs_activerecord
27
+
28
+ rbs_activerecord is an experimental project to enhance the type generation for ActiveRecord models.
29
+ It is strongly inspired by [rbs_rails](https://github.com/pocke/rbs_rails).
30
+
31
+ The goal of this gem is to give feedbacks to the rbs_rails project, and improving rbs_rails.
32
+ One of the large goals is merging this gem into rbs_rails.
33
+
34
+ Main differences between rbs_activerecord and rbs_rails are:
35
+
36
+ * New features
37
+ * Support Rails7 style enum definitions ([#268](https://github.com/pocke/rbs_rails/pull/268))
38
+ * Support STI (Single Table Inheritance) models ([#287](https://github.com/pocke/rbs_rails/pull/287))
39
+ * Inherits scope, enum and other definitions in the parent class to the child class
40
+ * Support has_and_belongs_to_many association ([#272](https://github.com/pocke/rbs_rails/pull/272))
41
+ * Support `alias_attribute` ([#263](https://github.com/pocke/rbs_rails/pull/263))
42
+ * Support generating model definitions within the concern module ([#209](https://github.com/pocke/rbs_rails/pull/209))
43
+ * Support extension ActiveRecord from 3rd party gems ([#254](https://github.com/pocke/rbs_rails/pull/254))
44
+ * ex. [kaminari-activerecord](https://github.com/ruby/gem_rbs_collection/pull/725)
45
+ * Support composite primary keys ([#275](https://github.com/pocke/rbs_rails/pull/275))
46
+ * Extend return types of #pluck ([#273](https://github.com/pocke/rbs_rails/pull/273))
47
+ * Override types of CollectionProxy ([#289](https://github.com/pocke/rbs_rails/pull/289))
48
+ * Bug fixes
49
+ * [#290](https://github.com/pocke/rbs_rails/pull/290)
50
+ * [#286](https://github.com/pocke/rbs_rails/pull/286)
51
+ * [#285](https://github.com/pocke/rbs_rails/pull/285)
52
+ * [#278](https://github.com/pocke/rbs_rails/pull/278)
53
+ * [#277](https://github.com/pocke/rbs_rails/pull/277)
54
+ * [#233](https://github.com/pocke/rbs_rails/pull/233)
55
+
26
56
  ## Development
27
57
 
28
58
  After checking out the repo, run `bin/setup` to install dependencies. You can also
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RbsActiverecord
4
+ class Generator
5
+ module Enum
6
+ class Mappings < Base
7
+ attr_reader :model #: RbsActiverecord::Model
8
+ attr_reader :declarations #: Array[Prism::CallNode]
9
+
10
+ # @rbs model: RbsActiverecord::Model
11
+ # @rbs declarations: Hash[String, Array[Prism::CallNode]]
12
+ def initialize(model, declarations) #: void
13
+ @model = model
14
+ @declarations = declarations.fetch(model.klass.name.to_s, [])
15
+
16
+ super()
17
+ end
18
+
19
+ def generate #: String
20
+ <<~RBS.strip
21
+ module GeneratedEnumMappingMethods
22
+ #{enums.map { |node| enum(node) }.join("\n")}
23
+ end
24
+ RBS
25
+ end
26
+
27
+ private
28
+
29
+ def enums #: Array[Prism::CallNode]
30
+ declarations.select { |node| node.name == :enum }
31
+ end
32
+
33
+ # @rbs node: Prism::CallNode
34
+ def enum(node) #: String
35
+ name, = parse_arguments(node)
36
+
37
+ return "" unless name
38
+
39
+ "def #{name.to_s.pluralize}: () -> ActiveSupport::HashWithIndifferentAccess[Symbol, untyped]"
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -3,7 +3,7 @@
3
3
  require "rails"
4
4
 
5
5
  module RbsActiverecord
6
- class Generator
6
+ class Generator # rubocop:disable Metrics/ClassLength
7
7
  include Utils
8
8
 
9
9
  attr_reader :klass #: singleton(ActiveRecord::Base)
@@ -17,7 +17,7 @@ module RbsActiverecord
17
17
  @model = Model.new(klass)
18
18
  end
19
19
 
20
- def generate #: String # rubocop:disable Metrics/AbcSize
20
+ def generate #: String # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
21
21
  format <<~RBS
22
22
  #{header}
23
23
  #{Attributes.new(model).generate}
@@ -31,9 +31,25 @@ module RbsActiverecord
31
31
  #{DelegatedType::InstanceMethods.new(model, declarations).generate}
32
32
  #{DelegatedType::Scopes.new(model, declarations).generate}
33
33
  #{Enum::InstanceMethods.new(model, declarations).generate}
34
+ #{Enum::Mappings.new(model, declarations).generate}
34
35
  #{Enum::Scopes.new(model, declarations).generate}
35
36
  #{Scopes.new(model, declarations).generate}
36
37
 
38
+ module GeneratedCollectionProxyInstanceMethods[Model, PrimaryKey]
39
+ def build: (?ActiveRecord::Associations::CollectionProxy::_EachPair attributes) ?{ () -> untyped } -> Model
40
+ | (Array[ActiveRecord::Associations::CollectionProxy::_EachPair] attributes) ?{ () -> untyped } -> Array[Model]
41
+ def create: (?ActiveRecord::Associations::CollectionProxy::_EachPair attributes) ?{ () -> untyped } -> Model
42
+ | (Array[ActiveRecord::Associations::CollectionProxy::_EachPair] attributes) ?{ () -> untyped } -> Array[Model]
43
+ def create!: (?ActiveRecord::Associations::CollectionProxy::_EachPair attributes) ?{ () -> untyped } -> Model
44
+ | (Array[ActiveRecord::Associations::CollectionProxy::_EachPair] attributes) ?{ () -> untyped } -> Array[Model]
45
+ def reload: () -> Array[Model]
46
+ def replace: (Array[Model]) -> void
47
+ def delete: (*Model | PrimaryKey) -> Array[Model]
48
+ def destroy: (*Model | PrimaryKey) -> Array[Model]
49
+ def <<: (*Model | Array[Model]) -> self
50
+ def prepend: (*Model | Array[Model]) -> self
51
+ end
52
+
37
53
  class ActiveRecord_Relation < ::ActiveRecord::Relation
38
54
  include ::Enumerable[#{klass_name}]
39
55
  include ::ActiveRecord::Relation::Methods[#{klass_name}, #{primary_key_type}]
@@ -46,10 +62,12 @@ module RbsActiverecord
46
62
  include ::ActiveRecord::Relation::Methods[#{klass_name}, #{primary_key_type}]
47
63
  #{relation_methods}
48
64
  include GeneratedPluckOverloads
65
+ include GeneratedCollectionProxyInstanceMethods[#{klass_name}, #{primary_key_type}]
49
66
  end
50
67
 
51
68
  extend ::ActiveRecord::Base::ClassMethods[#{klass_name}, #{klass_name}::ActiveRecord_Relation, #{primary_key_type}]
52
69
  #{scope_class_methods}
70
+ extend GeneratedEnumMappingMethods
53
71
  extend GeneratedPluckOverloads
54
72
 
55
73
  include GeneratedActiveStorageInstanceMethods
@@ -74,7 +92,9 @@ module RbsActiverecord
74
92
  @declarations ||= begin
75
93
  filename = Rails.root.join(model.filename)
76
94
  if filename.exist?
77
- Parser.parse(filename.to_s)
95
+ Parser.parse_file(filename.to_s).tap do |decls|
96
+ Parser::IncludeExpander.expand(model, decls)
97
+ end
78
98
  else
79
99
  {}
80
100
  end
@@ -3,8 +3,6 @@
3
3
  module RbsActiverecord
4
4
  module Parser
5
5
  module Evaluator
6
- # @rbs! def self.eval_node: (Prism::Node node) -> untyped
7
-
8
6
  # @rbs node: Prism::Node
9
7
  def eval_node(node) #: untyped # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
10
8
  case node
@@ -31,6 +29,11 @@ module RbsActiverecord
31
29
  [key, value]
32
30
  end
33
31
  end.to_h
32
+ when Prism::ConstantReadNode
33
+ node.name.to_s
34
+ when Prism::ConstantPathNode
35
+ parent = node.parent ? eval_node(node.parent) : nil
36
+ "#{parent}::#{node.name}"
34
37
  when Prism::KeywordHashNode
35
38
  node.elements.filter_map do |assoc|
36
39
  case assoc
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RbsActiverecord
4
+ module Parser
5
+ class IncludeExpander
6
+ class Module
7
+ attr_reader :mod #: ::Module
8
+ attr_reader :name #: String
9
+
10
+ # @rbs mod: ::Module
11
+ # @rbs name: String
12
+ def initialize(mod, name) #: void
13
+ @mod = mod
14
+ @name = name
15
+ end
16
+
17
+ def concern? #: bool
18
+ mod.is_a?(::ActiveSupport::Concern)
19
+ end
20
+
21
+ def included_blocks #: Array[Prism::CallNode]
22
+ return [] unless concern?
23
+
24
+ declarations.select { |node| node.name == :included }
25
+ end
26
+
27
+ private
28
+
29
+ # @rbs @declarations: Array[Prism::CallNode]
30
+
31
+ def declarations #: Array[Prism::CallNode]
32
+ @declarations ||= begin
33
+ path = source_location
34
+ return [] unless path && File.exist?(path)
35
+
36
+ declarations = Parser.parse_file(path)
37
+ declarations.fetch(name, [])
38
+ end
39
+ end
40
+
41
+ def source_location #: String?
42
+ Object.const_source_location(name)&.fetch(0)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RbsActiverecord
4
+ module Parser
5
+ class IncludeExpander
6
+ # @rbs model: RbsActiverecord::Model
7
+ # @rbs declarations: Hash[String, Array[Prism::CallNode]]
8
+ def self.expand(model, declarations) #: void
9
+ new(model, declarations).expand
10
+ end
11
+
12
+ attr_reader :model #: RbsActiverecord::Model
13
+ attr_reader :declarations #: Hash[String, Array[Prism::CallNode]]
14
+
15
+ # @rbs model: RbsActiverecord::Model
16
+ # @rbs declarations: Hash[String, Array[Prism::CallNode]]
17
+ def initialize(model, declarations) #: void
18
+ @model = model
19
+ @declarations = declarations
20
+ end
21
+
22
+ def expand #: void
23
+ declarations.each_value do |decls|
24
+ loop do
25
+ index = decls.index { |node| node.name == :include }
26
+ break unless index
27
+
28
+ included_module = decls.delete_at(index)
29
+ included_blocks = included_blocks_for(included_module)
30
+ included_blocks.reverse_each do |included|
31
+ decls.insert(index, *block_body_of(included))
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ # @rbs node: Prism::CallNode
40
+ def included_blocks_for(node) #: Array[Prism::CallNode]
41
+ modules = node.arguments&.arguments.to_a
42
+ .map { |arg| Parser.eval_node(arg) }
43
+ .select { |mod| mod.is_a?(String) }
44
+ modules.flat_map do |modname|
45
+ mod = const_get(modname)
46
+ next [] unless mod
47
+
48
+ Module.new(mod, modname).included_blocks
49
+ end
50
+ end
51
+
52
+ # @rbs name: String
53
+ def const_get(name) #: ::Module?
54
+ path = model.klass.name.to_s.split("::")
55
+
56
+ loop do
57
+ modname = (path + [name]).join("::")
58
+ return Object.const_get(modname) if Object.const_defined?(modname)
59
+ break if path.empty?
60
+
61
+ path.pop
62
+ end
63
+ end
64
+
65
+ # @rbs node: Prism::CallNode
66
+ def block_body_of(node) #: Array[Prism::CallNode]
67
+ case node.block
68
+ when Prism::BlockNode
69
+ case node.block.body
70
+ when Prism::StatementsNode
71
+ body = node.block.body.body #: Array[Prism::CallNode]
72
+ body.select { |n| n.is_a?(Prism::CallNode) }
73
+ else
74
+ []
75
+ end
76
+ else
77
+ []
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -14,22 +14,7 @@ module RbsActiverecord
14
14
  end
15
15
 
16
16
  def current_namespace #: String
17
- context.flat_map do |node|
18
- namespace = [] #: Array[Symbol?]
19
- path = node.constant_path #: Prism::Node?
20
- loop do
21
- case path
22
- when Prism::ConstantPathNode
23
- namespace << path.name
24
- path = path.parent
25
- when Prism::ConstantReadNode
26
- namespace << path.name
27
- break
28
- end
29
- end
30
-
31
- namespace.compact.reverse
32
- end.join("::")
17
+ context.map { |node| Parser.eval_node(node.constant_path) }.join("::")
33
18
  end
34
19
 
35
20
  # @rbs override
@@ -4,16 +4,9 @@ require "prism"
4
4
 
5
5
  module RbsActiverecord
6
6
  module Parser
7
- # NOTE: rbs-inline-0.9.0 does not support module_function yet.
8
- # refs: https://github.com/soutaro/rbs-inline/pull/118
9
- #
10
- # @rbs!
11
- # def self.parse: (String filename) -> Hash[String, Array[Prism::CallNode]]
12
- # def self.eval_node: (Prism::Node node) -> untyped
13
-
14
- # @rbs filename: String
15
- def parse(filename) #: Hash[String, Array[Prism::CallNode]]
16
- result = Prism.parse_file(filename)
7
+ # @rbs code: String
8
+ def parse(code) #: Hash[String, Array[Prism::CallNode]]
9
+ result = Prism.parse(code)
17
10
 
18
11
  visitor = Visitor.new
19
12
  visitor.visit(result.value)
@@ -21,6 +14,11 @@ module RbsActiverecord
21
14
  end
22
15
  module_function :parse
23
16
 
17
+ def parse_file(filename) #: Hash[String, Array[Prism::CallNode]]
18
+ File.open(filename) { |f| parse(f.read) }
19
+ end
20
+ module_function :parse_file
21
+
24
22
  # @rbs node: Prism::Node
25
23
  def eval_node(node) #: untyped
26
24
  Evaluator.eval_node(node)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RbsActiverecord
4
- VERSION = "1.0.0"
4
+ VERSION = "1.1.1"
5
5
  end
@@ -11,6 +11,7 @@ require_relative "rbs_activerecord/generator/delegated_type/instance_methods"
11
11
  require_relative "rbs_activerecord/generator/delegated_type/scopes"
12
12
  require_relative "rbs_activerecord/generator/enum/base"
13
13
  require_relative "rbs_activerecord/generator/enum/instance_methods"
14
+ require_relative "rbs_activerecord/generator/enum/mappings"
14
15
  require_relative "rbs_activerecord/generator/enum/scopes"
15
16
  require_relative "rbs_activerecord/generator/pluck_overloads"
16
17
  require_relative "rbs_activerecord/generator/scopes"
@@ -18,6 +19,8 @@ require_relative "rbs_activerecord/generator/secure_password"
18
19
  require_relative "rbs_activerecord/model"
19
20
  require_relative "rbs_activerecord/parser"
20
21
  require_relative "rbs_activerecord/parser/evaluator"
22
+ require_relative "rbs_activerecord/parser/include_expander"
23
+ require_relative "rbs_activerecord/parser/include_expander/module"
21
24
  require_relative "rbs_activerecord/parser/visitor"
22
25
  require_relative "rbs_activerecord/version"
23
26
 
@@ -6,7 +6,7 @@ gems:
6
6
  source:
7
7
  type: git
8
8
  name: ruby/gem_rbs_collection
9
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
9
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
10
10
  remote: https://github.com/ruby/gem_rbs_collection.git
11
11
  repo_dir: gems
12
12
  - name: actionview
@@ -14,7 +14,7 @@ gems:
14
14
  source:
15
15
  type: git
16
16
  name: ruby/gem_rbs_collection
17
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
17
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
18
18
  remote: https://github.com/ruby/gem_rbs_collection.git
19
19
  repo_dir: gems
20
20
  - name: activejob
@@ -22,7 +22,7 @@ gems:
22
22
  source:
23
23
  type: git
24
24
  name: ruby/gem_rbs_collection
25
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
25
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
26
26
  remote: https://github.com/ruby/gem_rbs_collection.git
27
27
  repo_dir: gems
28
28
  - name: activemodel
@@ -30,7 +30,7 @@ gems:
30
30
  source:
31
31
  type: git
32
32
  name: ruby/gem_rbs_collection
33
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
33
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
34
34
  remote: https://github.com/ruby/gem_rbs_collection.git
35
35
  repo_dir: gems
36
36
  - name: activerecord
@@ -38,7 +38,7 @@ gems:
38
38
  source:
39
39
  type: git
40
40
  name: ruby/gem_rbs_collection
41
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
41
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
42
42
  remote: https://github.com/ruby/gem_rbs_collection.git
43
43
  repo_dir: gems
44
44
  - name: activestorage
@@ -46,7 +46,7 @@ gems:
46
46
  source:
47
47
  type: git
48
48
  name: ruby/gem_rbs_collection
49
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
49
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
50
50
  remote: https://github.com/ruby/gem_rbs_collection.git
51
51
  repo_dir: gems
52
52
  - name: activesupport
@@ -54,7 +54,7 @@ gems:
54
54
  source:
55
55
  type: git
56
56
  name: ruby/gem_rbs_collection
57
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
57
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
58
58
  remote: https://github.com/ruby/gem_rbs_collection.git
59
59
  repo_dir: gems
60
60
  - name: ast
@@ -62,7 +62,7 @@ gems:
62
62
  source:
63
63
  type: git
64
64
  name: ruby/gem_rbs_collection
65
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
65
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
66
66
  remote: https://github.com/ruby/gem_rbs_collection.git
67
67
  repo_dir: gems
68
68
  - name: base64
@@ -74,7 +74,7 @@ gems:
74
74
  source:
75
75
  type: git
76
76
  name: ruby/gem_rbs_collection
77
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
77
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
78
78
  remote: https://github.com/ruby/gem_rbs_collection.git
79
79
  repo_dir: gems
80
80
  - name: benchmark
@@ -94,7 +94,7 @@ gems:
94
94
  source:
95
95
  type: git
96
96
  name: ruby/gem_rbs_collection
97
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
97
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
98
98
  remote: https://github.com/ruby/gem_rbs_collection.git
99
99
  repo_dir: gems
100
100
  - name: connection_pool
@@ -102,7 +102,7 @@ gems:
102
102
  source:
103
103
  type: git
104
104
  name: ruby/gem_rbs_collection
105
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
105
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
106
106
  remote: https://github.com/ruby/gem_rbs_collection.git
107
107
  repo_dir: gems
108
108
  - name: date
@@ -130,7 +130,7 @@ gems:
130
130
  source:
131
131
  type: git
132
132
  name: ruby/gem_rbs_collection
133
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
133
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
134
134
  remote: https://github.com/ruby/gem_rbs_collection.git
135
135
  repo_dir: gems
136
136
  - name: i18n
@@ -138,7 +138,7 @@ gems:
138
138
  source:
139
139
  type: git
140
140
  name: ruby/gem_rbs_collection
141
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
141
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
142
142
  remote: https://github.com/ruby/gem_rbs_collection.git
143
143
  repo_dir: gems
144
144
  - name: io-console
@@ -158,7 +158,7 @@ gems:
158
158
  source:
159
159
  type: git
160
160
  name: ruby/gem_rbs_collection
161
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
161
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
162
162
  remote: https://github.com/ruby/gem_rbs_collection.git
163
163
  repo_dir: gems
164
164
  - name: minitest
@@ -178,7 +178,7 @@ gems:
178
178
  source:
179
179
  type: git
180
180
  name: ruby/gem_rbs_collection
181
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
181
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
182
182
  remote: https://github.com/ruby/gem_rbs_collection.git
183
183
  repo_dir: gems
184
184
  - name: openssl
@@ -194,7 +194,7 @@ gems:
194
194
  source:
195
195
  type: git
196
196
  name: ruby/gem_rbs_collection
197
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
197
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
198
198
  remote: https://github.com/ruby/gem_rbs_collection.git
199
199
  repo_dir: gems
200
200
  - name: parser
@@ -202,7 +202,7 @@ gems:
202
202
  source:
203
203
  type: git
204
204
  name: ruby/gem_rbs_collection
205
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
205
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
206
206
  remote: https://github.com/ruby/gem_rbs_collection.git
207
207
  repo_dir: gems
208
208
  - name: pathname
@@ -218,7 +218,7 @@ gems:
218
218
  source:
219
219
  type: git
220
220
  name: ruby/gem_rbs_collection
221
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
221
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
222
222
  remote: https://github.com/ruby/gem_rbs_collection.git
223
223
  repo_dir: gems
224
224
  - name: rails-dom-testing
@@ -226,7 +226,7 @@ gems:
226
226
  source:
227
227
  type: git
228
228
  name: ruby/gem_rbs_collection
229
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
229
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
230
230
  remote: https://github.com/ruby/gem_rbs_collection.git
231
231
  repo_dir: gems
232
232
  - name: rails-html-sanitizer
@@ -234,7 +234,7 @@ gems:
234
234
  source:
235
235
  type: git
236
236
  name: ruby/gem_rbs_collection
237
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
237
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
238
238
  remote: https://github.com/ruby/gem_rbs_collection.git
239
239
  repo_dir: gems
240
240
  - name: railties
@@ -242,7 +242,7 @@ gems:
242
242
  source:
243
243
  type: git
244
244
  name: ruby/gem_rbs_collection
245
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
245
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
246
246
  remote: https://github.com/ruby/gem_rbs_collection.git
247
247
  repo_dir: gems
248
248
  - name: rainbow
@@ -250,7 +250,7 @@ gems:
250
250
  source:
251
251
  type: git
252
252
  name: ruby/gem_rbs_collection
253
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
253
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
254
254
  remote: https://github.com/ruby/gem_rbs_collection.git
255
255
  repo_dir: gems
256
256
  - name: rake
@@ -258,7 +258,7 @@ gems:
258
258
  source:
259
259
  type: git
260
260
  name: ruby/gem_rbs_collection
261
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
261
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
262
262
  remote: https://github.com/ruby/gem_rbs_collection.git
263
263
  repo_dir: gems
264
264
  - name: rbs
@@ -274,7 +274,7 @@ gems:
274
274
  source:
275
275
  type: git
276
276
  name: ruby/gem_rbs_collection
277
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
277
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
278
278
  remote: https://github.com/ruby/gem_rbs_collection.git
279
279
  repo_dir: gems
280
280
  - name: rubocop
@@ -282,7 +282,7 @@ gems:
282
282
  source:
283
283
  type: git
284
284
  name: ruby/gem_rbs_collection
285
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
285
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
286
286
  remote: https://github.com/ruby/gem_rbs_collection.git
287
287
  repo_dir: gems
288
288
  - name: rubocop-ast
@@ -290,7 +290,7 @@ gems:
290
290
  source:
291
291
  type: git
292
292
  name: ruby/gem_rbs_collection
293
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
293
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
294
294
  remote: https://github.com/ruby/gem_rbs_collection.git
295
295
  repo_dir: gems
296
296
  - name: securerandom
@@ -310,7 +310,7 @@ gems:
310
310
  source:
311
311
  type: git
312
312
  name: ruby/gem_rbs_collection
313
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
313
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
314
314
  remote: https://github.com/ruby/gem_rbs_collection.git
315
315
  repo_dir: gems
316
316
  - name: tempfile
@@ -322,7 +322,7 @@ gems:
322
322
  source:
323
323
  type: git
324
324
  name: ruby/gem_rbs_collection
325
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
325
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
326
326
  remote: https://github.com/ruby/gem_rbs_collection.git
327
327
  repo_dir: gems
328
328
  - name: time
@@ -342,7 +342,7 @@ gems:
342
342
  source:
343
343
  type: git
344
344
  name: ruby/gem_rbs_collection
345
- revision: 9b07b7bde4c9f656f3f6d785bd676320032cecb4
345
+ revision: 5fcf7d45b7c430a651c5996280d9991c781fcf14
346
346
  remote: https://github.com/ruby/gem_rbs_collection.git
347
347
  repo_dir: gems
348
348
  - name: uri
@@ -0,0 +1,26 @@
1
+ # Generated from lib/rbs_activerecord/generator/enum/mappings.rb with RBS::Inline
2
+
3
+ module RbsActiverecord
4
+ class Generator
5
+ module Enum
6
+ class Mappings < Base
7
+ attr_reader model: RbsActiverecord::Model
8
+
9
+ attr_reader declarations: Array[Prism::CallNode]
10
+
11
+ # @rbs model: RbsActiverecord::Model
12
+ # @rbs declarations: Hash[String, Array[Prism::CallNode]]
13
+ def initialize: (RbsActiverecord::Model model, Hash[String, Array[Prism::CallNode]] declarations) -> void
14
+
15
+ def generate: () -> String
16
+
17
+ private
18
+
19
+ def enums: () -> Array[Prism::CallNode]
20
+
21
+ # @rbs node: Prism::CallNode
22
+ def enum: (Prism::CallNode node) -> String
23
+ end
24
+ end
25
+ end
26
+ end
@@ -3,10 +3,8 @@
3
3
  module RbsActiverecord
4
4
  module Parser
5
5
  module Evaluator
6
- def self.eval_node: (Prism::Node node) -> untyped
7
-
8
6
  # @rbs node: Prism::Node
9
- def eval_node: (Prism::Node node) -> untyped
7
+ def self?.eval_node: (Prism::Node node) -> untyped
10
8
  end
11
9
  end
12
10
  end
@@ -0,0 +1,29 @@
1
+ # Generated from lib/rbs_activerecord/parser/include_expander/module.rb with RBS::Inline
2
+
3
+ module RbsActiverecord
4
+ module Parser
5
+ class IncludeExpander
6
+ class Module
7
+ attr_reader mod: ::Module
8
+
9
+ attr_reader name: String
10
+
11
+ # @rbs mod: ::Module
12
+ # @rbs name: String
13
+ def initialize: (::Module mod, String name) -> void
14
+
15
+ def concern?: () -> bool
16
+
17
+ def included_blocks: () -> Array[Prism::CallNode]
18
+
19
+ private
20
+
21
+ @declarations: Array[Prism::CallNode]
22
+
23
+ def declarations: () -> Array[Prism::CallNode]
24
+
25
+ def source_location: () -> String?
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,32 @@
1
+ # Generated from lib/rbs_activerecord/parser/include_expander.rb with RBS::Inline
2
+
3
+ module RbsActiverecord
4
+ module Parser
5
+ class IncludeExpander
6
+ # @rbs model: RbsActiverecord::Model
7
+ # @rbs declarations: Hash[String, Array[Prism::CallNode]]
8
+ def self.expand: (RbsActiverecord::Model model, Hash[String, Array[Prism::CallNode]] declarations) -> void
9
+
10
+ attr_reader model: RbsActiverecord::Model
11
+
12
+ attr_reader declarations: Hash[String, Array[Prism::CallNode]]
13
+
14
+ # @rbs model: RbsActiverecord::Model
15
+ # @rbs declarations: Hash[String, Array[Prism::CallNode]]
16
+ def initialize: (RbsActiverecord::Model model, Hash[String, Array[Prism::CallNode]] declarations) -> void
17
+
18
+ def expand: () -> void
19
+
20
+ private
21
+
22
+ # @rbs node: Prism::CallNode
23
+ def included_blocks_for: (Prism::CallNode node) -> Array[Prism::CallNode]
24
+
25
+ # @rbs name: String
26
+ def const_get: (String name) -> ::Module?
27
+
28
+ # @rbs node: Prism::CallNode
29
+ def block_body_of: (Prism::CallNode node) -> Array[Prism::CallNode]
30
+ end
31
+ end
32
+ end
@@ -2,14 +2,12 @@
2
2
 
3
3
  module RbsActiverecord
4
4
  module Parser
5
- def self.parse: (String filename) -> Hash[String, Array[Prism::CallNode]]
5
+ # @rbs code: String
6
+ def self?.parse: (String code) -> Hash[String, Array[Prism::CallNode]]
6
7
 
7
- def self.eval_node: (Prism::Node node) -> untyped
8
-
9
- # @rbs filename: String
10
- def parse: (String filename) -> Hash[String, Array[Prism::CallNode]]
8
+ def self?.parse_file: (untyped filename) -> Hash[String, Array[Prism::CallNode]]
11
9
 
12
10
  # @rbs node: Prism::Node
13
- def eval_node: (Prism::Node node) -> untyped
11
+ def self?.eval_node: (Prism::Node node) -> untyped
14
12
  end
15
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbs_activerecord
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takeshi KOMIYA
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-11-14 00:00:00.000000000 Z
11
+ date: 2024-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -78,6 +78,7 @@ files:
78
78
  - lib/rbs_activerecord/generator/delegated_type/scopes.rb
79
79
  - lib/rbs_activerecord/generator/enum/base.rb
80
80
  - lib/rbs_activerecord/generator/enum/instance_methods.rb
81
+ - lib/rbs_activerecord/generator/enum/mappings.rb
81
82
  - lib/rbs_activerecord/generator/enum/scopes.rb
82
83
  - lib/rbs_activerecord/generator/pluck_overloads.rb
83
84
  - lib/rbs_activerecord/generator/scopes.rb
@@ -85,6 +86,8 @@ files:
85
86
  - lib/rbs_activerecord/model.rb
86
87
  - lib/rbs_activerecord/parser.rb
87
88
  - lib/rbs_activerecord/parser/evaluator.rb
89
+ - lib/rbs_activerecord/parser/include_expander.rb
90
+ - lib/rbs_activerecord/parser/include_expander/module.rb
88
91
  - lib/rbs_activerecord/parser/visitor.rb
89
92
  - lib/rbs_activerecord/rake_task.rb
90
93
  - lib/rbs_activerecord/utils.rb
@@ -102,6 +105,7 @@ files:
102
105
  - sig/rbs_activerecord/generator/delegated_type/scopes.rbs
103
106
  - sig/rbs_activerecord/generator/enum/base.rbs
104
107
  - sig/rbs_activerecord/generator/enum/instance_methods.rbs
108
+ - sig/rbs_activerecord/generator/enum/mappings.rbs
105
109
  - sig/rbs_activerecord/generator/enum/scopes.rbs
106
110
  - sig/rbs_activerecord/generator/pluck_overloads.rbs
107
111
  - sig/rbs_activerecord/generator/scopes.rbs
@@ -109,6 +113,8 @@ files:
109
113
  - sig/rbs_activerecord/model.rbs
110
114
  - sig/rbs_activerecord/parser.rbs
111
115
  - sig/rbs_activerecord/parser/evaluator.rbs
116
+ - sig/rbs_activerecord/parser/include_expander.rbs
117
+ - sig/rbs_activerecord/parser/include_expander/module.rbs
112
118
  - sig/rbs_activerecord/parser/visitor.rbs
113
119
  - sig/rbs_activerecord/rake_task.rbs
114
120
  - sig/rbs_activerecord/utils.rbs