spud_cms 0.4.8 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +3 -0
  3. data/Rakefile +40 -0
  4. data/app/controllers/pages_controller.rb +5 -0
  5. data/app/controllers/spud/admin/pages_controller.rb +4 -4
  6. data/app/helpers/spud/cms/application_helper.rb +23 -3
  7. data/app/models/page_sweeper.rb +18 -1
  8. data/app/models/spud_page.rb +45 -4
  9. data/app/views/pages/show.html.erb +3 -1
  10. data/config/routes.rb +5 -1
  11. data/db/migrate/20120101192412_create_spud_pages.rb +19 -0
  12. data/db/migrate/20120101193138_create_spud_menus.rb +10 -0
  13. data/db/migrate/20120101193255_create_spud_menu_items.rb +17 -0
  14. data/db/migrate/20120101194124_create_spud_templates.rb +11 -0
  15. data/db/migrate/20120103034659_create_spud_page_partials.rb +13 -0
  16. data/db/migrate/20120104194032_add_visibility_to_spud_pages.rb +6 -0
  17. data/db/migrate/20120107181337_add_menu_name_to_spud_menu_items.rb +5 -0
  18. data/db/migrate/20120111134754_add_use_custom_url_name_to_spud_pages.rb +5 -0
  19. data/db/migrate/20120118141852_add_notes_to_spud_pages.rb +5 -0
  20. data/db/migrate/20120126232428_add_menu_id_to_spud_menu_items.rb +7 -0
  21. data/db/migrate/20120128163601_add_classes_to_spud_menu_items.rb +6 -0
  22. data/lib/spud_cms/engine.rb +11 -1
  23. data/lib/spud_cms/page_route.rb +3 -0
  24. data/lib/spud_cms/version.rb +5 -0
  25. data/lib/spud_cms.rb +2 -1
  26. data/lib/tasks/spud_cms_tasks.rake +4 -0
  27. data/test/dummy/README.rdoc +261 -0
  28. data/test/dummy/Rakefile +7 -0
  29. data/test/dummy/app/assets/javascripts/application.js +15 -0
  30. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  31. data/test/dummy/app/controllers/application_controller.rb +3 -0
  32. data/test/dummy/app/helpers/application_helper.rb +2 -0
  33. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  34. data/{config → test/dummy/config}/application.rb +18 -7
  35. data/test/dummy/config/boot.rb +10 -0
  36. data/test/dummy/config/database.yml +15 -0
  37. data/test/dummy/config/environment.rb +5 -0
  38. data/test/dummy/config/environments/development.rb +37 -0
  39. data/test/dummy/config/environments/production.rb +67 -0
  40. data/test/dummy/config/environments/test.rb +37 -0
  41. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  42. data/test/dummy/config/initializers/inflections.rb +15 -0
  43. data/test/dummy/config/initializers/mime_types.rb +5 -0
  44. data/test/dummy/config/initializers/secret_token.rb +7 -0
  45. data/test/dummy/config/initializers/session_store.rb +8 -0
  46. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  47. data/test/dummy/config/locales/en.yml +5 -0
  48. data/test/dummy/config/routes.rb +3 -0
  49. data/test/dummy/config.ru +4 -0
  50. data/test/dummy/db/migrate/20120307002859_create_spud_admin_permissions.spud_core.rb +12 -0
  51. data/test/dummy/db/migrate/20120307002860_create_spud_users.spud_core.rb +30 -0
  52. data/test/dummy/db/migrate/20120307003559_create_spud_permalinks.spud_permalinks.rb +12 -0
  53. data/test/dummy/db/schema.rb +124 -0
  54. data/test/dummy/log/development.log +437 -0
  55. data/test/dummy/log/test.log +2280 -0
  56. data/test/dummy/public/404.html +26 -0
  57. data/test/dummy/public/422.html +26 -0
  58. data/test/dummy/public/500.html +25 -0
  59. data/test/dummy/public/favicon.ico +0 -0
  60. data/test/dummy/script/rails +6 -0
  61. data/test/integration/navigation_test.rb +10 -0
  62. data/test/spud_cms_test.rb +7 -0
  63. data/test/test_helper.rb +10 -0
  64. metadata +206 -18
  65. data/README.markdown +0 -71
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2012 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,3 @@
1
+ = SpudCms
2
+
3
+ This project rocks and uses MIT-LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'SpudCms'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
24
+ load 'rails/tasks/engine.rake'
25
+
26
+
27
+
28
+ Bundler::GemHelper.install_tasks
29
+
30
+ require 'rake/testtask'
31
+
32
+ # Rake::TestTask.new(:test) do |t|
33
+ # t.libs << 'lib'
34
+ # t.libs << 'test'
35
+ # t.pattern = 'test/**/*_test.rb'
36
+ # t.verbose = false
37
+ # end
38
+
39
+
40
+ task :default => [:spec]
@@ -11,6 +11,11 @@ class PagesController < ApplicationController
11
11
  url_name = !params[:id].blank? ? params[:id] : Spud::Cms.root_page_name
