honey-cms 0.3.8 → 0.3.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,78 @@
1
+ class CMS::BaseController < ApplicationController
2
+ before_filter :admin!
3
+ before_filter :set_active
4
+ layout 'cms'
5
+
6
+ before_filter :find_record, only: [:show, :edit, :update, :destroy]
7
+ before_filter :set_element_variable, only: [:show, :edit, :update, :destroy]
8
+ respond_to :html, :json
9
+
10
+ def index
11
+ @records = if params[:search].blank?
12
+ subject.order('id asc') .page(params[:page]).per(100)
13
+ else
14
+ subject.search(params[:search]).page(params[:page]).per(100)
15
+ end
16
+
17
+ set_collection_variable
18
+ respond_with(@records)
19
+ end
20
+
21
+ def new
22
+ @record = subject.new
23
+ set_element_variable
24
+ respond_with(@record)
25
+ end
26
+
27
+ def create
28
+ @record = subject.create(params[subject.model_name.element])
29
+ set_element_variable
30
+ respond_with @record
31
+ end
32
+
33
+ def show
34
+ respond_with @record
35
+ end
36
+
37
+ def edit
38
+ respond_with @record
39
+ end
40
+
41
+ def update
42
+ @record.update_attributes params[subject.model_name.element]
43
+ respond_with @record
44
+ end
45
+
46
+ def destroy
47
+ @record.destroy
48
+ respond_with @record
49
+ end
50
+
51
+ protected
52
+
53
+ def respond_with object
54
+ super [:cms, object]
55
+ end
56
+
57
+ def find_record
58
+ @record = subject.find(params[:id])
59
+ end
60
+
61
+ def set_collection_variable
62
+ instance_variable_set :"@#{subject.model_name.collection}", @records
63
+ end
64
+
65
+ def set_element_variable
66
+ instance_variable_set :"@#{subject.model_name.element}", @record
67
+ end
68
+
69
+ def admin!
70
+ unless signed_in? && current_user.role.admin?
71
+ auth_failed
72
+ end
73
+ end
74
+
75
+ def set_active
76
+ @active_page = /cms/
77
+ end
78
+ end
@@ -0,0 +1,23 @@
1
+ class CMS::RootController < ApplicationController
2
+ before_filter :admin!
3
+ before_filter :set_active
4
+ layout 'cms'
5
+
6
+ def description
7
+ end
8
+
9
+ def index
10
+ end
11
+
12
+ protected
13
+
14
+ def admin!
15
+ unless signed_in? && current_user.role.admin?
16
+ auth_failed
17
+ end
18
+ end
19
+
20
+ def set_active
21
+ @active_page = /cms/
22
+ end
23
+ end
@@ -0,0 +1,10 @@
1
+ %ul
2
+ - CMS::Configuration.types.each do |type|
3
+ %li
4
+ = type.name.underscore.humanize
5
+ %ul
6
+ - type.attributes.each do |property|
7
+ %li= property.name.humanize
8
+ %ul
9
+ - type.options.each do |option|
10
+ %li= option.humanize
File without changes
@@ -0,0 +1,13 @@
1
+ .alerts
2
+ - if flash[:notice]
3
+ .alert.alert-info
4
+ <button type="button" class="close" data-dismiss="alert">×</button>
5
+ = flash[:notice]
6
+ - if flash[:success]
7
+ .alert.alert-success
8
+ <button type="button" class="close" data-dismiss="alert">×</button>
9
+ = flash[:success]
10
+ - if flash[:error] || flash[:alert]
11
+ .alert.alert-error
12
+ <button type="button" class="close" data-dismiss="alert">×</button>
13
+ = flash[:error] || flash[:alert]
@@ -0,0 +1,38 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ = stylesheet_link_tag 'cms', media: 'all'
5
+ = javascript_include_tag 'application'
6
+ = stylesheet_link_tag 'codemirror'
7
+ = javascript_include_tag 'cms'
8
+ = csrf_meta_tags
9
+
10
+ %body.cms
11
+ .navbar.navbar-fixed-top.main-navigation
12
+ .navbar-inner
13
+ .container
14
+ %button.btn.btn-navbar{type: 'button', :'data-toggle' => 'collapse', :'data-target' => '.nav-collapse'}
15
+ %span.icon-bar
16
+ %span.icon-bar
17
+ %span.icon-bar
18
+
19
+ .nav-collapse.collapse
20
+ %ul.nav
21
+ %li= link_to 'Home', root_path
22
+ %ul.nav.pull-right
23
+ %li= link_to 'Sign out', session_path, method: 'delete', class: 'session'
24
+
25
+ .container
26
+ = render partial: 'layouts/flash', locals: { flash: flash }
27
+
28
+ .row
29
+ .span3
30
+ %h5 CMS
31
+ %ul.nav.nav-list
32
+ - CMS::Configuration.types.each do |type|
33
+ %li{class: "#{if defined?(subject) && type.subject == subject.name then 'active' end}"}
34
+ = link_to send("cms_#{type.model_name.collection}_path") do
35
+ %i.icon-chevron-right
36
+ = type.model_name.human.pluralize
37
+
38
+ .span9= yield
data/lib/cms.rb CHANGED
@@ -9,4 +9,5 @@ module CMS
9
9
  autoload :ViewTags, 'cms/view_tags'
