cloudrider 0.3.0 → 0.3.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (227) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -1
  3. data/cloudrider.gemspec +1 -0
  4. data/generica/.gitignore +18 -0
  5. data/generica/Gemfile +8 -1
  6. data/generica/Gemfile.lock +3 -0
  7. data/generica/app/assets/javascripts/apiv1.js.ls +6 -1
  8. data/generica/app/assets/javascripts/components/offers-summary.js.em +2 -0
  9. data/generica/app/assets/javascripts/components/picture-chunk.js.em +17 -0
  10. data/generica/app/assets/javascripts/components/pictures-group.js.em +21 -0
  11. data/generica/app/assets/javascripts/components/search-and-filter.js.em +4 -0
  12. data/generica/app/assets/javascripts/components/site-nav.js.em +5 -1
  13. data/generica/app/assets/javascripts/components/taggable-field.js.em +28 -0
  14. data/generica/app/assets/javascripts/components/tree/taxon-li.js.em +6 -2
  15. data/generica/app/assets/javascripts/controllers/index_controller.js.em +19 -2
  16. data/generica/app/assets/javascripts/controllers/modals/login_controller.js.em +23 -9
  17. data/generica/app/assets/javascripts/controllers/modals/register_controller.js.em +24 -0
  18. data/generica/app/assets/javascripts/controllers/products/index_controller.js.em +23 -13
  19. data/generica/app/assets/javascripts/controllers/products/product/offers/new_controller.js.em +17 -0
  20. data/generica/app/assets/javascripts/controllers/users/offers/index_controller.js.em +10 -0
  21. data/generica/app/assets/javascripts/controllers/users/product/edit_controller.js.em +31 -0
  22. data/generica/app/assets/javascripts/controllers/users/products/index_controller.js.em +8 -0
  23. data/generica/app/assets/javascripts/controllers/users/products/new_controller.js.em +22 -0
  24. data/generica/app/assets/javascripts/controllers/users/products/slice_controller.js.em +4 -0
  25. data/generica/app/assets/javascripts/helpers/filte_previewer.js.ls +21 -0
  26. data/generica/app/assets/javascripts/helpers/listing_picture.js.em +17 -0
  27. data/generica/app/assets/javascripts/models/offer.js.em +9 -8
  28. data/generica/app/assets/javascripts/models/user.js.em +12 -0
  29. data/generica/app/assets/javascripts/models/users/product.js.em +12 -0
  30. data/generica/app/assets/javascripts/routes/application_route.js.em +10 -2
  31. data/generica/app/assets/javascripts/routes/products/index_route.js.em +23 -2
  32. data/generica/app/assets/javascripts/routes/products/product/offers/new_route.js.em +18 -0
  33. data/generica/app/assets/javascripts/routes/users/offers/index_route.js.em +1 -0
  34. data/generica/app/assets/javascripts/routes/users/product_route.js.em +3 -0
  35. data/generica/app/assets/javascripts/routes/users/products/index_route.js.em +3 -0
  36. data/generica/app/assets/javascripts/routes/users/products/new_route.js.em +3 -0
  37. data/generica/app/assets/javascripts/templates/admin/product/edit.emblem +2 -0
  38. data/generica/app/assets/javascripts/templates/admin/products/_form-core.emblem +44 -0
  39. data/generica/app/assets/javascripts/templates/admin/products/new.emblem +4 -42
  40. data/generica/app/assets/javascripts/templates/components/offers-summary.emblem +9 -0
  41. data/generica/app/assets/javascripts/templates/components/picture-chunk.emblem +9 -0
  42. data/generica/app/assets/javascripts/templates/components/pictures-group.emblem +6 -0
  43. data/generica/app/assets/javascripts/templates/components/search-and-filter.emblem +5 -1
  44. data/generica/app/assets/javascripts/templates/components/taggable-field.emblem +1 -0
  45. data/generica/app/assets/javascripts/templates/modals/register.emblem +57 -0
  46. data/generica/app/assets/javascripts/templates/products/product/offers/_anonymous-form.emblem +11 -0
  47. data/generica/app/assets/javascripts/templates/products/product/offers/_offer-form.emblem +55 -0
  48. data/generica/app/assets/javascripts/templates/products/product/offers/new.emblem +37 -0
  49. data/generica/app/assets/javascripts/templates/products/product/show.emblem +26 -1
  50. data/generica/app/assets/javascripts/templates/users.emblem +24 -0
  51. data/generica/app/assets/javascripts/templates/users/index.emblem +3 -0
  52. data/generica/app/assets/javascripts/templates/users/offers/index.emblem +25 -0
  53. data/generica/app/assets/javascripts/templates/users/offers/slice.emblem +31 -0
  54. data/generica/app/assets/javascripts/templates/users/product/edit.emblem +82 -0
  55. data/generica/app/assets/javascripts/templates/users/products/index.emblem +22 -0
  56. data/generica/app/assets/javascripts/templates/users/products/new.emblem +28 -0
  57. data/generica/app/assets/javascripts/templates/users/products/slice.emblem +27 -0
  58. data/generica/app/assets/stylesheets/apiv1/_application.css.scss +4 -0
  59. data/generica/app/assets/stylesheets/apiv1/components/_offers-summary.css.scss +20 -0
  60. data/generica/app/assets/stylesheets/apiv1/components/_pictures-group.css.scss +32 -0
  61. data/generica/app/assets/stylesheets/apiv1/components/_taggable-field.css.scss +32 -0
  62. data/generica/app/assets/stylesheets/apiv1/products/product/offers/_new.css.scss +8 -0
  63. data/generica/app/controllers/admin/base_controller.rb +1 -1
  64. data/generica/app/controllers/admin/sessions/destroy_controller.rb +16 -0
  65. data/generica/app/controllers/apiv1/offers/create_controller.rb +30 -0
  66. data/generica/app/controllers/apiv1/offers/index_controller.rb +22 -0
  67. data/generica/app/controllers/apiv1/offers/show_controller.rb +12 -0
  68. data/generica/app/controllers/apiv1/products/destroy_controller.rb +6 -0
  69. data/generica/app/controllers/apiv1/products/index_controller.rb +8 -2
  70. data/generica/app/controllers/apiv1/products/show_controller.rb +7 -3
  71. data/generica/app/controllers/apiv1/taxons/index_controller.rb +5 -1
  72. data/generica/app/controllers/apiv1/users/create_controller.rb +17 -0
  73. data/generica/app/controllers/apiv1/users/show_controller.rb +12 -0
  74. data/generica/app/controllers/apiv1/users_controller.rb +9 -0
  75. data/generica/app/controllers/application_controller.rb +3 -0
  76. data/generica/app/controllers/users/offers/create_controller.rb +26 -0
  77. data/generica/app/controllers/users/products/create_controller.rb +26 -0
  78. data/generica/app/controllers/users/products/update_controller.rb +35 -0
  79. data/generica/app/mailers/apiv1/aggregate_mailer.rb +13 -0
  80. data/generica/app/mailers/apiv1/aggregate_mailer/summary_context.rb +121 -0
  81. data/generica/app/mailers/apiv1/notifications_mailer.rb +19 -0
  82. data/generica/app/mailers/apiv1/notifications_mailer/new_offer_context.rb +53 -0
  83. data/generica/app/models/admin/user.rb +43 -2
  84. data/generica/app/models/apiv1/attachment.rb +2 -0
  85. data/generica/app/models/apiv1/email_object.rb +35 -0
  86. data/generica/app/models/apiv1/email_request.rb +107 -0
  87. data/generica/app/models/apiv1/offer_message.rb +53 -0
  88. data/generica/app/models/apiv1/offer_postboy.rb +33 -0
  89. data/generica/app/models/apiv1/picture.rb +2 -0
  90. data/generica/app/models/apiv1/product.rb +28 -6
  91. data/generica/app/models/apiv1/products/offer_message_factory.rb +13 -0
  92. data/generica/app/models/apiv1/products_machine.rb +8 -2
  93. data/generica/app/models/apiv1/taxon.rb +1 -1
  94. data/generica/app/models/apiv1/users/product_factory.rb +22 -0
  95. data/generica/app/models/apiv1/users/product_relationship.rb +19 -0
  96. data/generica/app/models/users/products/offer_factory.rb +40 -0
  97. data/generica/app/varissets/javascripts/templates/application.emblem.erb +2 -2
  98. data/generica/app/varissets/javascripts/templates/components/offers-overview.emblem.erb +1 -0
  99. data/generica/app/varissets/javascripts/templates/components/search-and-filter.emblem.erb +33 -0
  100. data/generica/app/varissets/javascripts/templates/components/site-nav.emblem.erb +8 -0
  101. data/generica/app/varissets/javascripts/templates/components/taggable-field.emblem.erb +11 -0
  102. data/generica/app/varissets/javascripts/templates/modals/login.emblem.erb +36 -0
  103. data/generica/app/varissets/javascripts/templates/products.emblem.erb +4 -0
  104. data/generica/app/varissets/javascripts/templates/products/index.emblem.erb +17 -0
  105. data/generica/app/varissets/javascripts/templates/products/product/offers/_anonymous-form.emblem.erb +11 -0
  106. data/generica/app/varissets/javascripts/templates/products/product/offers/_offer-form.emblem.erb +55 -0
  107. data/generica/app/varissets/javascripts/templates/products/product/offers/new.emblem.erb +37 -0
  108. data/generica/app/varissets/javascripts/templates/products/product/show.emblem.erb +108 -0
  109. data/generica/app/varissets/stylesheets/apiv1/components/_offers-overview.css.scss.erb +3 -0
  110. data/generica/app/varissets/stylesheets/apiv1/components/_offers_overview.css.scss.erb +3 -0
  111. data/generica/app/varissets/stylesheets/apiv1/components/_search-and-filter.css.scss.erb +15 -0
  112. data/generica/app/varissets/stylesheets/apiv1/components/_site-footer.css.scss.erb +23 -0
  113. data/generica/app/varissets/stylesheets/apiv1/components/_taggable-field.css.scss.erb +32 -0
  114. data/generica/app/views/apiv1/home/index.html.haml +3 -1
  115. data/generica/app/views/apiv1/layouts/application.html.haml +37 -2
  116. data/generica/config/{database.yml.erb → database.yml.str} +3 -3
  117. data/generica/config/email.yml +11 -0
  118. data/generica/config/email_slave.god +9 -0
  119. data/generica/config/initializers/premailer.rb +1 -0
  120. data/generica/config/initializers/squash.rb.erb +3 -0
  121. data/generica/config/nginx.conf.erb +4 -4
  122. data/generica/config/routes.rb +14 -0
  123. data/generica/db/migrate/20141114213427_add_user_rank_to_admin_users.rb +9 -0
  124. data/generica/db/migrate/20141114225019_create_apiv1_users_products.rb +9 -0
  125. data/generica/db/migrate/20141116053522_create_apiv1_offer_messages.rb +16 -0
  126. data/generica/db/migrate/20141116235011_add_deleted_at_to_apiv1_products.rb +5 -0
  127. data/generica/db/migrate/20141116235209_add_deleted_at_to_apiv1_offer_messages.rb +5 -0
  128. data/generica/db/migrate/20141116235651_add_deleted_at_to_apiv1_pictures.rb +5 -0
  129. data/generica/db/migrate/20141116235808_add_deleted_at_to_apiv1_attachments.rb +5 -0
  130. data/generica/db/migrate/20141127230304_create_apiv1_email_requests.rb +16 -0
  131. data/generica/db/migrate/20141127230455_create_apiv1_email_objects.rb +11 -0
  132. data/generica/lib/generica/assets_unretardifier.rb +32 -0
  133. data/generica/lib/generica/email_slave.rb +92 -0
  134. data/generica/lib/tasks/email_slave.rake +11 -0
  135. data/generica/lib/tasks/production.rake +1 -1
  136. data/generica/public/tests/bermese.jpg +0 -0
  137. data/generica/public/tests/chow.jpg +0 -0
  138. data/generica/public/tests/malamute.jpg +0 -0
  139. data/generica/public/tests/malamute2.JPG +0 -0
  140. data/generica/spec/controllers/apiv1/users/create_controller_spec.rb +17 -0
  141. data/generica/spec/controllers/users/products/create_controller_spec.rb +31 -0
  142. data/generica/spec/mailers/apiv1/aggregate_mailer_spec.rb +29 -0
  143. data/generica/spec/models/apiv1/email_request_spec.rb +4 -0
  144. data/generica/spec/models/apiv1/offer_postboy_spec.rb +22 -0
  145. data/generica/spec/models/apiv1/product_spec.rb +1 -0
  146. data/generica/spec/models/apiv1/products/offer_message_factory_spec.rb +37 -0
  147. data/generica/spec/models/apiv1/products_machine_spec.rb +77 -0
  148. data/generica/spec/models/apiv1/users/product_factory_spec.rb +47 -0
  149. data/generica/spec/models/users/products/offer_factory_spec.rb +38 -0
  150. data/generica/test/mailers/.keep +0 -0
  151. data/generica/test/mailers/previews/apiv1/aggregate_preview.rb +6 -0
  152. data/generica/test/mailers/previews/apiv1/notifications_preview.rb +5 -0
  153. data/lib/cloudrider.rb +1 -1
  154. data/lib/cloudrider/apiv1/base.rb +2 -2
  155. data/lib/cloudrider/apiv1/login_modal_emblem.rb +25 -0
  156. data/lib/cloudrider/apiv1/offers_anonymous_form_partial_emblem.rb +12 -0
  157. data/lib/cloudrider/apiv1/offers_new_emblem.rb +15 -0
  158. data/lib/cloudrider/apiv1/offers_overview_component.rb +8 -0
  159. data/lib/cloudrider/apiv1/offers_overview_sass.rb +8 -0
  160. data/lib/cloudrider/apiv1/product_show_emblem.rb +31 -0
  161. data/lib/cloudrider/apiv1/products_emblem.rb +11 -0
  162. data/lib/cloudrider/apiv1/products_index_emblem.rb +14 -0
  163. data/lib/cloudrider/apiv1/search_and_filter_component.rb +11 -0
  164. data/lib/cloudrider/apiv1/search_and_filter_sass.rb +11 -0
  165. data/lib/cloudrider/apiv1/site_footer_component.rb +7 -7
  166. data/lib/cloudrider/apiv1/site_footer_sass.rb +9 -0
  167. data/lib/cloudrider/application_commander.rb +46 -34
  168. data/lib/cloudrider/backend_commander.rb +15 -9
  169. data/lib/cloudrider/protofile.rb +18 -2
  170. data/lib/cloudrider/protosite.example.json +26 -0
  171. data/lib/cloudrider/protosite.rb +66 -0
  172. data/lib/cloudrider/serverside/base.rb +2 -2
  173. data/lib/cloudrider/serverside/database_yaml.rb +9 -4
  174. data/lib/cloudrider/serverside/nginx_conf.rb +7 -2
  175. data/lib/cloudrider/serverside/squash_ruby.rb +14 -0
  176. data/lib/cloudrider/serverside/unicorn_conf_ruby.rb +2 -1
  177. data/lib/cloudrider/version.rb +1 -1
  178. data/lib/cloudrider/web_firm.rb +16 -0
  179. data/lib/cloudrider/web_firm/component_architect.rb +23 -0
  180. data/lib/cloudrider/web_firm/page_designer.rb +13 -0
  181. data/lib/cloudrider/web_firm/project_lead.rb +30 -0
  182. data/lib/cloudrider/web_firm/scumbag_engineer.rb +40 -0
  183. data/lib/cloudrider/web_firm/support_intern.rb +113 -0
  184. data/lib/generators/cloudrider/server/server_generator.rb +4 -8
  185. data/lib/generators/cloudrider/website/website_generator.rb +25 -0
  186. data/spec/cloudrider/protosite_spec.rb +63 -0
  187. data/vanilla/.bowerrc +4 -0
  188. data/vanilla/.editorconfig +33 -0
  189. data/vanilla/.ember-cli +9 -0
  190. data/vanilla/.gitignore +17 -0
  191. data/vanilla/.jshintrc +32 -0
  192. data/vanilla/.travis.yml +16 -0
  193. data/vanilla/Brocfile.js +20 -0
  194. data/vanilla/README.md +51 -0
  195. data/vanilla/app/app.js +16 -0
  196. data/vanilla/app/components/.gitkeep +0 -0
  197. data/vanilla/app/controllers/.gitkeep +0 -0
  198. data/vanilla/app/controllers/admin.coffee +5 -0
  199. data/vanilla/app/helpers/.gitkeep +0 -0
  200. data/vanilla/app/index.html +21 -0
  201. data/vanilla/app/models/.gitkeep +0 -0
  202. data/vanilla/app/router.js +11 -0
  203. data/vanilla/app/routes/.gitkeep +0 -0
  204. data/vanilla/app/styles/.gitkeep +0 -0
  205. data/vanilla/app/styles/app.css +3 -0
  206. data/vanilla/app/templates/.gitkeep +0 -0
  207. data/vanilla/app/templates/application.hbs +3 -0
  208. data/vanilla/app/templates/components/.gitkeep +0 -0
  209. data/vanilla/app/views/.gitkeep +0 -0
  210. data/vanilla/bower.json +17 -0
  211. data/vanilla/config/environment.js +47 -0
  212. data/vanilla/package.json +39 -0
  213. data/vanilla/public/.gitkeep +0 -0
  214. data/vanilla/public/crossdomain.xml +15 -0
  215. data/vanilla/public/robots.txt +3 -0
  216. data/vanilla/testem.json +11 -0
  217. data/vanilla/tests/.jshintrc +74 -0
  218. data/vanilla/tests/helpers/resolver.js +11 -0
  219. data/vanilla/tests/helpers/start-app.js +25 -0
  220. data/vanilla/tests/index.html +45 -0
  221. data/vanilla/tests/test-helper.js +12 -0
  222. data/vanilla/tests/unit/.gitkeep +0 -0
  223. data/vanilla/tests/unit/controllers/admin-test.coffee +12 -0
  224. data/vanilla/vendor/.gitkeep +0 -0
  225. metadata +189 -5
  226. data/generica/app/views/layouts/application.html.erb +0 -14
  227. data/lib/cloudrider/master_context.rb +0 -105
