Skip to content

Instantly share code, notes, and snippets.

@datapimp
Created November 1, 2013 20:56
Show Gist options
  • Save datapimp/7271817 to your computer and use it in GitHub Desktop.
Save datapimp/7271817 to your computer and use it in GitHub Desktop.
require "skypager/engine"
require "skypager/util/ember"
require "smooth"
require "slim"
require "pry"
Slim::Engine.set_default_options :shortcut => {'&' => {:tag => 'div', :attr => 'data-component'}, '!'=>{attr:'data-variant'}, '$'=>{attr:'data-scope'}, '#' => {:attr => 'id'}, '.' => {:attr => 'class'}}
module Skypager
mattr_accessor :data_directory, :namespace, :templates, :default_backend, :model_classes
def self.root
File.dirname(__FILE__)
end
def self.template template_name
templates.find(template_name) || templates.find("#{ template_name }.html")
end
def self.template_extensions
%w{.slim .erb .haml .mustache .handlebars}
end
def self.templates
return @@templates if @@templates
trail = Hike::Trail.new(Skypager.views_path)
trail.append_paths "layouts", "components", "pages"
template_extensions.each {|ext| trail.append_extension(ext) }
@@templates = trail
end
def self.library_views_path
File.join(File.dirname(__FILE__),'skypager','views')
end
def self.views_path
library_views_path
end
def self.rails_application?
defined?(::Rails) && ::Rails.application
end
def self.application_views_path
::Rails.root.join("app","views","skypager")
end
def self.add_template_extensions *extensions
extensions.each {|ext| templates.append_extension(ext) }
end
def self.add_template_path *paths
templates.append_paths(*paths)
end
def self.default_backend
@@default_backend || "redis"
end
def self.namespace
@@namespace || "skypager"
end
def self.model_classes
@@model_classes ||= []
end
def self.model_metadata
model_classes.inject({}) do |memo,model_class|
klass = model_class.constantize
memo[model_class] = klass.metadata
memo
end
end
def self.data_directory
@@data_directory || ::Rails.root.join("db","smooth", Rails.env).to_s
end
def self.load_default_layouts_and_components
load_layouts_and_components_from(Skypager.library_views_path)
end
def self.load_project_layouts_and_components
load_layouts_and_components_from(Skypager.application_views_path)
end
def self.load_layouts_and_components_from path, extension=".html.slim"
layouts = Dir.glob("#{ path }/layouts/*#{extension}")
components = Dir.glob("#{ path }/components/*#{extension}")
layouts.each do |layout|
Skypager::PageLayout.find_or_create_from_template(layout)
end
components.each do |component|
Skypager::Component.find_or_create_from_template(component)
end
end
def self.create_default_pages
load_default_layouts_and_components
site = Skypager::Site.create()
site.create_root_elements
end
require "skypager/controller_adapter"
require "skypager/collection"
require "skypager/model"
require "skypager/resource"
require "skypager/asset_bundle"
require "skypager/site"
require "skypager/section"
require "skypager/component/templating"
require "skypager/component/rendering"
require "skypager/component/previewing"
require "skypager/component"
require "skypager/page_layout"
require "skypager/page"
require "skypager/template"
require "skypager/theme"
require "skypager/page_layout_category"
require "skypager/component_category"
require "skypager/javascript_application"
def self.define_resource_controllers
code = %q{
Skypager::AssetBundlesController = Class.new(Skypager::ModelController)
Skypager::ComponentsController = Class.new(Skypager::ModelController)
Skypager::ResourcesController = Class.new(Skypager::ModelController)
Skypager::SitesController = Class.new(Skypager::ModelController)
Skypager::SectionsController = Class.new(Skypager::ModelController)
Skypager::PageLayoutsController = Class.new(Skypager::ModelController)
Skypager::PagesController = Class.new(Skypager::ModelController)
Skypager::TemplatesController = Class.new(Skypager::ModelController)
Skypager::ThemesController = Class.new(Skypager::ModelController)
Skypager::PageLayoutCategoriesController = Class.new(Skypager::ModelController)
Skypager::ComponentCategoriesController = Class.new(Skypager::ModelController)
Skypager::JavascriptApplicationsController = Class.new(Skypager::ModelController)
}
class_eval(code) unless defined?(Skypager::JavascriptApplicationsController)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment