engine_room 0.5.0

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 (214) hide show
  1. data/.gitignore +10 -0
  2. data/Gemfile +4 -0
  3. data/Gemfile.lock +159 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.rdoc +44 -0
  6. data/Rakefile +30 -0
  7. data/TODO +3 -0
  8. data/app/controllers/engine_room/content_controller.rb +117 -0
  9. data/app/controllers/engine_room/fields_controller.rb +119 -0
  10. data/app/controllers/engine_room/models_controller.rb +89 -0
  11. data/app/controllers/engine_room/pages_controller.rb +17 -0
  12. data/app/controllers/engine_room/sections_controller.rb +74 -0
  13. data/app/controllers/engine_room/users_controller.rb +84 -0
  14. data/app/controllers/er_devise/passwords_controller.rb +6 -0
  15. data/app/controllers/er_devise/registrations_controller.rb +8 -0
  16. data/app/controllers/er_devise/sessions_controller.rb +6 -0
  17. data/app/helpers/engine_room/content_helper.rb +103 -0
  18. data/app/helpers/engine_room/models_helper.rb +21 -0
  19. data/app/models/field.rb +89 -0
  20. data/app/models/section.rb +68 -0
  21. data/app/models/user.rb +31 -0
  22. data/app/views/engine_room/content/_form.html.erb +13 -0
  23. data/app/views/engine_room/content/_overview.html.erb +28 -0
  24. data/app/views/engine_room/content/_sidebar.html.erb +14 -0
  25. data/app/views/engine_room/content/edit.html.erb +38 -0
  26. data/app/views/engine_room/content/index.html.erb +1 -0
  27. data/app/views/engine_room/content/new.html.erb +1 -0
  28. data/app/views/engine_room/content/overview.html.erb +3 -0
  29. data/app/views/engine_room/fields/_form.html.erb +57 -0
  30. data/app/views/engine_room/fields/edit.html.erb +1 -0
  31. data/app/views/engine_room/fields/new.html.erb +1 -0
  32. data/app/views/engine_room/models/_form.html.erb +0 -0
  33. data/app/views/engine_room/models/edit.html.erb +14 -0
  34. data/app/views/engine_room/models/index.html.erb +16 -0
  35. data/app/views/engine_room/models/new.html.erb +14 -0
  36. data/app/views/engine_room/models/overview.html.erb +14 -0
  37. data/app/views/engine_room/pages/dashboard.html.erb +1 -0
  38. data/app/views/engine_room/pages/settings.html.erb +1 -0
  39. data/app/views/engine_room/sections/_form.html.erb +34 -0
  40. data/app/views/engine_room/sections/_sidebar.html.erb +11 -0
  41. data/app/views/engine_room/sections/edit.html.erb +81 -0
  42. data/app/views/engine_room/sections/index.html.erb +3 -0
  43. data/app/views/engine_room/sections/new.html.erb +1 -0
  44. data/app/views/engine_room/users/_form.html.erb +47 -0
  45. data/app/views/engine_room/users/edit.html.erb +11 -0
  46. data/app/views/engine_room/users/index.html.erb +24 -0
  47. data/app/views/engine_room/users/new.html.erb +1 -0
  48. data/app/views/er_devise/mailer/confirmation_instructions.html.erb +5 -0
  49. data/app/views/er_devise/mailer/reset_password_instructions.html.erb +8 -0
  50. data/app/views/er_devise/mailer/unlock_instructions.html.erb +7 -0
  51. data/app/views/er_devise/passwords/edit.html.erb +16 -0
  52. data/app/views/er_devise/passwords/new.html.erb +13 -0
  53. data/app/views/er_devise/registrations/edit.html.erb +42 -0
  54. data/app/views/er_devise/registrations/new.html.erb +21 -0
  55. data/app/views/er_devise/sessions/new.html.erb +23 -0
  56. data/app/views/er_devise/shared/_links.erb +19 -0
  57. data/app/views/layouts/engine_room.html.erb +103 -0
  58. data/app/views/layouts/login.html.erb +71 -0
  59. data/app/views/shared/_content_layout_selector.html.erb +45 -0
  60. data/app/views/shared/_error_messages.html.erb +17 -0
  61. data/config/initializers/devise.rb +146 -0
  62. data/config/initializers/locale.rb +5 -0
  63. data/config/locales/devise.de.yml +42 -0
  64. data/config/locales/devise.en.yml +39 -0
  65. data/config/locales/engine_room.de.yml +33 -0
  66. data/config/locales/engine_room.en.yml +42 -0
  67. data/config/routes.rb +62 -0
  68. data/engine_room.gemspec +35 -0
  69. data/lib/engine_room.rb +17 -0
  70. data/lib/engine_room/action_controller/controller_methods.rb +21 -0
  71. data/lib/engine_room/action_view/view_methods.rb +8 -0
  72. data/lib/engine_room/active_record/record_methods.rb +18 -0
  73. data/lib/engine_room/crummy/custom_renderer.rb +63 -0
  74. data/lib/engine_room/engine.rb +40 -0
  75. data/lib/engine_room/railties/tasks.rake +6 -0
  76. data/lib/engine_room/version.rb +3 -0
  77. data/lib/generators/engine_room/create_image_generator.rb +26 -0
  78. data/lib/generators/engine_room/setup_generator.rb +30 -0
  79. data/lib/generators/engine_room/templates/001_devise_create_users.rb +28 -0
  80. data/lib/generators/engine_room/templates/002_create_sections.rb +16 -0
  81. data/lib/generators/engine_room/templates/003_create_fields.rb +18 -0
  82. data/lib/generators/engine_room/templates/004_create_images.rb +19 -0
  83. data/lib/generators/engine_room/templates/image.rb +4 -0
  84. data/lib/tasks/dummy.rake +45 -0
  85. data/lib/tasks/templates/migrate/050_create_dogs.rb +18 -0
  86. data/lib/tasks/templates/models/dog.rb +3 -0
  87. data/public/images/er/accept.png +0 -0
  88. data/public/images/er/add.png +0 -0
  89. data/public/images/er/add_small.png +0 -0
  90. data/public/images/er/ajax-loader.gif +0 -0
  91. data/public/images/er/attach.png +0 -0
  92. data/public/images/er/back_disabled.jpg +0 -0
  93. data/public/images/er/back_enabled.jpg +0 -0
  94. data/public/images/er/bg/header_gradient_center.jpg +0 -0
  95. data/public/images/er/bg/header_gradient_left.jpg +0 -0
  96. data/public/images/er/bg/header_gradient_right.jpg +0 -0
  97. data/public/images/er/cancel.png +0 -0
  98. data/public/images/er/cog.png +0 -0
  99. data/public/images/er/database_add.png +0 -0
  100. data/public/images/er/delete.png +0 -0
  101. data/public/images/er/delete_small.png +0 -0
  102. data/public/images/er/down_arrow.gif +0 -0
  103. data/public/images/er/down_arrow.png +0 -0
  104. data/public/images/er/email.png +0 -0
  105. data/public/images/er/exclamation.png +0 -0
  106. data/public/images/er/forward_disabled.jpg +0 -0
  107. data/public/images/er/forward_enabled.jpg +0 -0
  108. data/public/images/er/help.png +0 -0
  109. data/public/images/er/image_add.png +0 -0
  110. data/public/images/er/information.png +0 -0
  111. data/public/images/er/link.png +0 -0
  112. data/public/images/er/loader.gif +0 -0
  113. data/public/images/er/telephone.png +0 -0
  114. data/public/images/er/up_arrow.gif +0 -0
  115. data/public/images/er/up_arrow.png +0 -0
  116. data/public/images/er/user.png +0 -0
  117. data/public/images/er/wrench.png +0 -0
  118. data/public/images/er/zoom.png +0 -0
  119. data/public/javascripts/er/dd_belatedpng.js +328 -0
  120. data/public/javascripts/er/fancybox/blank.gif +0 -0
  121. data/public/javascripts/er/fancybox/fancy_close.png +0 -0
  122. data/public/javascripts/er/fancybox/fancy_loading.png +0 -0
  123. data/public/javascripts/er/fancybox/fancy_nav_left.png +0 -0
  124. data/public/javascripts/er/fancybox/fancy_nav_right.png +0 -0
  125. data/public/javascripts/er/fancybox/fancy_shadow_e.png +0 -0
  126. data/public/javascripts/er/fancybox/fancy_shadow_n.png +0 -0
  127. data/public/javascripts/er/fancybox/fancy_shadow_ne.png +0 -0
  128. data/public/javascripts/er/fancybox/fancy_shadow_nw.png +0 -0
  129. data/public/javascripts/er/fancybox/fancy_shadow_s.png +0 -0
  130. data/public/javascripts/er/fancybox/fancy_shadow_se.png +0 -0
  131. data/public/javascripts/er/fancybox/fancy_shadow_sw.png +0 -0
  132. data/public/javascripts/er/fancybox/fancy_shadow_w.png +0 -0
  133. data/public/javascripts/er/fancybox/fancy_title_left.png +0 -0
  134. data/public/javascripts/er/fancybox/fancy_title_main.png +0 -0
  135. data/public/javascripts/er/fancybox/fancy_title_over.png +0 -0
  136. data/public/javascripts/er/fancybox/fancy_title_right.png +0 -0
  137. data/public/javascripts/er/fancybox/fancybox-x.png +0 -0
  138. data/public/javascripts/er/fancybox/fancybox-y.png +0 -0
  139. data/public/javascripts/er/fancybox/fancybox.png +0 -0
  140. data/public/javascripts/er/fancybox/jquery.fancybox-1.3.4.css +359 -0
  141. data/public/javascripts/er/fancybox/jquery.fancybox-1.3.4.pack.js +46 -0
  142. data/public/javascripts/er/jquery-1.4.4.min.js +167 -0
  143. data/public/javascripts/er/jquery-ui-1.8.6.custom.min.js +477 -0
  144. data/public/javascripts/er/modernizr-1.5.min.js +28 -0
  145. data/public/javascripts/er/plugins.js +48 -0
  146. data/public/javascripts/er/rails.js +156 -0
  147. data/public/javascripts/er/script.js +50 -0
  148. data/public/stylesheets/.gitkeep +0 -0
  149. data/public/stylesheets/admin.css +417 -0
  150. data/public/stylesheets/boilerplate.css +264 -0
  151. data/public/stylesheets/handheld.css +7 -0
  152. data/public/stylesheets/login.css +125 -0
  153. data/public/stylesheets/skin.css +2 -0
  154. data/public/stylesheets/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  155. data/public/stylesheets/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  156. data/public/stylesheets/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  157. data/public/stylesheets/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  158. data/public/stylesheets/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  159. data/public/stylesheets/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  160. data/public/stylesheets/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  161. data/public/stylesheets/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  162. data/public/stylesheets/smoothness/images/ui-icons_222222_256x240.png +0 -0
  163. data/public/stylesheets/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  164. data/public/stylesheets/smoothness/images/ui-icons_454545_256x240.png +0 -0
  165. data/public/stylesheets/smoothness/images/ui-icons_888888_256x240.png +0 -0
  166. data/public/stylesheets/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  167. data/public/stylesheets/smoothness/jquery-ui-1.8.6.custom.css +479 -0
  168. data/spec/controllers/content_controller_spec.rb +132 -0
  169. data/spec/controllers/fields_controller_spec.rb +103 -0
  170. data/spec/controllers/models_controller_spec.rb +65 -0
  171. data/spec/controllers/pages_controller_spec.rb +40 -0
  172. data/spec/controllers/sections_controller_spec.rb +124 -0
  173. data/spec/dummy/Rakefile +7 -0
  174. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  175. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  176. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  177. data/spec/dummy/config.ru +4 -0
  178. data/spec/dummy/config/application.rb +45 -0
  179. data/spec/dummy/config/boot.rb +10 -0
  180. data/spec/dummy/config/database.yml +22 -0
  181. data/spec/dummy/config/environment.rb +5 -0
  182. data/spec/dummy/config/environments/development.rb +26 -0
  183. data/spec/dummy/config/environments/production.rb +49 -0
  184. data/spec/dummy/config/environments/test.rb +35 -0
  185. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  186. data/spec/dummy/config/initializers/inflections.rb +10 -0
  187. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  188. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  189. data/spec/dummy/config/initializers/session_store.rb +8 -0
  190. data/spec/dummy/config/locales/en.yml +5 -0
  191. data/spec/dummy/config/routes.rb +58 -0
  192. data/spec/dummy/public/404.html +26 -0
  193. data/spec/dummy/public/422.html +26 -0
  194. data/spec/dummy/public/500.html +26 -0
  195. data/spec/dummy/public/favicon.ico +0 -0
  196. data/spec/dummy/public/javascripts/application.js +2 -0
  197. data/spec/dummy/public/javascripts/controls.js +965 -0
  198. data/spec/dummy/public/javascripts/dragdrop.js +974 -0
  199. data/spec/dummy/public/javascripts/effects.js +1123 -0
  200. data/spec/dummy/public/javascripts/prototype.js +6001 -0
  201. data/spec/dummy/public/javascripts/rails.js +175 -0
  202. data/spec/dummy/public/stylesheets/.gitkeep +0 -0
  203. data/spec/dummy/script/rails +6 -0
  204. data/spec/engine_room_spec.rb +7 -0
  205. data/spec/factories.rb +32 -0
  206. data/spec/integration/navigation_spec.rb +9 -0
  207. data/spec/models/dog_spec.rb +14 -0
  208. data/spec/models/field_spec.rb +74 -0
  209. data/spec/models/section_spec.rb +70 -0
  210. data/spec/models/user_spec.rb +77 -0
  211. data/spec/routing/models_routing_spec.rb +66 -0
  212. data/spec/spec_helper.rb +39 -0
  213. data/spec/support/devise.rb +3 -0
  214. metadata +492 -0
