humpyard 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 (197) hide show
  1. data/Gemfile +28 -0
  2. data/README.rdoc +61 -0
  3. data/VERSION +1 -0
  4. data/app/controllers/humpyard/assets_controller.rb +123 -0
  5. data/app/controllers/humpyard/elements_controller.rb +200 -0
  6. data/app/controllers/humpyard/errors_controller.rb +8 -0
  7. data/app/controllers/humpyard/pages_controller.rb +365 -0
  8. data/app/helpers/humpyard/pages_helper.rb +19 -0
  9. data/app/models/humpyard/asset.rb +22 -0
  10. data/app/models/humpyard/assets/paperclip_asset.rb +48 -0
  11. data/app/models/humpyard/assets/youtube_asset.rb +38 -0
  12. data/app/models/humpyard/element.rb +57 -0
  13. data/app/models/humpyard/elements/box_element.rb +15 -0
  14. data/app/models/humpyard/elements/media_element.rb +13 -0
  15. data/app/models/humpyard/elements/news_element.rb +13 -0
  16. data/app/models/humpyard/elements/sitemap_element.rb +11 -0
  17. data/app/models/humpyard/elements/text_element.rb +49 -0
  18. data/app/models/humpyard/news_item.rb +42 -0
  19. data/app/models/humpyard/page.rb +153 -0
  20. data/app/models/humpyard/pages/news_page.rb +71 -0
  21. data/app/models/humpyard/pages/static_page.rb +25 -0
  22. data/app/models/humpyard/pages/virtual_page.rb +30 -0
  23. data/app/views/humpyard/assets/_edit.html.haml +15 -0
  24. data/app/views/humpyard/assets/_index.html.haml +24 -0
  25. data/app/views/humpyard/assets/_list.html.haml +4 -0
  26. data/app/views/humpyard/assets/_list_item.html.haml +1 -0
  27. data/app/views/humpyard/assets/_show.html.haml +38 -0
  28. data/app/views/humpyard/assets/_show_asset.html.haml +3 -0
  29. data/app/views/humpyard/assets/destroy.js.erb +4 -0
  30. data/app/views/humpyard/assets/paperclip_assets/_edit.html.haml +4 -0
  31. data/app/views/humpyard/assets/paperclip_assets/_info_table.html.haml +10 -0
  32. data/app/views/humpyard/assets/paperclip_assets/_show.html.haml +12 -0
  33. data/app/views/humpyard/assets/youtube_assets/_edit.html.haml +4 -0
  34. data/app/views/humpyard/assets/youtube_assets/_show.html.haml +5 -0
  35. data/app/views/humpyard/common/_head.html.haml +8 -0
  36. data/app/views/humpyard/common/_page_construct.html.haml +45 -0
  37. data/app/views/humpyard/elements/_edit.html.haml +25 -0
  38. data/app/views/humpyard/elements/_inline_edit.haml +0 -0
  39. data/app/views/humpyard/elements/_new.html.haml +1 -0
  40. data/app/views/humpyard/elements/_show.html.haml +29 -0
  41. data/app/views/humpyard/elements/_show_container.html.haml +3 -0
  42. data/app/views/humpyard/elements/_show_view.html.haml +2 -0
  43. data/app/views/humpyard/elements/box_elements/_edit.html.haml +4 -0
  44. data/app/views/humpyard/elements/box_elements/_inline_edit.html.haml +0 -0
  45. data/app/views/humpyard/elements/box_elements/_show.html.haml +5 -0
  46. data/app/views/humpyard/elements/destroy.js.erb +1 -0
  47. data/app/views/humpyard/elements/error.js.erb +1 -0
  48. data/app/views/humpyard/elements/media_elements/_edit.html.haml +7 -0
  49. data/app/views/humpyard/elements/media_elements/_show.html.haml +8 -0
  50. data/app/views/humpyard/elements/news_elements/_edit.html.haml +5 -0
  51. data/app/views/humpyard/elements/news_elements/_inline_edit.html.haml +0 -0
  52. data/app/views/humpyard/elements/news_elements/_show.html.haml +4 -0
  53. data/app/views/humpyard/elements/sitemap_elements/_edit.html.haml +5 -0
  54. data/app/views/humpyard/elements/sitemap_elements/_inline_edit.html.haml +0 -0
  55. data/app/views/humpyard/elements/sitemap_elements/_show.html.haml +3 -0
  56. data/app/views/humpyard/elements/sitemap_elements/_show_part.html.haml +12 -0
  57. data/app/views/humpyard/elements/text_elements/_edit.html.haml +4 -0
  58. data/app/views/humpyard/elements/text_elements/_inline_edit.html.haml +0 -0
  59. data/app/views/humpyard/elements/text_elements/_show.html.haml +4 -0
  60. data/app/views/humpyard/pages/_content.html.haml +2 -0
  61. data/app/views/humpyard/pages/_edit.html.haml +39 -0
  62. data/app/views/humpyard/pages/_index.html.haml +23 -0
  63. data/app/views/humpyard/pages/_show.html.haml +16 -0
  64. data/app/views/humpyard/pages/_subtree.html.haml +6 -0
  65. data/app/views/humpyard/pages/_tree.html.haml +3 -0
  66. data/app/views/humpyard/pages/destroy.js.erb +4 -0
  67. data/app/views/humpyard/pages/news_pages/_detail.html.haml +10 -0
  68. data/app/views/humpyard/pages/news_pages/_edit.html.haml +3 -0
  69. data/app/views/humpyard/pages/news_pages/_show.html.haml +5 -0
  70. data/app/views/humpyard/pages/show.html.haml +3 -0
  71. data/app/views/humpyard/pages/static_pages/_edit.html.haml +1 -0
  72. data/app/views/humpyard/pages/static_pages/_show.html.haml +1 -0
  73. data/app/views/humpyard/pages/virtual_pages/_edit.html.haml +7 -0
  74. data/app/views/humpyard/pages/virtual_pages/_show.html.haml +4 -0
  75. data/app/views/humpyard/pages/welcome.html.haml +13 -0
  76. data/compass/stylesheets/_humpyard.scss +12 -0
  77. data/compass/stylesheets/humpyard/_backend.scss +1 -0
  78. data/compass/stylesheets/humpyard/_base.scss +144 -0
  79. data/compass/stylesheets/humpyard/_ie.scss +1 -0
  80. data/compass/stylesheets/humpyard/_jquery_ui_overrides.scss +380 -0
  81. data/compass/stylesheets/humpyard/_print.scss +3 -0
  82. data/config/locales/de.yml +84 -0
  83. data/config/locales/en.yml +81 -0
  84. data/config/routes.rb +38 -0
  85. data/db/migrate/20100321134138_base.rb +60 -0
  86. data/db/migrate/20100330204700_create_box_element.rb +24 -0
  87. data/db/migrate/20100401153655_page_template.rb +11 -0
  88. data/db/migrate/20100409195732_page_types.rb +26 -0
  89. data/db/migrate/20100413230623_element_yield.rb +14 -0
  90. data/db/migrate/20100415132312_news_page.rb +48 -0
  91. data/db/migrate/20100415193423_page_i18n_name.rb +27 -0
  92. data/db/migrate/20100415213700_create_news_element.rb +12 -0
  93. data/db/migrate/20100703120000_shared_elements.rb +9 -0
  94. data/db/migrate/20101001142534_page_modified_at.rb +11 -0
  95. data/db/migrate/20101003100138_create_sitemap_elements.rb +13 -0
  96. data/db/migrate/20101003122108_create_humpyard_pages_virtual_pages.rb +11 -0
  97. data/db/migrate/20101006070503_page_cache_control.rb +9 -0
  98. data/db/migrate/20101104173743_create_media.rb +36 -0
  99. data/db/migrate/20110425230524_media_with_link.rb +9 -0
  100. data/lib/generators/humpyard.rb +114 -0
  101. data/lib/generators/humpyard/auth/auth_generator.rb +191 -0
  102. data/lib/generators/humpyard/auth/templates/authlogic/README +9 -0
  103. data/lib/generators/humpyard/auth/templates/authlogic/controllers/user_sessions_controller.rb +22 -0
  104. data/lib/generators/humpyard/auth/templates/authlogic/migration.rb +17 -0
  105. data/lib/generators/humpyard/auth/templates/authlogic/models/ability.rb +12 -0
  106. data/lib/generators/humpyard/auth/templates/authlogic/models/user.rb +7 -0
  107. data/lib/generators/humpyard/auth/templates/authlogic/models/user_session.rb +6 -0
  108. data/lib/generators/humpyard/auth/templates/authlogic/views/user_sessions/new.html.haml +12 -0
  109. data/lib/generators/humpyard/auth/templates/custom/README +8 -0
  110. data/lib/generators/humpyard/auth/templates/devise/README +14 -0
  111. data/lib/generators/humpyard/auth/templates/devise/models/ability.rb +14 -0
  112. data/lib/generators/humpyard/auth/templates/fake/README +0 -0
  113. data/lib/generators/humpyard/auth/templates/fake/models/ability.rb +12 -0
  114. data/lib/generators/humpyard/auth/templates/simple/README +16 -0
  115. data/lib/generators/humpyard/auth/templates/simple/config/humpyard_users.yml +2 -0
  116. data/lib/generators/humpyard/auth/templates/simple/controllers/user_sessions_controller.rb +39 -0
  117. data/lib/generators/humpyard/auth/templates/simple/models/ability.rb +12 -0
  118. data/lib/generators/humpyard/auth/templates/simple/views/user_sessions/new.html.haml +15 -0
  119. data/lib/generators/humpyard/element/USAGE +7 -0
  120. data/lib/generators/humpyard/element/element_generator.rb +82 -0
  121. data/lib/generators/humpyard/element/templates/_edit.html.haml +12 -0
  122. data/lib/generators/humpyard/element/templates/_inline_edit.html.haml +0 -0
  123. data/lib/generators/humpyard/element/templates/_show.html.haml +9 -0
  124. data/lib/generators/humpyard/element/templates/fixtures.yml +23 -0
  125. data/lib/generators/humpyard/element/templates/migration.rb +16 -0
  126. data/lib/generators/humpyard/element/templates/model.rb +11 -0
  127. data/lib/generators/humpyard/element/templates/tests/rspec/model.rb +7 -0
  128. data/lib/generators/humpyard/element/templates/tests/shoulda/model.rb +7 -0
  129. data/lib/generators/humpyard/element/templates/tests/test_unit/model.rb +7 -0
  130. data/lib/generators/humpyard/page/USAGE +7 -0
  131. data/lib/generators/humpyard/page/page_generator.rb +80 -0
  132. data/lib/generators/humpyard/page/templates/_edit.html.haml +7 -0
  133. data/lib/generators/humpyard/page/templates/_show.html.haml +4 -0
  134. data/lib/generators/humpyard/page/templates/fixtures.yml +23 -0
  135. data/lib/generators/humpyard/page/templates/migration.rb +16 -0
  136. data/lib/generators/humpyard/page/templates/model.rb +37 -0
  137. data/lib/generators/humpyard/page/templates/tests/rspec/model.rb +7 -0
  138. data/lib/generators/humpyard/page/templates/tests/shoulda/model.rb +7 -0
  139. data/lib/generators/humpyard/page/templates/tests/test_unit/model.rb +7 -0
  140. data/lib/generators/humpyard/skeleton/USAGE +6 -0
  141. data/lib/generators/humpyard/skeleton/skeleton_generator.rb +99 -0
  142. data/lib/generators/humpyard/skeleton/templates/compass.config +14 -0
  143. data/lib/generators/humpyard/skeleton/templates/images/ajax-loader.gif +0 -0
  144. data/lib/generators/humpyard/skeleton/templates/images/grid.png +0 -0
  145. data/lib/generators/humpyard/skeleton/templates/initializers/compass.rb +16 -0
  146. data/lib/generators/humpyard/skeleton/templates/initializers/haml.rb +3 -0
  147. data/lib/generators/humpyard/skeleton/templates/initializers/humpyard.rb +20 -0
  148. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/images/jstree/d.png +0 -0
  149. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/images/jstree/throbber.gif +0 -0
  150. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/javascripts/jquery-1.5.1.js +8316 -0
  151. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/javascripts/jquery-humpyard.js +790 -0
  152. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/javascripts/jquery-rails.js +157 -0
  153. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/javascripts/jquery-ui-1.8.10.js +11544 -0
  154. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/javascripts/jquery.form-2.64.js +803 -0
  155. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/javascripts/jquery.jstree.js +3510 -0
  156. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  157. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  158. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  159. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  160. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  161. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  162. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  163. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  164. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-icons_222222_256x240.png +0 -0
  165. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  166. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-icons_454545_256x240.png +0 -0
  167. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-icons_888888_256x240.png +0 -0
  168. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  169. data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/jquery-ui-1.8.10.css +573 -0
  170. data/lib/generators/humpyard/skeleton/templates/stylesheets/ie.sass +15 -0
  171. data/lib/generators/humpyard/skeleton/templates/stylesheets/ie.scss +16 -0
  172. data/lib/generators/humpyard/skeleton/templates/stylesheets/partials/_base.sass +12 -0
  173. data/lib/generators/humpyard/skeleton/templates/stylesheets/partials/_base.scss +11 -0
  174. data/lib/generators/humpyard/skeleton/templates/stylesheets/print.sass +3 -0
  175. data/lib/generators/humpyard/skeleton/templates/stylesheets/print.scss +3 -0
  176. data/lib/generators/humpyard/skeleton/templates/stylesheets/screen.sass +78 -0
  177. data/lib/generators/humpyard/skeleton/templates/stylesheets/screen.scss +90 -0
  178. data/lib/generators/humpyard/skeleton/templates/views/layout.html.haml +28 -0
  179. data/lib/html_to_textile.rb +220 -0
  180. data/lib/humpyard.rb +70 -0
  181. data/lib/humpyard/action_controller/base.rb +24 -0
  182. data/lib/humpyard/active_model/naming.rb +29 -0
  183. data/lib/humpyard/active_model/translation.rb +26 -0
  184. data/lib/humpyard/active_model/validators/publish_range.rb +14 -0
  185. data/lib/humpyard/active_record/acts/asset.rb +68 -0
  186. data/lib/humpyard/active_record/acts/container_element.rb +26 -0
  187. data/lib/humpyard/active_record/acts/element.rb +89 -0
  188. data/lib/humpyard/active_record/acts/page.rb +101 -0
  189. data/lib/humpyard/active_record/has/title_for_url.rb +75 -0
  190. data/lib/humpyard/compass.rb +6 -0
  191. data/lib/humpyard/config.rb +235 -0
  192. data/lib/humpyard/engine.rb +7 -0
  193. data/lib/humpyard/uri_parser.rb +16 -0
  194. data/lib/humpyard/uri_parser/assets_uri_parser.rb +15 -0
  195. data/lib/humpyard/uri_parser/pages_uri_parser.rb +15 -0
  196. data/lib/tasks/humpyard.rake +103 -0
  197. metadata +331 -0