@@ -0,0 +1,8 @@
1
+ class Cloudrider::Apiv1::OffersOverviewComponent < Cloudrider::Apiv1::Base
2
+ class Context
3
+ end
4
+ private
5
+ def _context
6
+ Context.new
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ class Cloudrider::Apiv1::OffersOverviewSass < Cloudrider::Apiv1::Base
2
+ class Context
3
+ end
4
+ private
5
+ def _context
6
+ Context.new
7
+ end
8
+ end
@@ -0,0 +1,31 @@
1
+ class Cloudrider::Apiv1::ProductShowEmblem < Cloudrider::Apiv1::Base
2
+ class Context
3
+ attr_accessor :show_style
4
+ def online_offerable?
5
+ case show_style.to_s
6
+ when "ecommerce"
7
+ true
8
+ else
9
+ false
10
+ end
11
+ end
12
+ end
13
+ private
14
+ def _file_name
15
+ "show.emblem"
16
+ end
17
+ def _source_folder
18
+ "app/varissets/javascripts/templates/products/product"
19
+ end
20
+ def _context
21
+ Context.new.tap do |c|
22
+ if @protosite.public_offer?
23
+ c.show_style = "public_market"
24
+ elsif @protosite.private_offer?
25
+ c.show_style = "private_market"
26
+ else
27
+ c.show_style = "no_market"
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,11 @@
1
+ class Cloudrider::Apiv1::ProductsEmblem < Cloudrider::Apiv1::Base
2
+ class Context
3
+ def has_cookie_splash?
4
+ false
5
+ end
6
+ end
7
+ private
8
+ def _context
9
+ Context.new
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ class Cloudrider::Apiv1::ProductsIndexEmblem < Cloudrider::Apiv1::Base
2
+ class Context
3
+ attr_accessor :theme
4
+ end
5
+ private
6
+ def _file_name
7
+ "products/index.emblem"
8
+ end
9
+ def _context
10
+ Context.new.tap do |c|
11
+ c.theme = @protosite.theme
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ class Cloudrider::Apiv1::SearchAndFilterComponent < Cloudrider::Apiv1::Base
2
+ class Context
3
+ attr_accessor :snf_style
4
+ end
5
+ private
6
+ def _context
7
+ Context.new.tap do |c|
8
+ c.snf_style = (@style || :lefttop).to_s
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ class Cloudrider::Apiv1::SearchAndFilterSass < Cloudrider::Apiv1::Base
2
+ class Context
3
+ attr_accessor :snf_style
4
+ end
5
+ private
6
+ def _context
7
+ Context.new.tap do |c|
8
+ c.snf_style = (@style || :lefttop).to_s
9
+ end
10
+ end
11
+ end
@@ -1,15 +1,15 @@
1
1
  class Cloudrider::Apiv1::SiteFooterComponent < Cloudrider::Apiv1::Base
2
2
  class Context
3
- def my_company_name
4
- "Cloudrider"
5
- end
6
- def my_company_tagline
7
- "Some sort of company tagline"
8
- end
3
+ attr_accessor :my_company_name, :my_company_tagline
9
4
  end
10
5
 
11
6
  private
12
7
  def _context
13
- Context.new
8
+ Context.new.tap do |c|
9
+ if @protosite.present?
10
+ c.my_company_name = @protosite.project_name
11
+ c.my_company_tagline = "Some sort of company tagline"
12
+ end
13
+ end
14
14
  end
15
15
  end
@@ -0,0 +1,9 @@
1
+ class Cloudrider::Apiv1::SiteFooterSass < Cloudrider::Apiv1::Base
2
+ class Context
3
+ end
4
+
5
+ private
6
+ def _context
7
+ Context.new
8
+ end
9
+ end
@@ -6,33 +6,13 @@ class Cloudrider::ApplicationCommander
6
6
  def varisset_protofiles_for(params)
7
7
  new(params).files_to_write
8
8
  end
9
- def all_varissets
10
- new(name: :all).all_files
11
- end
12
9
  end
13
10
  def initialize(params)
14
11
  @params = params
15
12
  end
16
13
 
17
14
  def files_to_write
18
- _related_assets.flatten.map { |ac| ac.new _varisset_style }.map(&:protofile)
19
- end
20
-
21
- def all_files
22
- [
23
- _product_display,
24
- _application,
25
- _hero_splash,
26
- _introductory_lobby,
27
- _product_listing,
28
- _index,
29
- _cookie_splash,
30
- _products_catalog,
31
- _products_showcase,
32
- _site_nav,
33
- _table_booths,
34
- _site_footer
35
- ].flatten.map { |ac| ac.new _varisset_style }.map(&:protofile)
15
+ _related_assets.flatten.map { |ac| ac.new style: _varisset_style, protosite: _protosite }.map(&:protofile)
36
16
  end
