comatose-rubyisbeautiful 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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,147 @@
1
+ # Giving direct access to the AR model is disconcerting, so this wraps the AR
2
+ # Model to prevent access to certain, destructive behavior
3
+ module Comatose
4
+ class PageWrapper
5
+
6
+ @@allowed_methods = %w( id full_path uri slug keywords title to_html filter_type author updated_at created_at )
7
+ @@custom_methods = %w( link content parent next previous children rchildren first_child last_child has_keyword current_user )
8
+
9
+ attr_accessor :page, :current_user
10
+ #private :page
11
+
12
+ def initialize(page, locals={}, system={})
13
+ @current_user = system[:current_user]
14
+ @page = page
15
+ @keyword_lst = []
16
+ @keyword_hsh = {}
17
+ unless page.nil?
18
+ @keyword_lst = (page.keywords || '').downcase.split(',').map{ |k| k.strip }
19
+ @keyword_lst.each { |kw| @keyword_hsh[kw] = true }
20
+ end
21
+ @locals = locals
22
+ rescue => e
23
+ Comatose.logger.debug e.message
24
+ Comatose.logger.debug e.backtrace.join("\n")
25
+ end
26
+
27
+
28
+
29
+ def has_keyword?(keyword)
30
+ @page.has_keyword?(keyword)
31
+ end
32
+
33
+
34
+ def has_keyword
35
+ @keyword_hsh
36
+ end
37
+
38
+
39
+ def next
40
+ @next_page ||= begin
41
+ if @page.lower_item.nil?
42
+ nil
43
+ else
44
+ Comatose::PageWrapper.new( @page.lower_item )
45
+ end
46
+ end
47
+ end
48
+
49
+
50
+ def previous
51
+ @prev_page ||= begin
52
+ if @page.higher_item.nil?
53
+ nil
54
+ else
55
+ Comatose::PageWrapper.new( @page.higher_item )
56
+ end
57
+ end
58
+ end
59
+
60
+
61
+ def first_child
62
+ children.first
63
+ end
64
+
65
+
66
+ def def last_child
67
+ children.last
68
+ end
69
+
70
+
71
+ # Generates a link to this page... You can pass in the link text,
72
+ # otherwise it will default to the page title.
73
+ def link(title=nil)
74
+ title = @page.title if title.nil?
75
+ TextFilters[@page.filter_type].create_link(title, @page.uri)
76
+ end
77
+
78
+
79
+ def content
80
+ @page.to_html( @locals )
81
+ end
82
+
83
+
84
+ def parent
85
+ @parent ||= begin
86
+ if @page.parent.nil?
87
+ nil
88
+ else
89
+ Comatose::PageWrapper.new( @page.parent )
90
+ end
91
+ end
92
+ end
93
+
94
+
95
+ def children
96
+ # Cache the results so that you can have multiple calls to #children without a penalty
97
+ @children ||= @page.children.to_a.collect {|child| Comatose::PageWrapper.new( child, @locals )}
98
+ end
99
+
100
+
101
+ # Children, in reverse order
102
+ def rchildren
103
+ children.reverse
104
+ end
105
+
106
+
107
+ def [](key)
108
+ Comatose.logger.debug "using [] to find key: #{key}"
109
+ if @@allowed_methods.include? key.to_s #or page.attributes.has_key? key.to_s
110
+ page.send(key)
111
+ elsif @@custom_methods.include? key
112
+ self.send(key.to_sym)
113
+ end
114
+ end
115
+
116
+
117
+ def has_key?(key)
118
+ @@allowed_methods.include? key or @@custom_methods.include? key
119
+ end
120
+
121
+
122
+ def to_s
123
+ @page.title
124
+ end
125
+
126
+
127
+ def to_liquid
128
+ self
129
+ end
130
+
131
+
132
+ def method_missing(method_id, *args)
133
+ #Comatose.logger.debug "Looking for method: #{method_id} (#{method_id.class.to_s}) in [#{@@allowed_methods.join(', ')}] or [#{page.attributes.keys.join(', ')}]"
134
+ if @@allowed_methods.include? method_id.to_s or page.attributes.has_key? method_id.to_s
135
+ #Comatose.logger.debug "sending method_id to page"
136
+ page_value = page.send(method_id, *args)
137
+ #Comatose.logger.debug "page returned: #{page_value}"
138
+ return page_value
139
+ else
140
+ # Access nazi says: NO ACCESS FOR YOU!!
141
+ # but he says it silently...
142
+ Comatose.logger.debug("PageWrapper#method_missing: could not find #{method_id}")
143
+ end
144
+ end
145
+
146
+ end
147
+ end
@@ -0,0 +1,103 @@
1
+ # This is the rendering context object you have access to in text processing...
2
+ module Comatose
3
+ class ProcessingContext < Hash
4
+ @@supported_methods = %w( page include current_user )
5
+
6
+ attr_accessor :locals, :page, :current_user, :system
7
+
8
+
9
+ def initialize(page, params={})
10
+ params = params.stringify_keys rescue params
11
+ #Comatose.logger.debug("params in ProcessingContext: #{params}")
12
+ @system = params.delete('system') || {}
13
+ @current_user = @system['current_user']
14
+ @locals = params
15
+ @page = Comatose::PageWrapper.new(page, @locals, @system)
16
+ #rescue => e
17
+ # Comatose.logger.debug "ProcessingContext: initialize: #{e.message}"
18
+ # Comatose.logger.debug e.backtrace.join("\n")
19
+ # raise e
20
+ end
21
+
22
+
23
+ #def include(path, locals={})
24
+ # begin
25
+ # page = Page.find_by_path(path)
26
+ # page.to_html(self[:locals].merge(locals) )
27
+ # rescue
28
+ # "<p>Page at <tt>#{path}</tt> could not be found.</p>"
29
+ # end
30
+ #end
31
+
32
+
33
+ def find_by_path(path)
34
+ begin
35
+ # page = Page.find_by_path(path)
36
+ Page.send(Comatose.config.page_finder, path)
37
+ Comatose::PageWrapper.new(page, self[:locals])
38
+ rescue
39
+ "<p>Page at <tt>#{path}</tt> could not be found.</p>"
40
+ end
41
+ end
42
+
43
+
44
+ def [](key)
45
+ #Comatose.logger.debug "[] called with key: #{key}"
46
+ #Comatose.logger.debug "current_user: #{current_user.to_s}"
47
+ case
48
+ when key.to_s.downcase == 'page'
49
+ @page
50
+ when key.to_s.downcase == 'current_user'
51
+ @current_user
52
+ when locals.has_key?(key)
53
+ locals[key]
54
+ when Comatose.registered_drops.has_key?(key)
55
+ Comatose.registered_drops[key]
56
+ end
57
+ end
58
+
59
+
60
+ def has_key?(key)
61
+ @@supported_methods.include?(key) or locals.has_key?(key) or Comatose.registered_drops.has_key?(key)
62
+ end
63
+
64
+
65
+ def to_liquid
66
+ self
67
+ end
68
+
69
+
70
+ def get_binding
71
+ binding
72
+ end
73
+
74
+
75
+ def inspect
76
+ h = self.dup.merge(:page => page, :current_user => current_user, :locals => locals)
77
+ end
78
+
79
+
80
+ def method_missing(method_id, *args)
81
+ #Comatose.logger.debug("processing_context: method_missing: method: #{method_id}")
82
+ #Comatose.logger.debug("processing_context: method_missing: args: #{args}")
83
+ method_name = method_id.to_s
84
+ case
85
+ when locals.has_key?(method_name)
86
+ locals[method_name]
87
+ when page.respond_to?(method_name)
88
+ page.send(method_name, args)
89
+ when Comatose.registered_drops.has_key?(method_name)
90
+ Comatose.registered_drops[method_name].context = self
91
+ Comatose.registered_drops[method_name].send(args)
92
+ #else Hash.respond_to?(method_id)
93
+ # super(method_id, args)
94
+ #else
95
+ # "ProcessingContext: Couldn't find #{method_id}"
96
+ end
97
+ end
98
+
99
+ end
100
+ end
101
+
102
+
103
+
@@ -0,0 +1,70 @@
1
+ require 'action_dispatch/routing/mapper'
2
+
3
+ module Comatose
4
+ module Routes
5
+
6
+ def routes_for_comatose(opts={}, &block)
7
+ Comatose.logger.debug("routes_for_comatose options: #{opts}")
8
+ case
9
+ when opts.empty?
10
+ scope :module => "comatose" do
11
+ constraints(LocaleConstraint) do
12
+ match '/:locale/:page', :to => 'base#show'
13
+ match '/:locale', :to => 'base#show', :as => 'comatose_root'
14
+ end
15
+ end
16
+ when opts[:mount]
17
+ scope :module => "comatose" do
18
+ constraints(LocaleConstraint) do
19
+ match "/:locale/#{opts[:mount]}/:page", :to => 'base#show', :index => opts[:mount]
20
+ match "/:locale/#{opts[:mount]}", :to => 'base#show', :index => opts[:mount], :as => "#{opts[:mount].underscore}_comatose_root"
21
+ end
22
+ end
23
+ Comatose.add_mount_point(opts[:mount], { :index => opts[:index] || '' })
24
+ end
25
+ end
26
+
27
+
28
+ def admin_routes_for_comatose(opts={}, &block)
29
+ Comatose.logger.debug("routes_for_comatose options: #{opts}")
30
+ case
31
+ when opts.empty?
32
+ namespace(:comatose, :path => "/:locale/comatose") do
33
+ constraints(LocaleConstraint) do
34
+ match '', :to => 'admin#index'
35
+ resources :pages, :controller => 'admin' do
36
+ collection do
37
+ post :import
38
+ get :export, :expire
39
+ end
40
+
41
+ member do
42
+ get :preview, :versions, :reorder
43
+ end
44
+ end
45
+ end
46
+ end
47
+ when opts[:mount]
48
+ namespace(:comatose, :path => "/:locale/comatose") do
49
+ # defaults :index => opts[:mount] do
50
+ constraints(LocaleConstraint) do
51
+ match '', :to => 'admin#index'
52
+ resources :pages, :controller => 'admin' do
53
+ collection do
54
+ post :import
55
+ get :export, :expire
56
+ end
57
+
58
+ member do
59
+ get :preview, :versions, :reorder
60
+ end
61
+ end
62
+ end
63
+ #end
64
+ end
65
+ end
66
+ end
67
+
68
+
69
+ end
70
+ end
@@ -0,0 +1,57 @@
1
+ namespace :comatose do
2
+ #
3
+ # Customization Tasks
4
+ #
5
+ namespace :admin do
6
+
7
+ desc "Create Comatose views, layouts, and public files..."
8
+ task :customize do
9
+ puts "Copying public files..."
10
+ plugin_dir = File.join(File.dirname(__FILE__), '../../..')
11
+ FileUtils.cp(
12
+ Dir[File.join(plugin_dir, 'resources', 'public', 'stylesheets', '*.css')],
13
+ File.join(RAILS_ROOT, 'public', 'stylesheets'),
14
+ :verbose => true
15
+ )
16
+ FileUtils.cp(
17
+ Dir[File.join(plugin_dir, 'resources', 'public', 'javascripts', '*.js')],
18
+ File.join(RAILS_ROOT, 'public', 'javascripts'),
19
+ :verbose => true
20
+ )
21
+ puts "Copying application views..."
22
+ FileUtils.mkdir_p(File.join(RAILS_ROOT, 'app', 'views', 'comatose_admin'))
23
+ FileUtils.cp(
24
+ Dir[File.join(plugin_dir, 'views', 'comatose_admin', '*.html.erb')],
25
+ File.join(RAILS_ROOT, 'app', 'views', 'comatose_admin'),
26
+ :verbose => true
27
+ )
28
+ puts "Copying application layout..."
29
+ FileUtils.cp(
30
+ File.join(plugin_dir, 'views', 'layouts', 'comatose_admin_customize.html.erb'),
31
+ File.join(RAILS_ROOT, 'app', 'views', 'layouts', 'comatose_admin.html.erb'),
32
+ :verbose => true
33
+ )
34
+ puts "Finished."
35
+ end
36
+
37
+
38
+ desc "Removes the customized files... It doesn't ask for any confirmation, nor is it Subversion-safe -- so be warned!"
39
+ task :teardown do
40
+ puts "Removing public files..."
41
+ FileUtils.rm(
42
+ File.join(RAILS_ROOT, 'public', 'stylesheets', 'admin.css')
43
+ )
44
+ FileUtils.rm(
45
+ File.join(RAILS_ROOT, 'public', 'javascripts', 'admin.js')
46
+ )
47
+
48
+ puts "Removing application views..."
49
+ FileUtils.rm_rf(
50
+ File.join(RAILS_ROOT, 'app', 'views', 'comatose_admin')
51
+ )
52
+ FileUtils.rm(
53
+ File.join(RAILS_ROOT, 'app', 'views', 'layouts', 'comatose_admin.html.erb')
54
+ )
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,79 @@
1
+ namespace :comatose do
2
+ #
3
+ # Data Migration Tasks
4
+ #
5
+ namespace :data do
6
+
7
+ def page_to_hash(page)
8
+ data = page.attributes.clone
9
+ # Pull out the specific, or unnecessary fields
10
+ %w(id parent_id updated_at author position version created_at full_path).each {|key| data.delete(key)}
11
+ if !page.children.empty?
12
+ data['children'] = []
13
+ page.children.each do |child|
14
+ data['children'] << page_to_hash(child)
15
+ end
16
+ end
17
+ data
18
+ end
19
+
20
+ def hash_to_page_tree(hsh, page)
21
+ child_ary = hsh.delete 'children'
22
+ page.update_attributes(hsh)
23
+ page.save
24
+ child_ary.each do |child_hsh|
25
+ if child_pg = page.children.find_by_slug( child_hsh['slug'] )
26
+ hash_to_page_tree( child_hsh, child_pg )
27
+ else
28
+ hash_to_page_tree( child_hsh, page.children.create )
29
+ end
30
+ end if child_ary
31
+ end
32
+
33
+ desc "Saves a page tree from page FROM or '' to file TO_FILE or db/comatose-pages.yml"
34
+ task :export do
35
+ require "#{Rails.root}/config/environment"
36
+
37
+ root = ENV['FROM'] || ''
38
+ target = ENV['TO_FILE'] || 'db/comatose-pages.yml'
39
+ # Nested hash of the page tree...
40
+ from = Comatose::Page.find_by_path(root)
41
+ if from
42
+ data = page_to_hash( from )
43
+ File.open(target, 'w') {|f| f.write data.to_yaml }
44
+ else
45
+ puts "Could not find the page at '#{root}', export aborted!"
46
+ end
47
+
48
+ puts "Finished."
49
+ end
50
+
51
+ desc "Loads page tree data FROM_FILE or db/comatose-pages.yml in to TO or Comatose::Page.root"
52
+ task :import do
53
+ require "#{Rails.root}/config/environment"
54
+
55
+ src = ENV['FROM_FILE'] || 'db/comatose-pages.yml'
56
+ root = ENV['TO'] || ''
57
+ target = (root == '') ? Comatose::Page.root : Comatose::Page.find_by_path(root)
58
+ data = YAML::load( File.open(src) )
59
+ #hash_to_page(data, target)
60
+ if target
61
+ if root == ''
62
+ hash_to_page_tree(data, target)
63
+ else
64
+ if page = target.children.find_by_slug(data['slug'])
65
+ hash_to_page_tree(data, page)
66
+ else
67
+ hash_to_page_tree(data, target.children.create)
68
+ end
69
+ end
70
+ else
71
+ puts "Could not find the page at '#{root}', import aborted!"
72
+ # TODO: Ask to create the specified path if it doesn't exist?
73
+ end
74
+ puts "Finished."
75
+ end
76
+
77
+ end
78
+
79
+ end
@@ -0,0 +1,118 @@
1
+ namespace :comatose do
2
+ #
3
+ # Setup Task...
4
+ #
5
+ namespace :setup do
6
+
7
+ desc "If the installation didn't add the images correctly, use this task"
8
+ task :copy_images do
9
+ sources = File.join(Comatose.gem_root, 'public/images/comatose', '*.gif')
10
+ destination_dir = File.join(Rails.root.to_s, 'public/images/comatose')
11
+ Comatose.logger.debug "[**Comatose**]: sources: #{sources}"
12
+ puts "[**Comatose**]: sources: #{sources}"
13
+ Comatose.logger.debug "[**Comatose**]: destination dir: #{destination_dir}"
14
+ puts "[**Comatose**]: destination dir: #{destination_dir}"
15
+ unless FileTest.exist? destination_dir
16
+ FileUtils.mkdir destination_dir
17
+ end
18
+ FileUtils.cp(Dir.glob(sources), destination_dir, :verbose => true)
19
+ puts "Finished."
20
+ end
21
+
22
+
23
+ desc "If the installation didn't add the stylesheets correctly, use this task"
24
+ task :copy_stylesheets do
25
+ sources = File.join(Comatose.gem_root, 'public/stylesheets/comatose', '*.css')
26
+ destination_dir = File.join(Rails.root.to_s, 'public/stylesheets/comatose')
27
+ Comatose.logger.debug "[**Comatose**]: sources: #{sources}"
28
+ puts "[**Comatose**]: sources: #{sources}"
29
+ Comatose.logger.debug "[**Comatose**]: destination dir: #{destination_dir}"
30
+ puts "[**Comatose**]: destination dir: #{destination_dir}"
31
+ unless FileTest.exist? destination_dir
32
+ FileUtils.mkdir destination_dir
33
+ end
34
+ FileUtils.cp(Dir.glob(sources), destination_dir, :verbose => true)
35
+ puts "Finished."
36
+ end
37
+
38
+
39
+ desc "If the installation didn't add the javascripts correctly, use this task"
40
+ task :copy_javascripts do
41
+ sources = File.join(Comatose.gem_root, 'public/javascripts/comatose', '*.js')
42
+ destination_dir = File.join(Rails.root.to_s, 'public/javascripts/comatose')
43
+ Comatose.logger.debug "[**Comatose**]: sources: #{sources}"
44
+ puts "[**Comatose**]: sources: #{sources}"
45
+ Comatose.logger.debug "[**Comatose**]: destination dir: #{destination_dir}"
46
+ puts "[**Comatose**]: destination dir: #{destination_dir}"
47
+ unless FileTest.exist? destination_dir
48
+ FileUtils.mkdir destination_dir
49
+ end
50
+ FileUtils.cp(Dir.glob(sources), destination_dir, :verbose => true)
51
+
52
+ sources = File.join(Comatose.gem_root, 'public/javascripts/jquery', '*')
53
+ destination_dir = File.join(Rails.root.to_s, 'public/javascripts/jquery')
54
+ Comatose.logger.debug "[**Comatose**]: sources: #{sources}"
55
+ puts "[**Comatose**]: sources: #{sources}"
56
+ Comatose.logger.debug "[**Comatose**]: destination dir: #{destination_dir}"
57
+ puts "[**Comatose**]: destination dir: #{destination_dir}"
58
+ unless FileTest.exist? destination_dir
59
+ FileUtils.mkdir destination_dir
60
+ end
61
+ FileUtils.cp(Dir.glob(sources), destination_dir, :verbose => true)
62
+
63
+ #source_tar = File.join(Comatose.gem_root, 'public/javascripts/wymeditor.tar')
64
+ #destination_dir = File.join(Rails.root.to_s, 'public/javascripts')
65
+ #Comatose.logger.debug "[**Comatose**]: source: #{source_tar}"
66
+ #puts "[**Comatose**]: source: #{source_tar}"
67
+ #Comatose.logger.debug "[**Comatose**]: destination dir: #{destination_dir}"
68
+ #puts "[**Comatose**]: destination dir: #{destination_dir}"
69
+ #unless FileTest.exist? destination_dir
70
+ # FileUtils.mkdir destination_dir
71
+ #end
72
+ #FileUtils.cp(source_tar, destination_dir, :verbose => true)
73
+ #`tar xvf #{File.join(destination_dir, "wymeditor.tar")}`
74
+
75
+ sources = File.join(Comatose.gem_root, 'public/javascripts', '*.js')
76
+ destination_dir = File.join(Rails.root.to_s, 'public/javascripts')
77
+ Comatose.logger.debug "[**Comatose**]: sources: #{sources}"
78
+ puts "[**Comatose**]: sources: #{sources}"
79
+ Comatose.logger.debug "[**Comatose**]: destination dir: #{destination_dir}"
80
+ puts "[**Comatose**]: destination dir: #{destination_dir}"
81
+ unless FileTest.exist? destination_dir
82
+ FileUtils.mkdir destination_dir
83
+ end
84
+ FileUtils.cp(Dir.glob(sources), destination_dir, :verbose => true)
85
+
86
+
87
+ puts "Finished."
88
+ end
89
+
90
+ # For use when upgrading...
91
+
92
+ def move(args)
93
+ if ENV['USE_SVN'] == 'true'
94
+ `svn move #{args}`
95
+ else
96
+ `mv #{args}`
97
+ end
98
+ end
99
+
100
+ def delete(args)
101
+ if ENV['USE_SVN'] == 'true'
102
+ `svn delete #{args}`
103
+ else
104
+ `rm -rf #{args}`
105
+ end
106
+ end
107
+
108
+ # TODO: Test the setup:restructure_customization task...
109
+ desc "[EXPERIMENTAL] Restructures customized admin folder to version 0.6 from older version -- Only run this if you have customized the admin. USE_SVN=true if you want to update subversion"
110
+ task :restructure_customization do
111
+ ENV['USE_SVN'] ||= 'false'
112
+ move 'public/javscripts/comatose.js public/javscripts/admin.js'
113
+ move 'public/stylesheets/comatose.css public/stylesheets/admin.css'
114
+ move 'app/views/comatose app/views/comatose_admin'
115
+ delete 'app/views/layouts/base.html.erb'
116
+ end
117
+ end
118
+ end