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,11 @@
1
+ class PageModifiedAt < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :pages, :modified_at, :datetime, :after => :updated_at
4
+ add_column :pages, :refresh_scheduled_at, :datetime, :after => :modified_at
5
+ end
6
+
7
+ def self.down
8
+ remove_column :pages, :modified_at
9
+ remove_column :pages, :refresh_scheduled_at
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ class CreateSitemapElements < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :elements_sitemap_elements do |t|
4
+ t.integer :levels
5
+ t.boolean :show_description
6
+ t.timestamps
7
+ end
8
+ end
9
+
10
+ def self.down
11
+ drop_table :elements_sitemap_elements
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ class CreateHumpyardPagesVirtualPages < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :pages_virtual_pages do |t|
4
+ t.timestamps
5
+ end
6
+ end
7
+
8
+ def self.down
9
+ drop_table :pages_virtual_pages
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ class PageCacheControl < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :pages, :always_refresh, :boolean, :default => false, :after => :refresh_scheduled_at
4
+ end
5
+
6
+ def self.down
7
+ remove_column :pages, :always_refresh
8
+ end
9
+ end
@@ -0,0 +1,36 @@
1
+ class CreateMedia < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :assets do |t|
4
+ t.string :title
5
+ t.integer :width
6
+ t.integer :height
7
+ t.references :content_data
8
+ t.string :content_data_type
9
+ t.timestamps
10
+ end
11
+
12
+ create_table :assets_paperclip_assets do |t|
13
+ t.string :media_file_name
14
+ t.integer :media_file_size
15
+ t.string :media_content_type
16
+ t.datetime :media_updated_at
17
+ t.timestamps
18
+ end
19
+
20
+ create_table :assets_youtube_assets do |t|
21
+ t.string :youtube_video_id
22
+ t.string :youtube_title
23
+ t.timestamps
24
+ end
25
+
26
+ create_table :elements_media_elements do |t|
27
+ t.references :asset
28
+ t.string :float
29
+ t.timestamps
30
+ end
31
+ end
32
+
33
+ def self.down
34
+
35
+ end
36
+ end
@@ -0,0 +1,9 @@
1
+ class MediaWithLink < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :elements_media_elements, :uri, :string, :after => :float
4
+ end
5
+
6
+ def self.down
7
+ remove_column :elements_media_elements, :uri
8
+ end
9
+ end
@@ -0,0 +1,114 @@
1
+ require 'rails/generators/base'
2
+
3
+ module Humpyard
4
+ ####
5
+ # = Humpyard::Generators
6
+ #
7
+ module Generators
8
+ class Base < Rails::Generators::Base #:nodoc:
9
+ def self.source_root
10
+ @_humpyard_source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'humpyard', generator_name, 'templates'))
11
+ end
12
+
13
+ def self.banner
14
+ "#{$0} humpyard:#{generator_name} #{self.arguments.map{ |a| a.usage }.join(' ')} [options]"
15
+ end
16
+ end
17
+
18
+ module ModelTemplate
19
+
20
+ def self.included(base) #:nodoc:
21
+ base.extend ClassMethods
22
+
23
+ base.argument :model_attributes, :type => :array, :default => [], :banner => 'field:type field:type'
24
+
25
+ base.class_option :skip_model, :desc => 'Don\'t generate a model or migration file.', :type => :boolean
26
+ base.class_option :skip_migration, :desc => 'Dont generate migration file for model.', :type => :boolean
27
+ base.class_option :skip_timestamps, :desc => 'Don\'t add timestamps to migration file.', :type => :boolean
28
+ base.class_option :skip_views, :desc => 'Don\'t generate view files.', :type => :boolean
29
+
30
+ base.class_option :skip_tests, :desc => 'Don\'t generate test files.', :group => 'Test framework', :type => :boolean
31
+ base.class_option :test_unit, :desc => 'Use test/unit for test files.', :group => 'Test framework', :type => :boolean
32
+ base.class_option :rspec, :desc => 'Use RSpec for test files.', :group => 'Test framework', :type => :boolean
33
+ base.class_option :shoulda, :desc => 'Use shoulda for test files.', :group => 'Test framework', :type => :boolean
34
+ end
35
+
36
+ private
37
+
38
+ def create_model options # :nodoc:
39
+
40
+ end
41
+
42
+ def attributes
43
+ if @attributes
44
+ return @attributes
45
+ else
46
+ @attributes = []
47
+ model_attributes.each do |attr|
48
+ splitted = attr.split(':')
49
+ @attributes << Rails::Generators::GeneratedAttribute.new(splitted[0], splitted[1])
50
+ end
51
+ @attributes
52
+ end
53
+ end
54
+
55
+ def model_name
56
+ raise "You have to specify model name in your Generator"
57
+ end
58
+
59
+ def singular_name
60
+ model_name.underscore
61
+ end
62
+
63
+ def plural_name
64
+ model_name.underscore.pluralize
65
+ end
66
+
67
+ def class_name
68
+ model_name.camelize
69
+ end
70
+
71
+ def plural_class_name
72
+ plural_name.camelize
73
+ end
74
+
75
+ def model_exists?
76
+ File.exist? destination_path("app/models/#{singular_name}.rb")
77
+ end
78
+
79
+ def test_framework
80
+ return @test_framework if defined?(@test_framework)
81
+
82
+ if options.rspec?
83
+ return @test_framework = :rspec
84
+ elsif options.test_unit?
85
+ return @test_framework = :test_unit
86
+ elsif options.shoulda?
87
+ return @test_framework = :shoulda
88
+ else
89
+ return @test_framework = default_test_framework
90
+ end
91
+ end
92
+
93
+ def default_test_framework
94
+ Rails.application::config.generators.rails[:test_framework]
95
+ end
96
+
97
+ def destination_path(path)
98
+ File.join(destination_root, path)
99
+ end
100
+
101
+ module ClassMethods
102
+ # Implement the required interface for Rails::Generators::Migration.
103
+ #
104
+ def next_migration_number(dirname) #:nodoc:
105
+ if ::ActiveRecord::Base.timestamped_migrations
106
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
107
+ else
108
+ "%.3d" % (current_migration_number(dirname) + 1)
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,191 @@
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
+ # == User Generator
11
+ #
12
+ # rails humpyard:auth user_model [options]
13
+ #
14
+ # === Description
15
+ # The humpyard user generator creates a basic auth
16
+ #
17
+ # === Options
18
+ #
19
+ # === Runtime options
20
+ # <tt>-q, [--quiet]</tt>:: Supress status output
21
+ # <tt>-p, [--pretend]</tt>:: Run but do not make any changes
22
+ # <tt>-s, [--skip]</tt>:: Skip files that already exist
23
+ # <tt>-f, [--force]</tt>:: Overwrite files that already exist
24
+ #
25
+ # === Examples
26
+ # rails generate humpyard:auth user
27
+
28
+ class AuthGenerator < Base
29
+ include Rails::Generators::Migration
30
+
31
+ argument :user_model, :type => :string, :required => true, :banner => 'UserModel'
32
+
33
+ include Humpyard::Generators::ModelTemplate
34
+
35
+ class_option :users_framework, :desc => 'The user management framework used in humpyard application (options: simple/custom/fake/devise/authlogic)', :group => 'Users config', :type => :string, :default => Humpyard::config.users_framework
36
+ class_option :skip_models, :desc => 'Don\'t generate User realated models', :type => :boolean
37
+ class_option :skip_haml, :desc => 'Don\'t generate HAML related files (the layout template)', :type => :boolean
38
+ class_option :skip_injection, :desc => 'Don\'t inject anything to files like routes.rb or application_controller.rb', :type => :boolean
39
+
40
+ def create_user # :nodoc:
41
+ template_path = "#{::File.dirname(__FILE__)}/templates/"
42
+
43
+ #Dir.glob("#{template_path}#{options[:users_framework]}/**/*.*").each do |file|
44
+ # template file.gsub(template_path, ''), "app/#{file.gsub("#{template_path}#{options[:users_framework]}/", '')}"
45
+ #end
46
+
47
+ application_controller_injection =
48
+ " helper_method :current_user\n\n" +
49
+ " # Handle AccessDenied exception of CanCan\n" +
50
+ " rescue_from CanCan::AccessDenied do |exception|\n" +
51
+ " flash[:error] = exception.message\n" +
52
+ " redirect_to root_url\n" +
53
+ " end\n\n"
54
+
55
+ routes_injection = ""
56
+
57
+ class_collisions class_name
58
+
59
+ template "#{options[:users_framework]}/models/ability.rb", "app/models/ability.rb"
60
+
61
+ case options[:users_framework]
62
+ when 'simple'
63
+ template "simple/controllers/user_sessions_controller.rb", "app/controllers/#{singular_name}_sessions_controller.rb"
64
+ template "simple/config/humpyard_users.yml", "config/humpyard_#{plural_name}.yml"
65
+ template "simple/views/user_sessions/new.html.haml", "app/views/#{singular_name}_sessions/new.html.haml"
66
+
67
+ application_controller_injection +=
68
+ " private\n" +
69
+ " def current_user\n" +
70
+ " if not @current_user.nil?\n" +
71
+ " @current_user\n" +
72
+ " else\n" +
73
+ " session[:humpyard] ||= {}\n" +
74
+ " @current_user = session[:humpyard][:user] || false\n" +
75
+ " end\n" +
76
+ " end\n" +
77
+ "\n" +
78
+ " private\n" +
79
+ " def humpyard_logout_path\n" +
80
+ " logout_path\n" +
81
+ " end\n\n"
82
+
83
+ routes_injection += "scope \"/#"+"{Humpyard::config.admin_prefix}\" do\n" +
84
+ " get 'login' => '#{singular_name}_sessions#new', :as => :login\n" +
85
+ " post 'login' => '#{singular_name}_sessions#create', :as => :login\n" +
86
+ " get 'logout' => '#{singular_name}_sessions#destroy', :as => :logout\n" +
87
+ " end"
88
+ when 'authlogic'
89
+
90
+ raise "Authlogic is not working, yet!"
91
+
92
+ template "authlogic/models/ability.rb", "app/models/ability.rb"
93
+ template "authlogic/models/user.rb", "app/models/#{singular_name}.rb"
94
+ template "authlogic/models/user_session.rb", "app/models/#{singular_name}_session.rb"
95
+
96
+ unless true or options.skip_tests?
97
+ case test_framework
98
+ when :rspec
99
+ template "authlogic/tests/rspec/model.rb", "spec/models/#{singular_name}_spec.rb"
100
+ template "authlogic/fixtures.yml", "spec/fixtures/#{plural_name}.yml"
101
+ else
102
+ template "authlogic/tests/#{test_framework}/model.rb", "test/unit/#{singular_name}_test.rb"
103
+ template "authlogic/fixtures.yml", "test/fixtures/#{plural_name}.yml"
104
+ end
105
+ end
106
+
107
+ unless options.skip_migration?
108
+ migration_template 'authlogic/migration.rb', "db/migrate/create_#{plural_name.gsub('/','_')}.rb"
109
+ end
110
+
111
+ template "authlogic/controllers/user_sessions_controller.rb", "app/controllers/#{singular_name}_sessions_controller.rb"
112
+
113
+ routes_injection += "resources :#{singular_name}_sessions"
114
+
115
+ unless options.skip_views?
116
+ template 'authlogic/views/user_sessions/new.html.haml', "app/views/#{singular_name}_sessions/new.html.haml"
117
+ end
118
+
119
+
120
+ gem 'authlogic', :git => 'http://github.com/odorcicd/authlogic.git', :branch => 'rails3'
121
+
122
+
123
+ application_controller_injection +=
124
+ " private\n" +
125
+ " def current_user_session\n" +
126
+ " return @current_user_session if defined?(@current_user_session)\n" +
127
+ " @current_user_session = UserSession.find\n" +
128
+ " end\n\n" +
129
+ " def current_user\n" +
130
+ " return @current_user if defined?(@current_user)\n" +
131
+ " @current_user = current_user_session && current_user_session.record\n" +
132
+ " end\n"
133
+ when 'devise'
134
+
135
+ raise "Devise is not working, yet!"
136
+
137
+ template "#{options[:users_framework]}/models/ability.rb", "app/models/ability.rb"
138
+ gem 'devise', :git => 'http://github.com/plataformatec/devise.git' #,'>= 1.1.rc1'
139
+
140
+ run "bundle install"
141
+
142
+ generate :devise_install
143
+
144
+ prepend_file "config/initializers/devise.rb", "require 'devise'\n\n"
145
+
146
+
147
+
148
+ generate :devise, singular_name
149
+
150
+ when 'fake'
151
+ application_controller_injection +=
152
+ " private\n" +
153
+ " def current_user\n" +
154
+ " if not @current_user.nil?\n" +
155
+ " @current_user\n" +
156
+ " else\n" +
157
+ " session[:humpyard] ||= {}\n" +
158
+ " unless params[:user].nil?\n" +
159
+ " session[:humpyard][:user] = params[:user].blank? ? false : params[:user]\n" +
160
+ " end\n" +
161
+ " @current_user = session[:humpyard][:user] || false\n" +
162
+ " end\n" +
163
+ " end\n"
164
+ end
165
+
166
+ unless options.skip_injection
167
+ route routes_injection unless routes_injection.blank?
168
+ inject_into_class "app/controllers/application_controller.rb", ApplicationController, application_controller_injection
169
+ end
170
+
171
+ begin
172
+ File.open("#{template_path}#{options[:users_framework]}/README", "r") do |infile|
173
+ puts ''
174
+ while (line = infile.gets)
175
+ puts " #{line}"
176
+ end
177
+ puts ''
178
+ end
179
+ rescue
180
+ # No README found, do nothing
181
+ end
182
+ end
183
+
184
+ private
185
+ def model_name
186
+ "#{user_model.camelize}"
187
+ end
188
+
189
+ end
190
+ end
191
+ end
@@ -0,0 +1,9 @@
1
+ If you did not already install Authlogic, you should do it now:
2
+
3
+ Install Authlogic to your Rails application running:
4
+
5
+ bundle install
6
+
7
+ For options and further details see the Authlogic documentation:
8
+
9
+ http://rdoc.info/projects/binarylogic/authlogic
@@ -0,0 +1,22 @@
1
+ class <%= class_name %>SessionsController < ApplicationController
2
+ def new
3
+ @user_session = <%= class_name %>Session.new
4
+ end
5
+
6
+ def create
7
+ @user_session = <%= class_name %>Session.new(params[:user_session])
8
+ if @user_session.save
9
+ flash[:notice] = "Successfully logged in."
10
+ redirect_to root_url
11
+ else
12
+ render :action => :new
13
+ end
14
+ end
15
+
16
+ def destroy
17
+ @user_session = <%= class_name %>Session.find
18
+ @user_session.destroy
19
+ flash[:notice] = "Successfully logged out."
20
+ redirect_to root_url
21
+ end
22
+ end
@@ -0,0 +1,17 @@
1
+ class Create<%= plural_class_name %> < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :<%= plural_name %> do |t|
4
+ t.string :username
5
+ t.string :email
6
+ t.boolean :admin, :default => false
7
+ t.string :crypted_password
8
+ t.string :password_salt
9
+ t.string :persistence_token
10
+ t.timestamps
11
+ end
12
+ end
13
+
14
+ def self.down
15
+ drop_table :users
16
+ end
17
+ end