12
12
  @page = SpudPage.published_pages.where(:url_name => url_name).includes([:spud_template,:spud_page_partials]).first
13
13
  if @page.blank?
14
+ @permalink = SpudPermalink.includes(:attachment).where(:url_name => url_name).first
15
+ if !@permalink.blank? && @permalink.attachment_type == 'SpudPage'
16
+ redirect_to @permalink.attachment.url_name == Spud::Cms.root_page_name ? root_url() : page_url(:id => @permalink.attachment.url_name) , :status => :moved_permanently and return
17
+ end
18
+
14
19
  flash[:error] = "Page not found"
15
20
  if !params[:id].blank?
16
21
  redirect_to root_url() and return
@@ -40,7 +40,7 @@ class Spud::Admin::PagesController < Spud::Admin::ApplicationController
40
40
  @templates = SpudTemplate.all
41
41
  @page = SpudPage.new
42
42
  Spud::Cms.default_page_parts.each do |part|
43
- @page.spud_page_partials.new(:name => part)
43
+ @page.spud_page_partials.new(:name => part.strip)
44
44
  end
45
45
  respond_with @page
46
46
  end
@@ -58,14 +58,14 @@ class Spud::Admin::PagesController < Spud::Admin::ApplicationController
58
58
  @templates = SpudTemplate.all
59
59
  if @page.spud_page_partials.blank?
60
60
  Spud::Cms.default_page_parts.each do |part|
61
- @page.spud_page_partials.new(:name => part)
61
+ @page.spud_page_partials.new(:name => part.strip)
62
62
  end
63
63
  end
64
64
  if !@page.spud_template.blank?
65
65
  @page.spud_template.page_parts.split(",").each do |part|
66
- partial = @page.spud_page_partials.select{|p| p.name == part}
66
+ partial = @page.spud_page_partials.select{|p| p.name == part.strip}
67
67
  if partial.blank?
68
- @page.spud_page_partials.new(:name => part)
68
+ @page.spud_page_partials.new(:name => part.strip)
69
69
  end
70
70
  end
71
71
  end
@@ -68,7 +68,17 @@ module Spud::Cms::ApplicationHelper
68
68
 
69
69
 
70
70
  grouped_items["SpudMenu"].sort_by{|p| p.menu_order}.each do |item|
71
- content += "<li><a #{"class='#{item.classes}' " if !item.classes.blank?}href='#{!item.url_name.blank? ? page_path(:id => item.url_name) : item.url}'>#{item.name}</a>"
71
+ active = false
72
+ if !item.url_name.blank?
73
+ if current_page?(page_path(:id => item.url_name))
74
+ active = true
75
+ elsif item.url_name == Spud::Cms.root_page_name && current_page?(root_path)
76
+ active = true
77
+ end
78
+ elsif current_page?(item.url)
79
+ active = true
80
+ end
81
+ content += "<li><a class='#{"menu-active" if active} #{item.classes if !item.classes.blank?}' href='#{!item.url_name.blank? ? (item.url_name == Spud::Cms.root_page_name ? root_path() : page_path(:id => item.url_name)) : item.url}'>#{item.name}</a>"
72
82
  if max_depth == 0 || max_depth > 1
73
83
  content += sp_list_menu_item(child_items,item.id,2,max_depth)
74
84
  end
@@ -90,7 +100,7 @@ module Spud::Cms::ApplicationHelper
90
100
 
91
101
  menu_tags = []