10
10
  autoload :FormBuilder, 'cms/form_builder'
11
11
  autoload :Page, 'cms/page'
12
+ autoload :Template, 'cms/template'
12
13
  end
@@ -72,7 +72,7 @@ class CMS::Attribute
72
72
  end
73
73
 
74
74
  def inject_options
75
- "".tap { |s| @attr_options.each { |k,v| s << ", :#{k} => #{v.inspect}" } }
75
+ CMS::Template.inject_options(@attr_options)
76
76
  end
77
77
 
78
78
  def inject_index_options
@@ -3,7 +3,7 @@ module CMS::Configuration
3
3
 
4
4
  def data
5
5
  @data ||= if yaml_string_data.present?
6
- YAML.load(yaml_string_data)
6
+ YAML.load(yaml_string_data).reverse_merge(default_empty_data)
7
7
  else
8
8
  default_empty_data
9
9
  end
@@ -2,6 +2,12 @@ require 'cms/inflections'
2
2
 
3
3
  module CMS
4
4
  class Engine < ::Rails::Engine
5
- # stubbed for assets.. ?
5
+ initializer 'cms.markdown' do |app|
6
+ ::Markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML,
7
+ autolink: true,
8
+ space_after_headers: true,
9
+ superscript: true,
10
+ tables: true)
11
+ end
6
12
  end
7
13
  end
@@ -2,13 +2,18 @@ module CMS::Orderable
2
2
  extend ActiveSupport::Concern
3
3
 
4
4
  def order_scope
5
- self.class
5
+ if self.class.order_scope && (scoped = send(self.class.order_scope))
6
+ scoped.send(self.class.model_name.collection)
7
+ else
8
+ self.class
9
+ end
6
10
  end
7
11
 
8
12
  module ClassMethods
9
- def orderable name
13
+ def orderable name, options
10
14
  default_scope order(name)
11
15
  after_save :"order_#{name}"
16
+ if options[:order_scope] then order_scope(options[:order_scope]) end
12
17
 
13
18
  define_method :"order_#{name}" do
14
19
  order_scope.where("#{name} >= #{send(name)}").where("id != #{id}").select(:id).select(name).inject(send(name)) do |i, record|
@@ -20,5 +25,9 @@ module CMS::Orderable
20
25
  end
21
26
  end
22
27
  end
28
+
29
+ def order_scope scope = false
30
+ if scope then @order_scope = scope else @order_scope end
31
+ end
23
32
  end
24
33
  end
@@ -0,0 +1,27 @@
1
+ module CMS::Template
2
+ extend self
3
+
4
+ class InvalidOptionKey < Exception ; end
5
+
6
+ def inject_options options
7
+ "".tap { |s| options.each { |k,v| s << ", #{_validate_option_key(k)}: #{v.inspect}" } }
8
+ end
9
+
10
+ def add_comma content
11
+ if content.strip.present?
12
+ ", #{content}"
13
+ else
14
+ content
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def _validate_option_key key
21
+ unless key =~ /^[a-z0-9_]+$/
22
+ raise CMS::Template::InvalidOptionKey, "Key #{key} is not valid."
23
+ end
24
+
25
+ key
26
+ end
27
+ end
@@ -34,6 +34,10 @@ class CMS::Type
34
34
  orderable_attributes.first
35
35
  end
36
36
 
37
+ def order_options
38
+ CMS::Template.inject_options(order_attribute.options)
39
+ end
40
+
37
41
  def to_s
38
42
  name
39
43
  end
@@ -19,7 +19,7 @@ module CMS
19
19
  template 'type_controller.rb', "app/controllers/cms/#{@name.collection}_controller.rb"
20
20
  template 'type_model.rb', "app/models/cms/#{@name.element}.rb"
21
21
 
22
- %w(index new show edit).each do |view|
22
+ %w(index new show edit _fields).each do |view|
23
23
  template "views/#{view}.html.haml", "app/views/cms/#{@name.collection}/#{view}.html.haml"
24
24
  end
25
25
  end
@@ -11,7 +11,7 @@ class CMS::<%= @name %> < ActiveRecord::Base
11
11
  attr_accessible <%= @type.accessible_attributes.map {|a| ":#{a.field_name}" }.sort.join(', ') %>
12
12
  <% if @type.orderable? -%>
13
13
  include CMS::Orderable
14
- orderable(:<%= @type.order_attribute.name %>)
14
+ orderable(:<%= @type.order_attribute.name %><%= @type.order_options %>)
15
15
  <% end -%>
16
16
  <% @type.file_attributes.each do |attribute| -%>
17
17
  mount_uploader :<%= attribute.name %>, CMS::Uploader
