comatose-rubyisbeautiful 3.0.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 (192) hide show
  1. data/CHANGELOG +198 -0
  2. data/Gemfile +29 -0
  3. data/Gemfile.lock +130 -0
  4. data/INSTALL +14 -0
  5. data/LICENSE +20 -0
  6. data/Manifest +188 -0
  7. data/README +0 -0
  8. data/README.markdown +113 -0
  9. data/Rakefile +5 -0
  10. data/SPECS +61 -0
  11. data/app/controllers/application_controller.rb +3 -0
  12. data/app/controllers/comatose/admin_controller.rb +425 -0
  13. data/app/controllers/comatose/application_controller.rb +30 -0
  14. data/app/controllers/comatose/base_controller.rb +167 -0
  15. data/app/helpers/application_helper.rb +2 -0
  16. data/app/helpers/comatose/admin_helper.rb +78 -0
  17. data/app/helpers/comatose/application_helper.rb +2 -0
  18. data/app/helpers/comatose/base_helper.rb +5 -0
  19. data/app/models/comatose/page.rb +166 -0
  20. data/app/views/comatose/admin/_form.html.erb +108 -0
  21. data/app/views/comatose/admin/_page_list_item.html.erb +62 -0
  22. data/app/views/comatose/admin/delete.html.erb +18 -0
  23. data/app/views/comatose/admin/edit.html.erb +5 -0
  24. data/app/views/comatose/admin/index.html.erb +34 -0
  25. data/app/views/comatose/admin/new.html.erb +5 -0
  26. data/app/views/comatose/admin/reorder.html.erb +30 -0
  27. data/app/views/comatose/admin/versions.html.erb +40 -0
  28. data/app/views/layouts/application.html.erb +14 -0
  29. data/app/views/layouts/comatose/admin.html.erb +44 -0
  30. data/app/views/layouts/comatose/base.html.erb +14 -0
  31. data/comatose-rubyisbeautiful.gemspec +65 -0
  32. data/config/environment.rb +5 -0
  33. data/config/environments/development.rb +26 -0
  34. data/config/environments/production.rb +49 -0
  35. data/config/environments/test.rb +35 -0
  36. data/config/locales/en.yml +5 -0
  37. data/config.ru +4 -0
  38. data/db/seeds.rb +11 -0
  39. data/lib/comatose/configuration.rb +87 -0
  40. data/lib/comatose/drop.rb +45 -0
  41. data/lib/comatose/engine.rb +28 -0
  42. data/lib/comatose/filters/inline_filter.rb +15 -0
  43. data/lib/comatose/filters/timeago_filter.rb +14 -0
  44. data/lib/comatose/filters/translation_filter.rb +11 -0
  45. data/lib/comatose/locale_constraint.rb +15 -0
  46. data/lib/comatose/logger.rb +10 -0
  47. data/lib/comatose/page_wrapper.rb +147 -0
  48. data/lib/comatose/processing_context.rb +103 -0
  49. data/lib/comatose/routes.rb +70 -0
  50. data/lib/comatose/tasks/admin.rb +57 -0
  51. data/lib/comatose/tasks/data.rb +79 -0
  52. data/lib/comatose/tasks/setup.rb +118 -0
  53. data/lib/comatose/text_filters.rb +148 -0
  54. data/lib/comatose/version.rb +9 -0
  55. data/lib/comatose.rb +88 -0
  56. data/lib/generators/comatose/USAGE +7 -0
  57. data/lib/generators/comatose/comatose_generator.rb +37 -0
  58. data/lib/generators/comatose/templates/comatose.rb +33 -0
  59. data/lib/generators/comatose/templates/migration.erb +32 -0
  60. data/lib/generators/comatose/templates/seeds.erb +2 -0
  61. data/lib/support/class_options.rb +36 -0
  62. data/lib/support/inline_rendering.rb +48 -0
  63. data/lib/support/route_mapper.rb +51 -0
  64. data/lib/tasks/comatose.rake +9 -0
  65. data/lib/text_filters/markdown.rb +14 -0
  66. data/lib/text_filters/markdown_smartypants.rb +15 -0
  67. data/lib/text_filters/none.rb +8 -0
  68. data/lib/text_filters/rdoc.rb +13 -0
  69. data/lib/text_filters/simple.rb +8 -0
  70. data/lib/text_filters/textile.rb +15 -0
  71. data/public/404.html +26 -0
  72. data/public/422.html +26 -0
  73. data/public/500.html +26 -0
  74. data/public/favicon.ico +0 -0
  75. data/public/images/comatose/collapsed.gif +0 -0
  76. data/public/images/comatose/expanded.gif +0 -0
  77. data/public/images/comatose/no-children.gif +0 -0
  78. data/public/images/comatose/page.gif +0 -0
  79. data/public/images/comatose/rails.png +0 -0
  80. data/public/images/comatose/spinner.gif +0 -0
  81. data/public/images/comatose/title-hover-bg.gif +0 -0
  82. data/public/javascripts/comatose/admin.js +406 -0
  83. data/public/javascripts/comatose/application.js +2 -0
  84. data/public/javascripts/comatose/dragdrop.js +974 -0
  85. data/public/javascripts/editor.js +452 -0
  86. data/public/javascripts/jquery/GPL-LICENSE.txt +278 -0
  87. data/public/javascripts/jquery/MIT-LICENSE.txt +20 -0
  88. data/public/javascripts/jquery/README +67 -0
  89. data/public/javascripts/jquery/jquery.js +11 -0
  90. data/public/javascripts/jquery/jquery.ui.draggable.js +1 -0
  91. data/public/javascripts/jquery/jquery.ui.js +1 -0
  92. data/public/javascripts/jquery/jquery.ui.resizable.js +1 -0
  93. data/public/javascripts/jquery/jquery.ui.sortable.js +1 -0
  94. data/public/javascripts/wymeditor/iframe/default/lbl-blockquote.png +0 -0
  95. data/public/javascripts/wymeditor/iframe/default/lbl-h1.png +0 -0
  96. data/public/javascripts/wymeditor/iframe/default/lbl-h2.png +0 -0
  97. data/public/javascripts/wymeditor/iframe/default/lbl-h3.png +0 -0
  98. data/public/javascripts/wymeditor/iframe/default/lbl-h4.png +0 -0
  99. data/public/javascripts/wymeditor/iframe/default/lbl-h5.png +0 -0
  100. data/public/javascripts/wymeditor/iframe/default/lbl-h6.png +0 -0
  101. data/public/javascripts/wymeditor/iframe/default/lbl-p.png +0 -0
  102. data/public/javascripts/wymeditor/iframe/default/lbl-pre.png +0 -0
  103. data/public/javascripts/wymeditor/iframe/default/wymiframe.css +90 -0
  104. data/public/javascripts/wymeditor/iframe/default/wymiframe.html +26 -0
  105. data/public/javascripts/wymeditor/jquery.wymeditor.js +4688 -0
  106. data/public/javascripts/wymeditor/jquery.wymeditor.min.js +1 -0
  107. data/public/javascripts/wymeditor/jquery.wymeditor.pack.js +1 -0
  108. data/public/javascripts/wymeditor/lang/bg.js +45 -0
  109. data/public/javascripts/wymeditor/lang/ca.js +45 -0
  110. data/public/javascripts/wymeditor/lang/cs.js +45 -0
  111. data/public/javascripts/wymeditor/lang/cy.js +45 -0
  112. data/public/javascripts/wymeditor/lang/de.js +45 -0
  113. data/public/javascripts/wymeditor/lang/en.js +45 -0
  114. data/public/javascripts/wymeditor/lang/es.js +45 -0
  115. data/public/javascripts/wymeditor/lang/fa.js +46 -0
  116. data/public/javascripts/wymeditor/lang/fi.js +44 -0
  117. data/public/javascripts/wymeditor/lang/fr.js +45 -0
  118. data/public/javascripts/wymeditor/lang/gl.js +45 -0
  119. data/public/javascripts/wymeditor/lang/he.js +45 -0
  120. data/public/javascripts/wymeditor/lang/hr.js +45 -0
  121. data/public/javascripts/wymeditor/lang/hu.js +45 -0
  122. data/public/javascripts/wymeditor/lang/it.js +45 -0
  123. data/public/javascripts/wymeditor/lang/nb.js +45 -0
  124. data/public/javascripts/wymeditor/lang/nl.js +45 -0
  125. data/public/javascripts/wymeditor/lang/nn.js +45 -0
  126. data/public/javascripts/wymeditor/lang/pl.js +45 -0
  127. data/public/javascripts/wymeditor/lang/pt-br.js +45 -0
  128. data/public/javascripts/wymeditor/lang/pt.js +45 -0
  129. data/public/javascripts/wymeditor/lang/ru.js +45 -0
  130. data/public/javascripts/wymeditor/lang/sv.js +45 -0
  131. data/public/javascripts/wymeditor/lang/tr.js +45 -0
  132. data/public/javascripts/wymeditor/lang/zh_cn.js +47 -0
  133. data/public/javascripts/wymeditor/plugins/embed/jquery.wymeditor.embed.js +52 -0
  134. data/public/javascripts/wymeditor/plugins/fullscreen/icon_fullscreen.gif +0 -0
  135. data/public/javascripts/wymeditor/plugins/fullscreen/jquery.wymeditor.fullscreen.js +127 -0
  136. data/public/javascripts/wymeditor/plugins/hovertools/jquery.wymeditor.hovertools.js +57 -0
  137. data/public/javascripts/wymeditor/plugins/resizable/jquery.wymeditor.resizable.js +91 -0
  138. data/public/javascripts/wymeditor/plugins/resizable/readme.txt +124 -0
  139. data/public/javascripts/wymeditor/plugins/tidy/README +19 -0
  140. data/public/javascripts/wymeditor/plugins/tidy/jquery.wymeditor.tidy.js +82 -0
  141. data/public/javascripts/wymeditor/plugins/tidy/tidy.php +36 -0
  142. data/public/javascripts/wymeditor/plugins/tidy/wand.png +0 -0
  143. data/public/javascripts/wymeditor/skins/compact/icons.png +0 -0
  144. data/public/javascripts/wymeditor/skins/compact/skin.css +134 -0
  145. data/public/javascripts/wymeditor/skins/compact/skin.js +35 -0
  146. data/public/javascripts/wymeditor/skins/default/icons.png +0 -0
  147. data/public/javascripts/wymeditor/skins/default/skin.css +133 -0
  148. data/public/javascripts/wymeditor/skins/default/skin.js +40 -0
  149. data/public/javascripts/wymeditor/skins/minimal/images/bg.header.gif +0 -0
  150. data/public/javascripts/wymeditor/skins/minimal/images/bg.selector.silver.gif +0 -0
  151. data/public/javascripts/wymeditor/skins/minimal/images/bg.wymeditor.png +0 -0
  152. data/public/javascripts/wymeditor/skins/minimal/images/icons.silver.gif +0 -0
  153. data/public/javascripts/wymeditor/skins/minimal/skin.css +131 -0
  154. data/public/javascripts/wymeditor/skins/minimal/skin.js +30 -0
  155. data/public/javascripts/wymeditor/skins/silver/COPYING +674 -0
  156. data/public/javascripts/wymeditor/skins/silver/README +27 -0
  157. data/public/javascripts/wymeditor/skins/silver/images/bg.header.gif +0 -0
  158. data/public/javascripts/wymeditor/skins/silver/images/bg.selector.silver.gif +0 -0
  159. data/public/javascripts/wymeditor/skins/silver/images/bg.wymeditor.png +0 -0
  160. data/public/javascripts/wymeditor/skins/silver/images/icons.silver.gif +0 -0
  161. data/public/javascripts/wymeditor/skins/silver/skin.css +297 -0
  162. data/public/javascripts/wymeditor/skins/silver/skin.js +61 -0
  163. data/public/javascripts/wymeditor/skins/twopanels/icons.png +0 -0
  164. data/public/javascripts/wymeditor/skins/twopanels/skin.css +134 -0
  165. data/public/javascripts/wymeditor/skins/twopanels/skin.js +39 -0
  166. data/public/javascripts/wymeditor/skins/wymeditor_icon.png +0 -0
  167. data/public/javascripts/wymeditor.tar +0 -0
  168. data/public/robots.txt +5 -0
  169. data/public/stylesheets/comatose/admin.css +488 -0
  170. data/public/stylesheets/comatose/base.css +9 -0
  171. data/spec/controllers/comatose/base_controller_spec.rb +14 -0
  172. data/spec/controllers/foos_controller_spec.rb +5 -0
  173. data/spec/helpers/foos_helper_spec.rb +15 -0
  174. data/spec/routing/base_routing_spec.rb +12 -0
  175. data/spec/spec_helper.rb +27 -0
  176. data/test/behaviors.rb +106 -0
  177. data/test/fixtures/comatose_pages.yml +96 -0
  178. data/test/functional/comatose_admin_controller_test.rb +114 -0
  179. data/test/functional/comatose_controller_test.rb +45 -0
  180. data/test/integration/comatose_routing_test.rb +17 -0
  181. data/test/javascripts/test.html +26 -0
  182. data/test/javascripts/test_runner.js +307 -0
  183. data/test/old_test_helper.rb +43 -0
  184. data/test/performance/browsing_test.rb +9 -0
  185. data/test/test_helper.rb +13 -0
  186. data/test/unit/class_options_test.rb +52 -0
  187. data/test/unit/comatose_page_test.rb +128 -0
  188. data/test/unit/processing_context_test.rb +108 -0
  189. data/test/unit/text_filters_test.rb +52 -0
  190. data.tar.gz.sig +1 -0
  191. metadata +379 -0
  192. metadata.gz.sig +0 -0