37
17
 
38
18
  private
@@ -80,7 +60,25 @@ class Cloudrider::ApplicationCommander
80
60
  ]
81
61
  end
82
62
  def _site_footer
83
- [Cloudrider::Apiv1::SiteFooterComponent]
63
+ [Cloudrider::Apiv1::SiteFooterComponent, Cloudrider::Apiv1::SiteFooterSass]
64
+ end
65
+ def _offers_new
66
+ [Cloudrider::Apiv1::OffersNewEmblem, Cloudrider::Apiv1::OffersAnonymousFormPartial, Cloudrider::Apiv1::OffersFormPartial]
67
+ end
68
+ def _product_show
69
+ [Cloudrider::Apiv1::ProductShowEmblem]
70
+ end
71
+ def _products_index
72
+ [Cloudrider::Apiv1::ProductsIndexEmblem, Cloudrider::Apiv1::ProductsEmblem]
73
+ end
74
+ def _offers_overview
75
+ [Cloudrider::Apiv1::OffersOverviewComponent, Cloudrider::Apiv1::OffersOverviewSass]
76
+ end
77
+ def _search_and_filter
78
+ [Cloudrider::Apiv1::SearchAndFilterComponent, Cloudrider::Apiv1::SearchAndFilterSass]
79
+ end
80
+ def _protosite
81
+ @params[:protosite]
84
82
  end
