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,15 @@
1
+ .search-and-filter {
2
+ width: 100%;
3
+ @include display-flex;
4
+ @include flex-direction(row);
5
+ @include justify-content(center);
6
+ .standard-container {
7
+ width: 1250px;
8
+ }
9
+ .search-button {
10
+ height: 40px;
11
+ }
12
+ textarea.taggable-textarea {
13
+ min-height: 40px;
14
+ }
15
+ }
@@ -0,0 +1,23 @@
1
+ .site-footer {
2
+ padding-bottom: 5rem;
3
+ background-color: #444;
4
+ width: 100%;
5
+ padding-top: 5rem;
6
+ color: #999;
7
+ .lang-btn {
8
+ width: 100%;
9
+ }
10
+ .footer-title {
11
+ color: #999;
12
+ border-bottom: 1px solid #888;
13
+ }
14
+ .select-control {
15
+ cursor: pointer;
16
+ height: 50px;
17
+ text-transform: uppercase;
18
+ font-weight: bold;
19
+ }
20
+ .admin-btn {
21
+ font-weight: bold;
22
+ }
23
+ }
@@ -0,0 +1,32 @@
1
+ .taggable-field {
2
+ @include display-flex;
3
+ @include flex-direction(row);
4
+ @include flex-wrap(nowrap);
5
+ @include justify-content(flex-start);
6
+ overflow-x: hidden;
7
+ .taggable-textfield {
8
+ margin-bottom: 0px;
9
+ width: 100%;
10
+ height: 40px;
11
+ }
12
+ .taggable-field-tag {
13
+ @include display-flex;
14
+ @include flex-direction(row);
15
+ @include justify-content(center);
16
+ @include align-items(center);
17
+ border: 1px solid #ddd;
18
+ padding-left: 10px;
19
+ padding-right: 15px;
20
+ min-width: 50px;
21
+ height: 40px;
22
+ background: {
23
+ color: #f2f2f2;
24
+ }
25
+ color: #358753;
26
+ }
27
+ .centered-fully {
28
+ @include display-flex;
29
+ @include flex-wrap(nowrap);
30
+ @include flex-direction(row);
31
+ }
32
+ }
@@ -1,2 +1,4 @@
1
1
  #now-loading
2
- %h1 Loading page...
2
+ %h1
3
+ .now-loading-text Loading page...
4
+ .now-loading-spinner +
@@ -13,9 +13,44 @@
13
13
  %head
14
14
  %meta{ :charset => "utf-8" }
15
15
  %meta{ :name => "viewport", :content => "width=device-width, initial-scale=1.0"}
16
- = stylesheet_link_tag 'application', media: 'all', "data-turbolinks-track" => false
17
- = javascript_include_tag "application", "data-turbolinks-track" => false
16
+ %title Plastic Scrap Market
17
+ = stylesheet_link_tag 'application', media: 'all', async: true
18
+ = javascript_include_tag "application"
18
19
  = csrf_meta_tags
19
20
 
21
+ - if logged_in?
22
+ :javascript
23
+ window.RawCurrentUserSession = #{current_user.to_ember_hash.to_json};
24
+
25
+ :css
26
+ #now-loading {
27
+ position: fixed;
28
+ top: 45%;
29
+ z-index: 99999;
30
+ width: 100%;
31
+ }
32
+ .now-loading-text {
33
+ text-align: center;
34
+ }
35
+ .now-loading-spinner {
36
+ text-align: center;
37
+ font-weight: bold;
38
+ -webkit-animation: spin 1s ease-in-out infinite alternate;
39
+ -moz-animation: spin 1s ease-in-out infinite alternate;
40
+ animation: spin 1s ease-in-out infinite alternate;
41
+ }
42
+ @-moz-keyframes spin {
43
+ from { -moz-transform: rotate(0deg); }
44
+ to { -moz-transform: rotate(360deg); }
45
+ }
46
+ @-webkit-keyframes spin {
47
+ from { -webkit-transform: rotate(0deg); }
48
+ to { -webkit-transform: rotate(360deg); }
49
+ }
50
+ @keyframes spin {
51
+ from {transform:rotate(0deg);}
52
+ to {transform:rotate(360deg);}
53
+ }
54
+
20
55
  %body#apiv1
