publinator 0.0.2

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 (177) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +3 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/javascripts/publinator/home.js +2 -0
  5. data/app/assets/javascripts/publinator/manage.js +15 -0
  6. data/app/assets/javascripts/publinator/site.js +15 -0
  7. data/app/assets/stylesheets/publinator/home.css.scss +4 -0
  8. data/app/assets/stylesheets/publinator/manage/publishable.css.scss +11 -0
  9. data/app/assets/stylesheets/publinator/manage.css.scss +88 -0
  10. data/app/assets/stylesheets/publinator/site.css.scss +75 -0
  11. data/app/controllers/publinator/application_controller.rb +29 -0
  12. data/app/controllers/publinator/home_controller.rb +23 -0
  13. data/app/controllers/publinator/manage/publishable_controller.rb +73 -0
  14. data/app/controllers/publinator/manage/sites_controller.rb +24 -0
  15. data/app/controllers/publinator/manage_controller.rb +13 -0
  16. data/app/controllers/publinator/publishable_controller.rb +24 -0
  17. data/app/helpers/publinator/application_helper.rb +4 -0
  18. data/app/helpers/publinator/home_helper.rb +4 -0
  19. data/app/models/publinator/domain_name.rb +42 -0
  20. data/app/models/publinator/publication.rb +36 -0
  21. data/app/models/publinator/publication_state.rb +5 -0
  22. data/app/models/publinator/publishable.rb +23 -0
  23. data/app/models/publinator/publishable_type.rb +10 -0
  24. data/app/models/publinator/site.rb +35 -0
  25. data/app/models/publinator/site_workflow.rb +5 -0
  26. data/app/models/publinator/workflow.rb +5 -0
  27. data/app/models/publinator/workflow_step.rb +5 -0
  28. data/app/views/layouts/publinator/manage.html.erb +19 -0
  29. data/app/views/layouts/publinator/publinator.html.erb +23 -0
  30. data/app/views/layouts/publinator/site.html.erb +14 -0
  31. data/app/views/publinator/home/index.html.erb +2 -0
  32. data/app/views/publinator/home/page.html.erb +2 -0
  33. data/app/views/publinator/manage/index.html.erb +5 -0
  34. data/app/views/publinator/manage/publishable/_form.html.erb +23 -0
  35. data/app/views/publinator/manage/publishable/_summary.html.erb +7 -0
  36. data/app/views/publinator/manage/publishable/edit.html.erb +4 -0
  37. data/app/views/publinator/manage/publishable/index.html.erb +16 -0
  38. data/app/views/publinator/manage/publishable/new.html.erb +4 -0
  39. data/app/views/publinator/manage/publishable/show.html.erb +10 -0
  40. data/app/views/publinator/manage/sites/_form.html.erb +6 -0
  41. data/app/views/publinator/manage/sites/index.html.erb +5 -0
  42. data/app/views/publinator/manage/sites/new.html.erb +3 -0
  43. data/app/views/publinator/publishable/_summary.html.erb +1 -0
  44. data/app/views/publinator/publishable/index.html.erb +3 -0
  45. data/app/views/publinator/publishable/show.html.erb +5 -0
  46. data/config/routes.rb +52 -0
  47. data/db/migrate/20120725194854_create_publinator_sites.rb +16 -0
  48. data/db/migrate/20120725200404_create_publinator_domain_names.rb +13 -0
  49. data/db/migrate/20120725201842_create_publinator_publications.rb +21 -0
  50. data/db/migrate/20120725202042_create_publinator_publication_states.rb +12 -0
  51. data/db/migrate/20120725202127_create_publinator_workflows.rb +9 -0
  52. data/db/migrate/20120725202425_create_publinator_workflow_steps.rb +13 -0
  53. data/db/migrate/20120725202718_create_publinator_site_workflows.rb +11 -0
  54. data/db/migrate/20120725204133_create_publinator_publishables.rb +9 -0
  55. data/db/migrate/20120726234227_create_versions.rb +18 -0
  56. data/db/migrate/20120726234703_create_publinator_publishable_types.rb +9 -0
  57. data/lib/generators/publishable/USAGE +12 -0
  58. data/lib/generators/publishable/publishable_generator.rb +12 -0
  59. data/lib/generators/publishable/templates/app/models/publishable.html.erb +0 -0
  60. data/lib/generators/publishable/templates/app/models/publishable_migration.rb.erb +19 -0
  61. data/lib/generators/publishable/templates/app/models/publishable_model.rb.erb +5 -0
  62. data/lib/publinator/engine.rb +5 -0
  63. data/lib/publinator/version.rb +3 -0
  64. data/lib/publinator.rb +4 -0
  65. data/lib/tasks/publinator_tasks.rake +9 -0
  66. data/test/dummy/README.rdoc +261 -0
  67. data/test/dummy/Rakefile +7 -0
  68. data/test/dummy/app/assets/javascripts/application.js +15 -0
  69. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  70. data/test/dummy/app/controllers/application_controller.rb +3 -0
  71. data/test/dummy/app/helpers/application_helper.rb +2 -0
  72. data/test/dummy/app/models/article.rb +5 -0
  73. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  74. data/test/dummy/config/application.rb +56 -0
  75. data/test/dummy/config/boot.rb +10 -0
  76. data/test/dummy/config/database.yml +25 -0
  77. data/test/dummy/config/environment.rb +5 -0
  78. data/test/dummy/config/environments/development.rb +37 -0
  79. data/test/dummy/config/environments/production.rb +67 -0
  80. data/test/dummy/config/environments/test.rb +37 -0
  81. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  82. data/test/dummy/config/initializers/inflections.rb +15 -0
  83. data/test/dummy/config/initializers/mime_types.rb +5 -0
  84. data/test/dummy/config/initializers/secret_token.rb +7 -0
  85. data/test/dummy/config/initializers/session_store.rb +8 -0
  86. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  87. data/test/dummy/config/locales/en.yml +5 -0
  88. data/test/dummy/config/routes.rb +3 -0
  89. data/test/dummy/config.ru +4 -0
  90. data/test/dummy/db/development.sqlite3 +0 -0
  91. data/test/dummy/db/migrate/20120725204706_create_publinator_sites.publinator.rb +17 -0
  92. data/test/dummy/db/migrate/20120725204707_create_publinator_domain_names.publinator.rb +14 -0
  93. data/test/dummy/db/migrate/20120725204708_create_publinator_publications.publinator.rb +16 -0
  94. data/test/dummy/db/migrate/20120725204709_create_publinator_publication_states.publinator.rb +10 -0
  95. data/test/dummy/db/migrate/20120725204710_create_publinator_workflows.publinator.rb +10 -0
  96. data/test/dummy/db/migrate/20120725204711_create_publinator_workflow_steps.publinator.rb +15 -0
  97. data/test/dummy/db/migrate/20120725204712_create_publinator_site_workflows.publinator.rb +12 -0
  98. data/test/dummy/db/migrate/20120725204713_create_publinator_publishables.publinator.rb +10 -0
  99. data/test/dummy/db/migrate/20120727005853_create_versions.publinator.rb +19 -0
  100. data/test/dummy/db/migrate/20120727005854_create_publinator_publishable_types.publinator.rb +10 -0
  101. data/test/dummy/db/migrate/20120824145846_create_articles.rb +19 -0
  102. data/test/dummy/db/schema.rb +113 -0
  103. data/test/dummy/db/seeds.rb +39 -0
  104. data/test/dummy/db/test.sqlite3 +0 -0
  105. data/test/dummy/features/multiple_home_pages.feature +14 -0
  106. data/test/dummy/log/development.log +40231 -0
  107. data/test/dummy/log/test.log +7 -0
  108. data/test/dummy/public/404.html +26 -0
  109. data/test/dummy/public/422.html +26 -0
  110. data/test/dummy/public/500.html +25 -0
  111. data/test/dummy/public/favicon.ico +0 -0
  112. data/test/dummy/script/rails +6 -0
  113. data/test/dummy/tmp/cache/assets/C4F/360/sprockets%2F8f1f223e5a170f82017965822b6f7430 +0 -0
  114. data/test/dummy/tmp/cache/assets/C50/CE0/sprockets%2F76132a75085ce5f547460e8535ca5340 +0 -0
  115. data/test/dummy/tmp/cache/assets/C63/990/sprockets%2F11618b29357ca8c1c450722c20c91a00 +0 -0
  116. data/test/dummy/tmp/cache/assets/C72/990/sprockets%2F8be9281634a42c7a01308b333b17737b +0 -0
  117. data/test/dummy/tmp/cache/assets/C85/060/sprockets%2F95985a6ff38f2781686e6429e569778b +0 -0
  118. data/test/dummy/tmp/cache/assets/CA9/470/sprockets%2F0407014b0507e7755ef657d61f712ebc +0 -0
  119. data/test/dummy/tmp/cache/assets/CC0/FC0/sprockets%2F3c56105da246486092d2bbe0a4a0d033 +0 -0
  120. data/test/dummy/tmp/cache/assets/CC2/7B0/sprockets%2Fc4c32d2ab19d396689f357ef76364436 +0 -0
  121. data/test/dummy/tmp/cache/assets/CDE/040/sprockets%2Fba0451e56a8d59da297777a7280ab063 +0 -0
  122. data/test/dummy/tmp/cache/assets/D03/310/sprockets%2F525cf5b3d9e3504ba06702b64e0c681e +0 -0
  123. data/test/dummy/tmp/cache/assets/D08/DE0/sprockets%2Ff4a1d4922a38c27425da2e144e59c6d3 +0 -0
  124. data/test/dummy/tmp/cache/assets/D0B/2F0/sprockets%2Ff8b70628b691a6a3ecb709217a326a8b +0 -0
  125. data/test/dummy/tmp/cache/assets/D0C/310/sprockets%2Ffadeb95307575f00dda19890ec423415 +0 -0
  126. data/test/dummy/tmp/cache/assets/D12/780/sprockets%2F89400fbaf52d569e932128a538e6bf0a +0 -0
  127. data/test/dummy/tmp/cache/assets/D13/710/sprockets%2Fa59760c5818192f8007fec314febb7b3 +0 -0
  128. data/test/dummy/tmp/cache/assets/D17/C20/sprockets%2F706c0f4966a7c7fdd66a074d94a57d11 +0 -0
  129. data/test/dummy/tmp/cache/assets/D32/E40/sprockets%2F7ced78249d4c98d883ae91f492668a6b +0 -0
  130. data/test/dummy/tmp/cache/assets/D34/C20/sprockets%2Fed4da822bde7632ba05dae4472824813 +0 -0
  131. data/test/dummy/tmp/cache/assets/D39/EA0/sprockets%2F81ec8f71e453a02b8c9a40157afe0f71 +0 -0
  132. data/test/dummy/tmp/cache/assets/D3A/FA0/sprockets%2F6d1270d85395029a2c06c5c2eb4dece8 +0 -0
  133. data/test/dummy/tmp/cache/assets/D3B/EA0/sprockets%2F539fc0d8da407130f2f1f2bf088b85d3 +0 -0
  134. data/test/dummy/tmp/cache/assets/D42/9F0/sprockets%2F5eca1a27a78455737f92e6af1ade0448 +0 -0
  135. data/test/dummy/tmp/cache/assets/D42/B60/sprockets%2Fac22072df4e4aeae78d396f60468d227 +0 -0
  136. data/test/dummy/tmp/cache/assets/D42/DE0/sprockets%2Faadf8c86a222ee8e83d2821583ea0593 +0 -0
  137. data/test/dummy/tmp/cache/assets/D43/F50/sprockets%2Fc5e61a881bfc3b9e25f72694535ec40a +0 -0
  138. data/test/dummy/tmp/cache/assets/D4D/390/sprockets%2Ffe227bf86af573e51927e4d2e7436c4c +0 -0
  139. data/test/dummy/tmp/cache/assets/D5E/540/sprockets%2F00723322beecdc3eea7481c3ca15683f +0 -0
  140. data/test/dummy/tmp/cache/assets/D61/700/sprockets%2Ff5caf7e7779724575d9ad98e18e9c1e0 +0 -0
  141. data/test/dummy/tmp/cache/assets/D64/970/sprockets%2Fc82da8e1a6ea89aa065031be36b2c576 +0 -0
  142. data/test/dummy/tmp/cache/assets/D68/2E0/sprockets%2F0c4374b9e9b2aaaaa263b17b9a77f088 +0 -0
  143. data/test/dummy/tmp/cache/assets/D6C/C50/sprockets%2F712fd91829ab4f5c53bb6fa3b3d245a9 +0 -0
  144. data/test/dummy/tmp/cache/assets/D70/C60/sprockets%2Fca98bff3da133a465c5b4748a3b38f37 +0 -0
  145. data/test/dummy/tmp/cache/assets/D7B/730/sprockets%2Fa90b20db3a5c66c85d7986f4d91c9eb6 +0 -0
  146. data/test/dummy/tmp/cache/assets/D81/D70/sprockets%2F6a010131cebe8c0543864eba3cc3fdb0 +0 -0
  147. data/test/dummy/tmp/cache/assets/DA4/020/sprockets%2Fb7f430f48a4573d8975b2fb4b2ba5def +0 -0
  148. data/test/dummy/tmp/cache/assets/DA6/300/sprockets%2Fb8cef7a3ac9c4221e9c5bc582c86e149 +0 -0
  149. data/test/dummy/tmp/cache/assets/DAA/5B0/sprockets%2F9ac396884b5f7f4085dbfbf1f3bd82b0 +0 -0
  150. data/test/dummy/tmp/cache/assets/DAB/000/sprockets%2F3c9acfeb145fc77ef7932bc7b498a118 +0 -0
  151. data/test/dummy/tmp/cache/assets/DD7/DB0/sprockets%2F2e3dee6c113e8b9d5c3ffd508ea3e829 +0 -0
  152. data/test/dummy/tmp/cache/assets/DDC/610/sprockets%2Fb7e49f851b32a93fa0af9cf7be9fc283 +0 -0
  153. data/test/dummy/tmp/cache/assets/E08/B70/sprockets%2F682afca4b65d8e03784ff5da7fae4e6a +0 -0
  154. data/test/dummy/tmp/cache/assets/E38/BE0/sprockets%2Ffb2fafc55f60fd5d9a99e12a0fc53f9d +0 -0
  155. data/test/dummy/tmp/restart.txt +0 -0
  156. data/test/fixtures/publinator/publication_states.yml +7 -0
  157. data/test/fixtures/publinator/publications.yml +19 -0
  158. data/test/fixtures/publinator/publishable_types.yml +7 -0
  159. data/test/fixtures/publinator/publishables.yml +7 -0
  160. data/test/fixtures/publinator/site_workflows.yml +11 -0
  161. data/test/fixtures/publinator/workflow_steps.yml +17 -0
  162. data/test/fixtures/publinator/workflows.yml +7 -0
  163. data/test/functional/publinator/home_controller_test.rb +16 -0
  164. data/test/integration/navigation_test.rb +10 -0
  165. data/test/publinator_test.rb +7 -0
  166. data/test/test_helper.rb +10 -0
  167. data/test/unit/helpers/publinator/home_helper_test.rb +6 -0
  168. data/test/unit/publinator/domain_name_test.rb +9 -0
  169. data/test/unit/publinator/publication_state_test.rb +9 -0
  170. data/test/unit/publinator/publication_test.rb +9 -0
  171. data/test/unit/publinator/publishable_test.rb +9 -0
  172. data/test/unit/publinator/publishable_type_test.rb +9 -0
  173. data/test/unit/publinator/site_test.rb +9 -0
  174. data/test/unit/publinator/site_workflow_test.rb +9 -0
  175. data/test/unit/publinator/workflow_step_test.rb +9 -0
  176. data/test/unit/publinator/workflow_test.rb +9 -0
  177. metadata +498 -0