92
102
  menu_items.sort_by{|p| p.menu_order}.each do |item|
93
- menu_tags += ["<a #{"class='#{item.classes}' " if !item.classes.blank?}href='#{!item.url_name.blank? ? page_path(:id => item.url_name) : item.url}'>#{item.name}</a>"]
103
+ menu_tags += ["<a #{"class='#{item.classes}' " if !item.classes.blank?}href='#{!item.url_name.blank? ? (item.url_name == Spud::Cms.root_page_name ? root_path() : page_path(:id => item.url_name)) : item.url}'>#{item.name}</a>"]
94
104
  end
95
105
 
96
106
  return menu_tags.join(seperator).html_safe
@@ -105,7 +115,17 @@ private
105
115
  content = "<ul>"
106
116
 
107
117
  spud_menu_items.sort_by{|p| p.menu_order}.each do |item|
108
- content += "<li><a #{"class='#{item.classes}' " if !item.classes.blank?}href='#{!item.url_name.blank? ? page_path(:id => item.url_name) : item.url}'>#{item.name}</a>"
118
+ active = false
119
+ if !item.url_name.blank?
120
+ if current_page?(page_path(:id => item.url_name))
121
+ active = true
122
+ elsif item.url_name == Spud::Cms.root_page_name && current_page?(root_path)
123
+ active = true
124
+ end
125
+ elsif current_page?(item.url)
126
+ active = true
127
+ end
128
+ content += "<li><a class='#{"menu-active" if active} #{item.classes if !item.classes.blank?}' href='#{!item.url_name.blank? ? (item.url_name == Spud::Cms.root_page_name ? root_path() : page_path(:id => item.url_name)) : item.url}'>#{item.name}</a>"
109
129
  if max_depth == 0 || max_depth > depth
110
130
  content += sp_list_menu_item(items,item.id,depth+1,max_depth)
111
131
  end
@@ -1,6 +1,23 @@
1
1
  class PageSweeper < ActionController::Caching::Sweeper
2
2
  observe SpudPage,SpudTemplate,SpudMenuItem
3
3
 
4
+ def before_save(record)
5
+ if record.is_a?(SpudPage) && record.changed_attributes.has_key?("url_name")
6
+ if Spud::Cms.enable_full_page_caching
7
+ if record.changed_attributes["url_name"] == Spud::Cms.root_page_name
8
+ expire_page root_path
9
+ else
10
+ expire_page page_path(:id => record.changed_attributes["url_name"])
11
+ end
12
+ elsif Spud::Cms.enable_action_caching
13
+ if record.changed_attributes["url_name"] == Spud::Cms.root_page_name
14
+ expire_action root_path
15
+ else
16
+ expire_action page_path(:id => record.changed_attributes["url_name"])
17
+ end
18
+ end
19
+ end
20
+ end
4
21
  def after_save(record)
5
22
  expire_cache_for(record)
6
23
  expire_page spud_cms_sitemap_path
@@ -23,7 +40,7 @@ private
23
40
  expire_page root_path
24
41
  else
25
42
  expire_page page_path(:id => record.url_name)
26
- end
43
+ end
27
44
  elsif Spud::Cms.enable_action_caching
28
45
  if record.url_name == Spud::Cms.root_page_name
29
46
  expire_action root_path
@@ -4,6 +4,7 @@ class SpudPage < ActiveRecord::Base
4
4
  belongs_to :spud_template,:foreign_key => :template_id
5
5
  has_many :spud_pages, :dependent => :nullify
6
6
  has_many :spud_page_partials,:dependent => :destroy
7
+ has_many :spud_permalinks,:as => :attachment, :dependent => :destroy
7
8
  belongs_to :created_by_user,:class_name => "SpudUser",:foreign_key => :created_by
8
9
  belongs_to :updated_by_user,:class_name => "SpudUser",:foreign_key => :updated_by
9
10
 
@@ -46,22 +47,62 @@ class SpudPage < ActiveRecord::Base
46
47
  def generate_url_name
47
48
  return true if self.name.blank?
48
49
  if !self.use_custom_url_name || self.url_name.blank?
