cloudrider 0.3.0 → 0.3.20

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 (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
+