raise 'fuc' require 'abstract_interface/support' require 'abstract_interface/haml_builder' require 'abstract_interface/view_builder' require 'abstract_interface/view_helper' Crystal::TemplateContext.send :include, AbstractInterface::ViewHelper # TODO2 # ActionView::Base.field_error_proc = lambda do |html_tag, instance| # html_tag # end module AbstractInterface class << self inject :logger => :logger, :config => :config attr_accessor :plugin_name attr_accessor :layout_configurations_dir def generate_helper_methods *args AbstractInterface::ViewBuilder.generate_helper_methods *args end def available_themes; @available_themes ||= [] end def theme_metadata theme logger.warn "Complex calculation (AbstractInterface.theme_metadata) called in production!" if config.production? metadata = {} name = "#{dir}/#{Crystal::Template::DIRECTORY_NAME}/#{theme}/metadata.rb" if Crystal::Environment.file_exist? name fname = Crystal::Environment.find_file name code = File.read fname metadata = eval code metadata.should! :be_a, Hash end metadata.to_openobject end def layouts_defined? !!layout_configurations_dir end def layout_definitions theme name = "#{layout_configurations_dir.should_not_be!(:empty)}/#{theme}.yml" raise "File '#{name}' not exist!" unless Crystal::Environment.file_exist? name fname = Crystal::Environment.find_file name lds = YAML.load_file(fname) validate_layout_definition!(lds, theme) lds end cache_with_params! :layout_definitions unless Rails.development? protected def validate_layout_definition! lds, theme lds.should! :be_a, Hash unless lds.include?('default') raise "No 'default' layout definition for '#{theme}' Theme (there always should be definition for 'default' layout)!" end lds.each do |theme_name, ld| ld.should! :be_a, Hash ld.should! :include, 'layout_template' ld.should! :include, 'slots' ld['slots'].should! :be_a, Hash end end end end # TODO1 # Rails.development{RailsExt.create_public_symlinks!} # rails_ext.css, rails_ext.js in development mode