Skip to content

Commit d7083f9

Browse files
committed
add prepend_modules
1 parent 7caa400 commit d7083f9

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

lib/helpers/parse_ruby.rb

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@
4747
if node.receiver.nil? && node.name == :include && definitions.current_node_type == "class" && !node.arguments.nil? && %i[constant_read_node constant_path_node].include?(node.arguments.arguments.first.type)
4848
definitions.add_include_module(node.arguments.arguments.first.to_source)
4949
end
50+
if node.receiver.nil? && node.name == :prepend && definitions.current_node_type == "class" && !node.arguments.nil? && %i[constant_read_node constant_path_node].include?(node.arguments.arguments.first.type)
51+
definitions.add_prepend_module(node.arguments.arguments.first.to_source)
52+
end
5053
end
5154

5255
add_callback :call_node, at: 'start' do |node|
@@ -135,6 +138,10 @@ def add_include_module(name)
135138
@node.include_modules.push(name)
136139
end
137140

141+
def add_prepend_module(name)
142+
@node.prepend_modules.push(name)
143+
end
144+
138145
def add_method(name)
139146
method_definition = MethodDefinition.new(parent: @node, name: name)
140147
@node.methods.push(method_definition)
@@ -194,13 +201,15 @@ def setup_ancestors
194201
end
195202
if superclass_class
196203
ancestors << superclass_class.full_name
204+
ancestors.concat(superclass_class.prepend_modules) if superclass_class.prepend_modules
197205
ancestors.concat(superclass_class.include_modules) if superclass_class.include_modules
198206
superclass = superclass_class.superclass
199207
else
200208
ancestors << superclass
201209
superclass = nil
202210
end
203211
end
212+
ancestors.concat(klass.prepend_modules) if klass.prepend_modules
204213
ancestors.concat(klass.include_modules) if klass.include_modules
205214
klass.ancestors = ancestors
206215

@@ -277,7 +286,7 @@ def to_h
277286
end
278287

279288
class ClassDefinition < BaseDefinition
280-
attr_reader :parent, :name, :superclass, :modules, :classes, :methods, :static_methods, :constants, :include_modules
289+
attr_reader :parent, :name, :superclass, :modules, :classes, :methods, :static_methods, :constants, :include_modules, :prepend_modules
281290
attr_accessor :singleton, :ancestors
282291

283292
def initialize(parent:, name:, superclass:)
@@ -290,6 +299,7 @@ def initialize(parent:, name:, superclass:)
290299
@static_methods = []
291300
@constants = []
292301
@include_modules = []
302+
@prepend_modules = []
293303
@ansestors = []
294304
end
295305

@@ -303,6 +313,7 @@ def to_h
303313
static_methods: @static_methods.map(&:to_h),
304314
constants: @constants,
305315
include_modules: @include_modules,
316+
prepend_modules: @prepend_modules,
306317
singleton: @singleton&.to_h,
307318
ancestors: @ancestors
308319
}

spec/helpers/parse_ruby_spec.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
module Synvert
1616
class User
1717
include Trackable
18+
prepend Authenticatable
1819
1920
ROLES = %w[user admin].freeze
2021
@@ -64,8 +65,9 @@ def user_type
6465
static_methods: [],
6566
constants: [],
6667
include_modules: [],
68+
prepend_modules: [],
6769
singleton: nil,
68-
ancestors: ["Synvert::User", "Trackable"]
70+
ancestors: ["Synvert::User", "Authenticatable", "Trackable"]
6971
},
7072
{
7173
name: "User",
@@ -87,7 +89,8 @@ def user_type
8789
}],
8890
constants: [{ name: "ROLES" }],
8991
include_modules: ["Trackable"],
90-
ancestors: ["Trackable"]
92+
prepend_modules: ["Authenticatable"],
93+
ancestors: ["Authenticatable", "Trackable"]
9194
}
9295
],
9396
modules: [],

0 commit comments

Comments
 (0)