49
-
50
- url_name = self.name.parameterize.downcase
50
+ url_name = ""
51
+ if !self.spud_page.blank?
52
+ url_name += self.spud_page.url_name + "/"
53
+ end
54
+ url_name += self.name.parameterize.downcase
51
55
  if !self.use_custom_url_name
52
56
  pages = SpudPage
57
+
53
58
  if !self.id.blank?
54
59
  pages = pages.where("id != #{self.id}")
55
60
  end
56
61
  url_names = pages.all.collect{|p| p.url_name}
62
+
57
63
  counter = 1
58
- while url_names.include?(url_name) do
59
- url_name = self.name.parameterize.downcase + "-#{counter}"
64
+ url_name_new = url_name
65
+ while url_names.include?(url_name_new) do
66
+ url_name_new = url_name + "-#{counter}"
60
67
  counter += 1
61
68
  end
69
+ # url_name = url_name_new
70
+ # Check Permalinks List
71
+
72
+ permalink = SpudPermalink.where(:url_name => url_name_new).first
73
+ counter = 1
74
+ while permalink.blank? == false
75
+
76
+ if permalink.attachment == self
77
+ permalink.destroy
78
+ permalink = nil
79
+ else
80
+ url_name_new = url_name + "-#{counter}"
81
+ counter += 1
82
+ permalink = SpudPermalink.where(:url_name => url_name_new).first
83
+ end
84
+ end
85
+ url_name = url_name_new
62
86
  end
87
+ if self.url_name.blank? == false && url_name != self.url_name
88
+ self.spud_permalinks.create(:url_name => self.url_name)
89
+ end
63
90
  self.url_name = url_name
64
91
  self.use_custom_url_name = false
92
+ elsif self.id.to_i > 0
93
+ page = SpudPage.where(:id => self.id).first
94
+ if page.url_name.blank? == false && page.url_name != self.url_name
95
+ permalink = SpudPermalink.where(:url_name => self.url_name).first
96
+ if permalink.blank? == false
97
+ if permalink.attachment == self
98
+ permalink.destroy
99
+ else
100
+ self.errors.add :url_name, "This permalink has already been used by another page."
101
+ return false
102
+ end
103
+ end
104
+ self.spud_permalinks.create(:url_name => page.url_name)
105
+ end
65
106
  end
66
107
  return true
67
108
  end
@@ -1,4 +1,6 @@
1
-
1
+ <%=content_for :title do%>
2
+ <%= @page.name %> | <%=Spud::Core.site_name%>
3
+ <% end %>
2
4
  <%=content_for :head do%>
3
5
  <%if !@page.meta_description.blank?%>
4
6
  <meta name="description" content="<%=@page.meta_description%>" />
data/config/routes.rb CHANGED
@@ -16,7 +16,11 @@ Rails.application.routes.draw do
16
16
  end
17
17
  end
18
18
  root :to => 'pages#show'
19
- match ":id", :controller => "pages",:action => "show", :as => "page"
19
+
20
+ # This is located in lib/spud_cms/page_route.rb to make sure it is loaded last
21
+ # match "*id", :controller => "pages",:action => "show", :as => "page"
20
22
 
21
23
  end
24
+ Spud::Cms::Engine.routes.draw do
25
+ end
22
26
 
