lucy_cms 0.0.1

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 (245) hide show
  1. data/Gemfile +19 -0
  2. data/Gemfile.lock +88 -0
  3. data/LICENSE +24 -0
  4. data/README.md +161 -0
  5. data/Rakefile +26 -0
  6. data/VERSION +1 -0
  7. data/app/controllers/application_controller.rb +5 -0
  8. data/app/controllers/cms_admin/base_controller.rb +43 -0
  9. data/app/controllers/cms_admin/layouts_controller.rb +66 -0
  10. data/app/controllers/cms_admin/pages_controller.rb +111 -0
  11. data/app/controllers/cms_admin/sessions_controller.rb +25 -0
  12. data/app/controllers/cms_admin/sites_controller.rb +69 -0
  13. data/app/controllers/cms_admin/snippets_controller.rb +62 -0
  14. data/app/controllers/cms_admin/upload_dirs_controller.rb +79 -0
  15. data/app/controllers/cms_admin/users_controller.rb +129 -0
  16. data/app/controllers/cms_content_controller.rb +51 -0
  17. data/app/models/cms_block.rb +28 -0
  18. data/app/models/cms_layout.rb +118 -0
  19. data/app/models/cms_page.rb +163 -0
  20. data/app/models/cms_site.rb +38 -0
  21. data/app/models/cms_snippet.rb +70 -0
  22. data/app/models/cms_upload.rb +19 -0
  23. data/app/models/cms_upload_dir.rb +11 -0
  24. data/app/models/cms_user.rb +93 -0
  25. data/app/views/cms_admin/layouts/_form.html.erb +10 -0
  26. data/app/views/cms_admin/layouts/_index_branch.html.erb +24 -0
  27. data/app/views/cms_admin/layouts/edit.html.erb +6 -0
  28. data/app/views/cms_admin/layouts/index.html.erb +6 -0
  29. data/app/views/cms_admin/layouts/new.html.erb +6 -0
  30. data/app/views/cms_admin/pages/_form.html.erb +37 -0
  31. data/app/views/cms_admin/pages/_form_blocks.html.erb +7 -0
  32. data/app/views/cms_admin/pages/_index_branch.html.erb +40 -0
  33. data/app/views/cms_admin/pages/edit.html.erb +5 -0
  34. data/app/views/cms_admin/pages/form_blocks.js.erb +2 -0
  35. data/app/views/cms_admin/pages/index.html.erb +6 -0
  36. data/app/views/cms_admin/pages/new.html.erb +5 -0
  37. data/app/views/cms_admin/pages/toggle_branch.js.erb +11 -0
  38. data/app/views/cms_admin/sessions/new.html.erb +12 -0
  39. data/app/views/cms_admin/sites/_form.html.erb +16 -0
  40. data/app/views/cms_admin/sites/edit.html.erb +6 -0
  41. data/app/views/cms_admin/sites/new.html.erb +6 -0
  42. data/app/views/cms_admin/sites/setup.html.erb +16 -0
  43. data/app/views/cms_admin/snippets/_form.html.erb +4 -0
  44. data/app/views/cms_admin/snippets/edit.html.erb +6 -0
  45. data/app/views/cms_admin/snippets/index.html.erb +23 -0
  46. data/app/views/cms_admin/snippets/new.html.erb +6 -0
  47. data/app/views/cms_admin/upload_dirs/_file.html.erb +15 -0
  48. data/app/views/cms_admin/upload_dirs/_form.html.erb +2 -0
  49. data/app/views/cms_admin/upload_dirs/conflict.html.erb +12 -0
  50. data/app/views/cms_admin/upload_dirs/index.html.erb +23 -0
  51. data/app/views/cms_admin/upload_dirs/new.html.erb +6 -0
  52. data/app/views/cms_admin/upload_dirs/show.html.erb +26 -0
  53. data/app/views/cms_admin/upload_dirs/uploads_destroy.js.erb +3 -0
  54. data/app/views/cms_admin/users/_form.html.erb +9 -0
  55. data/app/views/cms_admin/users/_index_branch.html.erb +16 -0
  56. data/app/views/cms_admin/users/change_password.html.erb +14 -0
  57. data/app/views/cms_admin/users/edit.html.erb +17 -0
  58. data/app/views/cms_admin/users/index.html.erb +6 -0
  59. data/app/views/cms_admin/users/new.html.erb +14 -0
  60. data/app/views/layouts/cms_admin.html.erb +52 -0
  61. data/config/application.rb +48 -0
  62. data/config/boot.rb +13 -0
  63. data/config/database.yml +22 -0
  64. data/config/environment.rb +5 -0
  65. data/config/environments/development.rb +22 -0
  66. data/config/environments/production.rb +49 -0
  67. data/config/environments/test.rb +35 -0
  68. data/config/initializers/LucyCMS.rb +37 -0
  69. data/config/initializers/mime_types.rb +5 -0
  70. data/config/locales/en.yml +5 -0
  71. data/config/routes.rb +45 -0
  72. data/config.ru +4 -0
  73. data/db/cms_seeds/example.local/layouts/default.yml +8 -0
  74. data/db/cms_seeds/example.local/layouts/nested.yml +6 -0
  75. data/db/cms_seeds/example.local/pages/child/subchild.yml +14 -0
  76. data/db/cms_seeds/example.local/pages/child.yml +10 -0
  77. data/db/cms_seeds/example.local/pages/index.yml +11 -0
  78. data/db/cms_seeds/example.local/snippets/example.yml +4 -0
  79. data/db/migrate/01_create_cms.rb +114 -0
  80. data/db/seeds.rb +7 -0
  81. data/lib/LucyCMS/acts_as_tree.rb +102 -0
  82. data/lib/LucyCMS/cms_tag/field_datetime.rb +26 -0
  83. data/lib/LucyCMS/cms_tag/field_integer.rb +26 -0
  84. data/lib/LucyCMS/cms_tag/field_string.rb +26 -0
  85. data/lib/LucyCMS/cms_tag/field_text.rb +26 -0
  86. data/lib/LucyCMS/cms_tag/helper.rb +20 -0
  87. data/lib/LucyCMS/cms_tag/page_datetime.rb +22 -0
  88. data/lib/LucyCMS/cms_tag/page_integer.rb +22 -0
  89. data/lib/LucyCMS/cms_tag/page_rich_text.rb +22 -0
  90. data/lib/LucyCMS/cms_tag/page_string.rb +22 -0
  91. data/lib/LucyCMS/cms_tag/page_text.rb +22 -0
  92. data/lib/LucyCMS/cms_tag/partial.rb +21 -0
  93. data/lib/LucyCMS/cms_tag/snippet.rb +22 -0
  94. data/lib/LucyCMS/cms_tag.rb +119 -0
  95. data/lib/LucyCMS/configuration.rb +36 -0
  96. data/lib/LucyCMS/controller_methods.rb +42 -0
  97. data/lib/LucyCMS/engine.rb +12 -0
  98. data/lib/LucyCMS/form_builder.rb +129 -0
  99. data/lib/LucyCMS/rails_extensions.rb +22 -0
  100. data/lib/LucyCMS/site_form_builder.rb +129 -0
  101. data/lib/LucyCMS/view_hooks.rb +30 -0
  102. data/lib/LucyCMS/view_methods.rb +68 -0
  103. data/lib/LucyCMS.rb +40 -0
  104. data/lib/generators/README +17 -0
  105. data/lib/generators/cms_generator.rb +44 -0
  106. data/lib/tasks/LucyCMS.rake +283 -0
  107. data/lucy_cms.gemspec +100 -0
  108. data/public/404.html +26 -0
  109. data/public/422.html +26 -0
  110. data/public/500.html +26 -0
  111. data/public/favicon.ico +0 -0
  112. data/public/images/LucyCMS/arrow_bottom.gif +0 -0
  113. data/public/images/LucyCMS/arrow_right.gif +0 -0
  114. data/public/images/LucyCMS/icon_folder.png +0 -0
  115. data/public/images/LucyCMS/icon_layout.gif +0 -0
  116. data/public/images/LucyCMS/icon_move.gif +0 -0
  117. data/public/images/LucyCMS/icon_regular.gif +0 -0
  118. data/public/images/LucyCMS/icon_snippet.gif +0 -0
  119. data/public/images/LucyCMS/icon_upload.png +0 -0
  120. data/public/images/LucyCMS/icon_user.jpg +0 -0
  121. data/public/javascripts/LucyCMS/cms.js +204 -0
  122. data/public/javascripts/LucyCMS/codemirror/codemirror.css +102 -0
  123. data/public/javascripts/LucyCMS/codemirror/codemirror.js +23 -0
  124. data/public/javascripts/LucyCMS/codemirror/codemirror_base.js +88 -0
  125. data/public/javascripts/LucyCMS/codemirror/parse_css.js +4 -0
  126. data/public/javascripts/LucyCMS/codemirror/parse_html_mixed.js +3 -0
  127. data/public/javascripts/LucyCMS/codemirror/parse_js.js +12 -0
  128. data/public/javascripts/LucyCMS/codemirror/parse_xml.js +7 -0
  129. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  130. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  131. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  132. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  133. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  134. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  135. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  136. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  137. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_222222_256x240.png +0 -0
  138. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_2e83ff_256x240.png +0 -0
  139. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_454545_256x240.png +0 -0
  140. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_888888_256x240.png +0 -0
  141. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_cd0a0a_256x240.png +0 -0
  142. data/public/javascripts/LucyCMS/jquery-ui/jquery-ui.css +362 -0
  143. data/public/javascripts/LucyCMS/jquery-ui/jquery-ui.js +190 -0
  144. data/public/javascripts/LucyCMS/jquery.js +154 -0
  145. data/public/javascripts/LucyCMS/plupload/plupload.full.min.js +1 -0
  146. data/public/javascripts/LucyCMS/plupload/plupload.html5.min.js +1 -0
  147. data/public/javascripts/LucyCMS/plupload/plupload.min.js +1 -0
  148. data/public/javascripts/LucyCMS/rails.js +132 -0
  149. data/public/javascripts/LucyCMS/tiny_mce/jquery.tinymce.js +1 -0
  150. data/public/javascripts/LucyCMS/tiny_mce/langs/en.js +170 -0
  151. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/about.htm +54 -0
  152. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/anchor.htm +26 -0
  153. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/charmap.htm +52 -0
  154. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/color_picker.htm +73 -0
  155. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/editor_template.js +1 -0
  156. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/image.htm +80 -0
  157. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
  158. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/img/icons.gif +0 -0
  159. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/about.js +72 -0
  160. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/anchor.js +37 -0
  161. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/charmap.js +335 -0
  162. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/color_picker.js +253 -0
  163. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/image.js +245 -0
  164. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/link.js +156 -0
  165. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/source_editor.js +56 -0
  166. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/langs/en.js +62 -0
  167. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/langs/en_dlg.js +51 -0
  168. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/link.htm +58 -0
  169. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/content.css +36 -0
  170. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/dialog.css +117 -0
  171. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
  172. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
  173. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
  174. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
  175. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
  176. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
  177. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/ui.css +213 -0
  178. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/source_editor.htm +25 -0
  179. data/public/javascripts/LucyCMS/tiny_mce/tiny_mce.js +1 -0
  180. data/public/javascripts/LucyCMS/tiny_mce/tiny_mce_popup.js +5 -0
  181. data/public/robots.txt +5 -0
  182. data/public/stylesheets/LucyCMS/content.css +196 -0
  183. data/public/stylesheets/LucyCMS/form.css +125 -0
  184. data/public/stylesheets/LucyCMS/reset.css +1 -0
  185. data/public/stylesheets/LucyCMS/site_form.css +82 -0
  186. data/public/stylesheets/LucyCMS/structure.css +125 -0
  187. data/public/stylesheets/LucyCMS/typography.css +25 -0
  188. data/script/rails +6 -0
  189. data/test/cms_seeds/test.host/layouts/broken.yml +1 -0
  190. data/test/cms_seeds/test.host/layouts/default.yml +3 -0
  191. data/test/cms_seeds/test.host/layouts/nested.yml +4 -0
  192. data/test/cms_seeds/test.host/pages/broken.yml +1 -0
  193. data/test/cms_seeds/test.host/pages/child/subchild.yml +10 -0
  194. data/test/cms_seeds/test.host/pages/child.yml +10 -0
  195. data/test/cms_seeds/test.host/pages/index.yml +10 -0
  196. data/test/cms_seeds/test.host/snippets/broken.yml +1 -0
  197. data/test/cms_seeds/test.host/snippets/default.yml +3 -0
  198. data/test/fixtures/cms_blocks.yml +12 -0
  199. data/test/fixtures/cms_layouts.yml +36 -0
  200. data/test/fixtures/cms_pages.yml +39 -0
  201. data/test/fixtures/cms_sites.yml +3 -0
  202. data/test/fixtures/cms_snippets.yml +5 -0
  203. data/test/fixtures/cms_upload_dirs.yml +9 -0
  204. data/test/fixtures/cms_uploads.yml +4 -0
  205. data/test/fixtures/cms_users.yml +11 -0
  206. data/test/fixtures/files/invalid_file.gif +9 -0
  207. data/test/fixtures/files/valid_image.jpg +0 -0
  208. data/test/fixtures/views/_nav_hook.html.erb +1 -0
  209. data/test/fixtures/views/_nav_hook_2.html.erb +1 -0
  210. data/test/functional/cms_admin/layouts_controller_test.rb +103 -0
  211. data/test/functional/cms_admin/pages_controller_test.rb +334 -0
  212. data/test/functional/cms_admin/sites_controller_test.rb +99 -0
  213. data/test/functional/cms_admin/snippets_controller_test.rb +102 -0
  214. data/test/functional/cms_admin/uploads_controller_test.rb +26 -0
  215. data/test/functional/cms_content_controller_test.rb +134 -0
  216. data/test/integration/rake_tasks_test.rb +65 -0
  217. data/test/integration/render_cms_seed_test.rb +34 -0
  218. data/test/integration/render_cms_test.rb +81 -0
  219. data/test/integration/sites_test.rb +63 -0
  220. data/test/integration/view_hooks_test.rb +33 -0
  221. data/test/test_helper.rb +86 -0
  222. data/test/unit/cms_block_test.rb +43 -0
  223. data/test/unit/cms_configuration_test.rb +17 -0
  224. data/test/unit/cms_layout_test.rb +146 -0
  225. data/test/unit/cms_page_test.rb +257 -0
  226. data/test/unit/cms_site_test.rb +41 -0
  227. data/test/unit/cms_snippet_test.rb +77 -0
  228. data/test/unit/cms_tag_test.rb +206 -0
  229. data/test/unit/cms_tags/field_datetime_test.rb +34 -0
  230. data/test/unit/cms_tags/field_integer_test.rb +33 -0
  231. data/test/unit/cms_tags/field_string_test.rb +34 -0
  232. data/test/unit/cms_tags/field_text_test.rb +32 -0
  233. data/test/unit/cms_tags/helper_test.rb +38 -0
  234. data/test/unit/cms_tags/page_datetime_test.rb +34 -0
  235. data/test/unit/cms_tags/page_integer_test.rb +33 -0
  236. data/test/unit/cms_tags/page_rich_text.rb +33 -0
  237. data/test/unit/cms_tags/page_string_test.rb +33 -0
  238. data/test/unit/cms_tags/page_text_test.rb +34 -0
  239. data/test/unit/cms_tags/partial_test.rb +44 -0
  240. data/test/unit/cms_tags/snippet_test.rb +33 -0
  241. data/test/unit/cms_upload_dir_test.rb +8 -0
  242. data/test/unit/cms_upload_test.rb +26 -0
  243. data/test/unit/cms_user_test.rb +8 -0
  244. data/test/unit/view_methods_test.rb +21 -0
  245. metadata +488 -0
