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,11 @@
|
|
1
|
+
namespace :email_slave do
|
2
|
+
desc "checks the email job queue for emails that require sending, batches them together, and sends them off"
|
3
|
+
task work_the_queue: :environment do
|
4
|
+
require "generica/email_slave"
|
5
|
+
puts "begin dispatching emails..."
|
6
|
+
Generica::EmailSlave.new.dispatch_emails!
|
7
|
+
puts "finished"
|
8
|
+
sleep 1
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
@@ -8,8 +8,8 @@ namespace :production do
|
|
8
8
|
desc "These tasks should be run everytime you restart the server"
|
9
9
|
task on_restart: :environment do
|
10
10
|
Rake::Task["production:image_preload"].invoke
|
11
|
-
Rake::Task["assets:clobber"].invoke
|
12
11
|
Rake::Task["assets:precompile"].invoke
|
12
|
+
Rake::Task["assets:clean"].invoke
|
13
13
|
Rake::Task["assets:unretardify"].invoke
|
14
14
|
Rake::Task["elasticsearch:simple_import"].invoke
|
15
15
|
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
describe Apiv1::Users::CreateController do
|
4
|
+
let(:create) { post :create, user: @user_params }
|
5
|
+
before do
|
6
|
+
@user_params = {
|
7
|
+
email: 'dogs_are_furry@huskies.com',
|
8
|
+
password: 'asdf123',
|
9
|
+
company_name: 'Doggy Company'
|
10
|
+
}
|
11
|
+
end
|
12
|
+
context 'change' do
|
13
|
+
subject { -> { create } }
|
14
|
+
specify { should change(Admin::User, :count).by 1 }
|
15
|
+
specify { should change(controller, :current_user).from(nil) }
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
describe Users::Products::CreateController do
|
4
|
+
let(:user) { Admin::UserFactory.mock }
|
5
|
+
let(:create) { post :create, users_product: @product_params }
|
6
|
+
before { controller.auto_login user }
|
7
|
+
context 'creating' do
|
8
|
+
let(:taxon) { Apiv1::TaxonFactory.material }
|
9
|
+
let(:picture) { Apiv1::PictureFactory.rack_file }
|
10
|
+
let(:attachment) { Apiv1::PictureFactory.rack_file }
|
11
|
+
before do
|
12
|
+
@taxon_params = { "0" => taxon.id }
|
13
|
+
@picture_params = { "0" => picture }
|
14
|
+
@attachment_params = { "0" => attachment }
|
15
|
+
@product_params = Apiv1::ProductFactory.attributes.merge taxons: @taxon_params,
|
16
|
+
pictures: @picture_params,
|
17
|
+
attachments: @attachment_params
|
18
|
+
end
|
19
|
+
context 'enviroment' do
|
20
|
+
subject { controller.current_user }
|
21
|
+
specify { should be_a Admin::User }
|
22
|
+
specify { should be_persisted }
|
23
|
+
end
|
24
|
+
context 'changes' do
|
25
|
+
subject { -> { create } }
|
26
|
+
specify { should change(Apiv1::Product, :count).by 1 }
|
27
|
+
specify { should change(Apiv1::Users::ProductRelationship, :count).by 1 }
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
RSpec.describe Apiv1::AggregateMailer, type: :mailer do
|
4
|
+
describe "summary" do
|
5
|
+
let(:user) { Admin::UserFactory.mock }
|
6
|
+
let(:owner) { Admin::UserFactory.mock }
|
7
|
+
let(:product) { Apiv1::ProductFactory.new.create }
|
8
|
+
before do
|
9
|
+
product.update user: owner
|
10
|
+
@offer_params = {
|
11
|
+
product_id: product.id,
|
12
|
+
price_terms: "Are you feeling lucky, punk?",
|
13
|
+
notes: "Nothing to say here"
|
14
|
+
}
|
15
|
+
end
|
16
|
+
let(:offer) { Users::Products::OfferFactory.new(user, @offer_params).tap(&:satisfy_specifications?).tap(&:save!).offer }
|
17
|
+
let(:new_offer) { Apiv1::NotificationsMailer.new_offer offer }
|
18
|
+
let(:emails) { [new_offer, new_offer, new_offer] }
|
19
|
+
let(:mail) { Apiv1::AggregateMailer.summary emails }
|
20
|
+
context 'subject' do
|
21
|
+
subject { mail.subject }
|
22
|
+
specify { should eq "Update: 3 new offers" }
|
23
|
+
end
|
24
|
+
context 'to' do
|
25
|
+
subject { mail.to }
|
26
|
+
specify { should eq new_offer.to }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require "rails_helper"
|
2
|
+
|
3
|
+
RSpec.describe Apiv1::OfferPostboy do
|
4
|
+
let(:user) { Admin::UserFactory.mock }
|
5
|
+
let(:owner) { Admin::UserFactory.mock }
|
6
|
+
let(:product) { Apiv1::ProductFactory.new.create }
|
7
|
+
before do
|
8
|
+
product.update user: owner
|
9
|
+
@offer_params = {
|
10
|
+
product_id: product.id,
|
11
|
+
price_terms: "Are you feeling lucky, punk?",
|
12
|
+
notes: "Nothing to say here"
|
13
|
+
}
|
14
|
+
end
|
15
|
+
let(:offer) { Users::Products::OfferFactory.new(user, @offer_params).tap(&:satisfy_specifications?).tap(&:save!).offer }
|
16
|
+
let(:postboy) { described_class.new offer }
|
17
|
+
context '#request_work!' do
|
18
|
+
subject { -> { postboy.request_work! } }
|
19
|
+
specify { should change(Apiv1::EmailRequest, :count).by 1 }
|
20
|
+
specify { should change(Apiv1::EmailObject, :count).by 1 }
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
describe Apiv1::Products::OfferMessageFactory do
|
4
|
+
let(:factory) { described_class.new @params }
|
5
|
+
let(:product) { Apiv1::ProductFactory.new.create }
|
6
|
+
before do
|
7
|
+
@params = {
|
8
|
+
product_id: product.id,
|
9
|
+
from_company: "Buyer Co.",
|
10
|
+
sender_email: "thing@amythas.co",
|
11
|
+
price_terms: "Elsa Greer Knew her way about",
|
12
|
+
phone_number: "5555555",
|
13
|
+
contact_person: "Crail's Wife",
|
14
|
+
company_address: "Jealous as hell",
|
15
|
+
message: "I mention all this"
|
16
|
+
}
|
17
|
+
end
|
18
|
+
context 'satisfy_specifications?' do
|
19
|
+
subject { factory }
|
20
|
+
specify { should be_satisfy_specification }
|
21
|
+
end
|
22
|
+
context 'error hash' do
|
23
|
+
before { factory.satisfy_specifications? }
|
24
|
+
subject { factory.error_hash }
|
25
|
+
specify { should be_blank }
|
26
|
+
end
|
27
|
+
context 'creation' do
|
28
|
+
before { factory.satisfy_specifications? }
|
29
|
+
subject { -> { factory.save! } }
|
30
|
+
specify { should change(Apiv1::OfferMessage, :count).by 1 }
|
31
|
+
end
|
32
|
+
context 'relationship' do
|
33
|
+
before { factory.satisfy_specifications?; factory.save! }
|
34
|
+
subject { factory.send("_offer").product }
|
35
|
+
specify { should eq product }
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
describe Apiv1::ProductsMachine do
|
4
|
+
let(:material_taxon) { Apiv1::TaxonFactory.material }
|
5
|
+
let(:location_taxon) { Apiv1::TaxonFactory.location }
|
6
|
+
let(:quality_taxon) { Apiv1::TaxonFactory.quality }
|
7
|
+
let(:form_taxon) { Apiv1::TaxonFactory.form }
|
8
|
+
let(:machine) { described_class.new @params }
|
9
|
+
|
10
|
+
let(:hdpe) { Apiv1::Product.new @hdpe_params }
|
11
|
+
let(:ldpe) { Apiv1::Product.new @ldpe_params }
|
12
|
+
let(:pet) { Apiv1::Product.new @pet_params }
|
13
|
+
|
14
|
+
before do
|
15
|
+
@hdpe_params = {
|
16
|
+
sku: Faker::Name.first_name,
|
17
|
+
material: "HDPE crap",
|
18
|
+
price: "33.1 USD / pound FAS Los Angeles",
|
19
|
+
amount: "434 pounds",
|
20
|
+
place: "Los Angeles Port",
|
21
|
+
others: "some stuff",
|
22
|
+
taxons: [material_taxon, location_taxon, quality_taxon]
|
23
|
+
}
|
24
|
+
@ldpe_params = {
|
25
|
+
sku: Faker::Name.first_name,
|
26
|
+
material: "LDPE junk",
|
27
|
+
price: "33.1 USD / pound FAS Los Angeles",
|
28
|
+
amount: "434 pounds",
|
29
|
+
place: "Los Angeles Port",
|
30
|
+
others: "some stuff",
|
31
|
+
taxons: [material_taxon]
|
32
|
+
}
|
33
|
+
@pet_params = {
|
34
|
+
sku: Faker::Name.first_name,
|
35
|
+
material: "PET bottle",
|
36
|
+
price: "33.1 USD / pound FAS Los Angeles",
|
37
|
+
amount: "434 pounds",
|
38
|
+
place: "Los Angeles Port",
|
39
|
+
others: "some stuff"
|
40
|
+
}
|
41
|
+
@taxons = [material_taxon, location_taxon, quality_taxon, form_taxon]
|
42
|
+
@products = [hdpe, ldpe, pet]
|
43
|
+
@products.map do |product|
|
44
|
+
product.pictures.new pic: Apiv1::PictureFactory.rack_file
|
45
|
+
end
|
46
|
+
@products.map(&:save!)
|
47
|
+
end
|
48
|
+
context '#taxon intersection' do
|
49
|
+
before do
|
50
|
+
@params = { taxons: [material_taxon.id, location_taxon.id] }
|
51
|
+
end
|
52
|
+
subject { machine.products }
|
53
|
+
specify { should eq [hdpe] }
|
54
|
+
end
|
55
|
+
context 'one taxon' do
|
56
|
+
before do
|
57
|
+
@params = { taxons: [material_taxon.id] }
|
58
|
+
end
|
59
|
+
context 'count' do
|
60
|
+
subject { machine.products.count }
|
61
|
+
specify { should eq 2 }
|
62
|
+
end
|
63
|
+
context 'products' do
|
64
|
+
subject { machine.products }
|
65
|
+
specify { should include hdpe }
|
66
|
+
specify { should include ldpe }
|
67
|
+
specify { should_not include pet }
|
68
|
+
end
|
69
|
+
end
|
70
|
+
context 'no params' do
|
71
|
+
before do
|
72
|
+
@params = {}
|
73
|
+
end
|
74
|
+
subject { machine.products.sort }
|
75
|
+
specify { should eq @products.sort }
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
describe Apiv1::Users::ProductFactory do
|
4
|
+
let(:user) { Admin::UserFactory.mock }
|
5
|
+
let(:taxon) { Apiv1::TaxonFactory.material }
|
6
|
+
let(:picture) { Apiv1::PictureFactory.rack_file }
|
7
|
+
let(:attachment) { Apiv1::PictureFactory.rack_file }
|
8
|
+
let(:factory) { Apiv1::Users::ProductFactory.new user, @product_params }
|
9
|
+
before do
|
10
|
+
@taxon_params = { "0" => taxon.id }
|
11
|
+
@picture_params = { "0" => picture }
|
12
|
+
@attachment_params = { "0" => attachment }
|
13
|
+
@product_params = Apiv1::ProductFactory.attributes.merge taxons: @taxon_params,
|
14
|
+
pictures: @picture_params,
|
15
|
+
attachments: @attachment_params
|
16
|
+
end
|
17
|
+
context 'user' do
|
18
|
+
subject { user }
|
19
|
+
specify { should be_persisted }
|
20
|
+
end
|
21
|
+
context '_product' do
|
22
|
+
before { factory.satisfy_specifications? }
|
23
|
+
subject { factory.send '_product' }
|
24
|
+
specify { should be_a Apiv1::Product }
|
25
|
+
end
|
26
|
+
context 'user.products' do
|
27
|
+
before { factory.satisfy_specifications? && factory.save! }
|
28
|
+
let(:product) { factory.send "_product" }
|
29
|
+
subject { Admin::User.find(user.id).products }
|
30
|
+
specify { should include product }
|
31
|
+
end
|
32
|
+
context 'creations' do
|
33
|
+
before { factory.satisfy_specifications? }
|
34
|
+
subject { -> { factory.save! } }
|
35
|
+
specify { should change(Apiv1::Product, :count).by 1 }
|
36
|
+
specify { should change(Apiv1::Users::ProductRelationship, :count).by 1 }
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'post-save' do
|
40
|
+
before do
|
41
|
+
factory.satisfy_specifications?
|
42
|
+
factory.save!
|
43
|
+
end
|
44
|
+
subject { Admin::User.find(user.id).products }
|
45
|
+
specify { should be_present }
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
describe Users::Products::OfferFactory do
|
4
|
+
let(:user) { Admin::UserFactory.mock }
|
5
|
+
let(:factory) { described_class.new user, @params }
|
6
|
+
let(:product) { Apiv1::ProductFactory.new.create }
|
7
|
+
before do
|
8
|
+
@params = {
|
9
|
+
product_id: product.id,
|
10
|
+
from_company: "Buyer Co.",
|
11
|
+
sender_email: "thing@amythas.co",
|
12
|
+
price_terms: "Elsa Greer Knew her way about",
|
13
|
+
phone_number: "5555555",
|
14
|
+
contact_person: "Crail's Wife",
|
15
|
+
company_address: "Jealous as hell",
|
16
|
+
message: "I mention all this"
|
17
|
+
}
|
18
|
+
end
|
19
|
+
context 'satisfy_specifications' do
|
20
|
+
subject { factory }
|
21
|
+
specify { should be_satisfy_specification }
|
22
|
+
end
|
23
|
+
context 'error hash' do
|
24
|
+
before { factory.satisfy_specifications? }
|
25
|
+
subject { factory.error_hash }
|
26
|
+
specify { should be_blank }
|
27
|
+
end
|
28
|
+
context 'creation' do
|
29
|
+
before { factory.satisfy_specifications? }
|
30
|
+
subject { -> { factory.save! } }
|
31
|
+
specify { should change(Apiv1::OfferMessage, :count).by 1 }
|
32
|
+
end
|
33
|
+
context 'relationship' do
|
34
|
+
before { factory.satisfy_specifications?; factory.save! }
|
35
|
+
subject { factory.send("_offer").product }
|
36
|
+
specify { should eq product }
|
37
|
+
end
|
38
|
+
end
|
File without changes
|
data/lib/cloudrider.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
class Cloudrider::Apiv1::Base
|
2
2
|
class UnknownFileExtension < StandardError; end
|
3
3
|
class UnknownFamilyResidence < StandardError; end
|
4
|
-
def initialize(style
|
5
|
-
@style = style
|
4
|
+
def initialize(style: style, protosite: protosite)
|
5
|
+
@style, @protosite = style, protosite
|
6
6
|
end
|
7
7
|
def protofile
|
8
8
|
Cloudrider::Protofile.new.tap do |p|
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Cloudrider::Apiv1::LoginModalEmblem < Cloudrider::Apiv1::Base
|
2
|
+
class Context
|
3
|
+
attr_accessor :login_style
|
4
|
+
def registerable?
|
5
|
+
case login_style.to_s
|
6
|
+
when "ecommerce", "registerable"
|
7
|
+
true
|
8
|
+
else
|
9
|
+
false
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
private
|
14
|
+
def _file_name
|
15
|
+
"login.emblem"
|
16
|
+
end
|
17
|
+
def _source_folder
|
18
|
+
"app/varissets/javascripts/templates/modals"
|
19
|
+
end
|
20
|
+
def _context
|
21
|
+
Context.new.tap do |c|
|
22
|
+
c.login_style = @style
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|