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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9d4b94ed61a707034b8ccd0c682b2f68462344f4
4
- data.tar.gz: 131dcbeb5d47dae64d81868ead5f1e6ee50c27d8
3
+ metadata.gz: 5334f23f91a9c3a7cd5b5efef53c2963ca386364
4
+ data.tar.gz: 08302967d39ffd580befd2f26a1f83ae29f7e64f
5
5
  SHA512:
6
- metadata.gz: 46ed9888ae4259ad837a82707cc9916058dbe1f4592be93daba3e78d7b7d2aeb4a0b7905c74bf1113b87c4572b186b65f58135e1f650a2b6956a2de2120028a0
7
- data.tar.gz: c66088abfe37ef2e1bdc459a8c940ea642ae69862222ada8de414e8c492493f3af6fb7674ae7047238039c8d1068990055a98ca69805a3f1f53b87bd6600f92a
6
+ metadata.gz: 6f698234c8a31c9dbd6e77240733d0d985babcefa394a841fd894b4f1055197d9776f49c3e793dce883d12cdb7f41672bb40b50b383e2e8b92b4fead732ae078
7
+ data.tar.gz: e7ddb9a4cd9e2b6b2558bb9c13e2ba8641801426fd6282331a86bf89da2f1d94a177463928c555d4e27684830358c7913d896dc3ff0248186c5e8c840eed7b18
data/README.md CHANGED
@@ -1,8 +1,18 @@
1
1
  # Cloudrider
2
2
 
3
+ TODO:
4
+ 1. rework session / user registration to store static session data outside the controller
5
+ 2. extract the image preloader out of the ember app
6
+ 3. roll in google analytics
7
+ 4. products new form needs testing and the edge case when people don't upload pictures
8
+ 5. switch over to using ember cli on top of asshole pipelines
9
+ 6. finish up the protosite / protopage input data objects and their scaffolding
10
+ 7. work in email dispatching and such services
11
+ 8. fix search-and-filter so that clicking on categories automatically fills the search bar, the search into a form so you can enter submit
12
+
3
13
  Deployment use for restarting the server
4
14
  ```bash
5
- $ rake production:on_restart RAILS_ENV=production && kill -QUIT $(cat tmp/pids/unicorn.pid) && unicorn_rails -c config/unicorn.conf.rb -E production -D
15
+ rake production:on_restart RAILS_ENV=production && kill -QUIT $(cat tmp/pids/unicorn.pid) && unicorn_rails -c config/unicorn.conf.rb -E production -D
6
16
  ```
7
17
  FUTURE TODO:
8
18
  switch I18n translations to a key-value storage basis with a redis cluster
data/cloudrider.gemspec CHANGED
@@ -24,4 +24,5 @@ Gem::Specification.new do |spec|
24
24
  spec.add_dependency "functional_support", '>=0.0.12'
25
25
  spec.add_dependency "tilt", ">=1.4"
26
26
  spec.add_dependency "activesupport", '>=3'
27
+ spec.add_dependency "arrows", ">=0.0.2"
27
28
  end
