comatose 2.0.1 → 2.0.5
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.
- data/CHANGELOG +19 -0
- data/INSTALL +5 -4
- data/MANIFEST +1 -1
- data/README.markdown +159 -0
- data/Rakefile +55 -1
- data/about.yml +1 -1
- data/bin/comatose +38 -35
- data/comatose.gemspec +5 -5
- data/generators/comatose_migration/comatose_migration_generator.rb +15 -0
- data/install.rb +3 -1
- data/lib/comatose/configuration.rb +1 -0
- data/lib/comatose/version.rb +2 -2
- data/lib/comatose_admin_controller.rb +46 -0
- data/lib/comatose_controller.rb +4 -7
- data/resources/public/stylesheets/comatose_admin.css +25 -2
- data/tasks/comatose.rake +1 -1
- data/test/functional/comatose_admin_controller_test.rb +2 -0
- data/views/comatose_admin/index.html.erb +11 -0
- data/views/layouts/comatose_admin.html.erb +25 -2
- metadata +6 -6
- data/README.rdoc +0 -148
data/CHANGELOG
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
- version: 2.0.5 (beta)
|
2
|
+
- Added configuration option for importing/exporting pages from admin: `config.allow_import_export = true|false`, `true` is the default at the moment
|
3
|
+
- Reworked the UI for import/export a little bit
|
4
|
+
- Added LINK option to `test_harness` rake task to symlink the comatose plugin directory instead of copying it
|
5
|
+
- Updated manifest and gemspec
|
6
|
+
|
7
|
+
- version: 2.0.4 (beta)
|
8
|
+
- Added a rake task to generate a test_harness (for use in development). From the comatose directory, run: `rake test_harness TARGET=../comatose_test_harness`. This will create an empty rails app, copy this working folder over to vendor/plugins/comatose, install acts_as_list and acts_as_tree, and run any setup needed, like script/generate comatose_migration and rake db:migrate.
|
9
|
+
- Bugfix in tasks/comatose.rake
|
10
|
+
- Comatose migration generator now adds the default comatose routes (`map.comatose_admin` and `map.comatose_root ''`) to the top of the routes.rb file. POSSIBLE GOTCHA: `map.comatose_root` should be moved to the bottom of the routes file!
|
11
|
+
|
12
|
+
- version: 2.0.3 (beta)
|
13
|
+
- Moving from alpha to beta!
|
14
|
+
- staugaard: Added import and export of pages in admin controller
|
15
|
+
|
16
|
+
- version: 2.0.2 (alpha)
|
17
|
+
- staugaard: Added "unloadable" to ComatoseController (problems with ActsAsAuthenticated-integration similar to http://tinyurl.com/6caz5r)
|
18
|
+
- jcnetdev: Tweaking gemspec
|
19
|
+
|
1
20
|
- version: 2.0.1 (alpha)
|
2
21
|
- Merged changes from andreas (http://github.com/andreas)...
|
3
22
|
- andreas: Fixed comatose:admin:customize raketask (seems plugin_path was wrong, and made use of mkdir_p to avoid "File exists"-errors.)
|
data/INSTALL
CHANGED
@@ -3,17 +3,18 @@
|
|
3
3
|
Welcome to Comatose!
|
4
4
|
======================
|
5
5
|
|
6
|
+
Be sure and install the acts_as_tree and acts_as_list plugins!
|
7
|
+
|
6
8
|
From here you'll want to run:
|
7
9
|
|
8
10
|
$ ./script/generate comatose_migration
|
11
|
+
|
12
|
+
NOTE: The generator will add the default comatose routes to the top of your routes.rb file. You'll want to move `map.comatose_root ''` to the bottom of your routes block.
|
9
13
|
|
10
14
|
When that's finished, run:
|
11
15
|
|
12
16
|
$ rake db:migrate
|
13
17
|
|
14
|
-
That's it for the Comatose setup!
|
15
|
-
|
16
|
-
map.comatose_admin
|
17
|
-
map.comatose_root ''
|
18
|
+
That's it for the Comatose setup!
|
18
19
|
|
19
20
|
Be sure to read the README file, and the 'Getting Started' guide. They are located at vendor/plugins/comatose/README and http://comatose.rubyforge.org/getting-started-guide respectively.
|
data/MANIFEST
CHANGED
data/README.markdown
ADDED
@@ -0,0 +1,159 @@
|
|
1
|
+
# Comatose
|
2
|
+
|
3
|
+
* Version: 2.0.5 (beta)
|
4
|
+
* Author: M@ McCray
|
5
|
+
* Website: comatose.rubyforge.org
|
6
|
+
* Email: matt at elucidata dot net
|
7
|
+
|
8
|
+
|
9
|
+
*Comatose* is a micro CMS designed for being embedded into existing Rails
|
10
|
+
applications.
|
11
|
+
|
12
|
+
It's intended for simple CMS support. Comatose supports
|
13
|
+
|
14
|
+
* Nested pages
|
15
|
+
* Versioning
|
16
|
+
* Page markup in Textile, Markdown, RDoc, or easily add your own
|
17
|
+
* Page processing through Liquid or ERb
|
18
|
+
* Generators for easy installation/migration
|
19
|
+
* Completely self-contained within plugin folder
|
20
|
+
|
21
|
+
It's meant to be lean, mean, easily embedded, and easy to re-skin for
|
22
|
+
existing applications. If you need something more, I would recommend
|
23
|
+
looking into Radiant.
|
24
|
+
|
25
|
+
For more information, see the [Getting Started][] guide.
|
26
|
+
|
27
|
+
### Requirements
|
28
|
+
|
29
|
+
* Rails 2+ (2.1)
|
30
|
+
* `acts_as_list` and `acts_as_tree` plugins are required (at the moment)
|
31
|
+
|
32
|
+
|
33
|
+
### Development Notes
|
34
|
+
|
35
|
+
*NOTE*: This is an active branch of Comatose that is built specifically for Rails 2.1.
|
36
|
+
I will *probably* remove any legacy support.
|
37
|
+
|
38
|
+
* Make comatose fully self-contained, which means removing `acts_as_(tree|list)`
|
39
|
+
* Improve `ComatoseAdminController` to reduce number of DB calls for building the page tree
|
40
|
+
* Move to gem plugin
|
41
|
+
* `Comatose.configure` needs to be an initializer (update docs)
|
42
|
+
* Go through bugs on 1x branch from google code and ensure they are fixed
|
43
|
+
* Give access to all the default rails helpers to Comatose Pages by default?
|
44
|
+
* UI refresh (nothing major, just some cleanup).
|
45
|
+
* RESTful goodness.
|
46
|
+
* Support XML/JSON responses from `ComatoseController` and `ComatoseAdminController`.
|
47
|
+
* Support for static rendering (for generating sites like this blog).
|
48
|
+
|
49
|
+
### Installation
|
50
|
+
|
51
|
+
*Note*: See the 'Upgrading' section if you already have an older version of
|
52
|
+
the comatose plugin installed.
|
53
|
+
|
54
|
+
$ ./script/plugin install git://github.com/darthapo/comatose.git
|
55
|
+
$ ./script/generate comatose_migration
|
56
|
+
$ rake db:migrate
|
57
|
+
|
58
|
+
Open your `routes.rb` and move the following comatose route to the
|
59
|
+
bottom:
|
60
|
+
|
61
|
+
map.comatose_root ''
|
62
|
+
|
63
|
+
That's it, you're ready to go! You should be able to browse to
|
64
|
+
http://127.0.0.1:3000/**comatose_admin** and start adding pages to your CMS.
|
65
|
+
Browsing to http://127.0.0.1:3000/ will render your comatose pages if
|
66
|
+
routing doesn't match any of your controllers.
|
67
|
+
|
68
|
+
|
69
|
+
### Upgrading
|
70
|
+
|
71
|
+
*NOTE*: This is an experimental 2.0 branch, so upgrading is possible at
|
72
|
+
the moment, but these instructions may not work for much longer.
|
73
|
+
|
74
|
+
If you are upgrading from an older version of Comatose (version 0.3,
|
75
|
+
0.4, 0.5, or 0.6), then you will need to re-install the comatose
|
76
|
+
plugin and run:
|
77
|
+
|
78
|
+
$ ./script/plugin remove comatose
|
79
|
+
$ ./script/plugin install comatose
|
80
|
+
$ ./script/generate comatose_migration --upgrade --from=VERSION
|
81
|
+
$ rake migrate
|
82
|
+
|
83
|
+
*Note*: Be sure to set the `--from` parameter to the version of
|
84
|
+
Comatose you last had installed. Also, you only need to first two digits,
|
85
|
+
including the dot, of the version you are upgrading from. For example, if
|
86
|
+
you're upgrading from version 0.6.9 you can use:
|
87
|
+
|
88
|
+
$ ./script/generate comatose_migration --upgrade --from=0.6
|
89
|
+
|
90
|
+
This will create the upgrade migration(s) for you. It just adds the new
|
91
|
+
fields, so you can keep the original migration comatose created.
|
92
|
+
|
93
|
+
|
94
|
+
### Configuration
|
95
|
+
|
96
|
+
You configure Comatose in your `config/environment.rb` file. Here is an example
|
97
|
+
configuration block:
|
98
|
+
|
99
|
+
Comatose.configure do |config|
|
100
|
+
# Sets the text in the Admin UI's title area
|
101
|
+
config.admin_title = "Site Content"
|
102
|
+
config.admin_sub_title = "Content for the rest of us..."
|
103
|
+
end
|
104
|
+
|
105
|
+
Here's an example that uses the `AuthenticationSystem` as generated by the
|
106
|
+
`restful_authentication` plugin:
|
107
|
+
|
108
|
+
Comatose.configure do |config|
|
109
|
+
# Includes AuthenticationSystem in the ComatoseController
|
110
|
+
config.includes << :authenticated_system
|
111
|
+
|
112
|
+
# admin
|
113
|
+
config.admin_title = "Comatose - TESTING"
|
114
|
+
config.admin_sub_title = "Content for the rest of us..."
|
115
|
+
|
116
|
+
# Includes AuthenticationSystem in the ComatoseAdminController
|
117
|
+
config.admin_includes << :authenticated_system
|
118
|
+
|
119
|
+
# Calls :login_required as a before_filter
|
120
|
+
config.admin_authorization = :login_required
|
121
|
+
# Returns the author name (login, in this case) for the current user
|
122
|
+
config.admin_get_author do
|
123
|
+
current_user.login
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
|
128
|
+
### Extra Credit
|
129
|
+
|
130
|
+
This plugin includes the work of many wonderful contributors to the Railsphere.
|
131
|
+
Following are the specific libraries that are distributed with Comatose. If I've
|
132
|
+
missed someone/something please let me know.
|
133
|
+
|
134
|
+
* [Liquid][] by [Tobias Luetke][]
|
135
|
+
* [RedCloth][] by [_why][]
|
136
|
+
* [Acts as Versioned][] by [Rick Olsen][]
|
137
|
+
* [Behaviors][] by Atomic Object LLC -- very nice BDD-like testing library
|
138
|
+
|
139
|
+
### Feedback
|
140
|
+
|
141
|
+
I’ve released Comatose under the MIT license. Which basically means you
|
142
|
+
can use it however you want.
|
143
|
+
|
144
|
+
Don't forget to read the [Getting Started][] guide located on the RubyForge
|
145
|
+
project site.
|
146
|
+
|
147
|
+
If you like it, hate it, or have some ideas for new features, let me know!
|
148
|
+
|
149
|
+
matt at elucidata dot net
|
150
|
+
|
151
|
+
|
152
|
+
[Getting Started]: http://comatose.rubyforge.org/getting-started-guide
|
153
|
+
[Liquid]: http://home.leetsoft.com/liquid
|
154
|
+
[Tobias Luetke]: http://blog.leetsoft.com
|
155
|
+
[RedCloth]: http://whytheluckystiff.net/ruby/redcloth
|
156
|
+
[_why]: http://whytheluckystiff.net
|
157
|
+
[Acts as Versioned]: http://ar-versioned.rubyforge.org
|
158
|
+
[Rick Olsen]: http://weblog.techno-weenie.net
|
159
|
+
[Behaviors]: http://behaviors.rubyforge.org
|
data/Rakefile
CHANGED
@@ -77,7 +77,7 @@ EOGS
|
|
77
77
|
puts "Update GEMSPEC"
|
78
78
|
end
|
79
79
|
|
80
|
-
desc "Builds the admin
|
80
|
+
desc "Builds the admin customizable layout, the embedded layout have the JS and CSS inlined"
|
81
81
|
task :build do
|
82
82
|
require 'erb'
|
83
83
|
|
@@ -120,3 +120,57 @@ task :build do
|
|
120
120
|
# That's it -- we're done.
|
121
121
|
puts "Finished."
|
122
122
|
end
|
123
|
+
|
124
|
+
|
125
|
+
desc "Creates an empty rails application for use as a test harness"
|
126
|
+
task :test_harness do
|
127
|
+
target = ENV['TARGET']
|
128
|
+
sym_link = (ENV['LINK'].to_s == 'true')
|
129
|
+
if target.nil?
|
130
|
+
puts "You must specify a TARGET for the test harness"
|
131
|
+
exit(1)
|
132
|
+
else
|
133
|
+
target = File.expand_path target
|
134
|
+
if target == File.expand_path(File.dirname(__FILE__))
|
135
|
+
puts "You must specify a folder other than this one."
|
136
|
+
exit(1)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
comatose_plugin_path = target / 'vendor' / 'plugins' / 'comatose'
|
140
|
+
|
141
|
+
puts "Creating test harness at #{ target }"
|
142
|
+
run_sh "rails -d sqlite3 #{target}"
|
143
|
+
if sym_link
|
144
|
+
run_sh "ln -s #{ File.dirname(__FILE__) } #{ comatose_plugin_path }"
|
145
|
+
else
|
146
|
+
run_sh "cp -r #{ File.dirname(__FILE__) }/ #{ comatose_plugin_path }"
|
147
|
+
end
|
148
|
+
run_sh "ruby #{ comatose_plugin_path / 'install.rb' }"
|
149
|
+
run_sh "ruby #{ target / 'script' / 'generate' } comatose_migration"
|
150
|
+
run_sh "ruby #{ comatose_plugin_path / 'bin' / 'comatose' } --plugin #{ target }"
|
151
|
+
run_sh "cd #{ target } && rake db:migrate"
|
152
|
+
|
153
|
+
run_sh "cp #{ target / 'db' / 'development.sqlite3' } #{target / 'db' / 'test.sqlite3'}"
|
154
|
+
run_sh "rm #{ target / 'public' / 'index.html' }"
|
155
|
+
run_sh "cp #{ comatose_plugin_path / 'views' / 'layouts' / 'comatose_content.html.erb' } #{ target / 'app' / 'views' / 'layouts' / 'comatose_content.html.erb' }"
|
156
|
+
|
157
|
+
# Remove me soon!
|
158
|
+
run_sh "cd #{ target } && ruby #{ target / 'script' / 'plugin' } install acts_as_tree"
|
159
|
+
run_sh "cd #{ target } && ruby #{ target / 'script' / 'plugin' } install acts_as_list"
|
160
|
+
|
161
|
+
puts "Done."
|
162
|
+
end
|
163
|
+
|
164
|
+
class String
|
165
|
+
def /(str)
|
166
|
+
File.join(self, str)
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
def run_sh(command)
|
171
|
+
puts "-------------------------------------------------------------------------------"
|
172
|
+
puts "Running `#{command}`:"
|
173
|
+
sh command
|
174
|
+
puts
|
175
|
+
puts
|
176
|
+
end
|
data/about.yml
CHANGED
data/bin/comatose
CHANGED
@@ -13,21 +13,21 @@ begin
|
|
13
13
|
|
14
14
|
opts.on("-g", "--gem", "Initialize to run from gem (DEFAULT)") do |s|
|
15
15
|
options[:action] = :gem
|
16
|
-
puts "GEM"
|
16
|
+
puts "Configuring to run from GEM..."
|
17
17
|
end
|
18
18
|
|
19
19
|
opts.on("-p", "--plugin", "Install as plugin") do |s|
|
20
20
|
options[:action] = :plugin
|
21
|
-
puts "PLUGIN"
|
21
|
+
puts "Configuring to run from PLUGIN..."
|
22
22
|
end
|
23
23
|
|
24
|
-
opts.on("-u", "--update", "Update current installation (CURRENTLY UNIMPLEMENTED)") do |s|
|
25
|
-
|
26
|
-
|
27
|
-
end
|
24
|
+
# opts.on("-u", "--update", "Update current installation (CURRENTLY UNIMPLEMENTED)") do |s|
|
25
|
+
# options[:action] = :update
|
26
|
+
# puts "UPDATE"
|
27
|
+
# end
|
28
28
|
|
29
29
|
opts.separator ""
|
30
|
-
|
30
|
+
opts.separator "Common options:"
|
31
31
|
|
32
32
|
# No argument, shows at tail. This will print an options summary.
|
33
33
|
# Try it and see!
|
@@ -71,34 +71,37 @@ comatose_initializer_path = RAILS_ROOT / 'config' / 'initializers' / 'comatose.r
|
|
71
71
|
unless File.exists?( comatose_initializer_path )
|
72
72
|
File.open(comatose_initializer_path, 'w') do |f|
|
73
73
|
f.write <<-EOT
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
74
|
+
require 'comatose'
|
75
|
+
|
76
|
+
# 1.) You should add the following snippet to your environment.rb too, probably...
|
77
|
+
#
|
78
|
+
# gem 'comatose'
|
79
|
+
#
|
80
|
+
# 2.) Following is an example configuration block for Comatose:
|
81
|
+
#
|
82
|
+
Comatose.configure do |config|
|
83
|
+
# Includes AuthenticationSystem in the ComatoseController
|
84
|
+
#config.includes << :authenticated_system
|
85
|
+
|
86
|
+
# admin
|
87
|
+
#config.admin_title = "My Content"
|
88
|
+
#config.admin_sub_title = "Content for the rest of us..."
|
89
|
+
|
90
|
+
# Includes AuthenticationSystem in the ComatoseAdminController
|
91
|
+
#config.admin_includes << :authenticated_system
|
92
|
+
|
93
|
+
# Calls :login_required as a before_filter
|
94
|
+
#config.admin_authorization = :login_required
|
95
|
+
# Returns the author name (login, in this case) for the current user
|
96
|
+
#config.admin_get_author do
|
97
|
+
# current_user.login
|
98
|
+
#end
|
99
|
+
|
100
|
+
# Allows users to import and export pages (in YAML format)
|
101
|
+
#config.allow_import_export = true
|
102
|
+
|
103
|
+
# See the getting started guide at http://comatose.rubyforge.org for more...
|
104
|
+
end
|
102
105
|
EOT
|
103
106
|
end
|
104
107
|
else
|
data/comatose.gemspec
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# Generated on Tue May 20 20:13:12 -0500 2008
|
2
2
|
Gem::Specification.new do |s|
|
3
3
|
s.name = "comatose"
|
4
|
-
s.version = "2.0.
|
5
|
-
s.date = "2008-
|
4
|
+
s.version = "2.0.5"
|
5
|
+
s.date = "2008-10-31" # 2008-05-20
|
6
6
|
s.summary = "Micro CMS designed for being embedded into existing Rails applications"
|
7
7
|
s.email = "matt@elucidata.net"
|
8
8
|
s.rubyforge_project = 'comatose'
|
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
"INSTALL",
|
18
18
|
"LICENSE",
|
19
19
|
"MANIFEST",
|
20
|
-
"README.
|
20
|
+
"README.markdown",
|
21
21
|
"Rakefile",
|
22
22
|
"SPECS",
|
23
23
|
"about.yml",
|
@@ -107,7 +107,7 @@ Gem::Specification.new do |s|
|
|
107
107
|
"test/unit/processing_context_test.rb",
|
108
108
|
"test/unit/text_filters_test.rb"]
|
109
109
|
|
110
|
-
s.rdoc_options = ["--main", "README.
|
111
|
-
s.extra_rdoc_files = %w(README.
|
110
|
+
s.rdoc_options = ["--main", "README.markdown"]
|
111
|
+
s.extra_rdoc_files = %w(README.markdown CHANGELOG SPECS LICENSE)
|
112
112
|
#s.add_dependency("mime-types", ["> 0.0.0"])
|
113
113
|
end
|
@@ -1,3 +1,15 @@
|
|
1
|
+
class Rails::Generator::Commands::Create
|
2
|
+
def new_route(name, options='')
|
3
|
+
sentinel = 'ActionController::Routing::Routes.draw do |map|'
|
4
|
+
logger.route "map.#{name} #{options}"
|
5
|
+
unless options[:pretend]
|
6
|
+
gsub_file 'config/routes.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
|
7
|
+
"#{match}\n map.#{name} #{options}\n"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
1
13
|
class ComatoseMigrationGenerator < Rails::Generator::Base
|
2
14
|
|
3
15
|
|
@@ -38,6 +50,8 @@ class ComatoseMigrationGenerator < Rails::Generator::Base
|
|
38
50
|
case @mode
|
39
51
|
when :new
|
40
52
|
m.migration_template 'migration.rb', 'db/migrate', :migration_file_name=>'add_comatose_support', :assigns=>{:class_name=>'AddComatoseSupport'}
|
53
|
+
m.new_route 'comatose_root', "''"
|
54
|
+
m.new_route 'comatose_admin'
|
41
55
|
|
42
56
|
when :upgrade
|
43
57
|
from = @upgrade_from
|
@@ -57,3 +71,4 @@ class ComatoseMigrationGenerator < Rails::Generator::Base
|
|
57
71
|
end
|
58
72
|
end
|
59
73
|
end
|
74
|
+
|
data/install.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
1
3
|
# Copy the images (*.gif) into RAILS_ROOT/public/images/comatose
|
2
|
-
RAILS_ROOT = File.join(File.dirname(__FILE__), '../../../')
|
4
|
+
RAILS_ROOT = File.expand_path( File.join(File.dirname(__FILE__), '../../../') )
|
3
5
|
|
4
6
|
unless FileTest.exist? File.join(RAILS_ROOT, 'public', 'images', 'comatose')
|
5
7
|
FileUtils.mkdir( File.join(RAILS_ROOT, 'public', 'images', 'comatose') )
|
@@ -36,6 +36,7 @@ module Comatose
|
|
36
36
|
attr_accessor_with_default :hidden_meta_fields, []
|
37
37
|
attr_accessor_with_default :helpers, []
|
38
38
|
attr_accessor_with_default :includes, []
|
39
|
+
attr_accessor_with_default :allow_import_export, true
|
39
40
|
|
40
41
|
# 'Blockable' setters
|
41
42
|
blockable_attr_accessor :authorization
|
data/lib/comatose/version.rb
CHANGED
@@ -140,6 +140,25 @@ class ComatoseAdminController < ActionController::Base
|
|
140
140
|
redirect_to :controller=>self.controller_name, :action=>'index'
|
141
141
|
end
|
142
142
|
|
143
|
+
def export
|
144
|
+
if Comatose.config.allow_import_export
|
145
|
+
send_data(page_to_hash(ComatosePage.root).to_yaml, :disposition => 'attachment', :type => 'text/yaml', :filename => "comatose-pages.yml")
|
146
|
+
else
|
147
|
+
flash[:notice] = "Export is not allowed"
|
148
|
+
redirect_to :controller=>self.controller_name, :action=>'index'
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def import
|
153
|
+
if Comatose.config.allow_import_export
|
154
|
+
data = YAML::load(params[:import_file])
|
155
|
+
hash_to_page_tree(data, ComatosePage.root)
|
156
|
+
flash[:notice] = "Pages Imported Successfully"
|
157
|
+
else
|
158
|
+
flash[:notice] = "Import isn't allowed"
|
159
|
+
end
|
160
|
+
redirect_to :controller=>self.controller_name, :action=>'index'
|
161
|
+
end
|
143
162
|
|
144
163
|
protected
|
145
164
|
|
@@ -345,5 +364,32 @@ protected
|
|
345
364
|
end
|
346
365
|
end
|
347
366
|
|
367
|
+
private
|
368
|
+
|
369
|
+
def page_to_hash(page)
|
370
|
+
data = page.attributes.clone
|
371
|
+
# Pull out the specific, or unnecessary fields
|
372
|
+
%w(id parent_id updated_on author position version created_on full_path).each {|key| data.delete(key)}
|
373
|
+
if !page.children.empty?
|
374
|
+
data['children'] = []
|
375
|
+
page.children.each do |child|
|
376
|
+
data['children'] << page_to_hash(child)
|
377
|
+
end
|
378
|
+
end
|
379
|
+
data
|
380
|
+
end
|
348
381
|
|
382
|
+
def hash_to_page_tree(hsh, page)
|
383
|
+
child_ary = hsh.delete 'children'
|
384
|
+
page.update_attributes(hsh)
|
385
|
+
page.save
|
386
|
+
child_ary.each do |child_hsh|
|
387
|
+
if child_pg = page.children.find_by_slug( child_hsh['slug'] )
|
388
|
+
hash_to_page_tree( child_hsh, child_pg )
|
389
|
+
else
|
390
|
+
hash_to_page_tree( child_hsh, page.children.create )
|
391
|
+
end
|
392
|
+
end if child_ary
|
393
|
+
end
|
394
|
+
|
349
395
|
end
|
data/lib/comatose_controller.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# The controller for serving cms content...
|
2
2
|
class ComatoseController < ActionController::Base
|
3
|
+
unloadable
|
3
4
|
|
4
5
|
before_filter :handle_authorization, :set_content_type
|
5
6
|
after_filter :cache_cms_page
|
@@ -83,11 +84,7 @@ protected
|
|
83
84
|
# Returns a path to plugin layout, if it's unspecified, otherwise
|
84
85
|
# a path to an application layout...
|
85
86
|
def get_page_layout
|
86
|
-
|
87
|
-
File.join(plugin_layout_path, params[:layout])
|
88
|
-
else
|
89
|
-
params[:layout]
|
90
|
-
end
|
87
|
+
params[:layout]
|
91
88
|
end
|
92
89
|
|
93
90
|
# An after_filter implementing page caching if it's enabled, globally,
|
@@ -111,8 +108,8 @@ protected
|
|
111
108
|
response.headers["Content-Type"] = "text/html; charset=#{Comatose.config.content_type}" unless Comatose.config.content_type.nil? or response.headers['Status'] == '404 Not Found'
|
112
109
|
end
|
113
110
|
|
114
|
-
|
115
|
-
|
111
|
+
COMATOSE_VIEW_PATH = File.join(RAILS_ROOT, 'vendor', 'plugins', 'comatose', 'views')
|
112
|
+
ActionController::Base.append_view_path(COMATOSE_VIEW_PATH) unless ActionController::Base.view_paths.include?(COMATOSE_VIEW_PATH)
|
116
113
|
|
117
114
|
# Include any, well, includes...
|
118
115
|
Comatose.config.includes.each do |mod|
|
@@ -60,8 +60,9 @@ BODY {
|
|
60
60
|
#content .action A {
|
61
61
|
font-weight: bold;
|
62
62
|
text-decoration: none;
|
63
|
-
color:
|
64
|
-
border-bottom: 1px solid
|
63
|
+
color: navy;
|
64
|
+
border-bottom: 1px solid blue;
|
65
|
+
margin-left: 15px;
|
65
66
|
}
|
66
67
|
#content .action A:hover {
|
67
68
|
color: red;
|
@@ -70,6 +71,28 @@ BODY {
|
|
70
71
|
#content .page-header {
|
71
72
|
color: gray;
|
72
73
|
}
|
74
|
+
#import_form {
|
75
|
+
position: fixed;
|
76
|
+
right: 75px;
|
77
|
+
border: 3px solid gray !important;
|
78
|
+
-webkit-border-radius: 10px;
|
79
|
+
-moz-border-radius: 10px;
|
80
|
+
background: #FFF;
|
81
|
+
padding: 15px;
|
82
|
+
}
|
83
|
+
#import_form FORM {
|
84
|
+
display: inline;
|
85
|
+
margin: 0px;
|
86
|
+
padding: 0px;
|
87
|
+
}
|
88
|
+
#import_form A {
|
89
|
+
color: maroon !important;
|
90
|
+
border-bottom: 1px solid gray !important;
|
91
|
+
}
|
92
|
+
#import_form A:hover {
|
93
|
+
color: red !important;
|
94
|
+
border-bottom: 1px solid red !important;
|
95
|
+
}
|
73
96
|
|
74
97
|
/* Page Listing */
|
75
98
|
#content .tree-controller {
|
data/tasks/comatose.rake
CHANGED
@@ -16,6 +16,8 @@ class ComatoseAdminControllerTest < Test::Unit::TestCase
|
|
16
16
|
@controller = ComatoseAdminController.new
|
17
17
|
@request = ActionController::TestRequest.new
|
18
18
|
@response = ActionController::TestResponse.new
|
19
|
+
Comatose.config.admin_get_author = nil
|
20
|
+
Comatose.config.admin_authorization = nil
|
19
21
|
end
|
20
22
|
|
21
23
|
should "show the index action" do
|
@@ -1,5 +1,16 @@
|
|
1
1
|
<div class="action">
|
2
2
|
<%= link_to 'Clear Page Cache', :controller=>controller.controller_name, :action=>'expire_page_cache' %>
|
3
|
+
<% if Comatose.config.allow_import_export %>
|
4
|
+
<%= link_to 'Import', '#', :id => 'import_link2', :onclick => "$('import_form').setStyle({display: 'inline'}); return false;" %>
|
5
|
+
<%= link_to 'Export', :controller=>controller.controller_name, :action=>'export' %>
|
6
|
+
<div id="import_form" style="display: none;">
|
7
|
+
<% form_tag(url_for(:action => 'import'), :multipart => true) do %>
|
8
|
+
<%= file_field_tag 'import_file' %>
|
9
|
+
<%= submit_tag 'Upload and Import' %>
|
10
|
+
<a href="#" onclick="$('import_form').hide(); return false;">Cancel</a>
|
11
|
+
<% end %>
|
12
|
+
</div>
|
13
|
+
<% end %>
|
3
14
|
</div>
|
4
15
|
|
5
16
|
<h1>
|
@@ -67,8 +67,9 @@ BODY {
|
|
67
67
|
#content .action A {
|
68
68
|
font-weight: bold;
|
69
69
|
text-decoration: none;
|
70
|
-
color:
|
71
|
-
border-bottom: 1px solid
|
70
|
+
color: navy;
|
71
|
+
border-bottom: 1px solid blue;
|
72
|
+
margin-left: 15px;
|
72
73
|
}
|
73
74
|
#content .action A:hover {
|
74
75
|
color: red;
|
@@ -77,6 +78,28 @@ BODY {
|
|
77
78
|
#content .page-header {
|
78
79
|
color: gray;
|
79
80
|
}
|
81
|
+
#import_form {
|
82
|
+
position: fixed;
|
83
|
+
right: 75px;
|
84
|
+
border: 3px solid gray !important;
|
85
|
+
-webkit-border-radius: 10px;
|
86
|
+
-moz-border-radius: 10px;
|
87
|
+
background: #FFF;
|
88
|
+
padding: 15px;
|
89
|
+
}
|
90
|
+
#import_form FORM {
|
91
|
+
display: inline;
|
92
|
+
margin: 0px;
|
93
|
+
padding: 0px;
|
94
|
+
}
|
95
|
+
#import_form A {
|
96
|
+
color: maroon !important;
|
97
|
+
border-bottom: 1px solid gray !important;
|
98
|
+
}
|
99
|
+
#import_form A:hover {
|
100
|
+
color: red !important;
|
101
|
+
border-bottom: 1px solid red !important;
|
102
|
+
}
|
80
103
|
|
81
104
|
/* Page Listing */
|
82
105
|
#content .tree-controller {
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 2
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 2.0.
|
8
|
+
- 5
|
9
|
+
version: 2.0.5
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- M@ McCray
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2008-
|
17
|
+
date: 2008-10-31 00:00:00 +11:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|
@@ -25,7 +25,7 @@ executables:
|
|
25
25
|
extensions: []
|
26
26
|
|
27
27
|
extra_rdoc_files:
|
28
|
-
- README.
|
28
|
+
- README.markdown
|
29
29
|
- CHANGELOG
|
30
30
|
- SPECS
|
31
31
|
- LICENSE
|
@@ -34,7 +34,7 @@ files:
|
|
34
34
|
- INSTALL
|
35
35
|
- LICENSE
|
36
36
|
- MANIFEST
|
37
|
-
- README.
|
37
|
+
- README.markdown
|
38
38
|
- Rakefile
|
39
39
|
- SPECS
|
40
40
|
- about.yml
|
@@ -118,7 +118,7 @@ licenses: []
|
|
118
118
|
post_install_message:
|
119
119
|
rdoc_options:
|
120
120
|
- --main
|
121
|
-
- README.
|
121
|
+
- README.markdown
|
122
122
|
require_paths:
|
123
123
|
- lib
|
124
124
|
required_ruby_version: !ruby/object:Gem::Requirement
|
data/README.rdoc
DELETED
@@ -1,148 +0,0 @@
|
|
1
|
-
= Comatose
|
2
|
-
|
3
|
-
Version:: 2.0 (uber-alpha)
|
4
|
-
Author:: M@ McCray
|
5
|
-
Website:: comatose.rubyforge.org
|
6
|
-
Email:: matt at elucidata dot net
|
7
|
-
|
8
|
-
|
9
|
-
*Comatose* is a micro CMS designed for being embedded into existing Rails
|
10
|
-
applications.
|
11
|
-
|
12
|
-
It's intended for simple CMS support. Comatose supports
|
13
|
-
|
14
|
-
* Nested pages
|
15
|
-
* Versioning
|
16
|
-
* Page markup in Textile, Markdown, RDoc, or easily add your own
|
17
|
-
* Page processing through Liquid or ERb
|
18
|
-
* Generators for easy installation/migration
|
19
|
-
* Completely self-contained within plugin folder
|
20
|
-
|
21
|
-
It's meant to be lean, mean, easily embedded, and easy to re-skin for
|
22
|
-
existing applications. If you need something more, I would recommend
|
23
|
-
looking into Radiant.
|
24
|
-
|
25
|
-
For more information, see the 'Getting Started' guide: http://comatose.rubyforge.org
|
26
|
-
|
27
|
-
=== Requirements
|
28
|
-
|
29
|
-
* Rails 2+ (2.1)
|
30
|
-
* <tt>acts_as_list</tt> and <tt>acts_as_tree</tt> plugins are required
|
31
|
-
|
32
|
-
|
33
|
-
=== Development Notes
|
34
|
-
|
35
|
-
*NOTE*: This is an active branch of Comatose that is built specifically for Rails 2.1.
|
36
|
-
I will *probably* remove any legacy support.
|
37
|
-
|
38
|
-
* Make comatose fully self-contained, which means removing acts_as_(tree|list)
|
39
|
-
* Move to gem plugin
|
40
|
-
* Comatose.configure needs to be an initializer (update docs)
|
41
|
-
* Go through bugs on 1x branch from google code and ensure they are fixed
|
42
|
-
* Give access to all the default rails helpers to Comatose Pages by default?
|
43
|
-
|
44
|
-
|
45
|
-
== Installation
|
46
|
-
|
47
|
-
*Note*: See the 'Upgrading' section if you already have an older version of
|
48
|
-
the comatose plugin installed.
|
49
|
-
|
50
|
-
$ ./script/plugin source http://mattmccray.com/svn/rails/plugins
|
51
|
-
$ ./script/plugin install comatose
|
52
|
-
$ ./script/generate comatose_migration
|
53
|
-
$ rake migrate
|
54
|
-
|
55
|
-
Open your <tt>routes.rb</tt> and add the comatose root route at the
|
56
|
-
bottom:
|
57
|
-
|
58
|
-
map.comatose_admin
|
59
|
-
map.comatose_root ''
|
60
|
-
|
61
|
-
That's it, you're ready to go! You should be able to browse to
|
62
|
-
http://127.0.0.1:3000/comatose_admin and start adding pages to your CMS.
|
63
|
-
Browsing to http://127.0.0.1:3000/ will render your comatose pages if
|
64
|
-
routing doesn't match any of your controllers.
|
65
|
-
|
66
|
-
|
67
|
-
== Upgrading
|
68
|
-
|
69
|
-
*NOTE*: This is an experimental 2.0 branch, so upgrading is possible at
|
70
|
-
the moment, but these instructions may not work for much longer.
|
71
|
-
|
72
|
-
If you are upgrading from an older version of Comatose (version 0.3,
|
73
|
-
0.4, 0.5, or 0.6), then you will need to re-install the comatose
|
74
|
-
plugin and run:
|
75
|
-
|
76
|
-
$ ./script/plugin remove comatose
|
77
|
-
$ ./script/plugin install comatose
|
78
|
-
$ ./script/generate comatose_migration --upgrade --from=VERSION
|
79
|
-
$ rake migrate
|
80
|
-
|
81
|
-
*Note*: Be sure to set the <tt>--from</tt> parameter to the version of
|
82
|
-
Comatose you last had installed. Also, you only need to first two digits,
|
83
|
-
including the dot, of the version you are upgrading from. For example, if
|
84
|
-
you're upgrading from version 0.6.9 you can use:
|
85
|
-
|
86
|
-
$ ./script/generate comatose_migration --upgrade --from=0.6
|
87
|
-
|
88
|
-
This will create the upgrade migration(s) for you. It just adds the new
|
89
|
-
fields, so you can keep the original migration comatose created.
|
90
|
-
|
91
|
-
|
92
|
-
== Configuration
|
93
|
-
|
94
|
-
You configure Comatose in your `config/environment.rb` file. Here is an example
|
95
|
-
configuration block:
|
96
|
-
|
97
|
-
Comatose.configure do |config|
|
98
|
-
# Sets the text in the Admin UI's title area
|
99
|
-
config.admin_title = "Site Content"
|
100
|
-
config.admin_sub_title = "Content for the rest of us..."
|
101
|
-
end
|
102
|
-
|
103
|
-
Here's an example that uses the AuthentiationSystem as generated by the
|
104
|
-
restful_authentication plugin:
|
105
|
-
|
106
|
-
Comatose.configure do |config|
|
107
|
-
# Includes AuthenticationSystem in the ComatoseController
|
108
|
-
config.includes << :authenticated_system
|
109
|
-
|
110
|
-
# admin
|
111
|
-
config.admin_title = "Comatose - TESTING"
|
112
|
-
config.admin_sub_title = "Content for the rest of us..."
|
113
|
-
|
114
|
-
# Includes AuthenticationSystem in the ComatoseAdminController
|
115
|
-
config.admin_includes << :authenticated_system
|
116
|
-
|
117
|
-
# Calls :login_required as a before_filter
|
118
|
-
config.admin_authorization = :login_required
|
119
|
-
# Returns the author name (login, in this case) for the current user
|
120
|
-
config.admin_get_author do
|
121
|
-
current_user.login
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
|
126
|
-
== Extra Credit
|
127
|
-
|
128
|
-
This plugin includes the work of many wonderful contributors to the Railsphere.
|
129
|
-
Following are the specific libraries that are distributed with Comatose. If I've
|
130
|
-
missed someone/something please let me know.
|
131
|
-
|
132
|
-
* Liquid (http://home.leetsoft.com/liquid) by Tobias Luetke (http://blog.leetsoft.com)
|
133
|
-
* RedCloth (http://whytheluckystiff.net/ruby/redcloth) by why the lucky stiff (http://whytheluckystiff.net)
|
134
|
-
* Acts as Versioned (http://ar-versioned.rubyforge.org) by Rick Olsen (http://weblog.techno-weenie.net)
|
135
|
-
* Behaviors (http://behaviors.rubyforge.org) by Atomic Object LLC -- very nice BDD-like testing library
|
136
|
-
|
137
|
-
== Feedback
|
138
|
-
|
139
|
-
I’ve released Comatose under the MIT license. Which basically means you
|
140
|
-
can use it however you want.
|
141
|
-
|
142
|
-
Don't forget to read the 'Getting Started' guide located on the RubyForge
|
143
|
-
project site: http://comatose.rubyforge.org/getting-started-guide
|
144
|
-
|
145
|
-
If you like it, hate it, or have some ideas for new features, let me know!
|
146
|
-
|
147
|
-
darthapo at gmail dot com
|
148
|
-
|