Reputation: 155
For example, I have main_file.rb
module Exporter
extend self
def transfer(params1, params2)
Services::Transfer.call(params1, params2)
end
def get_sender(params1)
#some_code
end
end
and services/transfer.rb
module Services
module Transfer
def self.call(params1, params2)
sender = get_sender(params1)
#some_code
end
end
end
And i can't define get_sender
method exactly in services/transfer.rb as it is used in other services like services/transfer.rb.
Upvotes: 0
Views: 69
Reputation: 121000
First of all, you do not need to extend self
. Either use module_method
to declare methods as both module and instance, or, which is in your case more appropriate, use an explicit module function declaration.
module Exporter
def self.transfer(*params)
Services::Transfer.call(self, :get_sender, *params)
end
def self.get_sender(params1)
#some_code
end
end
module Services
module Transfer
def self.call(receiver, method, *params)
sender_param, *other_params = params
sender = receiver.public_send(method, sender_param)
#some_code
end
end
end
This approach is more generic and probably should suit your needs.
Upvotes: 2
Reputation: 2290
If what you want is to use Exporter
's method get_sender()
on other modules you can:
module Services
module Transfer
include Exporter
def self.call(params1, params2)
sender = get_sender(params1)
#some_code
end
end
end
This allows you to use directly get_sender()
inside the module, or Services::Transfer.get_sender()
, actually any method in Exporter (which is being 'include'd) will be available to the module/class including it.
Upvotes: 0