21
56
  = yield
@@ -19,14 +19,14 @@ default: &default
19
19
 
20
20
  development:
21
21
  <<: *default
22
- database: <%= project_name %>_development
22
+ database: #{project_name}_development
23
23
 
24
24
  # Warning: The database defined as "test" will be erased and
25
25
  # re-generated from your development database when you run "rake".
26
26
  # Do not set this db to the same as development or production.
27
27
  test:
28
28
  <<: *default
29
- database: <%= project_name %>_test
29
+ database: #{project_name}_test
30
30
 
31
31
  # As with config/secrets.yml, you never want to store sensitive information,
32
32
  # like your database password, in your source code. If your source code is
@@ -49,5 +49,5 @@ test:
49
49
  #
50
50
  production:
51
51
  <<: *default
52
- database: pisource_production
52
+ database: #{project_name}_production
53
53
  password: <%= ENV['APIV1_DATABASE_PASSWORD'] %>
@@ -0,0 +1,11 @@
1
+ development:
2
+ username: defaultemailhelper@gmail.com
3
+ password: <%= ENV['APIV1_EMAIL_PASSWORD'] %>
4
+
5
+ test:
6
+ username: defaultemailhelper@gmail.com
7
+ password: <%= ENV['APIV1_EMAIL_PASSWORD'] %>
8
+
9
+ production:
10
+ username: defaultemailhelper@gmail.com
11
+ password: <%= ENV['APIV1_EMAIL_PASSWORD'] %>
@@ -0,0 +1,9 @@
1
+ God.pid_file_directory = File.expand_path "../../tmp/pids", __FILE__
2
+ God.watch do |w|
3
+ w.name = "email_slave"
4
+ w.start = "rake email_slave:work_the_queue"
5
+ w.env = { "RAILS_ENV" => "production" }
6
+ w.log = File.expand_path "../../log/email_slave.god.log", __FILE__
7
+ w.dir = File.expand_path "../../", __FILE__
8
+ w.keepalive memory_max: 5.megabytes, cpu_max: 7.percent
9
+ end
@@ -0,0 +1 @@
1
+ Premailer::Rails.config.merge!(preserve_styles: false, remove_ids: true)
@@ -0,0 +1,3 @@
1
+ Squash::Ruby.configure api_host: 'https://lit-oasis-1400.herokuapp.com',
2
+ api_key: <%= api_key.inspect %>,
3
+ disabled: (Rails.env.development? || Rails.env.test?)
@@ -1,4 +1,4 @@
1
- upstream app {
1
+ upstream <%= project_name %> {
2
2
  server unix:/home/ia/workspace/<%= project_name %>/tmp/sockets/unicorn.<%= project_name %>.sock fail_timeout=0;
3
3
  }
4
4
  server {
@@ -17,15 +17,15 @@ server {
17
17
  }
18
18
 
19
19
  location / {
20
- try_files $uri/index.html $uri.html $uri @app;
20
+ try_files $uri/index.html $uri.html $uri @<%= project_name %>;
21
21
  error_page 404 /404.html;
22
22
  error_page 422 /422.html;
23
23
  error_page 500 502 503 504 /500.html;
24
24
  error_page 403 /403.html;
25
25
  }
26
26
 
27
- location @app {
28
- proxy_pass http://app;
27
+ location @<%= project_name %> {
28
+ proxy_pass http://<%= project_name %>;
29
29
  }
30
30
 
31
31
  location = /favicon.ico {
@@ -22,6 +22,19 @@ Rails.application.routes.draw do
22
22
  resources :i18n_translations, only: [:index], controller: 'i18n_translations/index'
23
23
  resources :messages, only: [:create], controller: 'messages/create'
24
24
  resources :messages, only: [:index], controller: 'messages/index'
25
+ resources :users, only: [:create], controller: 'users/create'
26
+ resources :users, only: [:show], controller: 'users/show'
27
+ resources :offers, only: [:create], controller: 'offers/create'
28
+ resources :offers, only: [:show], controller: 'offers/show'
29
+ resources :offers, only: [:destroy], controller: 'offers/destroy'
30
+ resources :offers, only: [:index], controller: 'offers/index'
31
+ end
32
+
33
+ namespace :users do
34
+ resources :users_offers, only: [:create], controller: 'offers/create'
35
+
36
+ resources :users_products, only: [:create], controller: 'products/create'
37
+ resources :users_products, only: [:update], controller: 'products/update'
25
38
  end
26
39
 
27
40
  namespace :admin do
@@ -34,5 +47,6 @@ Rails.application.routes.draw do
34
47
  resources :taxons, only: [:update], controller: 'taxons/update'
35
48
 
36
49
  resources :admin_sessions, only: [:create], controller: 'sessions/create'
50
+ resources :admin_sessions, only: [:destroy], controller: 'sessions/destroy'
37
51
  end
38
52
  end
@@ -0,0 +1,9 @@
1
+ class AddUserRankToAdminUsers < ActiveRecord::Migration
2
+ def change
3
+ add_column :admin_users, :user_rank, :string
4
+ add_column :admin_users, :company_name, :string
5
+ add_column :admin_users, :phone_number, :string
6
+ add_column :admin_users, :about_me, :text
7
+ add_column :admin_users, :address, :string
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ class CreateApiv1UsersProducts < ActiveRecord::Migration
2
+ def change
3
+ create_table :apiv1_users_product_relationships do |t|
4
+ t.references :user, index: true
5
+ t.references :product, index: true
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,16 @@
1
+ class CreateApiv1OfferMessages < ActiveRecord::Migration
2
+ def change
3
+ create_table :apiv1_offer_messages do |t|
4
+ t.references :product, index: true
5
+ t.string :from_company
6
+ t.string :sender_email
7
+ t.string :subject_text
8
+ t.string :phone_number
9
+ t.string :contact_person
10
+ t.string :company_address
11
+ t.string :status
12
+ t.text :message
13
+ t.timestamps
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,5 @@
1
+ class AddDeletedAtToApiv1Products < ActiveRecord::Migration
2
+ def change
3
+ add_column :apiv1_products, :deleted_at, :datetime
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddDeletedAtToApiv1OfferMessages < ActiveRecord::Migration
2
+ def change
3
+ add_column :apiv1_offer_messages, :deleted_at, :datetime
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddDeletedAtToApiv1Pictures < ActiveRecord::Migration
2
+ def change
3
+ add_column :apiv1_pictures, :deleted_at, :datetime
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddDeletedAtToApiv1Attachments < ActiveRecord::Migration
2
+ def change
3
+ add_column :apiv1_attachments, :deleted_at, :datetime
4
+ end
5
+ end
@@ -0,0 +1,16 @@
1
+ class CreateApiv1EmailRequests < ActiveRecord::Migration
2
+ def change
3
+ create_table :apiv1_email_requests do |t|
4
+ t.string :to, null: false
5
+ t.string :cc
6
+ t.string :bcc
7
+ t.string :subject
8
+ t.string :status
9
+ t.string :from
10
+ t.string :mailer_class, null: false
11
+ t.datetime :deleted_at
12
+ t.timestamps
13
+ end
14
+ add_index :apiv1_email_requests, [:to, :mailer_class]
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ class CreateApiv1EmailObjects < ActiveRecord::Migration
2
+ def change
3
+ create_table :apiv1_email_objects do |t|
4
+ t.references :email, index: true
5
+ t.string :class_name
6
+ t.string :permalink_id
7
+ t.datetime :deleted_at
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,32 @@
1
+ module Generica; end
2
+ class Generica::AssetsUnretardifier
3
+ include Thor::Base
4
+ include Thor::Actions
5
+ source_root Rails.root.join("public", "assets")
6
+ def unretardify!
7
+ _retarded_files.each do |file|
8
+ copy_file file[:original], _full_name(file[:destination])
9
+ end
10
+ end
11
+ private
12
+ def _full_name(short_name)
13
+ Rails.root.join "public", "assets", short_name
14
+ end
15
+ def _files
16
+ _manifest["files"].map do |original, file_hash|
17
+ { original: original, destination: file_hash["logical_path"] }
18
+ end
19
+ end
20
+ def _retarded_files
21
+ _files.reject do |file_hash|
22
+ /(js|css)$/i =~ file_hash[:original]
23
+ end
24
+ end
25
+ def _manifest
26
+ return [] if _manifest_name.blank?
27
+ JSON.parse File.read _manifest_name
28
+ end
29
+ def _manifest_name
30
+ Dir[Rails.root.join("public", "assets", "manifest-*.json")].first
31
+ end
32
+ end
@@ -0,0 +1,92 @@
1
+ module Generica; end
2
+ class Generica::EmailSlave
3
+ def dispatch_emails!
4
+ return puts "no emails" if _emails.blank?
5
+ _requests.update_all(status: :attempt_dispatch)
6
+ _postal_pipeline.call _emails
7
+ _requests.update_all(status: :delivered)
8
+ end
9
+ private
10
+ def _postal_pipeline
11
+ _group_by_user_emails >> _crunch_into_digest >> _send_off!
12
+ end
13
+ def _group_by_user_emails
14
+ -> (emails) { Sorter.group_by_user_emails emails }
15
+ end
16
+ def _crunch_into_digest
17
+ -> (email_hash) { _hash_map_crunch email_hash }
18
+ end
19
+ def _send_off!
20
+ -> (email_hash) { _hash_map_dispatch email_hash }
21
+ end
22
+ def _requests
23
+ @requests ||= _request_process.call Apiv1::EmailRequest
24
+ end
25
+ def _request_process
26
+ _consider_workload >> _consider_email_address
27
+ end
28
+ def _consider_email_address
29
+ -> (scope) { @user.present? ? scope.meant_for_email(@email) : scope }
30
+ end
31
+ def _consider_workload
32
+ -> (klass) { klass.belonging_to_the_user_with_oldest_undelivered }
33
+ end
34
+ def _emails
35
+ @emails ||= _requests.map(&:mailify)
36
+ end
37
+ def _hash_map_dispatch(hash)
38
+ _right_map(hash) { |email| Dispatcher.dispatch email }
39
+ end
40
+ def _hash_map_crunch(hash)
41
+ _right_map(hash) { |emails| Cruncher.crunch emails }
42
+ end
43
+ def _right_map(hash, &block)
44
+ thing = hash.map { |key_and_value| [key_and_value.first, yield(key_and_value.last)] }
45
+ Hash[thing]
46
+ end
47
+ end
48
+
49
+ class Generica::EmailSlave::Sorter
50
+ class << self
51
+ def group_by_user_emails(emails)
52
+ emails.reduce({}) do |hash, email|
53
+ hash[email.to.first] ||= []
54
+ hash[email.to.first].push email
55
+ hash
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ class Generica::EmailSlave::Cruncher
62
+ class << self
63
+ def crunch(emails)
64
+ return emails.first if emails.count < 2
65
+ Apiv1::AggregateMailer.summary emails
66
+ end
67
+ end
68
+ end
69
+
70
+ class Generica::EmailSlave::Dispatcher
71
+ class << self
72
+ def dispatch(email)
73
+ gmail.compose(email).deliver!
74
+ end
75
+ def gmail(&block)
76
+ Gmail.connect(username, password)
77
+ end
78
+ def username
79
+ _account_hash["username"]
80
+ end
81
+ def password
82
+ _account_hash["password"]
83
+ end
84
+ private
85
+ def _account_hash
86
+ @account_hash ||= YAML.load(_template.render)[Rails.env]
87
+ end
88
+ def _template
89
+ Tilt::ERBTemplate.new Rails.root.join("config", "email.yml").to_s
90
+ end
91
+ end
92
+ end