@@ -0,0 +1,19 @@
1
+ class CreateSpudPages < ActiveRecord::Migration
2
+ def change
3
+ create_table :spud_pages do |t|
4
+ t.string :name
5
+ t.string :url_name
6
+ t.datetime :publish_at
7
+ t.integer :created_by
8
+ t.integer :updated_by
9
+ t.string :format,:default => "html"
10
+ t.integer :spud_page_id
11
+ t.text :meta_description
12
+ t.string :meta_keywords
13
+ t.integer :page_order
14
+ t.integer :template_id
15
+
16
+ t.timestamps
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,10 @@
1
+ class CreateSpudMenus < ActiveRecord::Migration
2
+ def change
3
+ create_table :spud_menus do |t|
4
+ t.string :name
5
+ t.text :description
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,17 @@
1
+ class CreateSpudMenuItems < ActiveRecord::Migration
2
+ def change
3
+ create_table :spud_menu_items do |t|
4
+ t.string :parent_type
5
+ t.integer :parent_id
6
+ t.integer :item_type
7
+ t.integer :spud_page_id
8
+ t.integer :menu_order,:default => 0
9
+ t.string :url
10
+
11
+ t.timestamps
12
+ end
13
+
14
+ add_index :spud_menu_items,[:parent_type,:parent_id]
15
+ add_index :spud_menu_items,[:menu_order]
16
+ end
17
+ end
@@ -0,0 +1,11 @@
1
+ class CreateSpudTemplates < ActiveRecord::Migration
2
+ def change
3
+ create_table :spud_templates do |t|
4
+ t.string :name
5
+ t.string :base_layout
6
+ t.text :content
7
+ t.text :page_parts # On top of Main
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ class CreateSpudPagePartials < ActiveRecord::Migration
2
+ def change
3
+ create_table :spud_page_partials do |t|
4
+ t.integer :spud_page_id
5
+ t.string :name
6
+ t.text :content
7
+ t.string :format
8
+
9
+ t.timestamps
10
+ end
11
+ add_index :spud_page_partials,:spud_page_id
12
+ end
13
+ end
@@ -0,0 +1,6 @@
1
+ class AddVisibilityToSpudPages < ActiveRecord::Migration
2
+ def change
3
+ add_column :spud_pages, :visibility, :integer,:default => 0
4
+ add_column :spud_pages, :published, :boolean,:default => true
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ class AddMenuNameToSpudMenuItems < ActiveRecord::Migration
2
+ def change
3
+ add_column :spud_menu_items, :name, :string
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddUseCustomUrlNameToSpudPages < ActiveRecord::Migration
2
+ def change
3
+ add_column :spud_pages, :use_custom_url_name, :boolean,:default => false
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddNotesToSpudPages < ActiveRecord::Migration
2
+ def change
3
+ add_column :spud_pages, :notes, :text
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ class AddMenuIdToSpudMenuItems < ActiveRecord::Migration
2
+
3
+ def change
4
+ add_column :spud_menu_items, :spud_menu_id, :integer
5
+ add_index :spud_menu_items,:spud_menu_id
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ class AddClassesToSpudMenuItems < ActiveRecord::Migration
2
+ def change
3
+ add_column :spud_menu_items, :classes, :string
4
+
5
+ end
6
+ end
@@ -1,11 +1,14 @@
1
1
  require 'spud_core'
2
+ require 'spud_permalinks'
2
3
  require 'codemirror-rails'
3
4
  module Spud
4
5
  module Cms
5
6
  class Engine < Rails::Engine
6
7
  engine_name :spud_cms
7
8
  # config.autoload_paths << File.expand_path("../app/sweepers", __FILE__)
8
-
9
+ config.generators do |g|
10
+ g.test_framework :rspec, :view_specs => false
11
+ end
9
12
 
10
13
  initializer :admin do
11
14
  Spud::Core.configure do |config|
@@ -22,6 +25,13 @@ module Spud
22
25
 
23
26
  end
24
27
  end
28
+ initializer :spud_cms_routes do |config|
29
+ config.routes_reloader.paths << File.expand_path('../page_route.rb', __FILE__)
30
+ end
31
+ initializer :load_priority, :after => :load_environment_config do |config|
32
+ puts "Loading Railties Order"
33
+ # Rails.application.config.railties_order = [:main_app, :all,Spud::Core::Engine,Spud::Cms::Engine]
34
+ end
25
35
  initializer :assets do |config|
26
36
  Rails.application.config.assets.precompile += ["spud/admin/cms*"]
27
37
  end
@@ -0,0 +1,3 @@
1
+ Rails.application.routes.append do
2
+ match "*id", :controller => "pages",:action => "show", :as => "page"
3
+ end
@@ -0,0 +1,5 @@
1
+ module Spud
2
+ module Cms
3
+ VERSION = "0.7.0"
4
+ end
5
+ end
data/lib/spud_cms.rb CHANGED
@@ -1,7 +1,8 @@
1
+
1
2
  module Spud
2
3
  module Cms
3
4
  require 'spud_cms/configuration'
4
5
  require 'spud_cms/engine' if defined?(Rails)
5
- require 'spud_cms/test_files' if ENV["RAILS_ENV"] == 'test'
6
6
  end
7
7
  end
8
+
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :spud_cms do
3
+ # # Task goes here
4
+ # end