Class: Orthoses::ActiveSupport::Concern
- Inherits:
-
Object
- Object
- Orthoses::ActiveSupport::Concern
- Defined in:
- lib/orthoses/active_support/concern.rb
Instance Method Summary collapse
- #call ⇒ Object
-
#initialize(loader, prototype_members: false) ⇒ Concern
constructor
A new instance of Concern.
- #members_prototype_of(mod_name) ⇒ Object
Constructor Details
#initialize(loader, prototype_members: false) ⇒ Concern
Returns a new instance of Concern.
6 7 8 9 |
# File 'lib/orthoses/active_support/concern.rb', line 6 def initialize(loader, prototype_members: false) @loader = loader @prototype_members = prototype_members end |
Instance Method Details
#call ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/orthoses/active_support/concern.rb', line 11 def call lazy_tracer = Orthoses::CallTracer::Lazy.new store = lazy_tracer.trace('ActiveSupport::Concern#class_methods') do @loader.call end lazy_tracer.captures.each do |capture| receiver_name = Orthoses::Utils.module_name(capture.method.receiver) next unless receiver_name class_methods_name = "#{receiver_name}::ClassMethods" if @prototype_members members = members_prototype_of(class_methods_name) writer = ::RBS::Writer.new(out: StringIO.new) members.each do |member| writer.write_member(member) end out = writer.out # NOTE: Should I remove the method that is accidentally added in prototype rb? store[class_methods_name].concat(out.string.each_line.to_a) else store[class_methods_name].header = "module #{class_methods_name}" end end store end |
#members_prototype_of(mod_name) ⇒ Object
41 42 43 44 45 46 47 48 |
# File 'lib/orthoses/active_support/concern.rb', line 41 def members_prototype_of(mod_name) mod = Object.const_get(mod_name) runtime = ::RBS::Prototype::Runtime.new(patterns: nil, env: nil, merge: false) type_name = ::RBS::TypeName.parse(mod_name) [].tap do |members| runtime.generate_methods(mod, type_name, members) end end |