Skip to content

Instantly share code, notes, and snippets.

@webuilder240
Created March 20, 2020 14:52
Show Gist options
  • Save webuilder240/fd6ed5da90cc413282c7bf7a1e578e2b to your computer and use it in GitHub Desktop.
Save webuilder240/fd6ed5da90cc413282c7bf7a1e578e2b to your computer and use it in GitHub Desktop.
一定の制約をサービスクラスないし、RailsのRunnerに設ける
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