85
83
  def _varisset_name
86
84
  @params[:name]
@@ -89,31 +87,41 @@ class Cloudrider::ApplicationCommander
89
87
  @params[:style]
90
88
  end
91
89
  def _related_assets
92
- case _varisset_name
90
+ case _varisset_name.underscore
93
91
  when "application"
94
92
  _application
95
93
  when "index"
96
94
  _index
97
- when "cookie-splash"
95
+ when "cookie_splash"
98
96
  _cookie_splash
99
- when "hero-splash"
97
+ when "hero_splash"
100
98
  _hero_splash
101
- when "introductory-lobby"
99
+ when "introductory_lobby"
102
100
  _introductory_lobby
103
- when "product-display"
101
+ when "product_display"
104
102
  _product_display
105
- when "product-listing"
103
+ when "product_listing"
106
104
  _product_listing
107
- when "products-catalog"
105
+ when "products_catalog"
108
106
  _products_catalog
109
- when "products-showcase"
107
+ when "products_showcase"
110
108
  _products_showcase
111
- when "site-footer"
109
+ when "site_footer"
112
110
  _site_footer
113
- when "site-nav"
111
+ when "site_nav"
114
112
  _site_nav
115
- when "table-booths"
113
+ when "table_booths"
116
114
  _table_booths
115
+ when "product_show"
116
+ _product_show
117
+ when "products_index"
118
+ _products_index
119
+ when "offers_overview"
120
+ _offers_overview
121
+ when "offers_new"
122
+ _offers_new
123
+ when "search_and_filter"
124
+ _search_and_filter
117
125
  else
118
126
  raise UnknownOrUnimplmenetedVarisset, _varisset_name
119
127
  end
@@ -130,7 +138,11 @@ class Cloudrider::ApplicationCommander
130
138
  "products-showcase",
131
139
  "site-nav",
132
140
  "site-footer",
133
- "table-booths"
141
+ "table-booths",
142
+ "product-show",
143
+ "products-index",
144
+ "offers-overview",
145
+ "search-and-filter"
134
146
  ]
135
147
  end
136
148
 
@@ -14,7 +14,7 @@ class Cloudrider::BackendCommander
14
14
  end
15
15
 
16
16
  def files_to_write
17
- _related_backends.flatten.map { |ac| ac.new _backend_style }.map(&:protofile)
17
+ _related_backends.flatten.map { |ac| ac.new style: _backend_style, protosite: _protosite }.map(&:protofile)
18
18
  end
19
19
  private
20
20
  def _nginx
@@ -26,30 +26,36 @@ class Cloudrider::BackendCommander
26
26
  def _database
27
27
  [Cloudrider::Serverside::DatabaseYaml]
28
28
  end
29
+ def _squash
30
+ [Cloudrider::Serverside::SquashRuby]
31
+ end
32
+ def _configs
33
+ _nginx + _unicorn + _database + _squash
34
+ end
29
35
  def _related_backends
30
36
  case _backend_name
31
- when "admin"
32
- when "user"
33
- when "employee"
34
- when "product"
35
- when "offer"
36
- when "message"
37
- when "taxon"
37
+ when "configs"
38
+ _configs
38
39
  when "nginx"
39
40
  _nginx
40
41
  when "unicorn"
41
42
  _unicorn
42
43
  when "database"
43
44
  _database
45
+ when "squash"
46
+ _squash
44
47
  else
45
48
  raise UnknownOrUnimplmenetedVarisset, _backend_name
46
49
  end
47
50
  end
51
+ def _protosite
52
+ @params[:protosite]
53
+ end
48
54
  def _backend_style
49
55
  @params[:style]
50
56
  end
51
57
  def _backend_name
52
58
  @params[:name]
53
59
  end
54
- KnownBackends = ["admin", "user", "employee", "product", "offer", "message", "taxon", "nginx", "unicorn", "database"]
60
+ KnownBackends = ["configs", "nginx", "unicorn", "database", "squash"]
55
61
  end
@@ -1,9 +1,25 @@
1
1
  class Cloudrider::Protofile
2
- attr_accessor :file_name, :folder, :renderer
2
+ class OnlyBeCalledWhenNoType < StandardError; end
3
+ attr_accessor :file_name, :folder, :renderer, :source, :target, :type
4
+ def initialize(opts={})
5
+ @type = opts[:type]
6
+ @source = opts[:source]
7
+ @target = opts[:target]
8
+ end
3
9
  def full_name
4
- File.join folder, file_name
10
+ raise OnlyBeCalledWhenNoType, _debug_string if ["copy_file", "directory"].include? @type.to_s
11
+ File.join *[folder, file_name].reject(&:blank?)
5
12
  end
6
13
  def content
7
14
  renderer.call
8
15
  end
16
+ private
17
+ def _debug_string
18
+ {
19
+ file_name: file_name,
20
+ folder: folder,
21
+ target: target,
22
+ type: type
23
+ }.inspect
24
+ end
9
25
  end
@@ -0,0 +1,26 @@
1
+ {
2
+ "project_name": "craigslist inspired market",
3
+ "domain_names": ["www.craigslist-clone.com", "craigslist-clone.com"],
4
+ "squash_api_key": "666-6235lksdfsd",
5
+ "pages": [
6
+ {
7
+ "name": "index",
8
+ "components": ["products-showcase", "product-display", "search-and-filter"]
9
+ },
10
+ {
11
+ "name": "products_index",
12
+ "components": ["products-catalog", "product-listing", "search-and-filter"]
13
+ },
14
+ {
15
+ "name": "product_show",
16
+ "components": ["offers-overview"]
17
+ },
18
+ {
19
+ "name": "offers_new",
20
+ "components": []
21
+ }
22
+ ],
23
+ "functionalities": ["admin_panel", "user_accounts", "public_offer", "categorizable_products"],
24
+ "theme": "craigslist",
25
+ "layout": "mixed-width, hero-narrow"
26
+ }
@@ -0,0 +1,66 @@
1
+ # protosite_example = {
2
+ # pages: [protopage],
3
+ # functions: someof KnownFunctionalities,
4
+ # theme: oneof KnownThemes,
5
+ # layout: oneof KnownLayouts
6
+ # }
7
+
8
+ # protopage_example = {
9
+ # name: oneof KnownPages,
10
+ # components: someof KnownComponents
11
+ # }
12
+
13
+ class Cloudrider::Protosite
14
+ KnownPages = [:index, :products_index, :product_show, :about_us, :contact_us, :offers_new]
15
+ KnownFunctionalities = [:admin_panel, :user_accounts, :public_offer, :categorizable_products]
16
+ KnownThemes = [:craigslist, :material, :amateur, :girly, :flat]
17
+ KnownLayouts = [
18
+ "full-width, triple-column", # https://medium.com/@erikdkennedy/7-rules-for-creating-gorgeous-ui-part-1-559d4e805cda?hn=1 wikipedia redesign
19
+ "full-width, double-column", # circa 2014 wikipedia
20
+ "full-width, single-column", # full page sites (i.e. gamified sites)
21
+ "mixed-width, hero-full", # like the tons of profile pages out there
22
+ "mixed-width, hero-narrow", # bootstrap circa 2011
23
+ "narrow-width" # circa 2007 yahoo
24
+ ]
25
+
26
+ def self.from_hash(hash)
27
+ symbolized_hash = hash.symbolize_keys
28
+ new.tap do |p|
29
+ p.project_name = symbolized_hash[:project_name]
30
+ p.domain_names = symbolized_hash[:domain_names]
31
+ p.theme = symbolized_hash[:theme]
32
+ p.layout = symbolized_hash[:layout]
33
+ p.squash_api_key = symbolized_hash[:squash_api_key]
34
+ p.functionalities = symbolized_hash[:functionalities]
35
+ p.pages = symbolized_hash[:pages].to_a.map { |page_hash| Protopage.new page_hash.symbolize_keys }
36
+ end
37
+ end
38
+ attr_accessor :pages, :functionalities, :theme, :project_name, :domain_names, :layout
39
+
40
+ def public_offer?
41
+ functionalities.include?("public_offer") && pages.any? { |page| page.name == "offers_new" }
42
+ end
43
+
44
+ def private_offer?
45
+ !functionalities.include?("public_offer") && pages.any? { |page| page.name == "offers_new" }
46
+ end
47
+
48
+ end
49
+
50
+ class Cloudrider::Protosite::Protopage
51
+ attr_accessor :name, :components
52
+ KnownComponents = [
53
+ "hero-splash",
54
+ "cookie-splash",
55
+ "introductory-lobby",
56
+ "products-showcase",
57
+ "table-booths",
58
+ "products-catalog",
59
+ "search-and-filter",
60
+ "offers-overview"
61
+ ]
62
+ def initialize(name: name, components: components)
63
+ @name, @components = name, components.to_a
64
+ end
65
+ end
66
+