@@ -0,0 +1,148 @@
1
+ require 'support/class_options'
2
+ module Comatose
3
+ class TextFilters
4
+
5
+ define_option :default_processor, :erb
6
+ define_option :default_filter, :none
7
+ define_option :logger, Comatose.logger
8
+
9
+ @registered_filters = { }
10
+ @registered_titles = { }
11
+
12
+ attr_reader :name
13
+ attr_reader :title
14
+
15
+
16
+ def initialize(name, title)
17
+ @name = name
18
+ @title = title
19
+ end
20
+
21
+
22
+ # The default create_link method...
23
+ # Override for your specific filter, if needed, in the #define block
24
+ def create_link(title, url)
25
+ %Q|<a href="#{url}">#{title}</a>|
26
+ end
27
+
28
+
29
+ # Process the text with using the specified context
30
+ def process_text(text, context, processor=TextFilters.default_processor)
31
+ processed_text = nil
32
+ #Comatose.logger.debug "text before process: #{text}"
33
+ case
34
+ when processor == :erb
35
+ processed_text = process_with_erb(text, context)
36
+ when processor == :liquid
37
+ processed_text = process_with_liquid(text, context)
38
+ else
39
+ raise "Unknown Text Processor '#{processor.to_s}'"
40
+ end
41
+ #Comatose.logger.debug "text after process: #{processed_text}"
42
+ return processed_text
43
+ end
44
+
45
+
46
+ class << self
47
+ private :new
48
+ attr_reader :registered_filters
49
+ attr_reader :registered_titles
50
+
51
+ # Use this to create and register your TextFilters
52
+ def define(name, title, &block)
53
+ begin
54
+ p = new(name, title)
55
+ p.instance_eval(&block)
56
+ if p.respond_to? :render_text
57
+ registered_titles[title] = name
58
+ registered_filters[name] = p
59
+ else
60
+ raise "#render_text isn't implemented in this class"
61
+ end
62
+ rescue LoadError
63
+ #Comatose.logger.debug "Filter '#{name}' was not included: #{$!}" unless TextFilters.logger.nil?
64
+ rescue
65
+ #Comatose.logger.debug "Filter '#{name}' was not included: #{$!}" unless TextFilters.logger.nil?
66
+ end
67
+ end
68
+
69
+
70
+ def get_filter(name)
71
+ #Comatose.logger.debug "get_filter: #{name}"
72
+ name = TextFilters.default_filter if name.nil?
73
+ name = registered_titles[name] if name.is_a? String
74
+ registered_filters[name]
75
+ end
76
+
77
+
78
+ def [](name)
79
+ get_filter(name)
80
+ end
81
+
82
+
83
+ def all
84
+ registered_filters
85
+ end
86
+
87
+
88
+ def all_titles
89
+ registered_titles.keys
90
+ end
91
+
92
+
93
+ def render_text(text, name=nil)
94
+ get_filter(name).render_text(text)
95
+ end
96
+
97
+
98
+ def process_text(text, context=nil, name=nil, processor=nil)
99
+ get_filter(name).process_text(text, context, processor)
100
+ end
101
+
102
+
103
+ # Call
104
+ def transform(text, context=nil, name=nil, processor=nil)
105
+ #Comatose.logger.debug "transform with text #{text}"
106
+ #Comatose.logger.debug "transform with context #{context}"
107
+ #Comatose.logger.debug "transform with name #{name}"
108
+ #Comatose.logger.debug "transform with processor #{processor}"
109
+ render_text process_text(text, context, name, processor), name
110
+ end
111
+ end
112
+
113
+ private
114
+
115
+ # This is an instance method so that it won't puke on requiring
116
+ # a non-existant library until it's being registered -- the only
117
+ # place I can really capture the LoadError
118
+ def require(name)
119
+ Kernel.require name
120
+ end
121
+
122
+
123
+
124
+ def process_with_erb(text, context)
125
+ Comatose.logger.debug "process erb before: #{text}"
126
+ output = ERB.new(text).result(context.get_binding)
127
+ Comatose.logger.debug "process erb after: #{output}"
128
+ return output
129
+ rescue => e
130
+ Comatose.logger.debug e.backtrace.join("\n")
131
+ raise "ERB Error: #{$!}"
132
+ end
133
+
134
+
135
+
136
+ def process_with_liquid(text, context={})
137
+ #Comatose.logger.debug "process liquid before: text: #{text}"
138
+ #Comatose.logger.debug "process liquid before: context: #{context}"
139
+ #context = context.stringify_keys if context.respond_to? :stringify_keys
140
+ Liquid::Template.parse(text).render(context)
141
+ rescue => e
142
+ Comatose.logger.debug e.backtrace.join("\n")
143
+ raise "Liquid Error: #{$!}"
144
+ end
145
+
146
+
147
+ end
148
+ end
@@ -0,0 +1,9 @@
1
+ module Comatose
2
+ VERSION = "3.0.0"
3
+ VERSION_STRING = "#{VERSION} (beta)"
4
+
5
+ def self.version
6
+ VERSION
7
+ end
8
+
9
+ end
data/lib/comatose.rb ADDED
@@ -0,0 +1,88 @@
1
+ require 'acts_as_versioned'
2
+ require 'acts_as_list'
3
+ require 'acts_as_tree_rails3'
4
+ require 'redcloth'
5
+ require 'liquid'
6
+ require 'i18n'
7
+
8
+
9
+ require 'comatose/logger'
10
+
11
+ module Comatose
12
+
13
+ class <<self
14
+
15
+ def logger
16
+ comatose_logger = nil
17
+ begin
18
+ comatose_logger = Rails.logger
19
+ rescue
20
+ end
21
+
22
+ if comatose_logger.blank?
23
+ comatose_logger = Comatose::Logger.new(File.join(self.root, 'comatose.log'))
24
+ comatose_logger.level = Logger::DEBUG
25
+ comatose_logger.formatter = Logger::Formatter.new
26
+ end
27
+ return comatose_logger
28
+ end
29
+
30
+
31
+ def gem_root
32
+ gem_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
33
+ end
34
+
35
+
36
+ def root
37
+ comatose_root = nil
38
+ begin
39
+ comatose_root = Rails.root
40
+ rescue
41
+ end
42
+
43
+ if comatose_root.blank?
44
+ comatose_root = Comatose.gem_root
45
+ end
46
+ return comatose_root
47
+ end
48
+
49
+ end
50
+
51
+ class ConfigurationError < StandardError; end
52
+
53
+ end
54
+
55
+ require 'comatose/engine'
56
+ require 'comatose/locale_constraint'
57
+ require 'comatose/routes'
58
+
59
+ require 'support/class_options'
60
+
61
+ require 'comatose/configuration'
62
+ require 'comatose/drop'
63
+ require 'comatose/page_wrapper'
64
+ require 'comatose/processing_context'
65
+ require 'comatose/text_filters'
66
+ require 'comatose/version'
67
+
68
+ require 'support/inline_rendering'
69
+
70
+ Dir[File.join(File.dirname(__FILE__), 'text_filters', '*.rb')].each do |path|
71
+ require "text_filters/#{File.basename(path)}"
72
+ end
73
+
74
+ Dir[File.join(File.dirname(__FILE__), 'comatose/filters', '*.rb')].each do |path|
75
+ require "comatose/filters/#{File.basename(path)}"
76
+ end
77
+
78
+
79
+
80
+
81
+ #require 'support/route_mapper'
82
+ #
83
+ #
84
+ #
85
+ ## BCT - TODO: some hook into the greater Rails events it seems
86
+ ##::Dispatcher.to_prepare :comatose do
87
+ # Comatose.config.after_setup.call
88
+ ##end
@@ -0,0 +1,7 @@
1
+ Description:
2
+ The comatose generator creates a migration for the comatose model and adds routes.
3
+
4
+ The generator creates a migration class in db/migrate.
5
+
6
+ Example:
7
+ ./script/generate comatose
@@ -0,0 +1,37 @@
1
+ require 'rails/generators/base'
2
+ require 'rails/generators/active_record'
3
+ require 'rails/generators/migration'
4
+
5
+ module Comatose
6
+ module Generators
7
+ class ComatoseGenerator < Rails::Generators::NamedBase
8
+
9
+ namespace :comatose
10
+ source_root File.expand_path("../templates", __FILE__)
11
+
12
+ include Rails::Generators::Migration
13
+ extend ActiveRecord::Generators::Migration
14
+
15
+
16
+ def create_migration_file
17
+ migration_template "migration.erb", "db/migrate/add_comatose_support.rb"
18
+ end
19
+
20
+
21
+ def create_init_file
22
+ template "comatose.rb", "config/initializers/comatose.rb"
23
+ end
24
+
25
+
26
+ def copy_rake_files
27
+ # TODO
28
+ end
29
+
30
+
31
+ def copy_assets
32
+ # TODO
33
+ end
34
+
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,33 @@
1
+ Comatose.configure do |config|
2
+ config.admin_title = 'Comatose'
3
+ config.admin_includes = []
4
+ config.admin_helpers = []
5
+ config.admin_sub_title = 'The Micro CMS'
6
+ config.content_type = 'utf-8'
7
+ config.default_filter = 'None'
8
+ config.default_processor = :erb
9
+ config.default_tree_level = 2
10
+ config.disable_caching = false
11
+ config.hidden_meta_fields = []
12
+ config.helpers = []
13
+ config.includes = []
14
+ config.allow_import_export = true
15
+ end
16
+
17
+ class Hash
18
+ # Having the method_missing catchall in conjunction with get_binding
19
+ # allows us to use the hash as a Context for ERB
20
+ def method_missing(meth, *arg)
21
+ if self.has_key? meth.to_s
22
+ self[meth.to_s]
23
+ else
24
+ super
25
+ end
26
+ end
27
+
28
+
29
+ # Gets the binding object for use with ERB
30
+ def get_binding
31
+ binding
32
+ end
33
+ end
@@ -0,0 +1,32 @@
1
+ # class Comatose::Page < ActiveRecord::Base
2
+ # set_table_name 'comatose_pages'
3
+ # acts_as_versioned :table_name =>'comatose_page_versions', :if_changed => [ :title, :slug, :keywords, :body ]
4
+ # end
5
+
6
+ class AddComatoseSupport < ActiveRecord::Migration
7
+
8
+ # Schema for Comatose version 3.0.0+
9
+ def self.up
10
+ create_table :comatose_pages do |t|
11
+ t.integer "parent_id"
12
+ t.text "full_path", :default => ''
13
+ t.string "title", :limit => 255
14
+ t.string "slug", :limit => 255
15
+ t.string "keywords", :limit => 255
16
+ t.string "layout"
17
+ t.text "body"
18
+ t.string "filter_type", :limit => 25, :default => "Textile"
19
+ t.string "author", :limit => 255
20
+ t.integer "position", :default => 0
21
+ t.integer "version"
22
+ t.timestamps
23
+ end
24
+
25
+ Comatose::Page.create_versioned_table rescue "Skipping Comatose::Page.create_versioned_table"
26
+ end
27
+
28
+ def self.down
29
+ Comatose::Page.drop_versioned_table rescue "Skipping Comatose::Page.drop_versioned_table"
30
+ drop_table :comatose_pages
31
+ end
32
+ end
@@ -0,0 +1,2 @@
1
+ puts "Creating the default 'Home Page'..."
2
+ Comatose::Page.create( :title=>'Home Page', :body=>"h1. Welcome\n\nYour content goes here...", :author=>'System' )
@@ -0,0 +1,36 @@
1
+ class Class
2
+ def define_option(name, default=nil)
3
+ sym = name.to_sym
4
+ cattr_reader(sym)
5
+ cattr_writer(sym)
6
+ send("#{name.to_s}=", default)
7
+ end
8
+
9
+ def blockable_attr_accessor(sym)
10
+ module_eval(<<-EVAL, __FILE__, __LINE__)
11
+ def #{sym}(&block)
12
+ if block_given?
13
+ @#{sym} = block
14
+ else
15
+ @#{sym}
16
+ end
17
+ end
18
+ def #{sym}=(value)
19
+ @#{sym} = value
20
+ end
21
+ EVAL
22
+ end
23
+ end
24
+
25
+ class Module
26
+ def attr_accessor_with_default(sym, default = nil, &block)
27
+ raise 'Default value or block required' unless !default.nil? || block
28
+ define_method(sym, block_given? ? block : Proc.new { default })
29
+ module_eval(<<-EVAL, __FILE__, __LINE__)
30
+ def #{sym}=(value)
31
+ class << self; attr_reader :#{sym} end
32
+ @#{sym} = value
33
+ end
34
+ EVAL
35
+ end
36
+ end
@@ -0,0 +1,48 @@
1
+ # Extends the view to support rendering inline comatose pages...
2
+ ActionView::Base.class_eval do
3
+ alias_method :render_otherwise, :render
4
+
5
+ def render(options = {}, old_local_assigns = {}, &block) #:nodoc:
6
+ if options.is_a?(Hash) && page_name = options.delete(:comatose)
7
+ render_comatose(page_name, options[:params] || options)
8
+ else
9
+ render_otherwise(options, old_local_assigns, &block)
10
+ end
11
+ end
12
+
13
+ def render_comatose(page_path, params = {})
14
+ params = {
15
+ :silent => false,
16
+ :use_cache => true,
17
+ :locals => {}
18
+ }.merge(params)
19
+ if params[:use_cache] and params[:locals].empty?
20
+ render_cached_comatose_page(page_path, params)
21
+ else
22
+ render_comatose_page(page_path, params)
23
+ end
24
+ end
25
+
26
+ protected
27
+
28
+ def render_cached_comatose_page(page_path, params)
29
+ key = page_path.gsub(/\//, '+')
30
+ unless html = controller.read_fragment(key)
31
+ html = render_comatose_page( page_path, params )
32
+ controller.write_fragment(key, html) unless Comatose.config.disable_caching
33
+ end
34
+ html
35
+ end
36
+
37
+ def render_comatose_page(page_path, params)
38
+ if page = Comatose::Page.find_by_path(page_path)
39
+ # Add the request params to the context...
40
+ params[:locals]['params'] = controller.params
41
+ html = page.to_html( params[:locals] )
42
+ else
43
+ html = params[:silent] ? '' : "<p><tt>#{page_path}</tt> not found</p>"
44
+ end
45
+ end
46
+
47
+ end
48
+
@@ -0,0 +1,51 @@
1
+ #class ActionController::Routing::RouteSet::Mapper
2
+ #
3
+ # # For mounting a page to a path
4
+ # def comatose_root(path, options={ })
5
+ # opts = {
6
+ # :index => '',
7
+ # :layout => 'base.html.erb',
8
+ # :use_cache => 'true',
9
+ # :cache_path => nil,
10
+ # :named_route => nil
11
+ # }.merge(options)
12
+ # # Ensure the controller is aware of the mount point...
13
+ # Comatose.add_mount_point(path, opts)
14
+ # # Add the route...
15
+ # opts[:controller] = 'comatose'
16
+ # opts[:action] ='show'
17
+ # route_name = opts.delete(:named_route)
18
+ # unless route_name.nil?
19
+ # named_route(route_name, "#{path}/*page", opts)
20
+ # else
21
+ # if opts[:index] == '' # if it maps to the root site URI, name it comatose_root
22
+ # named_route('comatose_root', "#{path}/*page", opts)
23
+ # else
24
+ # connect("#{path}/*page", opts)
25
+ # end
26
+ # end
27
+ # end
28
+ #
29
+ #
30
+ # # For mounting the admin
31
+ # def comatose_admin(path='comatose_admin', options={ })
32
+ # opts = {
33
+ # :controller => 'comatose_admin',
34
+ # :named_route => 'comatose_admin'
35
+ # }.merge(options)
36
+ # route_name = opts.delete(:named_route)
37
+ # named_route(route_name, "#{path}/:action/:id", opts)
38
+ # end
39
+ #
40
+ #
41
+ # def method_missing(name, *args, &proc)
42
+ # if name.to_s.starts_with?('comatose_')
43
+ # opts = (args.last.is_a?(Hash)) ? args.pop : { }
44
+ # opts[:named_route] = name.to_s #[9..-1]
45
+ # comatose_root(*(args << opts))
46
+ # else
47
+ # super unless args.length >= 1 && proc.nil?
48
+ # #Rails.routes.add_named_route(name, *args)
49
+ # end
50
+ # end
51
+ #end
@@ -0,0 +1,9 @@
1
+ begin
2
+ require 'comatose/version'
3
+ rescue LoadError
4
+ $: << File.join(File.dirname(__FILE__), '..', 'lib')
5
+ end
6
+
7
+ require 'comatose/tasks/admin'
8
+ require 'comatose/tasks/setup'
9
+ require 'comatose/tasks/data'
@@ -0,0 +1,14 @@
1
+ #
2
+ # MARKDOWN
3
+ #
4
+ Comatose::TextFilters.define :markdown, "Markdown" do
5
+ require 'bluecloth'
6
+
7
+ def render_text(text)
8
+ BlueCloth.new(text).to_html
9
+ end
10
+
11
+ def create_link(title, url)
12
+ "[#{title}](#{url})"
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ #
2
+ # MARKDOWN + SMARTYPANTS
3
+ #
4
+ Comatose::TextFilters.define :markdown_smartypants, "Markdown + SmartyPants" do
5
+ require 'bluecloth'
6
+ require 'rubypants'
7
+
8
+ def render_text(text)
9
+ RubyPants.new( BlueCloth.new(text).to_html ).to_html
10
+ end
11
+
12
+ def create_link(title, url)
13
+ "[#{title}](#{url})"
14
+ end
15
+ end
@@ -0,0 +1,8 @@
1
+ #
2
+ # NONE
3
+ #
4
+ Comatose::TextFilters.define :none, "[No Filter]" do
5
+ def render_text(text)
6
+ text
7
+ end
8
+ end
@@ -0,0 +1,13 @@
1
+ #
2
+ # RDOC
3
+ #
4
+ Comatose::TextFilters.define :rdoc, "RDoc" do
5
+ require 'rdoc/markup/simple_markup'
6
+ require 'rdoc/markup/simple_markup/to_html'
7
+
8
+ def render_text(text)
9
+ p = SM::SimpleMarkup.new
10
+ h = SM::ToHtml.new
11
+ p.convert(text, h)
12
+ end
13
+ end
@@ -0,0 +1,8 @@
1
+ #
2
+ # SIMPLE
3
+ #
4
+ Comatose::TextFilters.define :simple, "Simple" do
5
+ def render_text(text)
6
+ text.gsub("\n", '<br/>')
7
+ end
8
+ end
@@ -0,0 +1,15 @@
1
+ #
2
+ # TEXTILE
3
+ #
4
+ Comatose::TextFilters.define :textile, "Textile" do
5
+ require 'redcloth'
6
+
7
+ def render_text(text)
8
+ RedCloth.new(text).to_html(:refs_markdown, :textile, :markdown)
9
+ end
10
+
11
+ def create_link(title, url)
12
+ %Q|"#{title}":#{url}|
13
+ end
14
+
15
+ end
data/public/404.html ADDED
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/404.html -->
21
+ <div class="dialog">
22
+ <h1>The page you were looking for doesn't exist.</h1>
23
+ <p>You may have mistyped the address or the page may have moved.</p>
24
+ </div>
25
+ </body>
26
+ </html>
data/public/422.html ADDED
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/422.html -->
21
+ <div class="dialog">
22
+ <h1>The change you wanted was rejected.</h1>
23
+ <p>Maybe you tried to change something you didn't have access to.</p>
24
+ </div>
25
+ </body>
26
+ </html>
data/public/500.html ADDED
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/500.html -->
21
+ <div class="dialog">
22
+ <h1>We're sorry, but something went wrong.</h1>
23
+ <p>We've been notified about this issue and we'll take a look at it shortly.</p>
24
+ </div>
25
+ </body>
26
+ </html>
File without changes
Binary file
Binary file