@@ -0,0 +1,19 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= @title || current_site_name %></title>
5
+ <%= stylesheet_link_tag "publinator/manage", :media => "all" %>
6
+ <%= javascript_include_tag "publinator/manage" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+ <div id="header">
11
+ <h3><%= link_to "Managing", manage_path %> <%= link_to (current_site_name || "Publinator"), root_url, :target => "_new" %></h3>
12
+ </div>
13
+ <div id="content">
14
+ <%= yield %>
15
+ </div>
16
+ <div id="footer">
17
+ </div>
18
+ </body>
19
+ </html>
@@ -0,0 +1,23 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Publinator</title>
5
+ <%= stylesheet_link_tag "publinator/publinator", :media => "all" %>
6
+ <%= javascript_include_tag "publinator/publinator" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+ <div id="header"><h1><%= link_to "Publinator", root_url %></h1></div>
11
+ <div id="content">
12
+ <p>Publinator facilitates the publishing of multiple web sites.</p>
13
+ <% if Publinator::Site.count == 0 %>
14
+ Please create your initial site.
15
+ <% else %>
16
+ <% Publinator::Site.all.each do |s| %>
17
+ <%= link_to s.name, s.default_domain %> (<%= link_to "Manage", "#{s.default_domain}/manage" %>)<br/>
18
+ <% end %>
19
+ <% end %>
20
+ </div>
21
+ <div id="footer">&copy <%= Time.now.year %></div>
22
+ </body>
23
+ </html>
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= @title || current_site.name %></title>
5
+ <%= stylesheet_link_tag "publinator/site", :media => "all" %>
6
+ <%= javascript_include_tag "publinator/site" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+ <div id="header"><h1><%= link_to current_site.name, root_url %></h1></div>
11
+ <div id="content"><%= yield %></div>
12
+ <div id="footer">&copy <%= Time.now.year %></div>
13
+ </body>
14
+ </html>
@@ -0,0 +1,2 @@
1
+ <h1>Home Page</h1>
2
+ <p>Welcome to our Site!</p>
@@ -0,0 +1,2 @@
1
+ <h1>Home#page</h1>
2
+ <p>Find me in app/views/publinator/home/page.html.erb</p>
@@ -0,0 +1,5 @@
1
+ <h2>Content Manager Home Page</h2>
2
+
3
+ <% @publishable_types.each do |pt| %>
4
+ <%= link_to pt.name.pluralize, "/manage/#{pt.name.downcase.pluralize}" %>
5
+ <% end %>
@@ -0,0 +1,23 @@
1
+ <%= semantic_form_for @publishable, :url => manage_create_publishable_path do |form| %>
2
+ <% if @publishable.errors && @publishable.errors.count > 0 %>
3
+ <% logger.info @publishable_errors.to_yaml %>
4
+ <% @publishable.errors.each do |e| %>
5
+ <%= e %>
6
+ <% end %>
7
+ <% end %>
8
+ <%= form.inputs @publishable.class.to_s do %>
9
+ <%= form.inputs :title, :body %>
10
+ <% end %>
11
+ <%= form.semantic_fields_for @publishable.publication do |pub| %>
12
+ <%= pub.inputs "Publication Settings" do %>
13
+ <%= pub.input :custom_slug, :required => false %>
14
+ <%= pub.input :publish_at, :as => :datetime_select, :required => false %>
15
+ <%= pub.input :unpublish_at, :as => :datetime_select, :required => false %>
16
+ <%= pub.input :archive_at, :as => :datetime_select, :required => false %>
17
+ <% end %>
18
+ <% end %>
19
+ <%= form.actions do %>
20
+ <%= form.action :submit, :as => :button %>
21
+ <%= form.action :cancel, :as => :link %>
22
+ <% end %>
23
+ <% end %>
@@ -0,0 +1,7 @@
1
+ <tr>
2
+ <td><%= link_to summary.slug, manage_publishable_path(summary.publishable.class.to_s.downcase.pluralize, summary.slug) %></td>
3
+ <td><%= summary.updated_at %></td>
4
+ <td><%= link_to "edit", manage_edit_publishable_path(summary.publishable.class.to_s.downcase.pluralize, summary.slug) %></td>
5
+ <td><%= link_to "show", manage_publishable_path(summary.publishable.class.to_s.downcase.pluralize, summary.slug) %></td>
6
+ <td><%= link_to "public", publishable_path(summary.publishable.class.to_s.downcase.pluralize, summary.slug) %></td>
7
+ </tr>
@@ -0,0 +1,4 @@
1
+ <h2>Edit <%= @publishable.class.to_s %> <%= @publication.slug %></h2>
2
+
3
+ <%= render :partial => "form" %>
4
+
@@ -0,0 +1,16 @@
1
+ <h2><%= params["publishable_type"].capitalize %></h2>
2
+
3
+ <table id="publishables">
4
+ <thead>
5
+ <tr>
6
+ <th><%= params["publishable_type"].capitalize.singularize %> Title</th>
7
+ <th>Last Updated At</th>
8
+ <th>Edit</th>
9
+ <th>Show</th>
10
+ <th>Public Link</th>
11
+ </tr>
12
+ </thead>
13
+ <%= render :collection => @publishables, :partial => "summary" %>
14
+ </table>
15
+
16
+ <%= link_to "Add #{params["publishable_type"].singularize.capitalize}", "/manage/#{params["publishable_type"]}/new" %>
@@ -0,0 +1,4 @@
1
+ <h2>Add a new <%= @publishable.class.to_s %></h2>
2
+
3
+ <%= render :partial => "form" %>
4
+
@@ -0,0 +1,10 @@
1
+
2
+ <h1><%= @publishable.title %></h1>
3
+
4
+ <%= @publishable.body %>
5
+
6
+ <div id="controls">
7
+ <%= link_to "Back", manage_publishables_path(@publishable.class.to_s.downcase.pluralize) %>
8
+ <%= link_to "Edit", manage_edit_publishable_path(@publishable.class.to_s.downcase.pluralize, @publishable) %>
9
+ <%= link_to "Delete", manage_publishable_path(@publishable.class.to_s.downcase.pluralize, @publishable.id), :method => :delete, :class => "danger", :confirm => "Delete this #{@publishable.class.to_s}?" %>
10
+ </div>
@@ -0,0 +1,6 @@
1
+ <% logger.info @site.class %>
2
+ <%= form_for @site, :url => manage_sites_path do |form| %>
3
+ <%= form.label :site, "Site Name" %>
4
+ <%= form.text_field :name %>
5
+ <%= form.submit %>
6
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <% @sites.each do |s| %>
2
+ <%= link_to s.name, manage_site_path(s) %>
3
+ <% end %>
4
+
5
+ <%= link_to "Add Site", new_manage_site_path %>
@@ -0,0 +1,3 @@
1
+ <h1>Add a New Site</h1>
2
+
3
+ <%= render :partial => 'form' %>
@@ -0,0 +1 @@
1
+ <%= link_to summary.slug, summary %><br>
@@ -0,0 +1,3 @@
1
+ <h1><%= params["publishable_type"].capitalize %></h1>
2
+
3
+ <%= render :collection => @publishables, :partial => "summary" %>
@@ -0,0 +1,5 @@
1
+ <h1>
2
+ <%= @publishable.title %>
3
+ </h1>
4
+
5
+ <%= @publishable.body %>
data/config/routes.rb ADDED
@@ -0,0 +1,52 @@
1
+ Publinator::Engine.routes.draw do
2
+
3
+
4
+ root :to => "home#index"
5
+
6
+ match '/' => 'home#index'
7
+
8
+ namespace :manage do
9
+ match "/" => 'manage#index'
10
+ resources :sites
11
+ constraints(Publinator::PublishableType) do
12
+ match '/:publishable_type/' => "publishable#index", :requirements => {
13
+ :publishable_type => /\A([a-zA-Z]+[a-zA-Z_]*)\z/i
14
+ }, :as => "publishables"
15
+
16
+ match '/:publishable_type/new' => "publishable#new", :requirements => {
17
+ :publishable_type => /\A([a-zA-Z]+[a-zA-Z_]*)\z/i
18
+ }
19
+
20
+ match '/:publishable_type/create' => "publishable#create", :requirements => {
21
+ :publishable_type => /\A([a-zA-Z]+[a-zA-Z_]*)\z/i
22
+ }, :as => "create_publishable"
23
+
24
+ match '/:publishable_type/:id/edit' => "publishable#edit", :requirements => {
25
+ :id => /\A\d*\z/i,
26
+ :publishable_type => /\A([a-zA-Z]+[a-zA-Z_]*)\z/i
27
+ }, :as => "edit_publishable"
28
+
29
+ match '/:publishable_type/:id' => "publishable#show", :requirements => {
30
+ :id => /\A\d*\z/i,
31
+ :publishable_type => /\A([a-zA-Z]+[a-zA-Z_]*)\z/i
32
+ }, :as => "publishable"
33
+ end
34
+ end
35
+
36
+ constraints(Publinator::PublishableType) do
37
+ match '/:publishable_type/' => "publishable#index", :requirements => {
38
+ :publishable_type => /\A([a-zA-Z]+[a-zA-Z_]*)\z/i
39
+ }
40
+
41
+ match '/:publishable_type/:id' => "publishable#show", :requirements => {
42
+ :id => /\A\d*\z/i,
43
+ :publishable_type => /\A([a-zA-Z]+[a-zA-Z_]*)\z/i
44
+ }, :as => "publishable"
45
+
46
+ end
47
+
48
+ match "/:slug", :controller => :home, :action => :page, :requirements => {
49
+ :slug => /\A([a-zA-Z]+[a-zA-Z\-_]*)\z/i
50
+ }
51
+
52
+ end
@@ -0,0 +1,16 @@
1
+ class CreatePublinatorSites < ActiveRecord::Migration
2
+ def change
3
+ create_table :publinator_sites do |t|
4
+ t.string :name
5
+ t.string :title
6
+ t.text :description
7
+ t.integer :parent_id
8
+ t.string :state
9
+ t.string :abbr
10
+ t.string :type
11
+ t.boolean :default
12
+
13
+ t.timestamps
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ class CreatePublinatorDomainNames < ActiveRecord::Migration
2
+ def change
3
+ create_table :publinator_domain_names do |t|
4
+ t.boolean :shared
5
+ t.boolean :default
6
+ t.string :name
7
+ t.string :subdomain
8
+ t.integer :site_id
9
+
10
+ t.timestamps
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,21 @@
1
+ class CreatePublinatorPublications < ActiveRecord::Migration
2
+ def change
3
+ create_table :publinator_publications do |t|
4
+ t.integer :site_id
5
+ t.integer :publication_state_id
6
+ t.integer :parent_id
7
+ t.string :custom_slug
8
+ t.string :slug
9
+ t.datetime :publish_at
10
+ t.datetime :unpublish_at
11
+ t.datetime :archive_at
12
+ t.string :publishable_type
13
+ t.integer :publishable_id
14
+
15
+ t.timestamps
16
+ end
17
+ add_index :publinator_publications, :site_id
18
+ add_index :publinator_publications, :publication_state_id
19
+ add_index :publinator_publications, :publishable_id
20
+ end
21
+ end
@@ -0,0 +1,12 @@
1
+ class CreatePublinatorPublicationStates < ActiveRecord::Migration
2
+ def change
3
+ create_table :publinator_publication_states do |t|
4
+ t.string :name, :null => false
5
+ t.boolean :system, :default => false
6
+
7
+ t.timestamps
8
+ end
9
+ Publinator::PublicationState.create(:name => "new", :system => true)
10
+ Publinator::PublicationState.create(:name => "published", :system => true)
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ class CreatePublinatorWorkflows < ActiveRecord::Migration
2
+ def change
3
+ create_table :publinator_workflows do |t|
4
+ t.string :name
5
+
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ class CreatePublinatorWorkflowSteps < ActiveRecord::Migration
2
+ def change
3
+ create_table :publinator_workflow_steps do |t|
4
+ t.integer :workflow_id
5
+ t.integer :position
6
+ t.string :role
7
+ t.boolean :notify
8
+ t.boolean :require
9
+
10
+ t.timestamps
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ class CreatePublinatorSiteWorkflows < ActiveRecord::Migration
2
+ def change
3
+ create_table :publinator_site_workflows do |t|
4
+ t.integer :site_id
5
+ t.integer :workflow_id
6
+ t.string :publishable_type
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ class CreatePublinatorPublishables < ActiveRecord::Migration
2
+ def change
3
+ create_table :publinator_publishables do |t|
4
+ t.integer :publication_id
5
+
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,18 @@
1
+ class CreateVersions < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :versions do |t|
4
+ t.string :item_type, :null => false
5
+ t.integer :item_id, :null => false
6
+ t.string :event, :null => false
7
+ t.string :whodunnit
8
+ t.text :object
9
+ t.datetime :created_at
10
+ end
11
+ add_index :versions, [:item_type, :item_id]
12
+ end
13
+
14
+ def self.down
15
+ remove_index :versions, [:item_type, :item_id]
16
+ drop_table :versions
17
+ end
18
+ end
@@ -0,0 +1,9 @@
1
+ class CreatePublinatorPublishableTypes < ActiveRecord::Migration
2
+ def change
3
+ create_table :publinator_publishable_types do |t|
4
+ t.string :name
5
+ t.string :sluggable, :default => true
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ Description:
2
+ The publishable generator creates new publishable object types, facilitating custom objects for specific purposes. The generated migration includes creation of a new PublishableType record and generates a default workflow governing its publication.
3
+
4
+ Example:
5
+ rails generate publishable Article
6
+
7
+ This will create:
8
+ app/models/article.rb
9
+ db/migrations/20120825201820_create_article.rb
10
+
11
+
12
+
@@ -0,0 +1,12 @@
1
+ class PublishableGenerator < Rails::Generators::NamedBase
2
+ source_root File.expand_path('../templates', __FILE__)
3
+ argument :class_name, :type => :string, :default => "article"
4
+
5
+ def create_publishable_initializer
6
+ # create file for class
7
+ template "app/models/publishable_model.rb.erb", "app/models/#{file_name}.rb"
8
+
9
+ # create migration
10
+ template "app/models/publishable_migration.rb.erb", "db/migrate/#{Time.now.utc.strftime("%Y%m%d%H%M%S").to_i}_create_#{class_name.pluralize}.rb"
11
+ end
12
+ end
@@ -0,0 +1,19 @@
1
+ class Create<%= class_name.capitalize %> < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :<%= class_name.pluralize.to_sym %> do |t|
4
+ t.string :title
5
+ t.string :teaser
6
+ t.text :body
7
+
8
+ # t.string :author_name
9
+ # t.text :extra_body
10
+ # t.string :kicker
11
+
12
+ t.timestamps
13
+ end
14
+ end
15
+
16
+ def self.down
17
+ drop_table :<%= class_name.pluralize.to_sym %>
18
+ end
19
+ end
@@ -0,0 +1,5 @@
1
+ class <%= class_name.capitalize %> < Publinator::Publishable
2
+
3
+ self.table_name = '<%= class_name.downcase.pluralize %>'
4
+
5
+ end
@@ -0,0 +1,5 @@
1
+ module Publinator
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace Publinator
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module Publinator
2
+ VERSION = "0.0.2"
3
+ end
data/lib/publinator.rb ADDED
@@ -0,0 +1,4 @@
1
+ require "publinator/engine"
2
+
3
+ module Publinator
4
+ end
@@ -0,0 +1,9 @@
1
+ namespace :publinator do
2
+ desc "Dump DB, then repopulate it."
3
+ task :repopulate => :environment do
4
+ ["db:drop", "db:create", "db:migrate", "publinator:install:migrations", "db:seed"].each do |t|
5
+ Rake::Task[t].execute
6
+ `touch tmp/restart.txt`
7
+ end
8
+ end
9
+ end