Created
March 20, 2020 14:52
-
-
Save webuilder240/fd6ed5da90cc413282c7bf7a1e578e2b to your computer and use it in GitHub Desktop.
一定の制約をサービスクラスないし、RailsのRunnerに設ける
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module RunnerBase | |
class RunnerClassRuleError < StandardError; end | |
def self.included(base) | |
base.extend(ClassMethods) | |
raise RunnerClassRuleError.new("#{base.name}: Please Rename Runner Class") unless base.name.include?("Runner") | |
end | |
module ClassMethods | |
def run(*args) | |
self.send(:new, *args).send(:run) | |
end | |
end | |
private | |
def initialize | |
raise NotImplementedError.new("You must implement #{self.class}##{__method__}") | |
end | |
def run | |
raise NotImplementedError.new("You must implement #{self.class}##{__method__}") | |
end | |
end | |
class HogeRunner | |
include RunnerBase | |
private | |
attr_reader :yamada, :tanaka | |
def initialize(yamada, tanaka = nil) | |
@yamada = yamada | |
end | |
def run | |
puts "yamada: #{yamada} tanaka: #{tanaka}" | |
end | |
end | |
class FugaRunner | |
include RunnerBase | |
private | |
attr_reader :param | |
def initialize(param) | |
@param = param | |
end | |
def run | |
puts "#{param}" | |
end | |
end | |
class TestService | |
include RunnerBase | |
end | |
class TestRunner | |
include RunnerBase | |
end | |
HogeRunner.run("fuga", "fuga fuga") | |
FugaRunner.run("hoge") | |
TestRunner.run # app.rb:18:in `initialize': You must implement TestRunner#initialize (NotImplementedError) | |
TestService.run # app.rb:6:in `included': TestService: Please Rename Runner Class (RunnerBase::ServiceClassRuleError) # app.rb:6:in `included': Please Rename Runner Class (RunnerBase::ServiceClassRuleError) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment