capabilities = Dir.glob(File.join(File.dirname(__FILE__), 'capabilities', '*.rb')) capabilities.each {|capability| require capability} module ExpressTemplates # Components provide self-contained reusable view code meant to be shared # within a project or across many projects through a library of components # module Components # Components::Base is the base class for ExpressTemplates view components. # # class Base < Arbre::Component class_attribute :before_build_hooks self.before_build_hooks = [] class_attribute :builder_method_name # mark a component as abstract ie. can't be used # in Express Designer # @is_abstract = false def self.abstract_component(value = true) @is_abstract = value end def self.abstract_component? @is_abstract end abstract_component # define the parent componennt ie. can't be used # in Express Designer unless parent is present # @parent_component = nil def self.require_parent(component) raise "must pass a sublcass of ExpressTemplates::Components::Base" if !component.kind_of? ExpressTemplates::Components::Base @parent_component = component end def self.required_parent @parent_component end def self.builder_method_and_class(method_name, klass) Arbre::Element::BuilderMethods.class_eval <<-EOF, __FILE__, __LINE__ def #{method_name}(*args, &block) insert_tag ::#{klass.name}, *args, &block end EOF self.builder_method_name = method_name # puts "added #{method_name} -> #{klass.name}" end def initialize(*) super _default_attributes.each do |name, value| set_attribute(name, value) end add_class _default_classes end def self.contains(proc = nil, &block) define_method(:_build_body, &(proc || block)) end # Override the tag_name method for other than