stall 0.2.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +60 -23
- data/app/assets/javascripts/para/stall.coffee +1 -0
- data/app/assets/javascripts/para/stall/inputs/variant-select.coffee +62 -0
- data/app/assets/javascripts/para/stall/inputs/variants-matrix.coffee +12 -0
- data/app/assets/javascripts/para/stall/inputs/variants-matrix/helpers.coffee +40 -0
- data/app/assets/javascripts/para/stall/inputs/variants-matrix/input.coffee +133 -0
- data/app/assets/javascripts/para/stall/inputs/variants-matrix/nested-fields.coffee +38 -0
- data/app/assets/javascripts/para/stall/inputs/variants-matrix/properties_select.coffee +45 -0
- data/app/assets/javascripts/para/stall/inputs/variants-matrix/variant.coffee +59 -0
- data/app/assets/javascripts/stall.coffee +1 -0
- data/app/assets/javascripts/stall/add-to-cart-form.coffee +53 -28
- data/app/assets/javascripts/stall/cart-form.coffee +7 -2
- data/app/assets/stylesheets/para/stall.sass +28 -0
- data/app/controllers/para/stall/admin/carts_controller.rb +27 -0
- data/app/controllers/stall/cart_credits_controller.rb +27 -0
- data/app/controllers/stall/carts_controller.rb +1 -1
- data/app/controllers/stall/checkout/steps_controller.rb +22 -12
- data/app/controllers/stall/checkouts_controller.rb +1 -0
- data/app/controllers/stall/line_items_controller.rb +1 -0
- data/app/controllers/stall/payments_controller.rb +16 -1
- data/app/helpers/stall/credit_notes_helper.rb +25 -0
- data/app/helpers/stall/customers_helper.rb +3 -1
- data/app/models/billing_address.rb +2 -0
- data/app/models/cart_credit_note_adjustment.rb +3 -0
- data/app/models/credit_note.rb +3 -0
- data/app/models/credit_note_adjustment.rb +3 -0
- data/app/models/credit_note_usage.rb +3 -0
- data/app/models/product.rb +3 -0
- data/app/models/product_category.rb +3 -0
- data/app/models/product_detail.rb +3 -0
- data/app/models/property.rb +3 -0
- data/app/models/property_value.rb +3 -0
- data/app/models/shipping_address.rb +2 -0
- data/app/models/stall/models/address.rb +2 -2
- data/app/models/stall/models/cart.rb +2 -15
- data/app/models/stall/models/cart_credit_note_adjustment.rb +11 -0
- data/app/models/stall/models/credit_note.rb +50 -0
- data/app/models/stall/models/credit_note_adjustment.rb +13 -0
- data/app/models/stall/models/credit_note_usage.rb +16 -0
- data/app/models/stall/models/customer.rb +20 -8
- data/app/models/stall/models/line_item.rb +9 -0
- data/app/models/stall/models/product.rb +45 -0
- data/app/models/stall/models/product_category.rb +31 -0
- data/app/models/stall/models/product_detail.rb +17 -0
- data/app/models/stall/models/product_list.rb +9 -45
- data/app/models/stall/models/property.rb +20 -0
- data/app/models/stall/models/property_value.rb +23 -0
- data/app/models/stall/models/variant.rb +34 -0
- data/app/models/stall/models/variant_property_value.rb +18 -0
- data/app/models/variant.rb +3 -0
- data/app/models/variant_property_value.rb +3 -0
- data/app/services/stall/cart_credit_note_creation_service.rb +40 -0
- data/app/services/stall/cart_payment_validation_service.rb +28 -0
- data/app/services/stall/cart_update_service.rb +17 -6
- data/app/services/stall/credit_usage_service.rb +102 -0
- data/app/services/stall/payment_notification_service.rb +4 -8
- data/app/services/stall/product_list_staleness_handling_service.rb +33 -0
- data/app/views/admin/addresses/_fields.html.haml +9 -0
- data/app/views/admin/carts/_filters.html.haml +17 -0
- data/app/views/admin/carts/_form.html.haml +43 -0
- data/app/views/admin/carts/_table.html.haml +17 -0
- data/app/views/admin/customers/_fields.html.haml +1 -0
- data/app/views/admin/line_items/_fields.html.haml +15 -0
- data/app/views/admin/products/_table.html.haml +12 -0
- data/app/views/admin/properties/_form.html.haml +6 -0
- data/app/views/admin/properties/_table.html.haml +8 -0
- data/app/views/admin/property_values/_fields.html.haml +1 -0
- data/app/views/admin/shipments/_fields.html.haml +7 -0
- data/app/views/checkout/steps/_informations.html.haml +3 -1
- data/app/views/checkout/steps/_payment.html.haml +2 -0
- data/app/views/checkout/steps/_payment_return.html.haml +0 -1
- data/app/views/para/admin/resources/_variant_row.html.haml +24 -0
- data/app/views/para/stall/inputs/_variant_select.html.haml +14 -0
- data/app/views/para/stall/inputs/_variants_matrix.html.haml +41 -0
- data/app/views/stall/addresses/_fields.html.haml +6 -12
- data/app/views/stall/carts/_cart.html.haml +45 -37
- data/app/views/stall/carts/_widget.html.haml +28 -0
- data/app/views/stall/carts/show.html.haml +2 -0
- data/app/views/stall/checkout/steps/_navigation.html.haml +13 -0
- data/app/views/stall/credit_note_adjustments/_form.html.haml +28 -0
- data/app/views/stall/line_items/_added.html.haml +2 -2
- data/app/views/stall/line_items/_form.html.haml +1 -1
- data/app/views/stall/payments/manual_payment_gateway/_form.html.haml +10 -0
- data/app/views/stall/shared/mailers/_cart.html.haml +1 -1
- data/config/locales/stall.fr.yml +82 -2
- data/db/migrate/20161129101956_add_type_to_stall_address_ownerships.rb +52 -0
- data/db/migrate/20161202080218_add_reference_to_product_lists.rb +17 -0
- data/db/migrate/20170118103916_create_credit_notes.rb +17 -0
- data/db/migrate/20170118144047_create_credit_note_adjustments.rb +13 -0
- data/db/migrate/20170123123115_create_stall_product_categories.rb +12 -0
- data/db/migrate/20170123123326_create_stall_products.rb +17 -0
- data/db/migrate/20170123125030_create_stall_variants.rb +13 -0
- data/db/migrate/20170123131748_create_stall_product_category_hierarchies.rb +16 -0
- data/db/migrate/20170123143704_create_stall_product_details.rb +14 -0
- data/db/migrate/20170125152622_convert_all_money_fields_to_decimal_to_use_infinite_precision.rb +27 -0
- data/db/migrate/20170131162537_add_data_to_stall_adjustments.rb +5 -0
- data/db/migrate/20170202165514_create_stall_properties.rb +9 -0
- data/db/migrate/20170202165516_create_stall_property_values.rb +13 -0
- data/db/migrate/20170202165518_create_stall_variant_property_values.rb +13 -0
- data/lib/generators/stall/install/templates/initializer.rb +21 -0
- data/lib/generators/stall/view/view_generator.rb +41 -19
- data/lib/para/stall.rb +32 -0
- data/lib/para/stall/inputs.rb +13 -0
- data/lib/para/stall/inputs/variant_input_helper.rb +34 -0
- data/lib/para/stall/inputs/variant_select_input.rb +79 -0
- data/lib/para/stall/inputs/variants_matrix_input.rb +72 -0
- data/lib/para/stall/routes.rb +11 -0
- data/lib/para/stall/variants_property_config.rb +78 -0
- data/lib/stall.rb +10 -0
- data/lib/stall/addressable.rb +11 -59
- data/lib/stall/addresses.rb +1 -0
- data/lib/stall/addresses/copier_base.rb +3 -1
- data/lib/stall/addresses/copy.rb +10 -0
- data/lib/stall/addresses/copy_source_to_target.rb +10 -24
- data/lib/stall/addresses/prefill_target_from_source.rb +8 -16
- data/lib/stall/adjustable.rb +20 -0
- data/lib/stall/archived_paid_cart_helper.rb +36 -0
- data/lib/stall/cart_helper.rb +15 -7
- data/lib/stall/checkout/informations_checkout_step.rb +47 -50
- data/lib/stall/checkout/payment_return_checkout_step.rb +4 -1
- data/lib/stall/checkout/step.rb +24 -3
- data/lib/stall/checkout/step_form.rb +11 -5
- data/lib/stall/checkout/wizard.rb +7 -6
- data/lib/stall/config.rb +9 -0
- data/lib/stall/default_currency_manager.rb +27 -0
- data/lib/stall/engine.rb +14 -3
- data/lib/stall/payments.rb +2 -0
- data/lib/stall/payments/gateway_request.rb +15 -0
- data/lib/stall/payments/gateway_response.rb +33 -0
- data/lib/stall/payments/manual_payment_gateway.rb +86 -0
- data/lib/stall/priceable.rb +4 -0
- data/lib/stall/reference_manager.rb +17 -0
- data/lib/stall/routes.rb +1 -0
- data/lib/stall/shippable.rb +18 -0
- data/lib/stall/total_prices_manager.rb +40 -0
- data/lib/stall/version.rb +1 -1
- metadata +120 -5
- data/app/models/address_ownership.rb +0 -3
- data/app/models/stall/models/address_ownership.rb +0 -26
@@ -0,0 +1,52 @@
|
|
1
|
+
# Before this migration, the AddressOwnership class is removed so we declare it
|
2
|
+
# here in its minimal version as a temporary fallback allowing us to easily
|
3
|
+
# migrate our data to the new address direct-relation model
|
4
|
+
#
|
5
|
+
class AddressOwnership < ActiveRecord::Base
|
6
|
+
self.table_name = 'stall_address_ownerships'
|
7
|
+
belongs_to :address
|
8
|
+
belongs_to :addressable, polymorphic: true
|
9
|
+
end
|
10
|
+
|
11
|
+
class AddTypeToStallAddressOwnerships < ActiveRecord::Migration
|
12
|
+
def up
|
13
|
+
change_table :stall_addresses do |t|
|
14
|
+
t.string :type
|
15
|
+
t.references :addressable, polymorphic: true
|
16
|
+
end
|
17
|
+
|
18
|
+
AddressOwnership.find_each do |ownership|
|
19
|
+
address = ownership.address
|
20
|
+
address.addressable = ownership.addressable
|
21
|
+
|
22
|
+
if ownership.shipping
|
23
|
+
address.type = 'ShippingAddress'
|
24
|
+
address.save!
|
25
|
+
|
26
|
+
if ownership.billing
|
27
|
+
billing_address = BillingAddress.new(addressable: ownership.addressable)
|
28
|
+
Stall::Addresses::Copy.new(address, billing_address)
|
29
|
+
billing_address.save!
|
30
|
+
end
|
31
|
+
elsif ownership.billing
|
32
|
+
address.type = 'BillingAddress'
|
33
|
+
ownership.save!
|
34
|
+
else
|
35
|
+
ownership.destroy
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
remove_column :stall_address_ownerships, :billing
|
40
|
+
remove_column :stall_address_ownerships, :shipping
|
41
|
+
end
|
42
|
+
|
43
|
+
def down
|
44
|
+
add_column :stall_address_ownerships, :billing, :boolean
|
45
|
+
add_column :stall_address_ownerships, :shipping, :boolean
|
46
|
+
|
47
|
+
change_table :stall_addresses do |t|
|
48
|
+
t.remove :type
|
49
|
+
t.remove_references :addressable, polymorphic: true
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class AddReferenceToProductLists < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
add_column :stall_product_lists, :reference, :string
|
4
|
+
add_index :stall_product_lists, :reference, unique: true
|
5
|
+
|
6
|
+
# Migrate all references stored in the JSON data columns to the new
|
7
|
+
# reference column
|
8
|
+
Cart.update_all("reference = data->>'reference'")
|
9
|
+
# Remove all reference keys in the JSON data columns
|
10
|
+
Cart.update_all("data = (data - 'reference')")
|
11
|
+
end
|
12
|
+
|
13
|
+
def down
|
14
|
+
remove_index :stall_product_lists, :reference
|
15
|
+
remove_column :stall_product_lists, :reference
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class CreateCreditNotes < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :stall_credit_notes do |t|
|
4
|
+
t.string :reference
|
5
|
+
t.references :customer, index: true
|
6
|
+
t.string :currency
|
7
|
+
t.monetize :eot_amount, null: false, currency: { present: false }
|
8
|
+
t.monetize :amount, null: false, currency: { present: false }
|
9
|
+
t.decimal :vat_rate, precision: 11, scale: 2
|
10
|
+
t.references :source, polymorphic: true, index: true
|
11
|
+
|
12
|
+
t.timestamps null: false
|
13
|
+
end
|
14
|
+
|
15
|
+
add_foreign_key :stall_credit_notes, :stall_customers, column: :customer_id
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class CreateCreditNoteAdjustments < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :stall_credit_note_usages do |t|
|
4
|
+
t.references :credit_note, index: true
|
5
|
+
t.references :adjustment, index: true
|
6
|
+
|
7
|
+
t.timestamps null: false
|
8
|
+
end
|
9
|
+
|
10
|
+
add_foreign_key :stall_credit_note_usages, :stall_credit_notes, column: :credit_note_id
|
11
|
+
add_foreign_key :stall_credit_note_usages, :stall_adjustments, column: :adjustment_id
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateStallProductCategories < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :stall_product_categories do |t|
|
4
|
+
t.string :name
|
5
|
+
t.text :slug
|
6
|
+
t.integer :position, default: 0
|
7
|
+
t.integer :parent_id
|
8
|
+
|
9
|
+
t.timestamps null: false
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class CreateStallProducts < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :stall_products do |t|
|
4
|
+
t.string :name
|
5
|
+
t.attachment :image
|
6
|
+
t.text :description
|
7
|
+
t.text :slug
|
8
|
+
t.integer :position
|
9
|
+
t.boolean :visible, default: true
|
10
|
+
t.references :product_category, index: true
|
11
|
+
|
12
|
+
t.timestamps null: false
|
13
|
+
end
|
14
|
+
|
15
|
+
add_foreign_key :stall_products, :stall_product_categories, column: 'product_category_id'
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class CreateStallVariants < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :stall_variants do |t|
|
4
|
+
t.references :product, index: true
|
5
|
+
t.monetize :price
|
6
|
+
t.boolean :published, default: true
|
7
|
+
|
8
|
+
t.timestamps null: false
|
9
|
+
end
|
10
|
+
|
11
|
+
add_foreign_key :stall_variants, :stall_products, column: 'product_id'
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class CreateStallProductCategoryHierarchies < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :stall_product_category_hierarchies, id: false do |t|
|
4
|
+
t.integer :ancestor_id, null: false
|
5
|
+
t.integer :descendant_id, null: false
|
6
|
+
t.integer :generations, null: false
|
7
|
+
end
|
8
|
+
|
9
|
+
add_index :stall_product_category_hierarchies, [:ancestor_id, :descendant_id, :generations],
|
10
|
+
unique: true,
|
11
|
+
name: "stall_product_category_anc_desc_idx"
|
12
|
+
|
13
|
+
add_index :stall_product_category_hierarchies, [:descendant_id],
|
14
|
+
name: "stall_product_category_desc_idx"
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateStallProductDetails < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :stall_product_details do |t|
|
4
|
+
t.references :product, index: true
|
5
|
+
t.string :name
|
6
|
+
t.text :content
|
7
|
+
t.integer :position, default: 0
|
8
|
+
|
9
|
+
t.timestamps null: false
|
10
|
+
end
|
11
|
+
|
12
|
+
add_foreign_key :stall_product_details, :stall_products, column: 'product_id'
|
13
|
+
end
|
14
|
+
end
|
data/db/migrate/20170125152622_convert_all_money_fields_to_decimal_to_use_infinite_precision.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
class ConvertAllMoneyFieldsToDecimalToUseInfinitePrecision < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
change_column :stall_adjustments, :price_cents, :decimal, precision: 13, scale: 3
|
4
|
+
change_column :stall_adjustments, :eot_price_cents, :decimal, precision: 13, scale: 3
|
5
|
+
change_column :stall_credit_notes, :eot_amount_cents, :decimal, precision: 13, scale: 3
|
6
|
+
change_column :stall_credit_notes, :amount_cents, :decimal, precision: 13, scale: 3
|
7
|
+
change_column :stall_line_items, :unit_eot_price_cents, :decimal, precision: 13, scale: 3
|
8
|
+
change_column :stall_line_items, :unit_price_cents, :decimal, precision: 13, scale: 3
|
9
|
+
change_column :stall_line_items, :eot_price_cents, :decimal, precision: 13, scale: 3
|
10
|
+
change_column :stall_line_items, :price_cents, :decimal, precision: 13, scale: 3
|
11
|
+
change_column :stall_shipments, :price_cents, :decimal, precision: 13, scale: 3
|
12
|
+
change_column :stall_shipments, :eot_price_cents, :decimal, precision: 13, scale: 3
|
13
|
+
end
|
14
|
+
|
15
|
+
def down
|
16
|
+
change_column :stall_adjustments, :price_cents, :integer
|
17
|
+
change_column :stall_adjustments, :eot_price_cents, :integer
|
18
|
+
change_column :stall_credit_notes, :eot_amount_cents, :integer
|
19
|
+
change_column :stall_credit_notes, :amount_cents, :integer
|
20
|
+
change_column :stall_line_items, :unit_eot_price_cents, :integer
|
21
|
+
change_column :stall_line_items, :unit_price_cents, :integer
|
22
|
+
change_column :stall_line_items, :eot_price_cents, :integer
|
23
|
+
change_column :stall_line_items, :price_cents, :integer
|
24
|
+
change_column :stall_shipments, :price_cents, :integer
|
25
|
+
change_column :stall_shipments, :eot_price_cents, :integer
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class CreateStallPropertyValues < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :stall_property_values do |t|
|
4
|
+
t.references :property, index: true
|
5
|
+
t.string :value
|
6
|
+
t.integer :position, default: 0
|
7
|
+
|
8
|
+
t.timestamps null: false
|
9
|
+
end
|
10
|
+
|
11
|
+
add_foreign_key :stall_property_values, :stall_properties, column: :property_id
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class CreateStallVariantPropertyValues < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :stall_variant_property_values do |t|
|
4
|
+
t.references :property_value, index: true
|
5
|
+
t.references :variant, index: true
|
6
|
+
|
7
|
+
t.timestamps null: false
|
8
|
+
end
|
9
|
+
|
10
|
+
add_foreign_key :stall_variant_property_values, :stall_property_values, column: :property_value_id
|
11
|
+
add_foreign_key :stall_variant_property_values, :stall_variants, column: :variant_id
|
12
|
+
end
|
13
|
+
end
|
@@ -25,6 +25,20 @@ Stall.configure do |config|
|
|
25
25
|
#
|
26
26
|
# config.sender_email = ENV['STALL_SENDER_EMAIL']
|
27
27
|
|
28
|
+
# Set the customer associated user model used by the shop to bind user
|
29
|
+
# accounts to.
|
30
|
+
#
|
31
|
+
# This model should have an e-mail, password and password_confirmation
|
32
|
+
# fields.
|
33
|
+
#
|
34
|
+
# config.default_user_model_name = 'User'
|
35
|
+
|
36
|
+
# A method available in all controllers to fetch the current signed in user
|
37
|
+
# in your app. It should return a user model if the visitor is signed in, and
|
38
|
+
# nil if it's unsigned.
|
39
|
+
#
|
40
|
+
# config.default_user_helper_method = :current_user
|
41
|
+
|
28
42
|
# Global default VAT rate, can be overrided by products
|
29
43
|
#
|
30
44
|
# config.vat_rate = BigDecimal.new('20.0')
|
@@ -94,6 +108,13 @@ Stall.configure do |config|
|
|
94
108
|
#
|
95
109
|
# config.default_product_weight = 0
|
96
110
|
|
111
|
+
# When a cart total balance is negative, automatically convert the remaining
|
112
|
+
# amount into a credit note for the cart customer
|
113
|
+
#
|
114
|
+
# Defaults to false, losing the remainder for the customer when paid
|
115
|
+
#
|
116
|
+
# config.convert_cart_remainder_to_credit_note = false
|
117
|
+
|
97
118
|
# Allows configuring which countries are available for free shipping offers
|
98
119
|
#
|
99
120
|
# Accepts an array of country codes or a proc with an Address argument
|
@@ -1,37 +1,59 @@
|
|
1
1
|
module Stall
|
2
2
|
class ViewGenerator < ::Rails::Generators::Base
|
3
|
-
class ViewNotFound < StandardError; end
|
4
|
-
|
5
3
|
VIEWS_DIR = File.expand_path('../../../../../app/views', __FILE__)
|
6
4
|
source_root VIEWS_DIR
|
7
5
|
|
8
6
|
argument :file_paths, type: :array, required: true
|
9
7
|
|
10
8
|
def copy_view_template
|
11
|
-
paths = file_paths.map
|
12
|
-
source_path = source_path_for(file_path)
|
13
|
-
raise ViewNotFound, "Could not find any stall view for #{ file_path }" unless File.exist?(source_path)
|
14
|
-
target_path = "app/views/#{ file_path_with_ext_for(file_path) }"
|
9
|
+
paths = file_paths.map { |file_path| ViewTemplate.new(file_path) }
|
15
10
|
|
16
|
-
|
11
|
+
paths.each do |view_template|
|
12
|
+
template(view_template.source_path, view_template.target_path)
|
17
13
|
end
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
class ViewTemplate
|
18
|
+
class ViewNotFound < StandardError; end
|
18
19
|
|
19
|
-
|
20
|
-
|
20
|
+
attr_reader :file_path
|
21
|
+
|
22
|
+
def initialize(file_path)
|
23
|
+
@file_path = file_path
|
21
24
|
end
|
22
|
-
end
|
23
25
|
|
24
|
-
|
26
|
+
def source_path
|
27
|
+
source_file_for(file_path_with_ext)
|
28
|
+
end
|
25
29
|
|
26
|
-
|
27
|
-
|
28
|
-
|
30
|
+
def target_path
|
31
|
+
"app/views/#{ file_path_with_ext }"
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def file_path_with_ext
|
37
|
+
return @file_path_with_ext if @file_path_with_ext
|
38
|
+
@file_path += '.html.haml' unless file_path.match(/\.html\.haml\z/)
|
39
|
+
|
40
|
+
if File.exist?(source_file_for(file_path))
|
41
|
+
@file_path_with_ext = file_path
|
42
|
+
return @file_path_with_ext
|
43
|
+
end
|
44
|
+
|
45
|
+
partial_path = [File.dirname(file_path), File.basename(file_path)].join('/_')
|
46
|
+
|
47
|
+
if File.exist?(source_file_for(partial_path))
|
48
|
+
@file_path_with_ext = partial_path
|
49
|
+
return @file_path_with_ext
|
50
|
+
end
|
51
|
+
|
52
|
+
raise ViewNotFound, "No Stall view was found for #{ file_path } !"
|
53
|
+
end
|
29
54
|
|
30
|
-
|
31
|
-
|
32
|
-
file_path
|
33
|
-
else
|
34
|
-
"#{ file_path }.html.haml"
|
55
|
+
def source_file_for(path)
|
56
|
+
File.join(Stall::ViewGenerator::VIEWS_DIR, path)
|
35
57
|
end
|
36
58
|
end
|
37
59
|
end
|
data/lib/para/stall.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'para'
|
2
|
+
require 'stall'
|
3
|
+
require 'simple_form'
|
4
|
+
|
5
|
+
require 'para/stall/inputs'
|
6
|
+
|
7
|
+
module Para
|
8
|
+
module Stall
|
9
|
+
extend ActiveSupport::Autoload
|
10
|
+
|
11
|
+
autoload :Routes
|
12
|
+
autoload :VariantsPropertyConfig
|
13
|
+
|
14
|
+
class << self
|
15
|
+
def config(&block)
|
16
|
+
if block
|
17
|
+
block.call(self)
|
18
|
+
else
|
19
|
+
self
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def javascript_includes
|
24
|
+
%w(para/stall)
|
25
|
+
end
|
26
|
+
|
27
|
+
def stylesheet_includes
|
28
|
+
%w(para/stall)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Para
|
2
|
+
module Stall
|
3
|
+
module Inputs
|
4
|
+
extend ActiveSupport::Autoload
|
5
|
+
|
6
|
+
autoload :VariantInputHelper
|
7
|
+
autoload :VariantsMatrixInput
|
8
|
+
autoload :VariantSelectInput
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
SimpleForm.custom_inputs_namespaces << 'Para::Stall::Inputs'
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Para
|
2
|
+
module Stall
|
3
|
+
module Inputs
|
4
|
+
module VariantInputHelper
|
5
|
+
private
|
6
|
+
|
7
|
+
def resource
|
8
|
+
@resource ||= @builder.object
|
9
|
+
end
|
10
|
+
|
11
|
+
def model
|
12
|
+
@model ||= resource.class
|
13
|
+
end
|
14
|
+
|
15
|
+
def variant_sort_method(variant)
|
16
|
+
properties.map do |property_config|
|
17
|
+
if (variant_value = property_config.variant_property_value_for(variant))
|
18
|
+
variant_value.property_value.position
|
19
|
+
end
|
20
|
+
end.join(':')
|
21
|
+
end
|
22
|
+
|
23
|
+
# Raises a comprehensive error for easy wrong form attribute catching
|
24
|
+
#
|
25
|
+
def ensure_target_relation_present!
|
26
|
+
unless model.reflect_on_association(attribute_name)
|
27
|
+
raise NoMethodError,
|
28
|
+
"Relation ##{ attribute_name } does not exist for model #{ model.name }."
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|