stall 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +7 -0
- data/Rakefile +22 -0
- data/app/assets/javascripts/stall.coffee +12 -0
- data/app/assets/javascripts/stall/add-to-cart-form.coffee +22 -0
- data/app/assets/javascripts/stall/application.js +13 -0
- data/app/assets/javascripts/stall/carts.js +2 -0
- data/app/assets/stylesheets/stall/application.css +15 -0
- data/app/assets/stylesheets/stall/carts.css +4 -0
- data/app/controllers/stall/application_controller.rb +18 -0
- data/app/controllers/stall/carts_controller.rb +28 -0
- data/app/controllers/stall/checkout/steps_controller.rb +32 -0
- data/app/controllers/stall/checkouts_controller.rb +9 -0
- data/app/controllers/stall/line_items_controller.rb +26 -0
- data/app/helpers/stall/add_to_cart_helper.rb +10 -0
- data/app/helpers/stall/application_helper.rb +4 -0
- data/app/helpers/stall/cart_helper.rb +28 -0
- data/app/helpers/stall/checkout_helper.rb +7 -0
- data/app/models/stall.rb +5 -0
- data/app/models/stall/address.rb +5 -0
- data/app/models/stall/address_ownership.rb +15 -0
- data/app/models/stall/cart.rb +14 -0
- data/app/models/stall/customer.rb +5 -0
- data/app/models/stall/line_item.rb +45 -0
- data/app/models/stall/product_list.rb +56 -0
- data/app/models/stall/shipment.rb +15 -0
- data/app/models/stall/shipping_method.rb +5 -0
- data/app/services/stall/add_to_cart_service.rb +52 -0
- data/app/services/stall/base_service.rb +4 -0
- data/app/services/stall/shipping_fee_calculator_service.rb +21 -0
- data/app/views/checkout/steps/_informations.html.haml +41 -0
- data/app/views/checkout/steps/_payment_method.html.haml +1 -0
- data/app/views/checkout/steps/_shipping_method.html.haml +10 -0
- data/app/views/layouts/stall/application.html.erb +15 -0
- data/app/views/stall/carts/show.html.haml +23 -0
- data/app/views/stall/checkout/steps/show.html.haml +1 -0
- data/app/views/stall/line_items/_add_error.html.haml +17 -0
- data/app/views/stall/line_items/_added.html.haml +23 -0
- data/app/views/stall/line_items/_form.html.haml +12 -0
- data/config/locales/stall.en.yml +60 -0
- data/config/locales/stall.fr.yml +60 -0
- data/db/migrate/20151103154313_create_stall_line_items.rb +19 -0
- data/db/migrate/20160118121116_create_stall_product_lists.rb +15 -0
- data/db/migrate/20160118124016_create_customers.rb +11 -0
- data/db/migrate/20160122143746_create_stall_addresses.rb +17 -0
- data/db/migrate/20160122143748_create_stall_address_ownerships.rb +17 -0
- data/db/migrate/20160124014144_create_stall_shipping_methods.rb +10 -0
- data/db/migrate/20160124020313_create_stall_shipments.rb +17 -0
- data/lib/generators/stall/checkout/step/step_generator.rb +20 -0
- data/lib/generators/stall/checkout/step/templates/step.rb.erb +2 -0
- data/lib/generators/stall/checkout/wizard/templates/wizard.rb.erb +3 -0
- data/lib/generators/stall/checkout/wizard/wizard_generator.rb +20 -0
- data/lib/generators/stall/install/install_generator.rb +17 -0
- data/lib/generators/stall/install/templates/initializer.rb +47 -0
- data/lib/stall.rb +38 -0
- data/lib/stall/addressable.rb +44 -0
- data/lib/stall/checkout.rb +15 -0
- data/lib/stall/checkout/informations_checkout_step.rb +41 -0
- data/lib/stall/checkout/payment_checkout_step.rb +6 -0
- data/lib/stall/checkout/payment_method_checkout_step.rb +6 -0
- data/lib/stall/checkout/shipping_method_checkout_step.rb +20 -0
- data/lib/stall/checkout/step.rb +47 -0
- data/lib/stall/checkout/wizard.rb +85 -0
- data/lib/stall/config.rb +27 -0
- data/lib/stall/engine.rb +30 -0
- data/lib/stall/rails/currency_helper.rb +26 -0
- data/lib/stall/rails/routing_mapper.rb +13 -0
- data/lib/stall/routes.rb +27 -0
- data/lib/stall/sellable.rb +8 -0
- data/lib/stall/sellable/mixin.rb +17 -0
- data/lib/stall/sellable/model.rb +46 -0
- data/lib/stall/shipping.rb +16 -0
- data/lib/stall/shipping/calculator.rb +28 -0
- data/lib/stall/shipping/config.rb +17 -0
- data/lib/stall/shipping/country_weight_table_calculator.rb +69 -0
- data/lib/stall/shipping/free_shipping_calculator.rb +23 -0
- data/lib/stall/utils.rb +22 -0
- data/lib/stall/utils/config_dsl.rb +19 -0
- data/lib/stall/version.rb +3 -0
- data/lib/tasks/stall_tasks.rake +4 -0
- metadata +362 -0
data/lib/stall/config.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
module Stall
|
2
|
+
class Config
|
3
|
+
extend Stall::Utils::ConfigDSL
|
4
|
+
|
5
|
+
# Default VAT rate
|
6
|
+
param :vat_rate, BigDecimal.new('20.0')
|
7
|
+
|
8
|
+
# Default prices precision for rounding
|
9
|
+
param :prices_precision, 2
|
10
|
+
|
11
|
+
# Engine's ApplicationController parent
|
12
|
+
param :application_controller_ancestor, '::ApplicationController'
|
13
|
+
|
14
|
+
# Default currency for money objects
|
15
|
+
param :default_currency, 'EUR'
|
16
|
+
|
17
|
+
# Default checkout wizard used
|
18
|
+
param :default_checkout_wizard, 'DefaultCheckoutWizard'
|
19
|
+
|
20
|
+
# Default product weight if no weight is found
|
21
|
+
param :default_product_weight, 0
|
22
|
+
|
23
|
+
def shipping
|
24
|
+
@shipping ||= Stall::Shipping::Config.new
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/stall/engine.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
module Stall
|
2
|
+
class Engine < ::Rails::Engine
|
3
|
+
initializer 'include sellable mixin into models' do
|
4
|
+
ActiveSupport.on_load(:active_record) do
|
5
|
+
include Stall::Sellable::Mixin
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
initializer 'set money gem default currency' do
|
10
|
+
Money.default_currency = Stall.config.default_currency
|
11
|
+
end
|
12
|
+
|
13
|
+
initializer 'override actionview number helpers' do
|
14
|
+
ActiveSupport.on_load(:action_view) do
|
15
|
+
include Stall::CurrencyHelper
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# Development : Configure rails generators to only generate the target
|
20
|
+
# files and not try to generate useless complementary files
|
21
|
+
#
|
22
|
+
config.generators do |generators|
|
23
|
+
generators.skip_routes true
|
24
|
+
generators.helper false
|
25
|
+
generators.stylesheets false
|
26
|
+
generators.javascripts false
|
27
|
+
generators.test_framework false
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Overrides the `#number_to_currency` rails helper to use the Money currency
|
2
|
+
# symbol as the unit when a Money object is passed and no unit is set.
|
3
|
+
#
|
4
|
+
# This allows to localize currency formats without messing around with Money
|
5
|
+
# custom format which is not integrated with the I18n gem, and rely on rails
|
6
|
+
# default way of localizing the currency formats.
|
7
|
+
#
|
8
|
+
module Stall
|
9
|
+
module CurrencyHelper
|
10
|
+
extend ActiveSupport::Concern
|
11
|
+
|
12
|
+
included do
|
13
|
+
if method_defined?(:number_to_currency)
|
14
|
+
alias_method :original_number_to_currency, :number_to_currency
|
15
|
+
|
16
|
+
define_method(:number_to_currency) do |price, options = {}|
|
17
|
+
if Money === price && !options.key?(:unit)
|
18
|
+
options[:unit] = price.symbol
|
19
|
+
end
|
20
|
+
|
21
|
+
original_number_to_currency(price, options)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# Routing mapper override to allow mounting the engine as non-isolated, avoiding
|
2
|
+
# issues with routes in templates when switching from the app to the engine
|
3
|
+
#
|
4
|
+
module ActionDispatch
|
5
|
+
module Routing
|
6
|
+
class Mapper
|
7
|
+
def mount_stall(mount_location)
|
8
|
+
Stall::Routes.new(self).draw(mount_location)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
data/lib/stall/routes.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
module Stall
|
2
|
+
class Routes
|
3
|
+
attr_reader :router
|
4
|
+
|
5
|
+
def initialize(router)
|
6
|
+
@router = router
|
7
|
+
end
|
8
|
+
|
9
|
+
def draw(mount_location, options = {}, &block)
|
10
|
+
router.instance_eval do
|
11
|
+
scope mount_location do
|
12
|
+
scope module: :stall do
|
13
|
+
resources :carts do
|
14
|
+
resources :line_items
|
15
|
+
end
|
16
|
+
|
17
|
+
resources :checkouts, only: [:show]
|
18
|
+
|
19
|
+
scope '/checkout/:type/:cart_id', module: 'checkout', as: :checkout do
|
20
|
+
resource :step, only: [:show, :update]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Stall
|
2
|
+
module Sellable
|
3
|
+
module Model
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
def sellable?
|
7
|
+
true
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_line_item
|
11
|
+
value_if_method = -> name { send(name) if respond_to?(name) }
|
12
|
+
|
13
|
+
Stall::LineItem.new(
|
14
|
+
sellable: self,
|
15
|
+
quantity: 1,
|
16
|
+
name: (value_if_method.(:name) || value_if_method.(:title)),
|
17
|
+
unit_price: value_if_method.(:price),
|
18
|
+
unit_eot_price: eot_price,
|
19
|
+
vat_rate: vat_rate,
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
def vat_ratio
|
24
|
+
(vat_rate / 100.0) + 1
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def default_eot_price
|
30
|
+
price && (price / vat_ratio)
|
31
|
+
end
|
32
|
+
|
33
|
+
def default_vat_rate
|
34
|
+
@default_vat_rate ||= Stall.config.vat_rate
|
35
|
+
end
|
36
|
+
|
37
|
+
def method_missing(name, *args, &block)
|
38
|
+
if [:eot_price, :vat_rate].include?(name)
|
39
|
+
send(:"default_#{ name }")
|
40
|
+
else
|
41
|
+
super
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Stall
|
2
|
+
module Shipping
|
3
|
+
extend ActiveSupport::Autoload
|
4
|
+
|
5
|
+
autoload :Calculator
|
6
|
+
|
7
|
+
autoload :CountryWeightTableCalculator
|
8
|
+
autoload :FreeShippingCalculator
|
9
|
+
|
10
|
+
autoload :Config
|
11
|
+
|
12
|
+
mattr_reader :calculators
|
13
|
+
@@calculators = {}
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Stall
|
2
|
+
module Shipping
|
3
|
+
class Calculator
|
4
|
+
attr_reader :cart, :config
|
5
|
+
|
6
|
+
def initialize(cart, config)
|
7
|
+
@cart = cart
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def available_for?(address)
|
12
|
+
raise NoMethodError,
|
13
|
+
'Shipping calculators must implement the #available_for? method ' \
|
14
|
+
'to allow filtering available shipping methods'
|
15
|
+
end
|
16
|
+
|
17
|
+
def price
|
18
|
+
raise NoMethodError,
|
19
|
+
'Shipping calculators must implement the #price method and return ' \
|
20
|
+
'the actual shipping price for the given cart'
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.register(name)
|
24
|
+
Stall::Shipping.calculators[name] = self
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'csv'
|
2
|
+
|
3
|
+
module Stall
|
4
|
+
module Shipping
|
5
|
+
class CountryWeightTableCalculator < Stall::Shipping::Calculator
|
6
|
+
def available_for?(address)
|
7
|
+
country?(address.country)
|
8
|
+
end
|
9
|
+
|
10
|
+
def price
|
11
|
+
total_weight = cart.total_weight
|
12
|
+
|
13
|
+
# Browse the data hash to find a suitable country code for the cart's
|
14
|
+
# total weight
|
15
|
+
if (prices = data[cart.shipping_address.country])
|
16
|
+
prices.each do |max_weight, price|
|
17
|
+
return price if total_weight < max_weight
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Return nil if no price was found
|
22
|
+
nil
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def country?(country)
|
28
|
+
countries.include?(country)
|
29
|
+
end
|
30
|
+
|
31
|
+
def countries
|
32
|
+
@countries ||= data.keys
|
33
|
+
end
|
34
|
+
|
35
|
+
def data
|
36
|
+
@data ||= load_data
|
37
|
+
end
|
38
|
+
|
39
|
+
def load_data
|
40
|
+
raise NoMethodError,
|
41
|
+
'CountryWeightTableCalculator subclasses must implement the ' \
|
42
|
+
'#load_data method and return a two dimensional array with ' \
|
43
|
+
'countries as the first line and weight and prices on the other ' \
|
44
|
+
'lines'
|
45
|
+
end
|
46
|
+
|
47
|
+
def load_from(csv_string)
|
48
|
+
csv = CSV.parse(csv_string)
|
49
|
+
headers = csv.shift
|
50
|
+
|
51
|
+
headers.each_with_index.each_with_object({}) do |(countries, index), hash|
|
52
|
+
# Skip first empty cell of the countries row
|
53
|
+
next if index == 0
|
54
|
+
|
55
|
+
countries.split(",").each do |country|
|
56
|
+
country_code = country.strip
|
57
|
+
hash[country_code] = {}
|
58
|
+
|
59
|
+
csv.each do |row|
|
60
|
+
max_weight = row.first.to_f
|
61
|
+
price = BigDecimal.new(row[index])
|
62
|
+
hash[country_code][max_weight] = price
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Stall
|
2
|
+
module Shipping
|
3
|
+
class FreeShippingCalculator < Stall::Shipping::Calculator
|
4
|
+
register :free_shipping
|
5
|
+
|
6
|
+
class_attribute :available
|
7
|
+
|
8
|
+
def price
|
9
|
+
0
|
10
|
+
end
|
11
|
+
|
12
|
+
def available_for?(address)
|
13
|
+
if Array === available
|
14
|
+
available.include?(address.country)
|
15
|
+
elsif Proc === available
|
16
|
+
available.call(address)
|
17
|
+
else
|
18
|
+
true
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/stall/utils.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Stall
|
2
|
+
module Utils
|
3
|
+
extend ActiveSupport::Autoload
|
4
|
+
|
5
|
+
autoload :ConfigDSL
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def try_load_constant(name)
|
9
|
+
begin
|
10
|
+
name.constantize
|
11
|
+
rescue NameError
|
12
|
+
begin
|
13
|
+
require name.underscore
|
14
|
+
name.constantize
|
15
|
+
rescue LoadError, NameError => e
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Stall
|
2
|
+
module Utils
|
3
|
+
# The DSL allows for declaring instance-level configuration params
|
4
|
+
# with defaults in a single line
|
5
|
+
#
|
6
|
+
module ConfigDSL
|
7
|
+
def param(name, default = nil)
|
8
|
+
attr_writer name
|
9
|
+
|
10
|
+
instance_variable_name = :"@#{ name }"
|
11
|
+
|
12
|
+
define_method(name) do
|
13
|
+
instance_variable_get(instance_variable_name) ||
|
14
|
+
instance_variable_set(instance_variable_name, default)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,362 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stall
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- vala
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-01-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: coffee-rails
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '4.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '4.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pg
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.16'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.16'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: haml-rails
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.1'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.1'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simple_form
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: has_secure_token
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: vertebra
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.1'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.1'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: money-rails
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '1.6'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '1.6'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: request_store
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.3'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.3'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: country_select
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '2.0'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '2.0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rspec-rails
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: shoulda-matchers
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '3.0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '3.0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: factory_girl_rails
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - "~>"
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '4.0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '4.0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: database_cleaner
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - "~>"
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '1.5'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - "~>"
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '1.5'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: capybara
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - ">="
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
type: :development
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - ">="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: launchy
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - ">="
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '0'
|
230
|
+
type: :development
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - ">="
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: '0'
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: rubocop
|
239
|
+
requirement: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - "~>"
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: 0.36.0
|
244
|
+
type: :development
|
245
|
+
prerelease: false
|
246
|
+
version_requirements: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - "~>"
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: 0.36.0
|
251
|
+
description: Rails e-commerce framework
|
252
|
+
email:
|
253
|
+
- vala@glyph.fr
|
254
|
+
executables: []
|
255
|
+
extensions: []
|
256
|
+
extra_rdoc_files: []
|
257
|
+
files:
|
258
|
+
- MIT-LICENSE
|
259
|
+
- README.md
|
260
|
+
- Rakefile
|
261
|
+
- app/assets/javascripts/stall.coffee
|
262
|
+
- app/assets/javascripts/stall/add-to-cart-form.coffee
|
263
|
+
- app/assets/javascripts/stall/application.js
|
264
|
+
- app/assets/javascripts/stall/carts.js
|
265
|
+
- app/assets/stylesheets/stall/application.css
|
266
|
+
- app/assets/stylesheets/stall/carts.css
|
267
|
+
- app/controllers/stall/application_controller.rb
|
268
|
+
- app/controllers/stall/carts_controller.rb
|
269
|
+
- app/controllers/stall/checkout/steps_controller.rb
|
270
|
+
- app/controllers/stall/checkouts_controller.rb
|
271
|
+
- app/controllers/stall/line_items_controller.rb
|
272
|
+
- app/helpers/stall/add_to_cart_helper.rb
|
273
|
+
- app/helpers/stall/application_helper.rb
|
274
|
+
- app/helpers/stall/cart_helper.rb
|
275
|
+
- app/helpers/stall/checkout_helper.rb
|
276
|
+
- app/models/stall.rb
|
277
|
+
- app/models/stall/address.rb
|
278
|
+
- app/models/stall/address_ownership.rb
|
279
|
+
- app/models/stall/cart.rb
|
280
|
+
- app/models/stall/customer.rb
|
281
|
+
- app/models/stall/line_item.rb
|
282
|
+
- app/models/stall/product_list.rb
|
283
|
+
- app/models/stall/shipment.rb
|
284
|
+
- app/models/stall/shipping_method.rb
|
285
|
+
- app/services/stall/add_to_cart_service.rb
|
286
|
+
- app/services/stall/base_service.rb
|
287
|
+
- app/services/stall/shipping_fee_calculator_service.rb
|
288
|
+
- app/views/checkout/steps/_informations.html.haml
|
289
|
+
- app/views/checkout/steps/_payment_method.html.haml
|
290
|
+
- app/views/checkout/steps/_shipping_method.html.haml
|
291
|
+
- app/views/layouts/stall/application.html.erb
|
292
|
+
- app/views/stall/carts/show.html.haml
|
293
|
+
- app/views/stall/checkout/steps/show.html.haml
|
294
|
+
- app/views/stall/line_items/_add_error.html.haml
|
295
|
+
- app/views/stall/line_items/_added.html.haml
|
296
|
+
- app/views/stall/line_items/_form.html.haml
|
297
|
+
- config/locales/stall.en.yml
|
298
|
+
- config/locales/stall.fr.yml
|
299
|
+
- db/migrate/20151103154313_create_stall_line_items.rb
|
300
|
+
- db/migrate/20160118121116_create_stall_product_lists.rb
|
301
|
+
- db/migrate/20160118124016_create_customers.rb
|
302
|
+
- db/migrate/20160122143746_create_stall_addresses.rb
|
303
|
+
- db/migrate/20160122143748_create_stall_address_ownerships.rb
|
304
|
+
- db/migrate/20160124014144_create_stall_shipping_methods.rb
|
305
|
+
- db/migrate/20160124020313_create_stall_shipments.rb
|
306
|
+
- lib/generators/stall/checkout/step/step_generator.rb
|
307
|
+
- lib/generators/stall/checkout/step/templates/step.rb.erb
|
308
|
+
- lib/generators/stall/checkout/wizard/templates/wizard.rb.erb
|
309
|
+
- lib/generators/stall/checkout/wizard/wizard_generator.rb
|
310
|
+
- lib/generators/stall/install/install_generator.rb
|
311
|
+
- lib/generators/stall/install/templates/initializer.rb
|
312
|
+
- lib/stall.rb
|
313
|
+
- lib/stall/addressable.rb
|
314
|
+
- lib/stall/checkout.rb
|
315
|
+
- lib/stall/checkout/informations_checkout_step.rb
|
316
|
+
- lib/stall/checkout/payment_checkout_step.rb
|
317
|
+
- lib/stall/checkout/payment_method_checkout_step.rb
|
318
|
+
- lib/stall/checkout/shipping_method_checkout_step.rb
|
319
|
+
- lib/stall/checkout/step.rb
|
320
|
+
- lib/stall/checkout/wizard.rb
|
321
|
+
- lib/stall/config.rb
|
322
|
+
- lib/stall/engine.rb
|
323
|
+
- lib/stall/rails/currency_helper.rb
|
324
|
+
- lib/stall/rails/routing_mapper.rb
|
325
|
+
- lib/stall/routes.rb
|
326
|
+
- lib/stall/sellable.rb
|
327
|
+
- lib/stall/sellable/mixin.rb
|
328
|
+
- lib/stall/sellable/model.rb
|
329
|
+
- lib/stall/shipping.rb
|
330
|
+
- lib/stall/shipping/calculator.rb
|
331
|
+
- lib/stall/shipping/config.rb
|
332
|
+
- lib/stall/shipping/country_weight_table_calculator.rb
|
333
|
+
- lib/stall/shipping/free_shipping_calculator.rb
|
334
|
+
- lib/stall/utils.rb
|
335
|
+
- lib/stall/utils/config_dsl.rb
|
336
|
+
- lib/stall/version.rb
|
337
|
+
- lib/tasks/stall_tasks.rake
|
338
|
+
homepage: https://github.com/glyph-fr/stall
|
339
|
+
licenses:
|
340
|
+
- MIT
|
341
|
+
metadata: {}
|
342
|
+
post_install_message:
|
343
|
+
rdoc_options: []
|
344
|
+
require_paths:
|
345
|
+
- lib
|
346
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
347
|
+
requirements:
|
348
|
+
- - ">="
|
349
|
+
- !ruby/object:Gem::Version
|
350
|
+
version: '0'
|
351
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
352
|
+
requirements:
|
353
|
+
- - ">="
|
354
|
+
- !ruby/object:Gem::Version
|
355
|
+
version: '0'
|
356
|
+
requirements: []
|
357
|
+
rubyforge_project:
|
358
|
+
rubygems_version: 2.5.1
|
359
|
+
signing_key:
|
360
|
+
specification_version: 4
|
361
|
+
summary: Rails e-commerce framework
|
362
|
+
test_files: []
|