@@ -0,0 +1,18 @@
1
+ # See https://help.github.com/articles/ignoring-files for more about ignoring files.
2
+ #
3
+ # If you find yourself ignoring temporary files generated by your text editor
4
+ # or operating system, you probably want to add a global ignore instead:
5
+ # git config --global core.excludesfile '~/.gitignore_global'
6
+
7
+ # Ignore bundler config.
8
+ /.bundle
9
+
10
+ # Ignore the default SQLite database.
11
+ /db/*.sqlite3
12
+ /db/*.sqlite3-journal
13
+
14
+ # Ignore all logfiles and tempfiles.
15
+ /log/*.log
16
+ /tmp
17
+
18
+ /public/system
data/generica/Gemfile CHANGED
@@ -2,7 +2,7 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Cloudrider requires the following gems
4
4
  # Core Backend
5
- gem 'rails', '4.1.6'
5
+ gem 'rails', '~> 4.1.8'
6
6
  gem 'gctools', '~>0.2.3'
7
7
  gem 'functional_support', '>=0.0.12'
8
8
  gem 'mysql2'
@@ -14,6 +14,11 @@ gem 'probability', "1"
14
14
  gem 'elasticsearch-rails', '~> 0.1.4'
15
15
  gem 'elasticsearch-model', '~> 0.1.4'
16
16
  gem 'elasticsearch', '~> 1.0.4'
17
+ gem 'paranoia', '~> 2.0.2'
18
+ gem 'premailer-rails', '~> 1.8.0'
19
+ gem 'gmail', '~> 0.4.2'
20
+ gem 'god', '~> 0.13.4'
21
+ gem 'arrows', '>= 0.0.2'
17
22
 
18
23
  # Support
19
24
  gem "haml", "~> 4.0.0"
@@ -22,6 +27,8 @@ gem "stringex", "~> 2.1.2"
22
27
  gem 'ffaker', ">=1.20.0"
23
28
  gem 'numbers_and_words', "~> 0.10.0"
24
29
  gem 'decent_exposure', '~> 2.3.1'
30
+ gem 'squash_ruby', '~> 2.0.0', :require => 'squash/ruby'
31
+ gem 'squash_rails', '~>1.3.3', :require => 'squash/rails'
25
32
 
26
33
  # Assets Frameworks
27
34
  gem "font-awesome-sass", "~> 4.1.0.0"
@@ -208,6 +208,8 @@ GEM
208
208
  activesupport (>= 3.0.0)
209
209
  cocaine (~> 0.5.3)
210
210
  mime-types
211
+ paranoia (2.0.2)
212
+ activerecord (~> 4.0)
211
213
  probability (1.0.0)
212
214
  rack (1.5.2)
213
215
  rack-test (0.6.2)
@@ -342,6 +344,7 @@ DEPENDENCIES
342
344
  numbers_and_words (~> 0.10.0)
343
345
  painful_translate (>= 0.0.4)
344
346
  paperclip (~> 4.2.0)
347
+ paranoia (~> 2.0.2)
345
348
  probability (= 1)
346
349
  rails (= 4.1.6)
347
350
  rails_12factor
@@ -2,6 +2,7 @@
2
2
  #= require generica/image-preload
3
3
  #= require ./packages/flash
4
4
  #= require ./packages/image_preloader
5
+ #= require ./packages/tag_parser
5
6
  #= require_tree ./mixins
6
7
  #= require_tree ./helpers
7
8
  #= require_tree ./controllers
@@ -23,4 +24,8 @@ Apiv1.ApplicationStore = DS.Store.extend do
23
24
  # is built to work nicely with the ActiveModel::Serializers gem.
24
25
  adapter: DS.ActiveModelAdapter
25
26
 
26
- $ _.once -> $('#now-loading').hide!
27
+ $ _.once ->
28
+ if window.RawCurrentUserSession
29
+ store = Apiv1.__container__.lookup("store:main")
30
+ set$ Apiv1, "CurrentUserSession", store.push "adminSession", window.RawCurrentUserSession
31
+ $('#now-loading').hide "puff", 600
@@ -0,0 +1,2 @@
1
+ class Apiv1.OffersSummaryComponent extends Ember.Component
2
+ classNames: ['offers-summary']
@@ -0,0 +1,17 @@
1
+ class Apiv1.PictureChunkComponent extends Ember.Component
2
+ classNames: ["picture-chunk"]
3
+
4
+ +computed picture.src
5
+ src: -> @get("picture.src")
6
+
7
+ +computed picture.fileName
8
+ fileName: -> @get("picture.fileName")
9
+
10
+ +computed model
11
+ picture: ->
12
+ return if Ember.isBlank @model
13
+ Apiv1.ListingsPicture.fromFile @model
14
+
15
+ actions:
16
+ killPicture: ->
17
+ @controller.sendAction "action", @model
@@ -0,0 +1,21 @@
1
+ class Apiv1.PicturesGroupComponent extends Ember.Component
2
+ classNames: ["pictures-group"]
3
+ pictures: []
4
+ totalAllowedSize: "10 mb"
5
+
6
+ +computed images.@each.fileSize
7
+ totalFileSize: ->
8
+ Apiv1.StringEx.byteUnits @images.reduce @pictureSummer, 0
9
+
10
+
11
+ +computed pictures.@each
12
+ images: ->
13
+ return [] if Ember.isBlank @pictures
14
+ @pictures.map (pic) => Apiv1.ListingsPicture.fromFile pic
15
+
16
+ pictureSummer: (sumSizes, image) ->
17
+ sumSizes + image.get("fileSize")
18
+
19
+ actions:
20
+ killPicture: (picture) ->
21
+ @pictures.removeObject picture
@@ -2,11 +2,15 @@ class Apiv1.SearchAndFilterComponent extends Ember.Component
2
2
  classNames: ['search-and-filter']
3
3
  activeTaxons: []
4
4
  searchQuery: ""
5
+ attributeBindings: ['class']
5
6
 
6
7
  +computed activeTaxons.@each, searchQuery
7
8
  searchParams: ->
8
9
  activeTaxons: @activeTaxons
9
10
  searchQuery: @searchQuery
11
+
12
+ didInsertElement: ->
13
+ @searchQuery = @query
10
14
 
11
15
  actions:
12
16
  search: ->
@@ -22,4 +22,8 @@ class Apiv1.SiteNavComponent extends Ember.Component
22
22
 
23
23
  willDestroyElement: ->
24
24
  $("#page-wrapper").unbind "touchmove"
25
- $("#page-wrapper").unbind "scroll"
25
+ $("#page-wrapper").unbind "scroll"
26
+
27
+ actions:
28
+ displayModal: (modal) ->
29
+ @sendAction 'action', modal
@@ -0,0 +1,28 @@
1
+ class Apiv1.TaggableFieldComponent extends Ember.Component
2
+ tags: []
3
+ classNames: ['taggable-field']
4
+ attributeBindings: ["class"]
5
+ text: ""
6
+
7
+ +observer tags.@each.id, tags.@each.taxonName
8
+ fixTextOnTagChange: ->
9
+ tokenFromTags = @batchTokenify @tags
10
+ @appendMissingText tokenFromTags
11
+ @dropUnwantedText tokenFromTags
12
+
13
+ +computed text
14
+ existingTextTokens: ->
15
+ Apiv1.TagParser.parse(@text).tagTokens()
16
+
17
+ appendMissingText: (texts) ->
18
+ missing = _.difference texts, @existingTextTokens
19
+ @text = [@text.trim(), missing.join(" ").trim()].join " "
20
+
21
+ dropUnwantedText: (texts)->
22
+ stuffToRemove = _.difference @existingTextTokens, texts
23
+ for str in stuffToRemove
24
+ @text = @text.split(str).join("")
25
+
26
+ batchTokenify: (tags) ->
27
+ return [] if Ember.isBlank tags
28
+ tags.map Apiv1.TagParser.tokenifyTaxon
@@ -9,7 +9,7 @@ class Apiv1.TreeTaxonLiComponent extends Ember.Component
9
9
  return false unless @isExpandable
10
10
  if arguments.length > 1
11
11
  @expansionCoefficient = expand
12
- unless @expansionCoefficient?
12
+ if Ember.isBlank @expansionCoefficient
13
13
  @expansionCoefficient = @isExpandable and @activeTaxons.contains @taxon
14
14
  @expansionCoefficient
15
15
 
@@ -24,7 +24,7 @@ class Apiv1.TreeTaxonLiComponent extends Ember.Component
24
24
  return false unless @isSelectable
25
25
  if arguments.length > 1
26
26
  @selectionCoefficient = select
27
- unless @selectionCoefficient?
27
+ if Ember.isBlank @selectionCoefficient
28
28
  @selectionCoefficient = @isSelectable and @activeTaxons.contains @taxon
29
29
  @selectionCoefficient
30
30
 
@@ -45,9 +45,13 @@ class Apiv1.TreeTaxonLiComponent extends Ember.Component
45
45
  @selectMe()
46
46
 
47
47
  unexpandMe: ->
48
+ @activeTaxons ||= []
49
+ @activeTaxons.removeObject @taxon
48
50
  @isExpanded = false
49
51
 
50
52
  expandMe: ->
53
+ @activeTaxons ||= []
54
+ @activeTaxons.addObject @taxon
51
55
  @isExpanded = true
52
56
 
53
57
  unselectMe: ->
@@ -1,6 +1,8 @@
1
1
  class Apiv1.IndexController extends Ember.ObjectController
2
2
  queryParams: ['anchor']
3
- anchor: null
3
+ anchor: ""
4
+ query: ""
5
+ activeTaxons: []
4
6
 
5
7
  +observer anchor
6
8
  scroll2Anchor: ->
@@ -16,4 +18,19 @@ class Apiv1.IndexController extends Ember.ObjectController
16
18
  p1 = $(".site-content").position()
17
19
  p2 = el$.position()
18
20
  return unless p1? and p2?
19
- p2.top - p1.top
21
+ p2.top - p1.top
22
+
23
+ +observer activeTaxons.@each.id
24
+ manageATI: ->
25
+ return if Ember.isBlank @activeTaxons
26
+ qp = { page: 1, per: 15, query: @query, ati: @activeTaxons.mapBy("id") }
27
+ @transitionToRoute "products.index", queryParams: qp
28
+
29
+ actions:
30
+ search: (params) ->
31
+ @transitionToRoute "products.index",
32
+ queryParams:
33
+ page: 1
34
+ per: 15
35
+ query: params.searchQuery
36
+ ati: params.activeTaxons.mapBy "id"
@@ -1,24 +1,38 @@
1
1
  class Apiv1.ModalsLoginController extends Ember.ObjectController
2
+ +computed
3
+ model: -> @store.createRecord("adminSession")
4
+
2
5
  +computed model
3
- session: ->
4
- @login @model
5
- @model
6
+ session: -> @model
6
7
 
7
- +computed session.id
8
- isAuthenticated: -> @get("session.id")
8
+ +computed model.id
9
+ isAuthenticated: -> @get("model.id")
9
10
 
10
11
  login: (session) ->
11
12
  session.save().then(_.bind @successfulLogin, @).catch(_.bind @failedLogin, @)
12
13
 
13
14
  successfulLogin: (session) ->
14
- Apiv1.Flash.register "success", "Admin logged in", 5000
15
- @transitionToRoute "admin.index"
15
+ if session.isAdmin
16
+ Apiv1.Flash.register "success", "Admin logged in", 5000
17
+ else
18
+ Apiv1.Flash.register "success", "User logged in", 5000
19
+ Apiv1.CurrentUserSession = session
20
+ @redirectOut()
16
21
 
17
- failedLogin: _.after 1, (reason) ->
22
+ redirectOut: ->
23
+ if @get("model.isAdmin")
24
+ @transitionToRoute "admin.index"
25
+ else
26
+ @transitionToRoute "users.index"
27
+
28
+ failedLogin: (reason) ->
18
29
  Apiv1.Flash.register "warning", "login failed", 5000
19
30
  @failureReason = reason.responseJSON.admin_session if reason.responseJSON?
20
31
 
21
32
 
22
33
  actions:
23
34
  formSubmitted: ->
24
- @login @session
35
+ if @isAuthenticated
36
+ @redirectOut()
37
+ else
38
+ @login @model
@@ -0,0 +1,24 @@
1
+ class Apiv1.ModalsRegisterController extends Ember.ObjectController
2
+
3
+ +computed
4
+ model: -> @store.createRecord("user")
5
+
6
+ +computed model
7
+ user: -> @model
8
+
9
+ redirectToIndex: ->
10
+ @transitionToRoute 'users.index'
11
+ notifySuccess: ->
12
+ Apiv1.Flash.register "success", "account created!", 4000
13
+ successfulSave: (user) ->
14
+ @notifySuccess()
15
+ @redirectToIndex()
16
+ Apiv1.CurrentUserSession = user
17
+ failedSave: (reason) ->
18
+ Apiv1.Flash.register "warning", "the server died for some reason", 5000 if reason.status is 500
19
+ @failureReason = reason.responseJSON if reason.responseJSON
20
+
21
+ actions:
22
+ formSubmitted: ->
23
+ @failureReason = null
24
+ @model.save().then(_.bind @successfulSave, @).catch(_.bind @failedSave, @)
@@ -2,24 +2,34 @@ class Apiv1.ProductsIndexController extends Ember.ObjectController
2
2
  queryParams: ["per", "page", "query", "ati"]
3
3
  per: 15
4
4
  page: 1
5
- query: null
6
- ati: []
5
+ query: ""
6
+ ati: ""
7
+
8
+ +computed model.activeTaxons.@each
9
+ activeTaxons: -> @model.activeTaxons
7
10
 
8
- +computed model.taxons.@each.parentId
9
- taxons: -> @get("model.taxons")
11
+ +observer activeTaxons.@each.id
12
+ manageATI: ->
13
+ return if Ember.isBlank @activeTaxons
14
+ qp = _.extend { query: @query }, @searchParams
15
+ @transitionToRoute "products.index", queryParams: qp
16
+
17
+ +computed Apiv1.PreloadedTaxons.@each.parentId
18
+ taxons: -> Apiv1.PreloadedTaxons.rejectBy "parentId"
10
19
 
11
20
  +computed products.content.meta
12
21
  metadatum: -> @get("products.content.meta")
13
22
 
14
- +computed ati.@each, query, per, page
15
- products: ->
16
- @store.find("product", taxons: @ati, query: @query, per: @per, page: @page)
23
+ +computed model.products
24
+ products: -> @model.products
17
25
 
18
- +computed searchParams.searchQuery
19
- searchQuery: -> @get "searchParams.searchQuery"
26
+ +computed page, per, activeTaxons.@each.id
27
+ searchParams: ->
28
+ page: @page
29
+ per: @per
30
+ ati: @activeTaxons.mapBy("id")
20
31
 
21
32
  actions:
22
- search: (opts) ->
23
- @page = 1
24
- @query = opts.searchQuery
25
- @ati = opts.activeTaxons.mapBy "id"
33
+ search: (opts)->
34
+ qp = _.extend { query: opts.searchQuery }, @searchParams
35
+ @transitionToRoute "products.index", queryParams: qp
@@ -0,0 +1,17 @@
1
+ class Apiv1.ProductsProductOffersNewController extends Ember.ObjectController
2
+
3
+ notifySuccess: ->
4
+ Apiv1.Flash.register "success", "offer message sent!", 5000
5
+ successfulSave: (offer) ->
6
+ @swapOutForm()
7
+ @notifySuccess()
8
+ swapOutForm: ->
9
+ $(".form-for").hide "highlight", {}, 450, => @alreadySubmitted = true
10
+ failedSave: (reason) ->
11
+ Apiv1.Flash.register "warning", "uh-oh, the server is down", 5000 if reason.status is 500
12
+ @failureReason = Apiv1.HashEx.camelize reason.responseJSON if reason.responseJSON
13
+
14
+ actions:
15
+ formSubmitted: ->
16
+ @failureReason = null
17
+ @model.save().then(_.bind @successfulSave, @).catch(_.bind @failedSave, @)
@@ -0,0 +1,10 @@
1
+ class Apiv1.UsersOffersIndexController extends Ember.ObjectController
2
+ queryParams: ["page", "per"]
3
+ page: 1
4
+ per: 15
5
+ +computed page, per
6
+ offers: ->
7
+ @store.find "offer", page: @page, per: @per
8
+
9
+ +computed offers.content.meta
10
+ metadatum: -> @get("offers.content.meta")