slightcms 0.0.2 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.bnsignore +18 -0
- data/History.rdoc +4 -0
- data/README.rdoc +42 -0
- data/Rakefile +5 -1
- data/VERSION +1 -1
- data/bin/slightcms +7 -0
- data/generators/slightcms_setup/slightcms_setup_generator.rb +26 -0
- data/generators/slightcms_setup/templates/INSTALL +1 -0
- data/generators/slightcms_setup/templates/slightcms_setup_migration.rb +61 -0
- data/lib/app/models/slightcms_layout.rb +14 -0
- data/lib/app/models/slightcms_page.rb +81 -0
- data/lib/app/models/slightcms_page_part.rb +18 -0
- data/lib/slightcms.rb +48 -0
- data/slightcms.gemspec +24 -9
- data/spec/slightcms_spec.rb +6 -0
- data/spec/spec_helper.rb +15 -0
- data/test/test_slightcms.rb +0 -0
- metadata +22 -12
- data/init.rb +0 -1
- data/lib/slightcms/slightcms_page.rb +0 -70
- data/lib/slightcms/slightcms_page_element.rb +0 -20
- data/lib/slightcms/slightcms_page_element_sweeper.rb +0 -20
- data/lib/slightcms/slightcms_page_sweeper.rb +0 -20
data/.bnsignore
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# The list of files that should be ignored by Mr Bones.
|
2
|
+
# Lines that start with '#' are comments.
|
3
|
+
#
|
4
|
+
# A .gitignore file can be used instead by setting it as the ignore
|
5
|
+
# file in your Rakefile:
|
6
|
+
#
|
7
|
+
# Bones {
|
8
|
+
# ignore_file '.gitignore'
|
9
|
+
# }
|
10
|
+
#
|
11
|
+
# For a project with a C extension, the following would be a good set of
|
12
|
+
# exclude patterns (uncomment them if you want to use them):
|
13
|
+
# *.[oa]
|
14
|
+
# *~
|
15
|
+
announcement.txt
|
16
|
+
coverage
|
17
|
+
doc
|
18
|
+
pkg
|
data/History.rdoc
ADDED
data/README.rdoc
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
= slightCMS
|
2
|
+
by Matthias Nitsch
|
3
|
+
http://github.com/mnitsch/slightcms
|
4
|
+
|
5
|
+
== DESCRIPTION:
|
6
|
+
|
7
|
+
slightCMS is a small CMS, built for integration into existing rails applications
|
8
|
+
|
9
|
+
== FEATURES/PROBLEMS:
|
10
|
+
|
11
|
+
* FIXME (list of features or problems)
|
12
|
+
|
13
|
+
== REQUIREMENTS:
|
14
|
+
|
15
|
+
* FIXME (list of requirements)
|
16
|
+
|
17
|
+
== INSTALL:
|
18
|
+
|
19
|
+
* gem install slightcms
|
20
|
+
|
21
|
+
== LICENSE:
|
22
|
+
|
23
|
+
(The MIT License)
|
24
|
+
|
25
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
26
|
+
a copy of this software and associated documentation files (the
|
27
|
+
'Software'), to deal in the Software without restriction, including
|
28
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
29
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
30
|
+
permit persons to whom the Software is furnished to do so, subject to
|
31
|
+
the following conditions:
|
32
|
+
|
33
|
+
The above copyright notice and this permission notice shall be
|
34
|
+
included in all copies or substantial portions of the Software.
|
35
|
+
|
36
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
37
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
38
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
39
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
40
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
41
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
42
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
data/bin/slightcms
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
class Rails::Generator::Commands::Create
|
2
|
+
def draw_routes
|
3
|
+
file_start = 'ActionController::Routing::Routes.draw do |map|'
|
4
|
+
unless options[:pretend]
|
5
|
+
gsub_file 'config/routes.rb', /(#{Regexp.escape(file_start)})/mi do |match|
|
6
|
+
"#{match}\n map.slightcms_pages '/:path', :controller => :slightcms_pages, :action => :show\n"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class SlightcmsSetupGenerator < Rails::Generator::Base
|
13
|
+
def manifest
|
14
|
+
record do |m|
|
15
|
+
# Setup directories
|
16
|
+
m.directory('db/migrate')
|
17
|
+
m.directory('public/slightcms/assets')
|
18
|
+
|
19
|
+
# Setup migration file
|
20
|
+
m.file('slightcms_setup_migration.rb', '#{Time.now.to_s}_slightcms_setup.rb'
|
21
|
+
|
22
|
+
# Setup routes in routes.rb
|
23
|
+
m.draw_routes
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
TEST
|
@@ -0,0 +1,61 @@
|
|
1
|
+
class SlightcmsSetup < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
# Create layouts-table
|
4
|
+
create_table :slightcms_layouts do |t|
|
5
|
+
t.string :name, :null => false
|
6
|
+
t.text :content
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
|
10
|
+
# Create pages-table
|
11
|
+
create_table :slightcms_pages do |t|
|
12
|
+
t.integer :parent_id
|
13
|
+
t.integer :layout_id, :null => false
|
14
|
+
t.integer :status_id
|
15
|
+
t.integer :position
|
16
|
+
t.string :path, :null => false
|
17
|
+
t.string :title, :null => false
|
18
|
+
t.string :slug, :null => false
|
19
|
+
t.string :keywords
|
20
|
+
t.string :description
|
21
|
+
t.boolean :published
|
22
|
+
t.timestamps
|
23
|
+
end
|
24
|
+
add_index :slightcms_pages, :parent_id
|
25
|
+
add_index :slightcms_pages, :layout_id
|
26
|
+
add_index :slightcms_pages, :path
|
27
|
+
add_index :slightcms_pages, :published
|
28
|
+
|
29
|
+
# Create page-parts-table
|
30
|
+
create_table :slightcms_page_parts do |t|
|
31
|
+
t.integer :page_id
|
32
|
+
t.string :name, :null => false
|
33
|
+
t.text :content
|
34
|
+
t.timestamps
|
35
|
+
end
|
36
|
+
add_index :slightcms_page_parts, :page_id
|
37
|
+
|
38
|
+
# Create assets-table
|
39
|
+
create_table :slightcms_assets do |t|
|
40
|
+
t.string :name
|
41
|
+
t.string :content_type
|
42
|
+
t.string :filename
|
43
|
+
t.integer :size
|
44
|
+
t.timestamps
|
45
|
+
end
|
46
|
+
|
47
|
+
# Create statuses-table
|
48
|
+
create_table :slightcms_statuses do |t|
|
49
|
+
t.string :name, :null => false
|
50
|
+
t.timestamps
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.down
|
56
|
+
drop_table :slightcms_layouts
|
57
|
+
drop_table :slightcms_pages
|
58
|
+
drop_table :slightcms_page_parts
|
59
|
+
drop_table :slightcms_assets
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class SlightcmsLayout < ActiveRecord::Base
|
2
|
+
|
3
|
+
# Default order
|
4
|
+
default_scope :order => 'name'
|
5
|
+
|
6
|
+
# Associations
|
7
|
+
has_many :pages, :class_name => "SlightcmsPage"
|
8
|
+
|
9
|
+
# Validations
|
10
|
+
validates_presence_of :name
|
11
|
+
validates_uniqueness_of :name
|
12
|
+
validates_presence_of :content
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
class SlightcmsPage < ActiveRecord::Base
|
2
|
+
|
3
|
+
acts_as_tree :order => "position"
|
4
|
+
acts_as_list :scope => :parent_id
|
5
|
+
|
6
|
+
# Default order
|
7
|
+
default_scope :order => "position"
|
8
|
+
|
9
|
+
# Associations
|
10
|
+
belongs_to :layout, :class_name => :slightcms_layout
|
11
|
+
has_many :parts, :class_name => :slightcms_page_part, :dependent => :destroy
|
12
|
+
|
13
|
+
# Validations
|
14
|
+
validates_presence_of :title
|
15
|
+
validates_presence_of :slug
|
16
|
+
validates_uniqueness_of :slug, :scope => :parent_id
|
17
|
+
|
18
|
+
# Callbacks
|
19
|
+
before_create :create_path
|
20
|
+
before_validation do |record|
|
21
|
+
if record.slug.blank? && !record.title.blank?
|
22
|
+
create_slug(record)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
|
28
|
+
# Render the pages content
|
29
|
+
def render_content
|
30
|
+
content = self.layout.content
|
31
|
+
self.parts each do |part|
|
32
|
+
content.gsub!(/(#{Regexp.escape("<!-- slightcms:part:#{part.name} -->")})/mi, part.render_content)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Find a page by full path
|
37
|
+
def find_by_path(path)
|
38
|
+
find :first, :conditions => {:path => path, :published => true}, :include => [:layout, :parts]
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
# Create a unique slug for SEO purposes
|
44
|
+
def create_slug(record)
|
45
|
+
proposed_slug = record.title.downcase.gsub!(/[^a-z1-9]+/, '-')
|
46
|
+
|
47
|
+
existing = true
|
48
|
+
suffix = ""
|
49
|
+
i = 2
|
50
|
+
|
51
|
+
# Check if slug already exists
|
52
|
+
while existing != nil
|
53
|
+
existing = self.class.find :first, :conditions => {:slug => proposed_slug + suffix}
|
54
|
+
if existing
|
55
|
+
suffix = "-#{i}"
|
56
|
+
i += 1
|
57
|
+
else
|
58
|
+
self.slug = proposed_slug + suffix
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Create page's path
|
64
|
+
def create_path
|
65
|
+
self.path = parent.path + "/#{self.slug}"
|
66
|
+
end
|
67
|
+
|
68
|
+
# Generate the page's path and save the object
|
69
|
+
def create_path!
|
70
|
+
create_path
|
71
|
+
save
|
72
|
+
end
|
73
|
+
|
74
|
+
# Update the children's path
|
75
|
+
def update_children_path
|
76
|
+
children.each do |child|
|
77
|
+
create_path!
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class SlightcmsPagePart < ActiveRecord::Base
|
2
|
+
|
3
|
+
# Associations
|
4
|
+
belongs_to :page, :class_name => "SlightcmsPage"
|
5
|
+
|
6
|
+
# Validations
|
7
|
+
validates_presence_of :name
|
8
|
+
validates_uniqueness_of :name, :scope => :page_id
|
9
|
+
validates_presence_of :content
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
# Render the part's content
|
14
|
+
def render_content
|
15
|
+
RedCloth.new(self.content).to_html
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
data/lib/slightcms.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
|
2
|
+
module Slightcms
|
3
|
+
|
4
|
+
# :stopdoc:
|
5
|
+
VERSION = '0.0.4'
|
6
|
+
LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
|
7
|
+
PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
|
8
|
+
# :startdoc:
|
9
|
+
|
10
|
+
# Returns the version string for the library.
|
11
|
+
#
|
12
|
+
def self.version
|
13
|
+
VERSION
|
14
|
+
end
|
15
|
+
|
16
|
+
# Returns the library path for the module. If any arguments are given,
|
17
|
+
# they will be joined to the end of the libray path using
|
18
|
+
# <tt>File.join</tt>.
|
19
|
+
#
|
20
|
+
def self.libpath( *args )
|
21
|
+
args.empty? ? LIBPATH : ::File.join(LIBPATH, args.flatten)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Returns the lpath for the module. If any arguments are given,
|
25
|
+
# they will be joined to the end of the path using
|
26
|
+
# <tt>File.join</tt>.
|
27
|
+
#
|
28
|
+
def self.path( *args )
|
29
|
+
args.empty? ? PATH : ::File.join(PATH, args.flatten)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Utility method used to require all files ending in .rb that lie in the
|
33
|
+
# directory below this file that has the same name as the filename passed
|
34
|
+
# in. Optionally, a specific _directory_ name can be passed in such that
|
35
|
+
# the _filename_ does not have to be equivalent to the directory.
|
36
|
+
#
|
37
|
+
def self.require_all_libs_relative_to( fname, dir = nil )
|
38
|
+
dir ||= ::File.basename(fname, '.*')
|
39
|
+
search_me = ::File.expand_path(
|
40
|
+
::File.join(::File.dirname(fname), dir, '**', '*.rb'))
|
41
|
+
|
42
|
+
Dir.glob(search_me).sort.each {|rb| require rb}
|
43
|
+
end
|
44
|
+
|
45
|
+
end # module Slightcms
|
46
|
+
|
47
|
+
Slightcms.require_all_libs_relative_to(__FILE__)
|
48
|
+
require "app/models/slightcms_layout"
|
data/slightcms.gemspec
CHANGED
@@ -5,33 +5,48 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{slightcms}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Matthias Nitsch"]
|
12
|
-
s.date = %q{2010-01-
|
12
|
+
s.date = %q{2010-01-10}
|
13
|
+
s.default_executable = %q{slightcms}
|
13
14
|
s.description = %q{}
|
14
15
|
s.email = %q{matthias.nitsch@me.com}
|
16
|
+
s.executables = ["slightcms"]
|
15
17
|
s.extra_rdoc_files = [
|
16
18
|
"README.rdoc"
|
17
19
|
]
|
18
20
|
s.files = [
|
19
|
-
".
|
21
|
+
".bnsignore",
|
22
|
+
".gitignore",
|
23
|
+
"History.rdoc",
|
20
24
|
"README.rdoc",
|
21
25
|
"Rakefile",
|
22
26
|
"VERSION",
|
23
|
-
"
|
24
|
-
"
|
25
|
-
"
|
26
|
-
"
|
27
|
-
"lib/
|
28
|
-
"
|
27
|
+
"bin/slightcms",
|
28
|
+
"generators/slightcms_setup/slightcms_setup_generator.rb",
|
29
|
+
"generators/slightcms_setup/templates/INSTALL",
|
30
|
+
"generators/slightcms_setup/templates/slightcms_setup_migration.rb",
|
31
|
+
"lib/app/models/slightcms_layout.rb",
|
32
|
+
"lib/app/models/slightcms_page.rb",
|
33
|
+
"lib/app/models/slightcms_page_part.rb",
|
34
|
+
"lib/slightcms.rb",
|
35
|
+
"slightcms.gemspec",
|
36
|
+
"spec/slightcms_spec.rb",
|
37
|
+
"spec/spec_helper.rb",
|
38
|
+
"test/test_slightcms.rb"
|
29
39
|
]
|
30
40
|
s.homepage = %q{http://github.com/mnitsch/slightcms}
|
31
41
|
s.rdoc_options = ["--charset=UTF-8"]
|
32
42
|
s.require_paths = ["lib"]
|
33
43
|
s.rubygems_version = %q{1.3.5}
|
34
44
|
s.summary = %q{slightCMS is a small CMS, built for integration into existing rails applications}
|
45
|
+
s.test_files = [
|
46
|
+
"spec/slightcms_spec.rb",
|
47
|
+
"spec/spec_helper.rb",
|
48
|
+
"test/test_slightcms.rb"
|
49
|
+
]
|
35
50
|
|
36
51
|
if s.respond_to? :specification_version then
|
37
52
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
|
2
|
+
require File.expand_path(
|
3
|
+
File.join(File.dirname(__FILE__), %w[.. lib slightcms]))
|
4
|
+
|
5
|
+
Spec::Runner.configure do |config|
|
6
|
+
# == Mock Framework
|
7
|
+
#
|
8
|
+
# RSpec uses it's own mocking framework by default. If you prefer to
|
9
|
+
# use mocha, flexmock or RR, uncomment the appropriate line:
|
10
|
+
#
|
11
|
+
# config.mock_with :mocha
|
12
|
+
# config.mock_with :flexmock
|
13
|
+
# config.mock_with :rr
|
14
|
+
end
|
15
|
+
|
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slightcms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthias Nitsch
|
@@ -9,8 +9,8 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
13
|
-
default_executable:
|
12
|
+
date: 2010-01-10 00:00:00 +01:00
|
13
|
+
default_executable: slightcms
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -54,23 +54,31 @@ dependencies:
|
|
54
54
|
version:
|
55
55
|
description: ""
|
56
56
|
email: matthias.nitsch@me.com
|
57
|
-
executables:
|
58
|
-
|
57
|
+
executables:
|
58
|
+
- slightcms
|
59
59
|
extensions: []
|
60
60
|
|
61
61
|
extra_rdoc_files:
|
62
62
|
- README.rdoc
|
63
63
|
files:
|
64
|
+
- .bnsignore
|
64
65
|
- .gitignore
|
66
|
+
- History.rdoc
|
65
67
|
- README.rdoc
|
66
68
|
- Rakefile
|
67
69
|
- VERSION
|
68
|
-
-
|
69
|
-
-
|
70
|
-
-
|
71
|
-
-
|
72
|
-
- lib/
|
70
|
+
- bin/slightcms
|
71
|
+
- generators/slightcms_setup/slightcms_setup_generator.rb
|
72
|
+
- generators/slightcms_setup/templates/INSTALL
|
73
|
+
- generators/slightcms_setup/templates/slightcms_setup_migration.rb
|
74
|
+
- lib/app/models/slightcms_layout.rb
|
75
|
+
- lib/app/models/slightcms_page.rb
|
76
|
+
- lib/app/models/slightcms_page_part.rb
|
77
|
+
- lib/slightcms.rb
|
73
78
|
- slightcms.gemspec
|
79
|
+
- spec/slightcms_spec.rb
|
80
|
+
- spec/spec_helper.rb
|
81
|
+
- test/test_slightcms.rb
|
74
82
|
has_rdoc: true
|
75
83
|
homepage: http://github.com/mnitsch/slightcms
|
76
84
|
licenses: []
|
@@ -99,5 +107,7 @@ rubygems_version: 1.3.5
|
|
99
107
|
signing_key:
|
100
108
|
specification_version: 3
|
101
109
|
summary: slightCMS is a small CMS, built for integration into existing rails applications
|
102
|
-
test_files:
|
103
|
-
|
110
|
+
test_files:
|
111
|
+
- spec/slightcms_spec.rb
|
112
|
+
- spec/spec_helper.rb
|
113
|
+
- test/test_slightcms.rb
|
data/init.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'slightcms/slightcms_page'
|
@@ -1,70 +0,0 @@
|
|
1
|
-
class SlightcmsPage < ActiveRecord::Base
|
2
|
-
|
3
|
-
#has_many :elements, :class_name => "SlightcmsPageElement", :foreign_key => "page_id"
|
4
|
-
|
5
|
-
#cts_as_tree :order => "position, title"
|
6
|
-
#acts_as_list :scope => :parent_id
|
7
|
-
|
8
|
-
validates_presence_of :title
|
9
|
-
validates_uniqueness_of :slug, :scope => :parent_id
|
10
|
-
|
11
|
-
before_validation do |record|
|
12
|
-
if record.slug.blank? && !record.title.blank?
|
13
|
-
generate_slug(record)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
before_create :generate_full_path
|
18
|
-
|
19
|
-
# Render page's content to valid html
|
20
|
-
def to_html
|
21
|
-
elements = children.map {|child| child.to_html}
|
22
|
-
elements.join('\n')
|
23
|
-
end
|
24
|
-
|
25
|
-
protected
|
26
|
-
|
27
|
-
# Find a page by full path
|
28
|
-
def find_by_path(path)
|
29
|
-
find :first, :conditions => {:path => path, :published => true}
|
30
|
-
end
|
31
|
-
|
32
|
-
# Generate a unique slug for seo purposes
|
33
|
-
def generate_slug(record)
|
34
|
-
proposed_slug = record.title.downcase.gsub!(/[^a-z1-9]+/, '-')
|
35
|
-
|
36
|
-
existing = true
|
37
|
-
suffix = ""
|
38
|
-
i = 1
|
39
|
-
|
40
|
-
# Check if slug already exists
|
41
|
-
while existing != nil
|
42
|
-
existing = self.class.find :first, :conditions => {:slug => proposed_slug + suffix}
|
43
|
-
if existing
|
44
|
-
suffix = "-#{i}"
|
45
|
-
i += 1
|
46
|
-
else
|
47
|
-
self.slug = proposed_slug + suffix
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
# Generate the page's full path
|
53
|
-
def generate_path
|
54
|
-
self.path = parent_node.path + "/#{self.slug}"
|
55
|
-
end
|
56
|
-
|
57
|
-
# Generate the page's full path and save the object
|
58
|
-
def generate_path!
|
59
|
-
generate_path
|
60
|
-
save
|
61
|
-
end
|
62
|
-
|
63
|
-
# Update the children's path
|
64
|
-
def update_children_path
|
65
|
-
children.each do |child|
|
66
|
-
generate_path!
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'redcloth'
|
2
|
-
require 'acts-as-list'
|
3
|
-
|
4
|
-
class SlightcmsPageElement < ActiveRecord::Base
|
5
|
-
|
6
|
-
belongs_to :page, :class_name => "SlightcmsPage", :foreign_key => "page_id"
|
7
|
-
|
8
|
-
validates_presence_of :title
|
9
|
-
validates_presence_of :content
|
10
|
-
|
11
|
-
acts_as_list :scope => :page_id
|
12
|
-
|
13
|
-
after_save :expire_parent_page_cache
|
14
|
-
|
15
|
-
# Render the element's content into valid html
|
16
|
-
def to_html
|
17
|
-
RedCloth.new(self.content).to_html
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
class SlightcmsPageElementSweeper < ActionController::Caching::Sweeper
|
2
|
-
|
3
|
-
observe SlightcmsPageElement
|
4
|
-
|
5
|
-
def after_save(element)
|
6
|
-
expire_cache(element)
|
7
|
-
end
|
8
|
-
|
9
|
-
def after_destroy(element)
|
10
|
-
expire_cache(element)
|
11
|
-
end
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
# Expire page cache for given record
|
16
|
-
def expire_cache(record)
|
17
|
-
expire_page(:controller => :slightcms_pages, :action => :show, :path => record.page.full_path)
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
class SlightcmsPageSweeper < ActionController::Caching::Sweeper
|
2
|
-
|
3
|
-
observe SlightcmsPage
|
4
|
-
|
5
|
-
def before_save(page)
|
6
|
-
expire_cache(page)
|
7
|
-
end
|
8
|
-
|
9
|
-
def after_destroy(page)
|
10
|
-
expire_cache(page)
|
11
|
-
end
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
# Expire page cache for given record
|
16
|
-
def expire_cache(record)
|
17
|
-
expire_page(:controller => :slightcms_pages, :action => :show, :path => record.full_path)
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|