solidus_multi_domain 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +33 -0
  3. data/.rspec +4 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +9 -0
  6. data/README.md +72 -0
  7. data/Rakefile +21 -0
  8. data/app/controllers/concerns/spree_multi_domain/create_line_item_support.rb +16 -0
  9. data/app/controllers/concerns/spree_multi_domain/show_product_support.rb +17 -0
  10. data/app/controllers/spree/admin/products_controller_decorator.rb +12 -0
  11. data/app/controllers/spree/admin/stores_controller.rb +24 -0
  12. data/app/controllers/spree/api/line_items_controller_decorator.rb +1 -0
  13. data/app/controllers/spree/api/orders_controller_decorator.rb +21 -0
  14. data/app/controllers/spree/api/products_controller_decorator.rb +1 -0
  15. data/app/controllers/spree/api/shipments_controller_decorator.rb +17 -0
  16. data/app/controllers/spree/home_controller_decorator.rb +7 -0
  17. data/app/controllers/spree/products_controller_decorator.rb +1 -0
  18. data/app/controllers/spree/taxons_controller_decorator.rb +10 -0
  19. data/app/helpers/spree/products_helper_decorator.rb +11 -0
  20. data/app/mailers/spree/carton_mailer_decorator.rb +13 -0
  21. data/app/mailers/spree/order_mailer.rb +35 -0
  22. data/app/models/spree/order_decorator.rb +8 -0
  23. data/app/models/spree/payment_method_decorator.rb +13 -0
  24. data/app/models/spree/product_decorator.rb +4 -0
  25. data/app/models/spree/promotion/rules/store.rb +30 -0
  26. data/app/models/spree/shipping_method_decorator.rb +18 -0
  27. data/app/models/spree/store_decorator.rb +25 -0
  28. data/app/models/spree/store_payment_method.rb +6 -0
  29. data/app/models/spree/store_shipping_method.rb +6 -0
  30. data/app/models/spree/taxon_decorator.rb +5 -0
  31. data/app/models/spree/taxonomy_decorator.rb +3 -0
  32. data/app/models/spree/tracker_decorator.rb +7 -0
  33. data/app/models/spree_multi_domain/line_item_decorator.rb +20 -0
  34. data/app/overrides/decorate_admin_configurations_index.rb +5 -0
  35. data/app/overrides/decorate_admin_products_form.rb +6 -0
  36. data/app/overrides/decorate_admin_products_index.rb +20 -0
  37. data/app/overrides/decorate_admin_trackers_form.rb +6 -0
  38. data/app/overrides/decorate_admin_trackers_index.rb +13 -0
  39. data/app/views/spree/admin/products/_index_headers.html.erb +1 -0
  40. data/app/views/spree/admin/products/_index_rows.html.erb +1 -0
  41. data/app/views/spree/admin/products/_index_search_fields.html.erb +4 -0
  42. data/app/views/spree/admin/products/_stores.html.erb +8 -0
  43. data/app/views/spree/admin/promotions/rules/_store.html.erb +8 -0
  44. data/app/views/spree/admin/stores/_form.html.erb +90 -0
  45. data/app/views/spree/admin/stores/edit.html.erb +29 -0
  46. data/app/views/spree/admin/stores/index.html.erb +43 -0
  47. data/app/views/spree/admin/stores/new.html.erb +29 -0
  48. data/app/views/spree/admin/taxonomies/_form.html.erb +12 -0
  49. data/app/views/spree/admin/trackers/_index_rows.html.erb +1 -0
  50. data/app/views/spree/admin/trackers/_store.html.erb +6 -0
  51. data/app/views/spree/shared/_google_analytics.html.erb +39 -0
  52. data/bin/rails +7 -0
  53. data/circle.yml +6 -0
  54. data/config/locales/en.yml +26 -0
  55. data/config/locales/fr.yml +9 -0
  56. data/config/locales/pl.yml +10 -0
  57. data/config/locales/ru.yml +9 -0
  58. data/config/routes.rb +5 -0
  59. data/db/migrate/20091202123245_add_order_store.rb +17 -0
  60. data/db/migrate/20100114020535_add_store_to_tracker.rb +25 -0
  61. data/db/migrate/20100227180338_create_products_stores.rb +13 -0
  62. data/db/migrate/20100616204303_store_id_for_taxonomies.rb +19 -0
  63. data/db/migrate/20110601125650_remove_datetime_columns_from_products_stores.rb +13 -0
  64. data/db/migrate/20110601145424_add_indexes_to_products_stores.rb +11 -0
  65. data/db/migrate/20120223183401_namespace.rb +9 -0
  66. data/db/migrate/20121210224018_add_store_payment_methods.rb +10 -0
  67. data/db/migrate/20130308084714_add_logo_to_stores.rb +13 -0
  68. data/db/migrate/20130325231147_add_store_shipping_methods.rb +14 -0
  69. data/db/migrate/20130412212659_add_spree_promotion_rules_stores.rb +8 -0
  70. data/db/migrate/20150304200122_add_indexes.rb +6 -0
  71. data/lib/assets/javascripts/spree/backend/solidus_multi_domain.js +1 -0
  72. data/lib/assets/javascripts/spree/backend/store_picker.js +34 -0
  73. data/lib/assets/javascripts/spree/frontend/solidus_multi_domain.js +0 -0
  74. data/lib/assets/stylesheets/spree/frontend/solidus_multi_domain.css +5 -0
  75. data/lib/generators/spree_multi_domain/install/install_generator.rb +24 -0
  76. data/lib/solidus_multi_domain.rb +3 -0
  77. data/lib/spree/controller_helpers/order_decorator.rb +11 -0
  78. data/lib/spree/search/multi_domain.rb +19 -0
  79. data/lib/spree_multi_domain/engine.rb +65 -0
  80. data/lib/spree_multi_domain/multi_domain_helpers.rb +31 -0
  81. data/solidus_multi_domain.gemspec +31 -0
  82. data/spec/controllers/spree/admin/products_controller_spec.rb +39 -0
  83. data/spec/controllers/spree/admin/stores_controller_spec.rb +12 -0
  84. data/spec/controllers/spree/api/line_items_controller_spec.rb +35 -0
  85. data/spec/controllers/spree/api/orders_controller_spec.rb +44 -0
  86. data/spec/controllers/spree/api/products_controller_spec.rb +52 -0
  87. data/spec/controllers/spree/api/shipments_controller_spec.rb +63 -0
  88. data/spec/controllers/spree/products_controller_spec.rb +49 -0
  89. data/spec/helpers/products_helper_decorator_spec.rb +22 -0
  90. data/spec/mailers/carton_mailer_spec.rb +41 -0
  91. data/spec/models/spree/line_item_spec.rb +39 -0
  92. data/spec/models/spree/order_spec.rb +18 -0
  93. data/spec/models/spree/payment_method_spec.rb +33 -0
  94. data/spec/models/spree/product_spec.rb +18 -0
  95. data/spec/models/spree/shipping_method_decorator_spec.rb +27 -0
  96. data/spec/models/spree/store_spec.rb +42 -0
  97. data/spec/models/spree/taxon_decorator_spec.rb +30 -0
  98. data/spec/models/spree/tracker_spec.rb +19 -0
  99. data/spec/requests/global_controller_helpers_spec.rb +65 -0
  100. data/spec/requests/template_renderer_spec.rb +25 -0
  101. data/spec/spec_helper.rb +33 -0
  102. data/spec/support/factory_overrides.rb +10 -0
  103. metadata +278 -0
