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,12 @@
1
+ class Ability
2
+ include CanCan::Ability
3
+
4
+ def initialize(user)
5
+ if user.is_admin?
6
+ can :manage, Humpyard::Page
7
+ can :manage, Humpyard::Element
8
+ else
9
+ can :read, Humpyard::Page
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,7 @@
1
+ class <%= class_name %> < ActiveRecord::Base
2
+ acts_as_authentic
3
+
4
+ def is_admin?
5
+ self.admin ? true : false
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ class <%= class_name %>Session < Authlogic::Session::Base
2
+ # specify configuration here, such as:
3
+ # logout_on_timeout true
4
+ # ...many more options in the documentation
5
+ # http://rdoc.info/projects/binarylogic/authlogic
6
+ end
@@ -0,0 +1,12 @@
1
+ = form_for @user_session do |f|
2
+ = f.error_messages
3
+ %p
4
+ = f.label :login
5
+ %br
6
+ = f.text_field :login
7
+ %p
8
+ = f.label :password
9
+ %br
10
+ = f.password_field :password
11
+ %p
12
+ = f.submit "Login"
@@ -0,0 +1,8 @@
1
+ Add something defining a current_user to your application controller
2
+
3
+ helper_method :current_user
4
+
5
+ private
6
+ def current_user
7
+ # do something here
8
+ end
@@ -0,0 +1,14 @@
1
+ If you did not already install Devise, you should do it now:
2
+
3
+ 1. Install Devise to your Rails application running:
4
+
5
+ bundle install
6
+ rails generate devise_install
7
+
8
+ 2. Create a User model running:
9
+
10
+ rails generate devise user
11
+
12
+ For options and further details see the Devise documentation:
13
+
14
+ http://github.com/plataformatec/devise
@@ -0,0 +1,14 @@
1
+ class Ability
2
+ include CanCan::Ability
3
+
4
+ def initialize(user)
5
+ # Add abilities to manage pages and elements here, e.g.:
6
+
7
+ #if user.is_admin?
8
+ # can :manage, Humpyard::Page
9
+ # can :manage, Humpyard::Element
10
+ #else
11
+ # can :read, Humpyard::Page
12
+ #end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ class Ability
2
+ include CanCan::Ability
3
+
4
+ def initialize(user)
5
+ if user == 'admin'
6
+ can :manage, Humpyard::Page
7
+ can :manage, Humpyard::Element
8
+ else
9
+ can :read, Humpyard::Page
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ You can now configure your users in
2
+
3
+ config/humpyard_users.yml
4
+
5
+ The format is
6
+
7
+ username: sha1_password
8
+
9
+ You can create passwords on the console using
10
+
11
+ require 'digest/sha1'
12
+ Digest::SHA1.hexdigest(password)
13
+
14
+ where password is the desired password.
15
+
16
+ The password for "admin" in the example yml file is "humpyard".
@@ -0,0 +1,2 @@
1
+ admin: 48843e18dde5ed74c7c1a8a719c5123a397d8e6d
2
+ customer: 48843e18dde5ed74c7c1a8a719c5123a397d8e6d
@@ -0,0 +1,39 @@
1
+ class <%= class_name %>SessionsController < ApplicationController
2
+ helper 'humpyard::pages'
3
+
4
+ def new
5
+ @page = Humpyard::Page.new(
6
+ :title => I18n.t('humpyard_cms.login.title'),
7
+ :always_refresh => true,
8
+ :modified_at => Time.now,
9
+ :searchable => false
10
+ )
11
+ end
12
+
13
+ def create
14
+ unless params[:username].blank? or params[:password].blank?
15
+ require 'digest/sha1'
16
+
17
+ users = YAML::load(File.open("#{RAILS_ROOT}/config/humpyard_users.yml"))
18
+
19
+ if users and "#{users[params[:username]]}" == Digest::SHA1.hexdigest(params[:password])
20
+ @current_user = params[:username]
21
+ session[:humpyard] ||= {}
22
+ session[:humpyard][:user] = @current_user
23
+ redirect_to Humpyard::Page.root_page.human_url
24
+ return
25
+ end
26
+ end
27
+
28
+ @login_error = true
29
+ new
30
+ render "new"
31
+ end
32
+
33
+ def destroy
34
+ @current_user = nil
35
+ session[:humpyard] ||= {}
36
+ session[:humpyard][:user] = @current_user
37
+ redirect_to Humpyard::Page.root_page.human_url
38
+ end
39
+ end
@@ -0,0 +1,12 @@
1
+ class Ability
2
+ include CanCan::Ability
3
+
4
+ def initialize(user)
5
+ if user == 'admin'
6
+ can :manage, Humpyard::Page
7
+ can :manage, Humpyard::Element
8
+ else
9
+ can :read, Humpyard::Page
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ .login-form
2
+ - if @login_error
3
+ %p.error
4
+ %strong #{I18n.t 'humpyard_cms.login.login_error'}
5
+ = form_tag login_path do
6
+ %p
7
+ %label
8
+ #{I18n.t 'humpyard_cms.login.username'}:
9
+ = text_field_tag :username, params[:username], :class => 'field'
10
+ %p
11
+ %label
12
+ #{I18n.t 'humpyard_cms.login.password'}:
13
+ = password_field_tag :password, '', :class => 'field'
14
+ %p
15
+ = submit_tag I18n.t('humpyard_cms.login.submit'), :class => 'button'
@@ -0,0 +1,7 @@
1
+ Description:
2
+ The humpyard element generator creates a custom element that can
3
+ be used inside your humpyard pages.
4
+
5
+ Examples:
6
+ rails generate humpyard:element SimpleText text:string
7
+ rails generate humpyard:element another_thing content:text --skip-tests
@@ -0,0 +1,82 @@
1
+ require 'generators/humpyard'
2
+ require 'rails/generators/named_base'
3
+ require 'rails/generators/migration'
4
+ require 'rails/generators/active_model'
5
+ require 'active_record'
6
+
7
+ module Humpyard
8
+ module Generators
9
+ ####
10
+ # == Element Generator
11
+ #
12
+ # rails humpyard:element ElementName [field:type field:type] [options]
13
+ #
14
+ # === Description
15
+ # The humpyard element generator creates a custom element that can
16
+ # be used inside your humpyard pages.
17
+ #
18
+ # === Options
19
+ # <tt>[--skip-model]</tt>:: Don't generate a model or migration file.
20
+ # <tt>[--skip-migration]</tt>:: Dont generate migration file for model.
21
+ # <tt>[--skip-timestamps]</tt>:: Don't add timestamps to migration file.
22
+ # <tt>[--skip-views]</tt>:: Don't generate view files.
23
+ #
24
+ # === Runtime options
25
+ # <tt>-q, [--quiet]</tt>:: Supress status output
26
+ # <tt>-p, [--pretend]</tt>:: Run but do not make any changes
27
+ # <tt>-s, [--skip]</tt>:: Skip files that already exist
28
+ # <tt>-f, [--force]</tt>:: Overwrite files that already exist
29
+ #
30
+ # === Test framework options
31
+ # <tt>[--testunit]</tt>:: Use test/unit for test files.
32
+ # <tt>[--shoulda]</tt>:: Use shoulda for test files.
33
+ # <tt>[--rspec]</tt>:: Use RSpec for test files.
34
+ # <tt>[--skip-tests]</tt>:: Don't generate test files.
35
+ #
36
+ # === Examples
37
+ # rails generate humpyard:element SimpleText text:string
38
+ # rails generate humpyard:element another_thing content:text --skip-tests
39
+ #
40
+ #
41
+ class ElementGenerator < Base
42
+ include Rails::Generators::Migration
43
+
44
+ argument :element_name, :type => :string, :required => true, :banner => 'ElementName'
45
+
46
+ include Humpyard::Generators::ModelTemplate
47
+
48
+ def create_element # :nodoc:
49
+ template 'model.rb', "app/models/#{singular_name}.rb"
50
+ unless options.skip_tests?
51
+ case test_framework
52
+ when :rspec
53
+ template "tests/rspec/model.rb", "spec/models/#{singular_name}_spec.rb"
54
+ template 'fixtures.yml', "spec/fixtures/#{plural_name}.yml"
55
+ else
56
+ template "tests/#{test_framework}/model.rb", "test/unit/#{singular_name}_test.rb"
57
+ template 'fixtures.yml', "test/fixtures/#{plural_name}.yml"
58
+ end
59
+ end
60
+
61
+ unless options.skip_migration?
62
+ migration_template 'migration.rb', "db/migrate/create_#{plural_name.gsub('/','_')}.rb"
63
+ end
64
+
65
+ unless options.skip_views?
66
+ template '_inline_edit.html.haml', "app/views/humpyard/elements/#{plural_name}/_inline_edit.html.haml"
67
+ template '_edit.html.haml', "app/views/humpyard/elements/#{plural_name}/_edit.html.haml"
68
+ template '_show.html.haml', "app/views/humpyard/elements/#{plural_name}/_show.html.haml"
69
+ end
70
+
71
+ unless options.skip_model?
72
+ create_model options
73
+ end
74
+ end
75
+
76
+ private
77
+ def model_name
78
+ "#{element_name.camelize}Element"
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,12 @@
1
+ / The editing form for the element. This sits inside a tab view in a dialog.
2
+ / These tabs are positioned at the beginning of the tab view. Example:
3
+
4
+ / .humpyard-tab
5
+ / .humpyard-tab-title
6
+ / Headlines
7
+ / = form.input :headline
8
+ / = form.input :subheadline
9
+ / .humpyard-tab
10
+ / .humpyard-tab-title
11
+ / Text Content
12
+ / = form.input :content
@@ -0,0 +1,9 @@
1
+ / Renders the element on the page. You can access your data model instance via element.content_data. See example below
2
+
3
+ .<%= singular_name %>
4
+ / .headline
5
+ / = element.content_data.headline
6
+ / .subheadline
7
+ / = element.content_data.subheadline
8
+ / .content
9
+ / = element.content_data.content
@@ -0,0 +1,23 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ <% unless attributes.empty? -%>
4
+ one:
5
+ <% for attribute in attributes -%>
6
+ <%= attribute.name %>: <%= attribute.default %>
7
+ <% end -%>
8
+
9
+ two:
10
+ <% for attribute in attributes -%>
11
+ <%= attribute.name %>: <%= attribute.default %>
12
+ <% end -%>
13
+ <% else -%>
14
+ # This model initially had no columns defined. If you add columns to the
15
+ # model remove the '{}' from the fixture names and add the columns immediately
16
+ # below each fixture, per the syntax in the comments below
17
+ #
18
+ one: {}
19
+ # column: value
20
+ #
21
+ two: {}
22
+ # column: value
23
+ <% end -%>
@@ -0,0 +1,16 @@
1
+ class Create<%= plural_class_name.gsub('::', '') %> < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :<%= plural_name.gsub('/','_') %> do |t|
4
+ <%- for attribute in attributes -%>
5
+ t.<%= attribute.type %> :<%= attribute.name %>
6
+ <%- end -%>
7
+ <%- unless options[:skip_timestamps] -%>
8
+ t.timestamps
9
+ <%- end -%>
10
+ end
11
+ end
12
+
13
+ def self.down
14
+ drop_table :<%= plural_name.gsub('/','_') %>
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ class <%= class_name %> < ActiveRecord::Base
2
+ acts_as_humpyard_element
3
+
4
+ <% if attributes.size > 0 -%>
5
+ attr_accessible <%= attributes.map{|attribute| attribute.reference? ? ":#{attribute.name}, :#{attribute.name}_id" : ":#{attribute.name}"} * ', ' %>
6
+ <% end -%>
7
+ <% attributes.select {|attr| attr.reference? }.each do |attribute| -%>
8
+ belongs_to :<%= attribute.name %>
9
+ <% end -%>
10
+
11
+ end
@@ -0,0 +1,7 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe <%= class_name %> do
4
+ it "should be valid" do
5
+ <%= class_name %>.new.should be_valid
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class <%= class_name %>Test < ActiveSupport::TestCase
4
+ should "be valid" do
5
+ assert <%= class_name %>.new.valid?
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class <%= class_name %>Test < ActiveSupport::TestCase
4
+ def test_should_be_valid
5
+ assert <%= class_name %>.new.valid?
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ Description:
2
+ The humpyard page generator creates a custom page that can
3
+ be used inside your humpyard app.
4
+
5
+ Examples:
6
+ rails generate humpyard:page SimpleText text:string
7
+ rails generate humpyard:page another_thing content:text --skip-tests
@@ -0,0 +1,80 @@
1
+ require 'generators/humpyard'
2
+ require 'rails/generators/named_base'
3
+ require 'rails/generators/migration'
4
+ require 'rails/generators/active_model'
5
+ require 'active_record'
6
+
7
+ module Humpyard
8
+ module Generators
9
+ ####
10
+ # == Element Generator
11
+ #
12
+ # rails humpyard:element ElementName [field:type field:type] [options]
13
+ #
14
+ # === Description
15
+ # The humpyard page generator creates a custom page that can
16
+ # be used inside your humpyard application.
17
+ #
18
+ # === Options
19
+ # <tt>[--skip-model]</tt>:: Don't generate a model or migration file.
20
+ # <tt>[--skip-migration]</tt>:: Dont generate migration file for model.
21
+ # <tt>[--skip-timestamps]</tt>:: Don't add timestamps to migration file.
22
+ # <tt>[--skip-views]</tt>:: Don't generate view files.
23
+ #
24
+ # === Runtime options
25
+ # <tt>-q, [--quiet]</tt>:: Supress status output
26
+ # <tt>-p, [--pretend]</tt>:: Run but do not make any changes
27
+ # <tt>-s, [--skip]</tt>:: Skip files that already exist
28
+ # <tt>-f, [--force]</tt>:: Overwrite files that already exist
29
+ #
30
+ # === Test framework options
31
+ # <tt>[--testunit]</tt>:: Use test/unit for test files.
32
+ # <tt>[--shoulda]</tt>:: Use shoulda for test files.
33
+ # <tt>[--rspec]</tt>:: Use RSpec for test files.
34
+ # <tt>[--skip-tests]</tt>:: Don't generate test files.
35
+ #
36
+ # === Examples
37
+ # rails generate humpyard:page SimpleText text:string
38
+ # rails generate humpyard:page another_thing content:text --skip-tests
39
+ #
40
+ #
41
+ class PageGenerator < Base
42
+ include Rails::Generators::Migration
43
+
44
+ argument :page_name, :type => :string, :required => true, :banner => 'PageName'
45
+
46
+ include Humpyard::Generators::ModelTemplate
47
+
48
+ def create_page # :nodoc:
49
+ template 'model.rb', "app/models/#{singular_name}.rb"
50
+ unless options.skip_tests?
51
+ case test_framework
52
+ when :rspec
53
+ template "tests/rspec/model.rb", "spec/models/#{singular_name}_spec.rb"
54
+ template 'fixtures.yml', "spec/fixtures/#{plural_name}.yml"
55
+ else
56
+ template "tests/#{test_framework}/model.rb", "test/unit/#{singular_name}_test.rb"
57
+ template 'fixtures.yml', "test/fixtures/#{plural_name}.yml"
58
+ end
59
+ end
60
+
61
+ unless options.skip_migration?
62
+ migration_template 'migration.rb', "db/migrate/create_#{plural_name.gsub('/','_')}.rb"
63
+ end
64
+ unless options.skip_views?
65
+ template '_edit.html.haml', "app/views/humpyard/pages/#{plural_name}/_edit.html.haml"
66
+ template '_show.html.haml', "app/views/humpyard/pages/#{plural_name}/_show.html.haml"
67
+ end
68
+
69
+ unless options.skip_model?
70
+ create_model options
71
+ end
72
+ end
73
+
74
+ private
75
+ def model_name
76
+ "#{page_name.camelize}Page"
77
+ end
78
+ end
79
+ end
80
+ end