@@ -0,0 +1,16 @@
1
+ <% @type.attributes.each do |attribute| -%>
2
+ .control-group
3
+ = f.label :<%= attribute.field_name %>, class: 'control-label'
4
+ <% if attribute.orderable? -%>
5
+ .controls
6
+ = f.<%= attribute.form_type %> :<%= attribute.name %>, 1.upto(f.object.order_scope.count + 1).to_a
7
+ <% elsif attribute.reference? -%>
8
+ .controls
9
+ = f.<%= attribute.form_type %> :<%= attribute.field_name %>, CMS::<%= attribute.reference_to %>.all.collect {|r| [ r.<%= attribute.options['reference_label'] %>, r.id ] }
10
+ <% else -%>
11
+ .controls
12
+ = f.<%= attribute.form_type %> :<%= attribute.name %>
13
+ <% end -%>
14
+ <% end -%>
15
+ .form-actions
16
+ = f.submit 'Save', class: 'btn btn-primary', :'data-disable-with' => 'Saving...'
@@ -1,19 +1,4 @@
1
1
  %h2 Edit <%= @name.human.downcase %>
2
2
 
3
3
  = form_for @<%= @name.element %>, url: cms_<%= @name.element %>_path(@<%= @name.element %>), html: {class: 'form-horizontal'} do |f|
4
- <% @type.attributes.each do |attribute| -%>
5
- .control-group
6
- = f.label :<%= attribute.field_name %>, class: 'control-label'
7
- <% if attribute.orderable? -%>
8
- .controls
9
- = f.<%= attribute.form_type %> :<%= attribute.name %>, 1.upto(CMS::<%= @name %>.count).to_a
10
- <% elsif attribute.reference? -%>
11
- .controls
12
- = f.<%= attribute.form_type %> :<%= attribute.field_name %>, CMS::<%= attribute.reference_to %>.all.collect {|r| [ r.<%= attribute.options['reference_label'] %>, r.id ] }
13
- <% else -%>
14
- .controls
15
- = f.<%= attribute.form_type %> :<%= attribute.name %>
16
- <% end -%>
17
- <% end -%>
18
- .form-actions
19
- = f.submit 'Save', class: 'btn btn-primary', :'data-disable-with' => 'Saving...'
4
+ = render partial: 'fields', locals: { f: f }
@@ -1,19 +1,4 @@
1
1
  %h2 New <%= @name.human.downcase %>
2
2
 
3
3
  = form_for @<%= @name.element %>, url: cms_<%= @name.collection %>_path, html: {class: 'form-horizontal'} do |f|
4
- <% @type.attributes.each do |attribute| -%>
5
- .control-group
6
- = f.label :<%= attribute.field_name %>, class: 'control-label'
7
- <% if attribute.orderable? -%>
8
- .controls
9
- = f.<%= attribute.form_type %> :<%= attribute.name %>, 1.upto(CMS::<%= @name %>.count + 1).to_a
10
- <% elsif attribute.reference? -%>
11
- .controls
12
- = f.<%= attribute.form_type %> :<%= attribute.field_name %>, CMS::<%= attribute.reference_to %>.all.collect {|r| [ r.<%= attribute.options['reference_label'] %>, r.id ] }
13
- <% else -%>
14
- .controls
15
- = f.<%= attribute.form_type %> :<%= attribute.name %>
16
- <% end -%>
17
- <% end -%>
18
- .form-actions
19
- = f.submit 'Save', class: 'btn btn-primary', :'data-disable-with' => 'Saving...'
4
+ = render partial: 'fields', locals: { f: f }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: honey-cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8
4
+ version: 0.3.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-16 00:00:00.000000000 Z
12
+ date: 2012-12-08 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Some CMS functionality
15
15
  email: quinn@tastehoneyco.com
@@ -44,6 +44,7 @@ files:
44
44
  - lib/cms/orderable.rb
45
45
  - lib/cms/page.rb
46
46
  - lib/cms/routes.rb
47
+ - lib/cms/template.rb
47
48
  - lib/cms/type.rb
48
49
  - lib/cms/uploader.rb
49
50
  - lib/cms/view_tags.rb
@@ -59,14 +60,21 @@ files:
59
60
  - lib/generators/cms/templates/migration.rb
60
61
  - lib/generators/cms/templates/type_controller.rb
61
62
  - lib/generators/cms/templates/type_model.rb
63
+ - lib/generators/cms/templates/views/_fields.html.haml
62
64
  - lib/generators/cms/templates/views/edit.html.haml
63
65
  - lib/generators/cms/templates/views/index.html.haml
64
66
  - lib/generators/cms/templates/views/new.html.haml
65
67
  - lib/generators/cms/templates/views/show.html.haml
66
68
  - lib/generators/cms/USAGE
67
69
  - lib/honey-cms.rb
70
+ - app/controllers/cms/base_controller.rb
68
71
  - app/controllers/cms/pages_controller.rb
72
+ - app/controllers/cms/root_controller.rb
69
73
  - app/views/cms/pages/show.html.haml
74
+ - app/views/cms/root/description.html.haml
75
+ - app/views/cms/root/index.html.haml
76
+ - app/views/layouts/_flash.html.haml
77
+ - app/views/layouts/cms.html.haml
70
78
  homepage: https://github.com/honeyco/honey-cms
71
79
  licenses: []
72
80
  post_install_message: