Sha256: e4bfadef298201edca361a2bb0351352ea671101889c5daf17787d3b91967165
Contents?: true
Size: 1.65 KB
Versions: 2
Compression:
Stored size: 1.65 KB
Contents
# encoding: utf-8 require "simple-templater/argv_parsing" # When generator runs: # ARGV.extend(ArgvParsingMixin) # options = ARGV.parse! # options.each do |key, value| # hook = SimpleTemplater::Hooks.find(key, value) # hook.run # end class SimpleTemplater module Hooks module DSL def hook(key, question, &block) Class.new(Hook.new) do def key() key; end def question() question; end def run() block.call; end end end end class Hook def self.hooks @@hooks ||= Array.new end def self.find(key) self.hooks.find { |hook| hook.name.split("::").last.snake_case.to_sym == key } end def self.inherited(klass) self.hooks.push(klass) end def self.invoke(context) hook = self.new(context) if hook.will_run? puts("Running hook #{self}") hook.run return true else puts("Skipping hook #{self}") return false end end attr_reader :context, :reply def initialize(context) @context = context end def key self.class.name.split("::").last.snake_case.to_sym end def will_run? return @reply unless @reply.nil? if self.context.has_key?(key) @reply = self.context[key] else @reply = self.question end end def question raise NotImplementedError, "Hook #{self.key} have to have implemented method #question" end def run raise NotImplementedError, "Hook #{self.key} have to have implemented method #run" end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
simple-templater-0.0.1.4 | lib/simple-templater/hooks/hook.rb |
simple-templater-0.1.pre | lib/simple-templater/hooks/hook.rb |