Sha256: 72b1994f22ab8f7416ed5650d77e4dc1bf56c1314db494169b606b61aa355444
Contents?: true
Size: 1.94 KB
Versions: 2
Compression:
Stored size: 1.94 KB
Contents
module Tokamak module Builder class Base @@global_media_types = {} class << self def builder_for(*args) # class instance variable to store media types handled by a builder @media_types ||= [] args.each do |media_type| @media_types << media_type @@global_media_types[media_type] = self end end alias_method :add_media_type, :builder_for def media_types @media_types end def global_media_types @@global_media_types end def build(obj, options = {}, &block) recipe = block_given? ? block : options.delete(:recipe) unless recipe.respond_to?(:call) recipe = Tokamak::Recipes[recipe] raise Tokamak::BuilderError.new("Recipe required to build representation.") unless recipe.respond_to?(:call) end builder = self.new(obj, options) recipe.call(*[builder, obj, options][0, recipe.arity]) builder.representation end def helper @helper_module ||= Tokamak::Builder.helper_module_for(self) end def collection_helper_default_options(options = {}, &block) generic_helper(:collection, options, &block) end def member_helper_default_options(type, options = {}, &block) generic_helper(:member, options, &block) end def generic_helper(section, options = {}, &block) helper.send(:remove_method, section) var_name = "@@more_options_#{section.to_s}".to_sym helper.send(:class_variable_set, var_name, options) helper.module_eval <<-EOS def #{section.to_s}(obj, *args, &block) #{var_name}.merge!(args.shift) args.unshift(#{var_name}) #{self.name}.build(obj, *args, &block) end EOS end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
tokamak-1.2.1 | lib/tokamak/builder/base.rb |
tokamak-1.2.0 | lib/tokamak/builder/base.rb |