Sha256: 7d007f4d05275115b894e25b597d819b196966aa7c806b4ae3d86bc0ae036440
Contents?: true
Size: 1.31 KB
Versions: 2
Compression:
Stored size: 1.31 KB
Contents
# encoding: utf-8 module Formidable module Rendering RendererNotAssigned = Class.new(StandardError) def self.included(klass) klass.extend(ClassMethods) klass.extend Module.new { def inherited(subclass) subclass.renderer(default_renderer, &rendering_block) end } end attr_writer :renderer def renderer @renderer ||= begin renderer = self.class.default_renderer rendering_block = self.class.rendering_block renderer.new(self, &rendering_block) unless renderer.nil? end end def render if renderer.nil? raise RendererNotAssigned, "You have to assign renderer. You can set default_renderer via #{self.class}.renderer(renderer_class) or you can set renderer per instance via #renderer=(renderer_instance) method." elsif renderer && ! renderer.respond_to?(:render) raise RendererNotAssigned, "You assigned #{self.renderer.inspect} to the #{self.inspect}, but it doesn't respond to #render method" else renderer.render end end module ClassMethods attr_reader :default_renderer, :rendering_block def renderer(default_renderer, &rendering_block) @default_renderer = default_renderer @rendering_block = rendering_block end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
formidable-0.1.2 | lib/formidable/rendering.rb |
formidable-0.1.1 | lib/formidable/rendering.rb |