humpyard 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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']