@@ -0,0 +1,75 @@
1
+ module Humpyard
2
+ module ActiveRecord
3
+ module Has
4
+ module TitleForUrl
5
+ def self.included(base)
6
+ base.extend ClassMethods
7
+ base.before_save :assign_title_for_url
8
+ end
9
+
10
+ module ClassMethods
11
+ def find_by_title_for_url(url, options = {})
12
+ options[:locale] ||= ::I18n.locale
13
+
14
+ unless Humpyard::config.locales.include? options[:locale].to_sym
15
+ options[:locale] = Humpyard::config.locales.first
16
+ end
17
+
18
+ if options[:skip_fallbacks]
19
+ locales = [options[:locale].to_sym]
20
+ else
21
+ locales = [options[:locale].to_sym] + (Humpyard::config.locales.map{|l| l.to_sym} - [options[:locale].to_sym])
22
+ end
23
+
24
+ locales.each do |l|
25
+ #t = self.with_locale(l){find_first_by_translated_attr_and_locales(:title_for_url, url)}
26
+ t = self.translation_class.where('locale = ? AND title_for_url = ?', l.to_s, url.to_s).first
27
+
28
+ if t
29
+ return self.find(t["#{self.name.underscore.gsub('/', '_')}_id"])
30
+ end
31
+ end
32
+
33
+ nil
34
+ end
35
+ end
36
+
37
+ def query_title_for_url(locale = I18n.locale)
38
+ given = translations.all
39
+ ([locale.to_sym] + (Humpyard::config.locales.map{|l| l.to_sym} - [locale.to_sym])).each do |l|
40
+ t = given.select{|tx| tx.locale.to_sym == l}.first
41
+ return t.title_for_url if t and not t.title_for_url.blank?
42
+ end
43
+ nil
44
+ end
45
+
46
+ def suggested_title_for_url(locale = I18n.locale)
47
+ return nil if title.blank?
48
+
49
+ title_for_url = (self.title(locale) ? self.title(locale) : self.title).parameterize('_').to_s
50
+
51
+ # Check if parameterized totally failed
52
+ if title_for_url == ''
53
+ title_for_url = CGI::escape(self.title.gsub(/[a-z0-9\-_\x00-\x7F]+/, '_'))
54
+ end
55
+
56
+ while obj = self.class.find_by_title_for_url(title_for_url, :skip_fallbacks => true, :locale => locale) and obj.id != self.id do
57
+ title_for_url += '_'
58
+ end
59
+ return title_for_url
60
+ end
61
+
62
+ protected
63
+ def assign_title_for_url
64
+ self.title_for_url = suggested_title_for_url
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+ class ActiveRecord::Base
72
+ def self.has_title_for_url(options = {})
73
+ include Humpyard::ActiveRecord::Has::TitleForUrl
74
+ end
75
+ end
@@ -0,0 +1,6 @@
1
+ require 'compass'
2
+
3
+ options = Hash.new
4
+ options[:stylesheets_directory] = ::File.expand_path(::File.join(::File.dirname(__FILE__), '..', '..', 'compass', 'stylesheets'))
5
+ options[:templates_directory] = ::File.expand_path(::File.join(File.dirname(__FILE__), '..', '..', 'compass', 'templates'))
6
+ ::Compass::Frameworks.register('humpyard', options)
@@ -0,0 +1,235 @@
1
+ module Humpyard
2
+ ####
3
+ # Humpyard::Config is responsible for holding and managing the configuration
4
+ # for your Humpyard Rails Application.
5
+ #
6
+ # Possible configuration options are:
7
+ # +table_name_prefix+::
8
+ # The prefix for the SQL tables
9
+ #
10
+ # The default value is <tt>"humpyard_"</tt>
11
+ # +www_prefix+::
12
+ # The prefix for the pages in your routes
13
+ #
14
+ # You may use some variables that will be replaced by
15
+ # Humpyard::Page.human_url
16
+ # <tt>":locale"</tt>:: The current ::I18n.locale
17
+ #
18
+ # Leading slashes ("/") as it would result in invalid URLs and will be ignored.
19
+ #
20
+ # A tailing slash ("/") indicates, that the value should be a path.
21
+ # Without the tailing slash the last part would become a prefix
22
+ # to the pages URL.
23
+ # A page with the path "about/config.html" with the ::I18n.locale="en"
24
+ # and the given prefix will result in:
25
+ # <tt>":locale/"</tt>:: <tt>"/en/about/config.html"</tt>
26
+ # <tt>":locale/cms_"</tt>:: <tt>"/en/cms_about_config.html"</tt>
27
+ # <tt>"cms/"</tt>:: <tt>"/cms/about/config.html"</tt>
28
+ # <tt>""</tt>: <tt>"/about/config.html"</tt>
29
+ #
30
+ # The default value is <tt>":locale/"</tt>
31
+ # +admin_prefix+::
32
+ # The prefix for the admin controllers
33
+ #
34
+ # The default value is <tt>"admin"</tt>
35
+ # +locales+::
36
+ # The locales used for the pages
37
+ #
38
+ # This option can be configured by giving an Array or comma separated String,
39
+ # e.g. <tt>'en,de,fr'</tt> or <tt>['en', 'de', 'fr']</tt>.
40
+ #
41
+ # Setting this option will also alter the HumpyardForm.config.locales to the
42
+ # given value
43
+ #
44
+ #
45
+ # The default value is <tt>['en']</tt>
46
+ class Config
47
+ attr_writer :table_name_prefix, :element_types, :page_types # :nodoc:
48
+ attr_writer :templates, :default_template, :browser_title_prefix, :browser_title_postfix # :nodoc:
49
+ attr_writer :users_framework, :js_framework, :compass_format, :compass_stylesheet_link_tag_path # :nodoc:
50
+
51
+ def initialize(&block) #:nodoc:
52
+ configure(&block) if block_given?
53
+ end
54
+
55
+ # Configure your Humpyard Rails Application with the given parameters in
56
+ # the block. For possible options see above.
57
+ def configure(&block)
58
+ yield(self)
59
+ end
60
+
61
+ def table_name_prefix #:nodoc:
62
+ @table_name_prefix ||= 'humpyard_'
63
+ end
64
+
65
+ def www_prefix #:nodoc:
66
+ @www_prefix ||= ':locale/'
67
+ end
68
+
69
+ def www_prefix=(prefix)
70
+ if prefix
71
+ @www_prefix = prefix.gsub /^\//, ''
72
+ else
73
+ @www_prefix = nil
74
+ end
75
+ end
76
+
77
+ def element_types #:nodoc:
78
+ @element_types ||= {
79
+ 'box_element' => Humpyard::Elements::BoxElement,
80
+ 'text_element' => Humpyard::Elements::TextElement,
81
+ 'media_element' => Humpyard::Elements::MediaElement,
82
+ 'news_element' => Humpyard::Elements::NewsElement,
83
+ 'sitemap_element' => Humpyard::Elements::SitemapElement
84
+ }
85
+ end
86
+
87
+ def page_types #:nodoc:
88
+ @page_types ||= {
89
+ 'static' => Humpyard::Pages::StaticPage,
90
+ 'virtual' => Humpyard::Pages::VirtualPage,
91
+ 'news' => Humpyard::Pages::NewsPage
92
+ }
93
+ end
94
+
95
+ def asset_types #:nodoc:
96
+ @asset_types ||= {
97
+ 'paperclip' => Humpyard::Assets::PaperclipAsset,
98
+ 'youtube' => Humpyard::Assets::YoutubeAsset
99
+ }
100
+ end
101
+
102
+ def templates #:nodoc:
103
+ @templates ||= {
104
+ 'application' => {:yields => [:sidebar]}
105
+ }
106
+ end
107
+
108
+ def toolbar_actions #:nodoc:
109
+ @toolbar_actions ||= {
110
+ #'edit' => {
111
+ # :title => 'humpyard_cms.toolbar.edit',
112
+ # :command => 'toggleEditMode',
113
+ # :icon => 'ui-icon-pencil'
114
+ #},
115
+ 'hy_pages' => {
116
+ :title => 'humpyard_cms.toolbar.pages',
117
+ :controller => '/humpyard/pages',
118
+ :action => :index,
119
+ :dialog => "size:800x700;dialog_id:pages-dialog",
120
+ :icon => 'ui-icon-document',
121
+ :class => Humpyard::Page
122
+ },
123
+ 'hy_assets' => {
124
+ :title => 'humpyard_cms.toolbar.assets',
125
+ :controller => '/humpyard/assets',
126
+ :action => :index,
127
+ :dialog => "size:800x700;dialog_id:assets-dialog",
128
+ :icon => 'ui-icon-video',
129
+ :class => Humpyard::Asset
130
+ }
131
+ }
132
+ end
133
+
134
+ def default_template #:nodoc:
135
+ @default_template ||= templates.keys.first
136
+ end
137
+
138
+ def default_template_name
139
+ default_template.to_s
140
+ end
141
+
142
+ def browser_title_prefix #:nodoc:
143
+ @browser_title_prefix ||= ''
144
+ end
145
+
146
+ def browser_title_postfix #:nodoc:
147
+ @browser_title_postfix ||= ''
148
+ end
149
+
150
+ # Get the prefix of your pages with interpreted variables given as params.
151
+ # You normally don't want to call it yourself. Instead use the
152
+ # Humpyard::Page.human_url which will put the current ::I18n.locale into
153
+ # the params.
154
+ def parsed_www_prefix(params)
155
+ prefix = "#{www_prefix}"
156
+ params.each do |key,value|
157
+ prefix.gsub!(":#{key}", value.to_s)
158
+ end
159
+ prefix
160
+ end
161
+
162
+ def admin_prefix #:nodoc:
163
+ @admin_prefix.blank? ? 'admin' : @admin_prefix
164
+ end
165
+
166
+ def admin_prefix=(prefix)
167
+ if prefix
168
+ @admin_prefix = prefix.gsub /^\//, ''
169
+ else
170
+ @admin_prefix = nil
171
+ end
172
+ end
173
+
174
+ def locales=(locales) #:nodoc:
175
+ if locales.nil?
176
+ @locales = nil
177
+ elsif locales.class == Array
178
+ @locales = locales.map{|l| l.to_sym}
179
+ else
180
+ @locales = locales.split(',').collect{|l| l.to_sym}
181
+ end
182
+
183
+ # Keep HumpyardForm locales in sync
184
+ HumpyardForm.config.locales = locales
185
+ end
186
+
187
+ def locales #:nodoc:
188
+ @locales ||= [:en]
189
+ end
190
+
191
+ # Get the given locales as Regexp constraint.
192
+ # This may be used to see if a locale matches the configured locales.
193
+ # Usage is e.g. in the routes.
194
+ def locales_contraint
195
+ Regexp.new locales * '|'
196
+ end
197
+
198
+ def users_framework
199
+ @users_framework ||= 'simple'
200
+ end
201
+
202
+ def js_framework
203
+ @js_framework ||= 'jquery-ui-18'
204
+ end
205
+
206
+ def compass_format
207
+ @compass_format ||= 'scss'
208
+ end
209
+
210
+ def compass_stylesheet_link_tag_path
211
+ @compass_stylesheet_link_tag_path ||= 'compiled/'
212
+ end
213
+
214
+ def page_formats=(formats) #:nodoc:
215
+ if formats.nil?
216
+ @page_formats = nil
217
+ elsif formats.class == Array
218
+ @page_formats = formats.map{|l| l.to_sym}
219
+ else
220
+ @page_formats = formats.split(',').collect{|l| l.to_sym}
221
+ end
222
+ end
223
+
224
+ def page_formats #:nodoc:
225
+ @page_formats ||= [:html]
226
+ end
227
+
228
+ # Get the given locales as Regexp constraint.
229
+ # This may be used to see if a locale matches the configured locales.
230
+ # Usage is e.g. in the routes.
231
+ def page_formats_contraint
232
+ Regexp.new page_formats * '|'
233
+ end
234
+ end
235
+ end
@@ -0,0 +1,7 @@
1
+ module Humpyard
2
+ ####
3
+ # Humpyard::Engine is the ::Rails::Engine running the Humpyard
4
+ class Engine < ::Rails::Engine
5
+ #engine_name :humpyard
6
+ end
7
+ end
@@ -0,0 +1,16 @@
1
+ module Humpyard
2
+ module UriParser
3
+ class << self
4
+ def parsers
5
+ @parsers ||= [::Humpyard::UriParser::PagesUriParser, ::Humpyard::UriParser::AssetsUriParser]
6
+ end
7
+
8
+ def substitute content, options = {}
9
+ parsers.each do |parser|
10
+ content = parser.substitute content, options
11
+ end
12
+ return content
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ module Humpyard
2
+ module UriParser
3
+ class AssetsUriParser
4
+ def self.substitute content, options = {}
5
+ content.gsub(/humpyard:\/\/asset\/([0-9]*)/) do |uri|
6
+ begin
7
+ "#{options[:prefix]}#{Asset.find($1).url}#{options[:postfix]}"
8
+ rescue
9
+ ''
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module Humpyard
2
+ module UriParser
3
+ class PagesUriParser
4
+ def self.substitute content, options = {}
5
+ content.gsub(/humpyard:\/\/page\/([0-9]*)/) do |uri|
6
+ begin
7
+ "#{options[:prefix]}#{Page.find($1).human_url}#{options[:postfix]}"
8
+ rescue
9
+ "#{options[:prefix]}#{Page.root_page.human_url}#{options[:postfix]}"
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,103 @@
1
+ namespace :humpyard do
2
+ namespace :db do
3
+ desc "Migrate the database through scripts in db/migrate and update db/schema.rb by invoking db:schema:dump. Target specific version with VERSION=x. Turn off output with VERBOSE=false."
4
+ task :migrate => [:environment, :prepare_namespace] do
5
+ ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
6
+ ActiveRecord::Migrator.migrate("#{File.dirname(__FILE__)}/../../db/migrate/", ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
7
+ Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
8
+ end
9
+
10
+ task :prepare_namespace do
11
+ require 'active_record'
12
+ puts 'prepage humpyard table_name_prefix'
13
+ ActiveRecord::Base.configurations = Rails.application.config.database_configuration
14
+
15
+ class ActiveRecord::Base
16
+ self.table_name_prefix = "#{::ActiveRecord::Base.table_name_prefix}#{Humpyard::config.table_name_prefix}"
17
+ end
18
+ end
19
+
20
+ task :remove_namespace do
21
+ puts 'remove humpyard table_name_prefix'
22
+
23
+ class ActiveRecord::Base
24
+ self.table_name_prefix = "#{::ActiveRecord::Base.table_name_prefix[Humpyard::config.table_name_prefix.length,1000]}"
25
+ end
26
+ end
27
+
28
+ namespace :migrate do
29
+ desc 'Rollbacks the database one migration and re migrate up. If you want to rollback more than one step, define STEP=x. Target specific version with VERSION=x.'
30
+ task :redo => [:environment, :prepare_namespace] do
31
+ if ENV["VERSION"]
32
+ Rake::Task["humpyard:db:migrate:down"].invoke
33
+ Rake::Task["humpyard:db:migrate:up"].invoke
34
+ else
35
+ Rake::Task["humpyard:db:rollback"].invoke
36
+ Rake::Task["humpyard:db:migrate"].invoke
37
+ end
38
+ end
39
+
40
+ desc 'Runs the "up" for a given migration VERSION.'
41
+ task :up => [:environment, :prepare_namespace] do
42
+ version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
43
+ raise "VERSION is required" unless version
44
+ ActiveRecord::Migrator.run(:up, "#{File.dirname(__FILE__)}/../../db/migrate/", version)
45
+ Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
46
+ end
47
+
48
+ desc 'Runs the "down" for a given migration VERSION.'
49
+ task :down => [:environment, :prepare_namespace] do
50
+ version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
51
+ raise "VERSION is required" unless version
52
+ ActiveRecord::Migrator.run(:down, "#{File.dirname(__FILE__)}/../../db/migrate/", version)
53
+ Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
54
+ end
55
+ end
56
+
57
+ desc 'Rolls the schema back to the previous version. Specify the number of steps with STEP=n'
58
+ task :rollback => [:environment, :prepare_namespace] do
59
+ step = ENV['STEP'] ? ENV['STEP'].to_i : 1
60
+ ActiveRecord::Migrator.rollback("#{File.dirname(__FILE__)}/../../db/migrate/", step)
61
+ Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
62
+ end
63
+
64
+ desc 'Pushes the schema to the next version. Specify the number of steps with STEP=n'
65
+ task :forward => [:environment, :prepare_namespace] do
66
+ step = ENV['STEP'] ? ENV['STEP'].to_i : 1
67
+ ActiveRecord::Migrator.forward("#{File.dirname(__FILE__)}/../../db/migrate/", step)
68
+ Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
69
+ end
70
+
71
+ desc "Retrieves the current schema version number"
72
+ task :version => [:environment, :prepare_namespace] do
73
+ puts "Current version: #{ActiveRecord::Migrator.current_version}"
74
+ end
75
+
76
+ desc "Raises an error if there are pending migrations"
77
+ task :abort_if_pending_migrations => [:environment, :prepare_namespace] do
78
+ if defined? ActiveRecord
79
+ pending_migrations = ActiveRecord::Migrator.new(:up, "#{File.dirname(__FILE__)}/../../db/migrate/").pending_migrations
80
+ if pending_migrations.any?
81
+ puts "You have #{pending_migrations.size} pending migrations:"
82
+ pending_migrations.each do |pending_migration|
83
+ puts ' %4d %s' % [pending_migration.version, pending_migration.name]
84
+ end
85
+ abort %{Run "rake humpyard:db:migrate" to update your database then try again.}
86
+ end
87
+ end
88
+ end
89
+ end
90
+
91
+ namespace :pages do
92
+ desc "Create root page if it does not exists"
93
+ task :create_root => [:environment] do
94
+ if Humpyard::Page.root_page
95
+ puts "There is already a root page"
96
+ else
97
+ Humpyard::Pages::StaticPage.create :title => 'index'
98
+ end
99
+ end
100
+ end
101
+ end
102
+
103
+ task :'db:migrate' => [:'humpyard:db:migrate', :'humpyard:db:remove_namespace']