@@ -0,0 +1,25 @@
1
+ module Spree
2
+ Store.class_eval do
3
+ has_and_belongs_to_many :products, join_table: 'spree_products_stores'
4
+ has_many :taxonomies
5
+ has_many :orders
6
+
7
+ has_many :store_payment_methods
8
+ has_many :payment_methods, through: :store_payment_methods
9
+
10
+ has_many :store_shipping_methods
11
+ has_many :shipping_methods, through: :store_shipping_methods
12
+
13
+ has_and_belongs_to_many :promotion_rules, class_name: 'Spree::Promotion::Rules::Store', join_table: 'spree_promotion_rules_stores', association_foreign_key: 'promotion_rule_id'
14
+
15
+ has_attached_file :logo,
16
+ styles: { mini: '48x48>', small: '100x100>', medium: '250x250>' },
17
+ default_style: :medium,
18
+ url: 'stores/:id/:style/:basename.:extension',
19
+ path: 'stores/:id/:style/:basename.:extension',
20
+ convert_options: { all: '-strip -auto-orient' }
21
+
22
+ validates_attachment_file_name :logo, matches: [/png\Z/i, /jpe?g\Z/i],
23
+ if: -> { respond_to?(:logo_file_name) }
24
+ end
25
+ end
@@ -0,0 +1,6 @@
1
+ module Spree
2
+ class StorePaymentMethod < ActiveRecord::Base
3
+ belongs_to :store
4
+ belongs_to :payment_method
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Spree
2
+ class StoreShippingMethod < ActiveRecord::Base
3
+ belongs_to :store
4
+ belongs_to :shipping_method
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ Spree::Taxon.class_eval do
2
+ def self.find_by_store_id_and_permalink!(store_id, permalink)
3
+ joins(:taxonomy).where("spree_taxonomies.store_id = ?", store_id).where(permalink: permalink).first!
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ Spree::Taxonomy.class_eval do
2
+ belongs_to :store
3
+ end
@@ -0,0 +1,7 @@
1
+ Spree::Tracker.class_eval do
2
+ belongs_to :store
3
+
4
+ def self.current(store_key)
5
+ Spree::Tracker.where(active: true, environment: Rails.env).joins(:store).where("spree_stores.code = ? OR spree_stores.url LIKE ?", store_key, "%#{store_key}%").first
6
+ end
7
+ end
@@ -0,0 +1,20 @@
1
+ module SpreeMultiDomain::LineItemDecorator
2
+ extend ActiveSupport::Concern
3
+
4
+ class ProductDoesNotBelongToStoreError < StandardError; end
5
+
6
+ included do
7
+ prepend(InstanceMethods)
8
+ before_create :ensure_product_belongs_to_store
9
+ end
10
+
11
+ module InstanceMethods
12
+ private
13
+
14
+ def ensure_product_belongs_to_store
15
+ raise SpreeMultiDomain::LineItemDecorator::ProductDoesNotBelongToStoreError if order.store.present? && !product.stores.include?(order.store)
16
+ end
17
+ end
18
+ end
19
+
20
+ Spree::LineItem.include(SpreeMultiDomain::LineItemDecorator)
@@ -0,0 +1,5 @@
1
+ Deface::Override.new(:virtual_path => "spree/admin/shared/_configuration_menu",
2
+ :name => "multi_domain_admin_configurations_menu",
3
+ :insert_bottom => "[data-hook='admin_configurations_sidebar_menu']",
4
+ :text => "<%= configurations_sidebar_menu_item Spree.t(:stores_admin), admin_stores_url %>",
5
+ :disabled => false)
@@ -0,0 +1,6 @@
1
+ Deface::Override.new(
2
+ :virtual_path => "spree/admin/products/_form",
3
+ :name => "multi_domain_admin_product_form_meta",
4
+ :insert_bottom => "[data-hook='admin_product_form_meta']",
5
+ :partial => "spree/admin/products/stores",
6
+ :disabled => false)
@@ -0,0 +1,20 @@
1
+ Deface::Override.new(
2
+ :virtual_path => "spree/admin/products/index",
3
+ :name => "multi_domain_admin_products_index_headers",
4
+ :insert_before => "[data-hook='admin_products_index_header_actions']",
5
+ :partial => "spree/admin/products/index_headers",
6
+ :disabled => false)
7
+
8
+ Deface::Override.new(
9
+ :virtual_path => "spree/admin/products/index",
10
+ :name => "multi_domain_admin_products_index_rows",
11
+ :insert_before => "[data-hook='admin_products_index_row_actions']",
12
+ :partial => "spree/admin/products/index_rows",
13
+ :disabled => false)
14
+
15
+ Deface::Override.new(
16
+ :virtual_path => "spree/admin/products/index",
17
+ :name => "multi_domain_admin_products_index_search",
18
+ :insert_top => "[data-hook='admin_products_index_search']",
19
+ :partial => "spree/admin/products/index_search_fields",
20
+ :disabled => false)
@@ -0,0 +1,6 @@
1
+ Deface::Override.new(
2
+ :virtual_path => "spree/admin/trackers/_form",
3
+ :name => "multi_domain_additional_tracker_fields",
4
+ :replace => "[data-hook='additional_tracker_fields']",
5
+ :partial => "spree/admin/trackers/store",
6
+ :disabled => false)
@@ -0,0 +1,13 @@
1
+ Deface::Override.new(
2
+ :virtual_path => "spree/admin/trackers/index",
3
+ :name => "multi_domain_admin_trackers_index_headers",
4
+ :insert_before => "[data-hook='admin_trackers_index_headers'] th:last",
5
+ :text => "<th><%= I18n.t(:store) %></th>",
6
+ :disabled => false)
7
+
8
+ Deface::Override.new(
9
+ :virtual_path => "spree/admin/trackers/index",
10
+ :name => "multi_domain_admin_trackers_index_rows",
11
+ :insert_before => "[data-hook='admin_trackers_index_rows'] td:last",
12
+ :partial => "spree/admin/trackers/index_rows",
13
+ :disabled => false)
@@ -0,0 +1 @@
1
+ <th><%= Spree.t(:stores) %></th>
@@ -0,0 +1 @@
1
+ <td><%= product.stores.map(&:code).join(", ") unless product.stores.empty? %></td>
@@ -0,0 +1,4 @@
1
+ <p>
2
+ <label><%= Spree.t(:store) %></label><br />
3
+ <%= f.select :stores_id_eq, Spree::Store.all.collect {|s| [s.name, s.id ] }, {:include_blank => true} %></p>
4
+ </p>
@@ -0,0 +1,8 @@
1
+ <div class="stores">
2
+ <%= hidden_field_tag 'update_store_ids', true %>
3
+ <%= f.label :stores, Spree.t(:stores)%><br />
4
+ <% Spree::Store.all.each do |store| %>
5
+ <%= check_box_tag "product[store_ids][]", store.id, @product.stores.include?(store), id: "product_store_id_#{store.id}" %>
6
+ <%= label_tag "product_store_id_#{store.id}", store.name %>
7
+ <% end %>
8
+ </div>
@@ -0,0 +1,8 @@
1
+ <div class="field alpha omega eight columns">
2
+ <label><%= Spree.t('store_rule.choose_stores') %></label><br>
3
+ <input type='hidden' name='<%= param_prefix %>[store_ids_string]' class='store_picker fullwidth' value='<%= promotion_rule.store_ids.join(",") %>'>
4
+ </div>
5
+ <script>
6
+ Spree.routes.store_search = '<%= spree.admin_stores_path(:format => :json) %>';
7
+ $('.store_picker').storeAutocomplete();
8
+ </script>
@@ -0,0 +1,90 @@
1
+ <div data-hook="admin_store_form_fields">
2
+ <div class="alpha four columns">
3
+ <%= f.field_container :name do %>
4
+ <%= f.label :name, Spree.t(:store_name) %><br />
5
+ <%= f.text_field :name, :class => 'fullwidth' %>
6
+ <%= error_message_on :store, :name %>
7
+ <% end %>
8
+ </div>
9
+
10
+ <div class="four columns">
11
+ <%= f.field_container :code do %>
12
+ <%= f.label :code, Spree.t(:store_code) %><br />
13
+ <%= f.text_field :code, :class => 'fullwidth' %>
14
+ <%= error_message_on :store, :code %>
15
+ <% end %>
16
+ </div>
17
+
18
+ <div class="two columns">
19
+ <%= f.field_container :default do %>
20
+ <%= f.label :default, Spree.t(:default) %>
21
+ <ul>
22
+ <li><%= f.radio_button :default, "true", :class => 'fullwidth' %> <%= Spree.t(:yes) %></li>
23
+ <li><%= f.radio_button :default, "false", :class => 'fullwidth' %> <%= Spree.t(:no) %></li>
24
+ </ul>
25
+ <%= error_message_on :store, :default %>
26
+ <% end %>
27
+ </div>
28
+
29
+ <div class="four columns">
30
+ <%= f.field_container :mail_from_address do %>
31
+ <%= f.label :mail_from_address, Spree.t(:send_mails_as) %><br />
32
+ <%= f.text_field :mail_from_address, :class => 'fullwidth' %>
33
+ <%= error_message_on :store, :mail_from_address %>
34
+ <% end %>
35
+ </div>
36
+
37
+ <div class="four columns">
38
+ <%= f.field_container :default_currency do %>
39
+ <%= f.label :default_currency, Spree.t(:default_currency) %>
40
+ <%= f.text_field :default_currency %>
41
+ <% end %>
42
+ </div>
43
+
44
+ <div class="six columns">
45
+ <%= f.field_container :url do %>
46
+ <%= f.label :url, Spree.t(:domains) %><br />
47
+ <%= f.text_area :url, :cols => 60, :rows => 4, :class => 'fullwidth' %>
48
+ <%= error_message_on :store, :url %>
49
+ <% end %>
50
+ </div>
51
+
52
+ <div class="eight columns">
53
+ <%= image_tag @store.logo %>
54
+ <%= f.field_container :logo do %>
55
+ <%= f.label :logo, Spree.t(:logo) %><br />
56
+ <%= f.file_field :logo %>
57
+ <%= error_message_on :store, :logo %>
58
+ <% end %>
59
+ </div>
60
+
61
+ <div class='row'>
62
+ <div class="alpha six columns">
63
+ <%= f.field_container :payment_methods do %>
64
+ <%= f.label :payment_methods, Spree.t(:payment_methods) %><br />
65
+ <% @payment_methods.each do |payment_method| %>
66
+ <label class="sub">
67
+ <%= check_box_tag 'store[payment_method_ids][]', payment_method.id, @store.payment_methods.include?(payment_method) %>
68
+ </label> &nbsp;
69
+ <%= "#{payment_method.name} (#{payment_method.environment})" %>
70
+ <br>
71
+ <% end %>
72
+ <%= hidden_field_tag 'store[payment_method_ids][]', '' %>
73
+ <% end %>
74
+ </div>
75
+
76
+ <div class="omega six columns">
77
+ <%= f.field_container :shipping_methods do %>
78
+ <%= f.label :shipping_methods, Spree.t(:shipping_methods) %><br />
79
+ <% @shipping_methods.each do |shipping_method| %>
80
+ <label class="sub">
81
+ <%= check_box_tag 'store[shipping_method_ids][]', shipping_method.id, @store.shipping_methods.include?(shipping_method) %>
82
+ </label> &nbsp;
83
+ <%= shipping_method.name %>
84
+ <br>
85
+ <% end %>
86
+ <%= hidden_field_tag 'store[shipping_method_ids][]', '' %>
87
+ <% end %>
88
+ </div>
89
+ </div>
90
+ </div>
@@ -0,0 +1,29 @@
1
+ <%= render :partial => 'spree/admin/shared/configuration_menu' %>
2
+
3
+ <% content_for :page_title do %>
4
+ <%= Spree.t(:editing_store) %>
5
+ <% end %>
6
+
7
+ <% content_for :page_actions do %>
8
+ <li>
9
+ <%= button_link_to Spree.t(:back_to_stores_list), spree.admin_stores_path, :icon => 'icon-arrow-left' %>
10
+ </li>
11
+ <% end %>
12
+
13
+ <div data-hook="admin_store_edit_form_header">
14
+ <%= render :partial => 'spree/shared/error_messages', :locals => { :target => @store } %>
15
+ </div>
16
+
17
+ <div data-hook="admin_store_edit_form">
18
+ <%= form_for [:admin, @store], :html => {:multipart => true} do |f| %>
19
+ <fieldset class="no-border-top">
20
+ <%= render :partial => 'form', :locals => { :f => f } %>
21
+
22
+ <div class="clear"></div>
23
+
24
+ <div data-hook="admin_store_edit_form_buttons">
25
+ <%= render :partial => 'spree/admin/shared/edit_resource_links' %>
26
+ </div>
27
+ </fieldset>
28
+ <% end %>
29
+ </div>
@@ -0,0 +1,43 @@
1
+ <%= render :partial => 'spree/admin/shared/configuration_menu' %>
2
+
3
+ <% content_for :page_title do %>
4
+ <%= Spree.t(:stores) %>
5
+ <% end %>
6
+
7
+ <% content_for :page_actions do %>
8
+ <li>
9
+ <%= button_link_to Spree.t(:new_store), new_object_url, :icon => 'icon-plus', :id => 'admin_new_store_link' %>
10
+ </li>
11
+ <% end %>
12
+
13
+ <table class="index" id='listing_stores'>
14
+ <colgroup>
15
+ <col style="width: 120px">
16
+ <col style="width: 80px">
17
+ <col style="width: 80px">
18
+ <col style="width: 220px">
19
+ <col style="width: 15%">
20
+ </colgroup>
21
+ <thead>
22
+ <th><%= Spree.t(:store_name) %></th>
23
+ <th><%= Spree.t(:store_code) %></th>
24
+ <th><%= Spree.t(:send_mails_as) %></th>
25
+ <th><%= Spree.t(:domains) %></th>
26
+ <th data-hook="admin_stores_index_header_actions" class="actions"></th>
27
+ </thead>
28
+ <tbody>
29
+ <% @stores.each do |store|%>
30
+ <tr id="<%= spree_dom_id store %>"
31
+ data-hook="admin_stores_index_rows" class="<%= cycle('odd', 'even') %>">
32
+ <td><%= store.name %></td>
33
+ <td><%= store.code %></td>
34
+ <td><%= store.mail_from_address %></td>
35
+ <td><%= store.url %></td>
36
+ <td data-hook="admin_stores_index_row_actions" class="actions">
37
+ <%= link_to_edit store, :no_text => true %> &nbsp;
38
+ <%= link_to_delete store, :no_text => true %>
39
+ </td>
40
+ </tr>
41
+ <% end %>
42
+ </tbody>
43
+ </table>
@@ -0,0 +1,29 @@
1
+ <%= render :partial => 'spree/admin/shared/configuration_menu' %>
2
+
3
+ <% content_for :page_title do %>
4
+ <%= Spree.t(:new_store) %>
5
+ <% end %>
6
+
7
+ <% content_for :page_actions do %>
8
+ <li>
9
+ <%= button_link_to Spree.t(:back_to_stores_list), spree.admin_stores_path, :icon => 'icon-arrow-left' %>
10
+ </li>
11
+ <% end %>
12
+
13
+ <div data-hook="admin_store_new_form_header">
14
+ <%= render :partial => 'spree/shared/error_messages', :locals => { :target => @store } %>
15
+ </div>
16
+
17
+ <div data-hook="admin_store_new_form">
18
+ <%= form_for [:admin, @store], :html => {:multipart => true} do |f| %>
19
+ <fieldset class="no-border-top">
20
+ <%= render :partial => 'form', :locals => { :f => f } %>
21
+
22
+ <div class="clear"></div>
23
+
24
+ <div data-hook="admin_store_new_form_buttons">
25
+ <%= render :partial => 'spree/admin/shared/new_resource_links' %>
26
+ </div>
27
+ </fieldset>
28
+ <% end %>
29
+ </div>
@@ -0,0 +1,12 @@
1
+ <div data-hook="admin_inside_taxonomy_form">
2
+ <%= f.field_container :name do %>
3
+ <%= f.label :name, Spree.t(:name) %> <span class="required">*</span><br />
4
+ <%= error_message_on :taxonomy, :name, :class => 'fullwidth title' %>
5
+ <%= text_field :taxonomy, :name %>
6
+ <% end %>
7
+ </div>
8
+
9
+ <p>
10
+ <%= f.label :name, Spree.t(:store) %> <span class="required">*</span><br />
11
+ <%= collection_select :taxonomy, :store_id, Spree::Store.all, :id, :name %>
12
+ </p>
@@ -0,0 +1 @@
1
+ <td><%=tracker.store.name %></td>
@@ -0,0 +1,6 @@
1
+ <tr>
2
+ <td><label><%=t("store")%></label></td>
3
+ <td>
4
+ <%= collection_select(:tracker, :store_id, Spree::Store.all, :id, :name, {}) %>
5
+ </td>
6
+ </tr>
@@ -0,0 +1,39 @@
1
+ <% if tracker = current_tracker %>
2
+
3
+ <%= javascript_tag do %>
4
+ var _gaq = _gaq || [];
5
+ _gaq.push(['_setAccount', '<%= tracker.analytics_id %>']);
6
+ _gaq.push(['_trackPageview']);
7
+
8
+ <% if flash[:commerce_tracking] && @order.present? %>
9
+ <%# more info: https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApiEcommerce %>
10
+ _gaq.push(['_addTrans',
11
+ "<%= j @order.number %>",
12
+ "<%= tracker.store.name %>",
13
+ "<%= @order.total %>",
14
+ "<%= @order.adjustments.tax.sum(:amount) %>",
15
+ "<%= @order.adjustments.shipping.sum(:amount) %>",
16
+ "<%= j @order.bill_address.city %>",
17
+ "<%= j @order.bill_address.state_text %>",
18
+ "<%= j @order.bill_address.country.name %>"
19
+ ]);
20
+ <% @order.line_items.each do |line_item| %>
21
+ _gaq.push(['_addItem',
22
+ "<%= j @order.number %>",
23
+ "<%= j line_item.variant.sku %>",
24
+ "<%= j line_item.variant.product.name %>",
25
+ "",
26
+ "<%= line_item.price %>",
27
+ "<%= line_item.quantity %>"
28
+ ]);
29
+ <% end %>
30
+ _gaq.push(['_trackTrans']);
31
+ <% end %>
32
+
33
+ (function() {
34
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
35
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
36
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
37
+ })();
38
+ <% end %>
39
+ <% end %>
data/bin/rails ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ ENGINE_ROOT = File.expand_path('../..', __FILE__)
4
+ ENGINE_PATH = File.expand_path('../../lib/spree_multi_domain/engine', __FILE__)
5
+
6
+ require 'rails/all'
7
+ require 'rails/engine/commands'