@@ -0,0 +1,17 @@
1
+ module EngineRoom
2
+
3
+ if defined? Rails
4
+ #Dir.glob(Rails.root.to_s + '/app/models/*.rb').each { |file| require file }
5
+
6
+ require 'engine_room/engine'
7
+
8
+ require 'devise'
9
+ require 'will_paginate'
10
+ require 'paperclip'
11
+ require 'crummy'
12
+
13
+ require 'engine_room/action_controller/controller_methods'
14
+ require 'engine_room/action_view/view_methods'
15
+ require 'engine_room/active_record/record_methods'
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ module EngineRoom::ControllerMethods
2
+
3
+ def self.included(base)
4
+ base.module_eval do
5
+ helper_attr :current_user
6
+ end
7
+ end
8
+
9
+ def current_user
10
+ current_er_devise_user
11
+ end
12
+
13
+ def authorize
14
+ unless current_er_devise_user.is_admin?
15
+ flash[:alert] = "Access denied"
16
+ redirect_to engine_room_root_url
17
+ end
18
+ end
19
+ end
20
+
21
+ ActionController::Base.send :include, EngineRoom::ControllerMethods
@@ -0,0 +1,8 @@
1
+
2
+ module EngineRoom::ViewMethods
3
+ def authorized?(options=nil)
4
+ current_er_devise_user.is_admin?
5
+ end
6
+ end
7
+
8
+ ActionView::Base.send :include, EngineRoom::ViewMethods
@@ -0,0 +1,18 @@
1
+ module EngineRoom::RecordMethods
2
+
3
+ #def self.included(base)
4
+ # base.module_eval do
5
+ # helper_attr :current_user
6
+ # end
7
+ #end
8
+
9
+ #def current_user
10
+ # current_er_devise_user
11
+ #end
12
+
13
+ def object_to_boolean(value)
14
+ return [true, "true", 1, "1", "T", "t"].include?(value.class == String ? value.downcase : value)
15
+ end
16
+ end
17
+
18
+ ActiveRecord::Base.send :include, EngineRoom::RecordMethods
@@ -0,0 +1,63 @@
1
+ # encoding: utf-8
2
+
3
+ module Crummy
4
+ class CustomRenderer
5
+ include ActionView::Helpers::UrlHelper
6
+
7
+ # Render the list of crumbs as either html or xml
8
+ #
9
+ # Takes 3 options:
10
+ # The output format. Can either be xml or html. Default :html
11
+ # :format => (:html|:xml)
12
+ # The seperator text. It does not assume you want spaces on either side so you must specify. Default +»+ for :html and +crumb+ for xml
13
+ # :seperator => string
14
+ # Render links in the output. Default +true+
15
+ # :link => boolean
16
+ #
17
+ # Examples:
18
+ # render_crumbs #=> <a href="/">Home</a> &raquo; <a href="/businesses">Businesses</a>
19
+ # render_crumbs :seperator => ' | ' #=> <a href="/">Home</a> | <a href="/businesses">Businesses</a>
20
+ # render_crumbs :format => :xml #=> <crumb href="/">Home</crumb><crumb href="/businesses">Businesses</crumb>
21
+ #
22
+ # The only argument is for the seperator text. It does not assume you want spaces on either side so you must specify. Defaults to +&raquo;+
23
+ #
24
+ # render_crumbs(" . ") #=> <a href="/">Home</a> . <a href="/businesses">Businesses</a>
25
+ #
26
+ def render_crumbs(crumbs, options = {})
27
+ options[:format] = :html if options[:format] == nil
28
+ if options[:seperator] == nil
29
+ options[:seperator] = " &raquo; " if options[:format] == :html
30
+ options[:seperator] = "crumb" if options[:format] == :xml
31
+ end
32
+ options[:links] = true if options[:links] == nil
33
+ case options[:format]
34
+ when :html
35
+ crumb_string = crumbs.collect do |crumb|
36
+ crumb_to_html crumb, crumbs.last==crumb ? false : options[:links]
37
+ #crumb_to_html crumb, options[:links]
38
+ end * options[:seperator]
39
+ crumb_string = crumb_string.html_safe if crumb_string.respond_to?(:html_safe)
40
+ crumb_string
41
+ when :xml
42
+ crumbs.collect do |crumb|
43
+ crumb_to_xml crumb, options[:links], options[:seperator]
44
+ end * ''
45
+ else
46
+ raise ArgumentError, "Unknown breadcrumb output format"
47
+ end
48
+ end
49
+
50
+ private
51
+
52
+ def crumb_to_html(crumb, links)
53
+ name, url = crumb
54
+ url && links ? link_to(name, url) : name
55
+ end
56
+
57
+ def crumb_to_xml(crumb, links, seperator)
58
+ name, url = crumb
59
+ url && links ? "<#{seperator} href=\"#{url}\">#{name}</#{seperator}>" : "<#{seperator}>#{name}</#{seperator}>"
60
+ end
61
+ end
62
+ end
63
+
@@ -0,0 +1,40 @@
1
+ module EngineRoom
2
+ class Engine < Rails::Engine
3
+
4
+ config.mount_at = '/'
5
+
6
+ # Load rake tasks
7
+ rake_tasks do
8
+ #load File.join(File.dirname(__FILE__), 'rails/railties/tasks.rake')
9
+ load "engine_room/railties/tasks.rake"
10
+ end
11
+
12
+ # Check the gem config
13
+ initializer "check config" do |app|
14
+ # make sure mount_at ends with trailing slash
15
+ config.mount_at += '/' unless config.mount_at.last == '/'
16
+ end
17
+
18
+ initializer "static assets" do |app|
19
+ app.middleware.use ::ActionDispatch::Static, "#{root}/public"
20
+ # app.middleware.insert_after ActionDispatch::Static, ActionDispatch::Static, "#{root}/public"
21
+ end
22
+
23
+ # TODO: move override into external module (couldn't get it working)
24
+ # override paths for Devise after sign-in and sign-out
25
+ initializer 'override ActionController' do |app|
26
+
27
+ ActiveSupport.on_load(:action_controller) do
28
+ class ActionController::Base
29
+ def after_sign_in_path_for(resource)
30
+ engine_room_root_path
31
+ end
32
+ def after_sign_out_path_for(resource)
33
+ new_er_devise_user_session_path
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,6 @@
1
+ namespace :er do
2
+ desc "Greeting rake task from engine_room"
3
+ task :greet do
4
+ puts "Greetings from the engine_room"
5
+ end
6
+ end
@@ -0,0 +1,3 @@
1
+ module EngineRoom
2
+ VERSION = "0.5.0"
3
+ end
@@ -0,0 +1,26 @@
1
+ require 'rails/generators/active_record'
2
+
3
+ module EngineRoom
4
+ module Generators
5
+ class CreateImageGenerator < Rails::Generators::Base
6
+ include Rails::Generators::Migration
7
+
8
+ def self.source_root
9
+ @source_root ||= File.join(File.dirname(__FILE__), 'templates')
10
+ end
11
+
12
+ def doit
13
+ puts "generating image model..."
14
+ end
15
+
16
+ def self.next_migration_number(dirname)
17
+ ActiveRecord::Generators::Base.next_migration_number(dirname)
18
+ end
19
+
20
+ def copy_files
21
+ migration_template "004_create_images.rb", "db/migrate/create_images.rb"
22
+ copy_file "image.rb", "app/models/image.rb"
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,30 @@
1
+ require 'rails/generators/active_record'
2
+
3
+ module EngineRoom
4
+ module Generators
5
+ class SetupGenerator < Rails::Generators::Base
6
+ include Rails::Generators::Migration
7
+
8
+ def self.source_root
9
+ @source_root ||= File.join(File.dirname(__FILE__), 'templates')
10
+ end
11
+
12
+ def doit
13
+ puts "generating setup..."
14
+ end
15
+
16
+ def self.next_migration_number(dirname)
17
+ ActiveRecord::Generators::Base.next_migration_number(dirname)
18
+ end
19
+
20
+ def devise
21
+ migration_template "001_devise_create_users.rb", "db/migrate/devise_create_users.rb"
22
+ end
23
+
24
+ def setup
25
+ migration_template "002_create_sections.rb", "db/migrate/create_sections.rb"
26
+ migration_template "003_create_fields.rb", "db/migrate/create_fields.rb"
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,28 @@
1
+ class DeviseCreateUsers < ActiveRecord::Migration
2
+ def self.up
3
+ create_table(:users) do |t|
4
+ t.string :username, :null => false
5
+ t.database_authenticatable :null => false
6
+ t.recoverable
7
+ t.rememberable
8
+ t.trackable
9
+
10
+ t.integer :is_admin, :default => 0
11
+ # t.confirmable
12
+ # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
13
+ # t.token_authenticatable
14
+
15
+
16
+ t.timestamps
17
+ end
18
+
19
+ add_index :users, :email, :unique => true
20
+ add_index :users, :reset_password_token, :unique => true
21
+ # add_index :users, :confirmation_token, :unique => true
22
+ # add_index :users, :unlock_token, :unique => true
23
+ end
24
+
25
+ def self.down
26
+ drop_table :users
27
+ end
28
+ end
@@ -0,0 +1,16 @@
1
+ class CreateSections < ActiveRecord::Migration
2
+ def self.up
3
+ create_table(:sections) do |t|
4
+ t.string :name, :null => false
5
+ t.string :model_name, :null => false
6
+ t.string :view_type
7
+ t.string :condition
8
+ t.integer :sort_order
9
+ t.timestamps
10
+ end
11
+ end
12
+
13
+ def self.down
14
+ drop_table :sections
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ class CreateFields < ActiveRecord::Migration
2
+ def self.up
3
+ create_table(:fields) do |t|
4
+ t.integer :section_id, :null => false
5
+ t.string :column, :null => false
6
+ t.string :field_type, :null => false
7
+ t.string :display_type, :null => false
8
+ t.text :options
9
+ t.text :help
10
+ t.integer :sort_order
11
+ t.timestamps
12
+ end
13
+ end
14
+
15
+ def self.down
16
+ drop_table :fields
17
+ end
18
+ end
@@ -0,0 +1,19 @@
1
+ class CreateImages < ActiveRecord::Migration
2
+ def self.up
3
+ create_table(:images) do |t|
4
+ # todo: add foreign keys to belongs_to model
5
+
6
+ t.string :title
7
+ t.text :description
8
+ t.string :image_file_name # paperclip property
9
+ t.string :image_content_type # paperclip property
10
+ t.integer :image_file_size # paperclip property
11
+ t.datetime :image_updated_at # paperclip property
12
+ t.timestamps
13
+ end
14
+ end
15
+
16
+ def self.down
17
+ drop_table :images
18
+ end
19
+ end
@@ -0,0 +1,4 @@
1
+ class Image < ActiveRecord::Base
2
+ # TODO: adjust style dimensions...
3
+ has_attached_file :image, :styles => { :thumb => "50x50", :full => "50x400" }
4
+ end
@@ -0,0 +1,45 @@
1
+ require 'fileutils'
2
+
3
+ namespace :dummy do
4
+ desc "Initialize basic dummy app - adds models and migrations"
5
+ task :init do
6
+ puts "copying migrations and models"
7
+
8
+ engine_root_path = File.expand_path('../../..', __FILE__)
9
+
10
+ migrate_source = File.join(File.dirname(__FILE__), 'templates', 'migrate')
11
+ migrate_target = File.join(engine_root_path, 'spec', 'dummy', 'db', 'migrate')
12
+ Dir.mkdir(migrate_target) unless File.directory?(migrate_target)
13
+
14
+ Dir.chdir(migrate_source)
15
+ Dir.glob("*.rb") do |file|
16
+ puts "copy file: #{file} ==> #{migrate_target}"
17
+ FileUtils.copy(file, migrate_target)
18
+ end
19
+
20
+ models_source = File.join(File.dirname(__FILE__), 'templates', 'models')
21
+ models_target = File.join(engine_root_path, 'spec', 'dummy', 'app', 'models')
22
+ Dir.mkdir(models_target) unless File.directory?(models_target)
23
+
24
+ Dir.chdir(models_source)
25
+ Dir.glob("*.rb") do |file|
26
+ puts "copy file: #{file} ==> #{models_target}"
27
+ FileUtils.copy(file, models_target)
28
+ end
29
+
30
+ # copy user migration (devise)
31
+ user_migrate = File.join(engine_root_path, "lib", "generators", "engine_room", "templates", "001_devise_create_users.rb")
32
+ puts "copy file: #{user_migrate} ==> #{models_target}"
33
+ FileUtils.copy(user_migrate, migrate_target)
34
+
35
+ section_migrate = File.join(engine_root_path, "lib", "generators", "engine_room", "templates", "002_create_sections.rb")
36
+ puts "copy file: #{section_migrate} ==> #{models_target}"
37
+ FileUtils.copy(section_migrate, migrate_target)
38
+
39
+ field_migrate = File.join(engine_root_path, "lib", "generators", "engine_room", "templates", "003_create_fields.rb")
40
+ puts "copy file: #{field_migrate} ==> #{models_target}"
41
+ FileUtils.copy(field_migrate, migrate_target)
42
+
43
+ puts "fin."
44
+ end
45
+ end
@@ -0,0 +1,18 @@
1
+ class CreateDogs < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :dogs do |t|
4
+ t.string :name, :null => false
5
+ t.string :color, :null => true
6
+ t.text :description, :null => true
7
+ t.integer :fleas, :null => true
8
+ t.timestamps
9
+ end
10
+
11
+ add_index :dogs, :name
12
+ end
13
+
14
+ def self.down
15
+ drop_table :dogs
16
+ end
17
+ end
18
+
@@ -0,0 +1,3 @@
1
+ class Dog < ActiveRecord::Base
2
+ validates :name, :presence => true
3
+ end
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file