cloudrider 0.3.0 → 0.3.20
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -1
- data/cloudrider.gemspec +1 -0
- data/generica/.gitignore +18 -0
- data/generica/Gemfile +8 -1
- data/generica/Gemfile.lock +3 -0
- data/generica/app/assets/javascripts/apiv1.js.ls +6 -1
- data/generica/app/assets/javascripts/components/offers-summary.js.em +2 -0
- data/generica/app/assets/javascripts/components/picture-chunk.js.em +17 -0
- data/generica/app/assets/javascripts/components/pictures-group.js.em +21 -0
- data/generica/app/assets/javascripts/components/search-and-filter.js.em +4 -0
- data/generica/app/assets/javascripts/components/site-nav.js.em +5 -1
- data/generica/app/assets/javascripts/components/taggable-field.js.em +28 -0
- data/generica/app/assets/javascripts/components/tree/taxon-li.js.em +6 -2
- data/generica/app/assets/javascripts/controllers/index_controller.js.em +19 -2
- data/generica/app/assets/javascripts/controllers/modals/login_controller.js.em +23 -9
- data/generica/app/assets/javascripts/controllers/modals/register_controller.js.em +24 -0
- data/generica/app/assets/javascripts/controllers/products/index_controller.js.em +23 -13
- data/generica/app/assets/javascripts/controllers/products/product/offers/new_controller.js.em +17 -0
- data/generica/app/assets/javascripts/controllers/users/offers/index_controller.js.em +10 -0
- data/generica/app/assets/javascripts/controllers/users/product/edit_controller.js.em +31 -0
- data/generica/app/assets/javascripts/controllers/users/products/index_controller.js.em +8 -0
- data/generica/app/assets/javascripts/controllers/users/products/new_controller.js.em +22 -0
- data/generica/app/assets/javascripts/controllers/users/products/slice_controller.js.em +4 -0
- data/generica/app/assets/javascripts/helpers/filte_previewer.js.ls +21 -0
- data/generica/app/assets/javascripts/helpers/listing_picture.js.em +17 -0
- data/generica/app/assets/javascripts/models/offer.js.em +9 -8
- data/generica/app/assets/javascripts/models/user.js.em +12 -0
- data/generica/app/assets/javascripts/models/users/product.js.em +12 -0
- data/generica/app/assets/javascripts/routes/application_route.js.em +10 -2
- data/generica/app/assets/javascripts/routes/products/index_route.js.em +23 -2
- data/generica/app/assets/javascripts/routes/products/product/offers/new_route.js.em +18 -0
- data/generica/app/assets/javascripts/routes/users/offers/index_route.js.em +1 -0
- data/generica/app/assets/javascripts/routes/users/product_route.js.em +3 -0
- data/generica/app/assets/javascripts/routes/users/products/index_route.js.em +3 -0
- data/generica/app/assets/javascripts/routes/users/products/new_route.js.em +3 -0
- data/generica/app/assets/javascripts/templates/admin/product/edit.emblem +2 -0
- data/generica/app/assets/javascripts/templates/admin/products/_form-core.emblem +44 -0
- data/generica/app/assets/javascripts/templates/admin/products/new.emblem +4 -42
- data/generica/app/assets/javascripts/templates/components/offers-summary.emblem +9 -0
- data/generica/app/assets/javascripts/templates/components/picture-chunk.emblem +9 -0
- data/generica/app/assets/javascripts/templates/components/pictures-group.emblem +6 -0
- data/generica/app/assets/javascripts/templates/components/search-and-filter.emblem +5 -1
- data/generica/app/assets/javascripts/templates/components/taggable-field.emblem +1 -0
- data/generica/app/assets/javascripts/templates/modals/register.emblem +57 -0
- data/generica/app/assets/javascripts/templates/products/product/offers/_anonymous-form.emblem +11 -0
- data/generica/app/assets/javascripts/templates/products/product/offers/_offer-form.emblem +55 -0
- data/generica/app/assets/javascripts/templates/products/product/offers/new.emblem +37 -0
- data/generica/app/assets/javascripts/templates/products/product/show.emblem +26 -1
- data/generica/app/assets/javascripts/templates/users.emblem +24 -0
- data/generica/app/assets/javascripts/templates/users/index.emblem +3 -0
- data/generica/app/assets/javascripts/templates/users/offers/index.emblem +25 -0
- data/generica/app/assets/javascripts/templates/users/offers/slice.emblem +31 -0
- data/generica/app/assets/javascripts/templates/users/product/edit.emblem +82 -0
- data/generica/app/assets/javascripts/templates/users/products/index.emblem +22 -0
- data/generica/app/assets/javascripts/templates/users/products/new.emblem +28 -0
- data/generica/app/assets/javascripts/templates/users/products/slice.emblem +27 -0
- data/generica/app/assets/stylesheets/apiv1/_application.css.scss +4 -0
- data/generica/app/assets/stylesheets/apiv1/components/_offers-summary.css.scss +20 -0
- data/generica/app/assets/stylesheets/apiv1/components/_pictures-group.css.scss +32 -0
- data/generica/app/assets/stylesheets/apiv1/components/_taggable-field.css.scss +32 -0
- data/generica/app/assets/stylesheets/apiv1/products/product/offers/_new.css.scss +8 -0
- data/generica/app/controllers/admin/base_controller.rb +1 -1
- data/generica/app/controllers/admin/sessions/destroy_controller.rb +16 -0
- data/generica/app/controllers/apiv1/offers/create_controller.rb +30 -0
- data/generica/app/controllers/apiv1/offers/index_controller.rb +22 -0
- data/generica/app/controllers/apiv1/offers/show_controller.rb +12 -0
- data/generica/app/controllers/apiv1/products/destroy_controller.rb +6 -0
- data/generica/app/controllers/apiv1/products/index_controller.rb +8 -2
- data/generica/app/controllers/apiv1/products/show_controller.rb +7 -3
- data/generica/app/controllers/apiv1/taxons/index_controller.rb +5 -1
- data/generica/app/controllers/apiv1/users/create_controller.rb +17 -0
- data/generica/app/controllers/apiv1/users/show_controller.rb +12 -0
- data/generica/app/controllers/apiv1/users_controller.rb +9 -0
- data/generica/app/controllers/application_controller.rb +3 -0
- data/generica/app/controllers/users/offers/create_controller.rb +26 -0
- data/generica/app/controllers/users/products/create_controller.rb +26 -0
- data/generica/app/controllers/users/products/update_controller.rb +35 -0
- data/generica/app/mailers/apiv1/aggregate_mailer.rb +13 -0
- data/generica/app/mailers/apiv1/aggregate_mailer/summary_context.rb +121 -0
- data/generica/app/mailers/apiv1/notifications_mailer.rb +19 -0
- data/generica/app/mailers/apiv1/notifications_mailer/new_offer_context.rb +53 -0
- data/generica/app/models/admin/user.rb +43 -2
- data/generica/app/models/apiv1/attachment.rb +2 -0
- data/generica/app/models/apiv1/email_object.rb +35 -0
- data/generica/app/models/apiv1/email_request.rb +107 -0
- data/generica/app/models/apiv1/offer_message.rb +53 -0
- data/generica/app/models/apiv1/offer_postboy.rb +33 -0
- data/generica/app/models/apiv1/picture.rb +2 -0
- data/generica/app/models/apiv1/product.rb +28 -6
- data/generica/app/models/apiv1/products/offer_message_factory.rb +13 -0
- data/generica/app/models/apiv1/products_machine.rb +8 -2
- data/generica/app/models/apiv1/taxon.rb +1 -1
- data/generica/app/models/apiv1/users/product_factory.rb +22 -0
- data/generica/app/models/apiv1/users/product_relationship.rb +19 -0
- data/generica/app/models/users/products/offer_factory.rb +40 -0
- data/generica/app/varissets/javascripts/templates/application.emblem.erb +2 -2
- data/generica/app/varissets/javascripts/templates/components/offers-overview.emblem.erb +1 -0
- data/generica/app/varissets/javascripts/templates/components/search-and-filter.emblem.erb +33 -0
- data/generica/app/varissets/javascripts/templates/components/site-nav.emblem.erb +8 -0
- data/generica/app/varissets/javascripts/templates/components/taggable-field.emblem.erb +11 -0
- data/generica/app/varissets/javascripts/templates/modals/login.emblem.erb +36 -0
- data/generica/app/varissets/javascripts/templates/products.emblem.erb +4 -0
- data/generica/app/varissets/javascripts/templates/products/index.emblem.erb +17 -0
- data/generica/app/varissets/javascripts/templates/products/product/offers/_anonymous-form.emblem.erb +11 -0
- data/generica/app/varissets/javascripts/templates/products/product/offers/_offer-form.emblem.erb +55 -0
- data/generica/app/varissets/javascripts/templates/products/product/offers/new.emblem.erb +37 -0
- data/generica/app/varissets/javascripts/templates/products/product/show.emblem.erb +108 -0
- data/generica/app/varissets/stylesheets/apiv1/components/_offers-overview.css.scss.erb +3 -0
- data/generica/app/varissets/stylesheets/apiv1/components/_offers_overview.css.scss.erb +3 -0
- data/generica/app/varissets/stylesheets/apiv1/components/_search-and-filter.css.scss.erb +15 -0
- data/generica/app/varissets/stylesheets/apiv1/components/_site-footer.css.scss.erb +23 -0
- data/generica/app/varissets/stylesheets/apiv1/components/_taggable-field.css.scss.erb +32 -0
- data/generica/app/views/apiv1/home/index.html.haml +3 -1
- data/generica/app/views/apiv1/layouts/application.html.haml +37 -2
- data/generica/config/{database.yml.erb → database.yml.str} +3 -3
- data/generica/config/email.yml +11 -0
- data/generica/config/email_slave.god +9 -0
- data/generica/config/initializers/premailer.rb +1 -0
- data/generica/config/initializers/squash.rb.erb +3 -0
- data/generica/config/nginx.conf.erb +4 -4
- data/generica/config/routes.rb +14 -0
- data/generica/db/migrate/20141114213427_add_user_rank_to_admin_users.rb +9 -0
- data/generica/db/migrate/20141114225019_create_apiv1_users_products.rb +9 -0
- data/generica/db/migrate/20141116053522_create_apiv1_offer_messages.rb +16 -0
- data/generica/db/migrate/20141116235011_add_deleted_at_to_apiv1_products.rb +5 -0
- data/generica/db/migrate/20141116235209_add_deleted_at_to_apiv1_offer_messages.rb +5 -0
- data/generica/db/migrate/20141116235651_add_deleted_at_to_apiv1_pictures.rb +5 -0
- data/generica/db/migrate/20141116235808_add_deleted_at_to_apiv1_attachments.rb +5 -0
- data/generica/db/migrate/20141127230304_create_apiv1_email_requests.rb +16 -0
- data/generica/db/migrate/20141127230455_create_apiv1_email_objects.rb +11 -0
- data/generica/lib/generica/assets_unretardifier.rb +32 -0
- data/generica/lib/generica/email_slave.rb +92 -0
- data/generica/lib/tasks/email_slave.rake +11 -0
- data/generica/lib/tasks/production.rake +1 -1
- data/generica/public/tests/bermese.jpg +0 -0
- data/generica/public/tests/chow.jpg +0 -0
- data/generica/public/tests/malamute.jpg +0 -0
- data/generica/public/tests/malamute2.JPG +0 -0
- data/generica/spec/controllers/apiv1/users/create_controller_spec.rb +17 -0
- data/generica/spec/controllers/users/products/create_controller_spec.rb +31 -0
- data/generica/spec/mailers/apiv1/aggregate_mailer_spec.rb +29 -0
- data/generica/spec/models/apiv1/email_request_spec.rb +4 -0
- data/generica/spec/models/apiv1/offer_postboy_spec.rb +22 -0
- data/generica/spec/models/apiv1/product_spec.rb +1 -0
- data/generica/spec/models/apiv1/products/offer_message_factory_spec.rb +37 -0
- data/generica/spec/models/apiv1/products_machine_spec.rb +77 -0
- data/generica/spec/models/apiv1/users/product_factory_spec.rb +47 -0
- data/generica/spec/models/users/products/offer_factory_spec.rb +38 -0
- data/generica/test/mailers/.keep +0 -0
- data/generica/test/mailers/previews/apiv1/aggregate_preview.rb +6 -0
- data/generica/test/mailers/previews/apiv1/notifications_preview.rb +5 -0
- data/lib/cloudrider.rb +1 -1
- data/lib/cloudrider/apiv1/base.rb +2 -2
- data/lib/cloudrider/apiv1/login_modal_emblem.rb +25 -0
- data/lib/cloudrider/apiv1/offers_anonymous_form_partial_emblem.rb +12 -0
- data/lib/cloudrider/apiv1/offers_new_emblem.rb +15 -0
- data/lib/cloudrider/apiv1/offers_overview_component.rb +8 -0
- data/lib/cloudrider/apiv1/offers_overview_sass.rb +8 -0
- data/lib/cloudrider/apiv1/product_show_emblem.rb +31 -0
- data/lib/cloudrider/apiv1/products_emblem.rb +11 -0
- data/lib/cloudrider/apiv1/products_index_emblem.rb +14 -0
- data/lib/cloudrider/apiv1/search_and_filter_component.rb +11 -0
- data/lib/cloudrider/apiv1/search_and_filter_sass.rb +11 -0
- data/lib/cloudrider/apiv1/site_footer_component.rb +7 -7
- data/lib/cloudrider/apiv1/site_footer_sass.rb +9 -0
- data/lib/cloudrider/application_commander.rb +46 -34
- data/lib/cloudrider/backend_commander.rb +15 -9
- data/lib/cloudrider/protofile.rb +18 -2
- data/lib/cloudrider/protosite.example.json +26 -0
- data/lib/cloudrider/protosite.rb +66 -0
- data/lib/cloudrider/serverside/base.rb +2 -2
- data/lib/cloudrider/serverside/database_yaml.rb +9 -4
- data/lib/cloudrider/serverside/nginx_conf.rb +7 -2
- data/lib/cloudrider/serverside/squash_ruby.rb +14 -0
- data/lib/cloudrider/serverside/unicorn_conf_ruby.rb +2 -1
- data/lib/cloudrider/version.rb +1 -1
- data/lib/cloudrider/web_firm.rb +16 -0
- data/lib/cloudrider/web_firm/component_architect.rb +23 -0
- data/lib/cloudrider/web_firm/page_designer.rb +13 -0
- data/lib/cloudrider/web_firm/project_lead.rb +30 -0
- data/lib/cloudrider/web_firm/scumbag_engineer.rb +40 -0
- data/lib/cloudrider/web_firm/support_intern.rb +113 -0
- data/lib/generators/cloudrider/server/server_generator.rb +4 -8
- data/lib/generators/cloudrider/website/website_generator.rb +25 -0
- data/spec/cloudrider/protosite_spec.rb +63 -0
- data/vanilla/.bowerrc +4 -0
- data/vanilla/.editorconfig +33 -0
- data/vanilla/.ember-cli +9 -0
- data/vanilla/.gitignore +17 -0
- data/vanilla/.jshintrc +32 -0
- data/vanilla/.travis.yml +16 -0
- data/vanilla/Brocfile.js +20 -0
- data/vanilla/README.md +51 -0
- data/vanilla/app/app.js +16 -0
- data/vanilla/app/components/.gitkeep +0 -0
- data/vanilla/app/controllers/.gitkeep +0 -0
- data/vanilla/app/controllers/admin.coffee +5 -0
- data/vanilla/app/helpers/.gitkeep +0 -0
- data/vanilla/app/index.html +21 -0
- data/vanilla/app/models/.gitkeep +0 -0
- data/vanilla/app/router.js +11 -0
- data/vanilla/app/routes/.gitkeep +0 -0
- data/vanilla/app/styles/.gitkeep +0 -0
- data/vanilla/app/styles/app.css +3 -0
- data/vanilla/app/templates/.gitkeep +0 -0
- data/vanilla/app/templates/application.hbs +3 -0
- data/vanilla/app/templates/components/.gitkeep +0 -0
- data/vanilla/app/views/.gitkeep +0 -0
- data/vanilla/bower.json +17 -0
- data/vanilla/config/environment.js +47 -0
- data/vanilla/package.json +39 -0
- data/vanilla/public/.gitkeep +0 -0
- data/vanilla/public/crossdomain.xml +15 -0
- data/vanilla/public/robots.txt +3 -0
- data/vanilla/testem.json +11 -0
- data/vanilla/tests/.jshintrc +74 -0
- data/vanilla/tests/helpers/resolver.js +11 -0
- data/vanilla/tests/helpers/start-app.js +25 -0
- data/vanilla/tests/index.html +45 -0
- data/vanilla/tests/test-helper.js +12 -0
- data/vanilla/tests/unit/.gitkeep +0 -0
- data/vanilla/tests/unit/controllers/admin-test.coffee +12 -0
- data/vanilla/vendor/.gitkeep +0 -0
- metadata +189 -5
- data/generica/app/views/layouts/application.html.erb +0 -14
- 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
|
+
}
|
@@ -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
|
-
|
17
|
-
=
|
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:
|
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:
|
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:
|
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)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
upstream
|
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
|
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
|
28
|
-
proxy_pass http
|
27
|
+
location @<%= project_name %> {
|
28
|
+
proxy_pass http://<%= project_name %>;
|
29
29
|
}
|
30
30
|
|
31
31
|
location = /favicon.ico {
|
data/generica/config/routes.rb
CHANGED
@@ -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,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,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,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
|