@@ -0,0 +1,283 @@
1
+ # Small hack to auto-run migrations during testing
2
+ namespace :db do
3
+ task :abort_if_pending_migrations => [:migrate]
4
+ end
5
+
6
+ namespace :LucyCMS do
7
+
8
+ # Example use:
9
+ # rake LucyCMS:import:all FROM=mysite.local TO=mysite.com SEED_PATH=/path/to/seed_data
10
+ namespace :import do
11
+
12
+ task :check_for_requirements => :environment do |task, args|
13
+ @from = args[:from].present?? args[:from] : nil
14
+ @site = args[:to].present?? args[:to] : nil
15
+ @seed_path =
16
+ LucyCMS.config.seed_data_path =
17
+ (args[:seed_path].present?? args[:seed_path] : nil) || LucyCMS.config.seed_data_path
18
+
19
+ if !@seed_path
20
+ abort 'SEED_PATH is not set. Please define where cms fixtures are located.'
21
+ end
22
+ unless File.exists?((@from && @seed_path = "#{@seed_path}/#{@from}").to_s)
23
+ abort "FROM is not properly set. Cannot find fixtures in '#{@seed_path}'"
24
+ end
25
+ if !(@site = CmsSite.find_by_hostname(args[:to]))
26
+ abort "TO is not properly set. Cannot find site with hostname '#{args[:to]}'"
27
+ end
28
+
29
+ # a small hack to ensure that #load_from_file looks in the right directory
30
+ @site.hostname = args[:from]
31
+
32
+ puts "Starting import into #{@site.label} (#{@site.hostname}) from '#{@seed_path}'"
33
+ end
34
+
35
+ desc 'Import layouts into database'
36
+ task :layouts => [:environment, :check_for_requirements] do |task, args|
37
+ puts 'Importing Layouts'
38
+ puts '-----------------'
39
+ layouts = Dir.glob(File.expand_path('layouts/*.yml', @seed_path)).collect do |layout_file_path|
40
+ begin
41
+ attributes = YAML.load_file(layout_file_path).symbolize_keys!
42
+ @site.cms_layouts.load_from_file(@site, attributes[:slug])
43
+ rescue
44
+ nil
45
+ end
46
+ end.compact
47
+ CmsLayout.connection.transaction do
48
+ # Fixtures are not ordered in any particular way. Saving order matters,
49
+ # so we cycle them until there nothing left to save
50
+ while layouts.present?
51
+ layout = layouts.shift
52
+ if !layout.parent || layout.parent && parent = @site.cms_layouts.find_by_slug(layout.parent.slug)
53
+ layout.parent = (parent rescue nil)
54
+ should_write = true
55
+ existing_layout = nil
56
+
57
+ if existing_layout = @site.cms_layouts.find_by_slug(layout.slug)
58
+ print "Found layout in database with slug: #{layout.slug}. Overwrite? (y/N): "
59
+ should_write = ($stdin.gets.to_s.strip.downcase == 'y')
60
+ end
61
+ if should_write
62
+ if existing_layout
63
+ existing_layout.attributes = layout.attributes.slice('label', 'content', 'css', 'js')
64
+ layout = existing_layout
65
+ end
66
+ puts "Saving layout: #{layout.label} (#{layout.slug})"
67
+ layout.save!
68
+ else
69
+ puts "Skipping layout: #{layout.label} (#{layout.slug})"
70
+ end
71
+ else
72
+ layouts.push layout
73
+ end
74
+ end
75
+ end
76
+ end
77
+
78
+ desc 'Import pages into database'
79
+ task :pages => [:environment, :check_for_requirements] do |task, args|
80
+ puts 'Importing Pages'
81
+ puts '---------------'
82
+ pages = Dir.glob(File.expand_path('pages/**/*.yml', @seed_path)).collect do |page_file_path|
83
+ begin
84
+ attributes = YAML.load_file(page_file_path).symbolize_keys!
85
+ @site.cms_pages.load_from_file(@site, attributes[:full_path])
86
+ rescue
87
+ nil
88
+ end
89
+ end.compact
90
+ CmsPage.connection.transaction do
91
+ # Fixtures are not ordered in any particular way. Saving order matters,
92
+ # so we cycle them until there nothing left to save
93
+ while pages.present?
94
+ page = pages.shift
95
+ if !page.parent || page.parent && parent = @site.cms_pages.find_by_full_path(page.parent.full_path)
96
+ page.parent = (parent rescue nil)
97
+ page.cms_layout = @site.cms_layouts.find_by_slug(page.cms_layout.slug)
98
+ should_write = true
99
+ existing_page = nil
100
+
101
+ if existing_page = @site.cms_pages.find_by_full_path(page.full_path)
102
+ print "Found page in database with full_path: #{page.full_path}. Overwrite? (y/N): "
103
+ should_write = ($stdin.gets.to_s.strip.downcase == 'y')
104
+ end
105
+
106
+ if should_write
107
+ if existing_page
108
+ # merging cms_blocks_attributes with the existing page
109
+ attrs = page.cms_blocks_attributes.collect do |block_attrs|
110
+ existing_block = existing_page.cms_blocks_attributes.find{|b| b[:label] == block_attrs[:label]}
111
+ block_attrs[:id] = existing_block[:id] if existing_block
112
+ block_attrs.stringify_keys
113
+ end
114
+
115
+ existing_page.attributes = page.attributes.slice('label')
116
+ existing_page.cms_blocks_attributes = attrs
117
+ page = existing_page
118
+ end
119
+ puts "... Saving page: #{page.label} (#{page.full_path})"
120
+ page.save!
121
+ else
122
+ puts "... Skipping page: #{page.label} (#{page.full_path})"
123
+ end
124
+ else
125
+ pages.push page
126
+ end
127
+ end
128
+ end
129
+ end
130
+
131
+ desc 'Import snippets into database'
132
+ task :snippets => [:environment, :check_for_requirements] do |task, args|
133
+ puts 'Importing Snippets'
134
+ puts '------------------'
135
+ snippets = Dir.glob(File.expand_path('snippets/*.yml', @seed_path)).collect do |snippet_file_path|
136
+ begin
137
+ attributes = YAML.load_file(snippet_file_path).symbolize_keys!
138
+ @site.cms_snippets.load_from_file(@site, attributes[:slug])
139
+ rescue
140
+ nil
141
+ end
142
+ end.compact
143
+ CmsSnippet.connection.transaction do
144
+ snippets.each do |snippet|
145
+ should_write = true
146
+ existing_snippet = nil
147
+ if existing_snippet = @site.cms_snippets.find_by_slug(snippet.slug)
148
+ print "Found snippet in database with slug: #{snippet.slug}. Overwrite? (y/N): "
149
+ should_write = ($stdin.gets.to_s.strip.downcase == 'y')
150
+ end
151
+ if should_write
152
+ if existing_snippet
153
+ existing_snippet.attributes = snippet.attributes.slice('label', 'content')
154
+ snippet = existing_snippet
155
+ end
156
+ puts "... Saving snippet: #{snippet.label} (#{snippet.slug})"
157
+ snippet.save!
158
+ else
159
+ puts "... Skipping snippet: #{snippet.label} (#{snippet.slug})"
160
+ end
161
+ end
162
+ end
163
+ end
164
+
165
+ desc 'Import layouts, pages and snippets all in one go'
166
+ task :all => [:layouts, :pages, :snippets]
167
+
168
+ end
169
+
170
+ # Example use:
171
+ # rake LucyCMS:import:all FROM=mysite.com TO=mysite.local SEED_PATH=/path/to/seed_data
172
+ namespace :export do
173
+
174
+ task :check_for_requirements => :environment do |task, args|
175
+ @site = args[:from].present?? args[:from] : nil
176
+ @to = args[:to].present?? args[:to] : nil
177
+ @seed_path =
178
+ LucyCMS.config.seed_data_path =
179
+ (args[:seed_path].present?? args[:seed_path] : nil) || LucyCMS.config.seed_data_path
180
+
181
+ if !@seed_path
182
+ abort 'SEED_PATH is not set. Please define where cms fixtures are located.'
183
+ end
184
+ if !(@site = CmsSite.find_by_hostname(args[:from]))
185
+ abort "FROM is not properly set. Cannot find site with hostname '#{args[:from]}'"
186
+ end
187
+ unless @to && @seed_path = "#{@seed_path}/#{@to}"
188
+ abort "TO is not properly set. What's the target hostname?"
189
+ end
190
+
191
+ FileUtils.mkdir_p @seed_path
192
+ FileUtils.mkdir_p "#{@seed_path}/layouts"
193
+ FileUtils.mkdir_p "#{@seed_path}/pages"
194
+ FileUtils.mkdir_p "#{@seed_path}/snippets"
195
+
196
+ puts "Starting export from #{@site.label} (#{@site.hostname}) to '#{@seed_path}'"
197
+ end
198
+
199
+ desc 'Export layouts to yaml files'
200
+ task :layouts => [:environment, :check_for_requirements] do |task, args|
201
+ puts 'Exporting Layouts'
202
+ puts '-----------------'
203
+ CmsLayout.all.each do |layout|
204
+ should_write = true
205
+ file_path = File.join(@seed_path, 'layouts', "#{layout.slug}.yml")
206
+ if File.exists?(file_path)
207
+ print "Found layout fixture: #{file_path} Overwrite? (y/N): "
208
+ should_write = ($stdin.gets.to_s.strip.downcase == 'y')
209
+ end
210
+ if should_write
211
+ attributes = layout.attributes.slice('label', 'slug', 'content', 'css', 'js')
212
+ attributes['parent'] = layout.parent.slug if layout.parent
213
+ open(file_path, 'w') do |f|
214
+ f.write(attributes.to_yaml)
215
+ end
216
+ puts "... Saving layout: #{layout.label} (#{layout.slug})"
217
+ else
218
+ puts "... Skipping layout: #{layout.label} (#{layout.slug})"
219
+ end
220
+ end
221
+ end
222
+
223
+ desc 'Export pages to yaml files'
224
+ task :pages => [:environment, :check_for_requirements] do |task, args|
225
+ puts 'Exporting Pages'
226
+ puts '---------------'
227
+ CmsPage.all.each do |page|
228
+ should_write = true
229
+ page_name = page.full_path.split('/').last || 'index'
230
+ page_path = (p = page.full_path.split('/')) && p.pop && p.join('/')
231
+
232
+ FileUtils.mkdir_p "#{@seed_path}/pages/#{page_path}"
233
+ file_path = File.join(@seed_path, 'pages', "#{page_path}/#{page_name}.yml")
234
+
235
+ if File.exists?(file_path)
236
+ print "Found page fixture: #{file_path} Overwrite? (y/N): "
237
+ should_write = ($stdin.gets.to_s.strip.downcase == 'y')
238
+ end
239
+ if should_write
240
+
241
+ attributes = page.attributes.slice('label', 'slug', 'full_path')
242
+ attributes['parent'] = page.parent.full_path if page.parent
243
+ attributes['cms_layout'] = page.cms_layout.slug
244
+ attributes['cms_blocks_attributes'] = page.cms_blocks_attributes.collect{|b| b.delete(:id) && b.stringify_keys}
245
+
246
+ open(file_path, 'w') do |f|
247
+ f.write(attributes.to_yaml)
248
+ end
249
+ puts "... Saving page: #{page.label} (#{page.full_path})"
250
+ else
251
+ puts "... Skipping page: #{page.label} (#{page.full_path})"
252
+ end
253
+ end
254
+ end
255
+
256
+ desc 'Export snippets to yaml files'
257
+ task :snippets => [:environment, :check_for_requirements] do |task, args|
258
+ puts 'Exporting Snippets'
259
+ puts '------------------'
260
+ CmsSnippet.all.each do |snippet|
261
+ should_write = true
262
+ file_path = File.join(@seed_path, 'snippets', "#{snippet.slug}.yml")
263
+ if File.exists?(file_path)
264
+ print "Found snippet fixture: #{file_path} Overwrite? (y/N): "
265
+ should_write = ($stdin.gets.to_s.strip.downcase == 'y')
266
+ end
267
+ if should_write
268
+ attributes = snippet.attributes.slice('label', 'slug', 'content')
269
+ open(file_path, 'w') do |f|
270
+ f.write(attributes.to_yaml)
271
+ end
272
+ puts "... Saving snippet: #{snippet.label} (#{snippet.slug})"
273
+ else
274
+ puts "... Skipping snippet: #{snippet.label} (#{snippet.slug})"
275
+ end
276
+ end
277
+ end
278
+
279
+ desc 'Export layouts, pages and snippets all in one go'
280
+ task :all => [:layouts, :pages, :snippets]
281
+
282
+ end
283
+ end
data/lucy_cms.gemspec ADDED
@@ -0,0 +1,100 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{lucy_cms}
8
+ s.version = "0.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Lucysoft"]
12
+ s.date = %q{2011-03-09}
13
+ s.description = %q{}
14
+ s.email = %q{lucy@lucysoft.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.md"
18
+ ]
19
+ s.require_paths = ["lib"]
20
+ s.rubygems_version = %q{1.3.7}
21
+ s.summary = %q{LucyCMS is a Rails 3 CMS that lives inside your Rails App, but does not interfere with it}
22
+ s.test_files = [
23
+ "test/functional/cms_admin/layouts_controller_test.rb",
24
+ "test/functional/cms_admin/pages_controller_test.rb",
25
+ "test/functional/cms_admin/sites_controller_test.rb",
26
+ "test/functional/cms_admin/snippets_controller_test.rb",
27
+ "test/functional/cms_admin/uploads_controller_test.rb",
28
+ "test/functional/cms_content_controller_test.rb",
29
+ "test/integration/rake_tasks_test.rb",
30
+ "test/integration/render_cms_seed_test.rb",
31
+ "test/integration/render_cms_test.rb",
32
+ "test/integration/sites_test.rb",
33
+ "test/integration/view_hooks_test.rb",
34
+ "test/test_helper.rb",
35
+ "test/unit/cms_block_test.rb",
36
+ "test/unit/cms_configuration_test.rb",
37
+ "test/unit/cms_layout_test.rb",
38
+ "test/unit/cms_page_test.rb",
39
+ "test/unit/cms_site_test.rb",
40
+ "test/unit/cms_snippet_test.rb",
41
+ "test/unit/cms_tag_test.rb",
42
+ "test/unit/cms_tags/field_datetime_test.rb",
43
+ "test/unit/cms_tags/field_integer_test.rb",
44
+ "test/unit/cms_tags/field_string_test.rb",
45
+ "test/unit/cms_tags/field_text_test.rb",
46
+ "test/unit/cms_tags/helper_test.rb",
47
+ "test/unit/cms_tags/page_datetime_test.rb",
48
+ "test/unit/cms_tags/page_integer_test.rb",
49
+ "test/unit/cms_tags/page_rich_text.rb",
50
+ "test/unit/cms_tags/page_string_test.rb",
51
+ "test/unit/cms_tags/page_text_test.rb",
52
+ "test/unit/cms_tags/partial_test.rb",
53
+ "test/unit/cms_tags/snippet_test.rb",
54
+ "test/unit/cms_upload_dir_test.rb",
55
+ "test/unit/cms_upload_test.rb",
56
+ "test/unit/cms_user_test.rb",
57
+ "test/unit/view_methods_test.rb"
58
+ ]
59
+
60
+ if s.respond_to? :specification_version then
61
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
62
+ s.specification_version = 3
63
+
64
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
65
+ s.add_runtime_dependency(%q<rails>, [">= 3.0.3"])
66
+ s.add_runtime_dependency(%q<active_link_to>, [">= 0.0.6"])
67
+ s.add_runtime_dependency(%q<paperclip>, [">= 2.3.8"])
68
+ s.add_runtime_dependency(%q<mime-types>, [">= 0"])
69
+ s.add_runtime_dependency(%q<net-ldap>, [">= 0.1.1"])
70
+ s.add_development_dependency(%q<sqlite3>, [">= 0"])
71
+ s.add_runtime_dependency(%q<rails>, [">= 3.0.3"])
72
+ s.add_runtime_dependency(%q<active_link_to>, [">= 0.0.6"])
73
+ s.add_runtime_dependency(%q<paperclip>, [">= 2.3.8"])
74
+ s.add_runtime_dependency(%q<net-ldap>, [">= 0.1.1"])
75
+ else
76
+ s.add_dependency(%q<rails>, [">= 3.0.3"])
77
+ s.add_dependency(%q<active_link_to>, [">= 0.0.6"])
78
+ s.add_dependency(%q<paperclip>, [">= 2.3.8"])
79
+ s.add_dependency(%q<mime-types>, [">= 0"])
80
+ s.add_dependency(%q<net-ldap>, [">= 0.1.1"])
81
+ s.add_dependency(%q<sqlite3>, [">= 0"])
82
+ s.add_dependency(%q<rails>, [">= 3.0.3"])
83
+ s.add_dependency(%q<active_link_to>, [">= 0.0.6"])
84
+ s.add_dependency(%q<paperclip>, [">= 2.3.8"])
85
+ s.add_dependency(%q<net-ldap>, [">= 0.1.1"])
86
+ end
87
+ else
88
+ s.add_dependency(%q<rails>, [">= 3.0.3"])
89
+ s.add_dependency(%q<active_link_to>, [">= 0.0.6"])
90
+ s.add_dependency(%q<paperclip>, [">= 2.3.8"])
91
+ s.add_dependency(%q<mime-types>, [">= 0"])
92
+ s.add_dependency(%q<net-ldap>, [">= 0.1.1"])
93
+ s.add_dependency(%q<sqlite3>, [">= 0"])
94
+ s.add_dependency(%q<rails>, [">= 3.0.3"])
95
+ s.add_dependency(%q<active_link_to>, [">= 0.0.6"])
96
+ s.add_dependency(%q<paperclip>, [">= 2.3.8"])
97
+ s.add_dependency(%q<net-ldap>, [">= 0.1.1"])
98
+ end
99
+ end
100
+
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