refinerycms-stores 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. data/Gemfile +26 -0
  2. data/Gemfile.lock +306 -0
  3. data/Guardfile +27 -0
  4. data/LICENSE.txt +20 -0
  5. data/Rakefile +65 -0
  6. data/VERSION +1 -0
  7. data/app/assets/stylesheets/refinery/refinerycms-stores.sass +76 -0
  8. data/app/controllers/refinery/addresses/admin/addresses_controller.rb +12 -0
  9. data/app/controllers/refinery/orders/admin/orders_controller.rb +12 -0
  10. data/app/controllers/refinery/orders/orders_controller.rb +96 -0
  11. data/app/controllers/refinery/products/admin/products_controller.rb +12 -0
  12. data/app/controllers/refinery/products/products_controller.rb +17 -0
  13. data/app/controllers/refinery/stores/admin/stores_controller.rb +12 -0
  14. data/app/controllers/refinery/stores/stores_controller.rb +80 -0
  15. data/app/helpers/refinery/orders/orders_helper.rb +11 -0
  16. data/app/models/refinery/addresses/address.rb +12 -0
  17. data/app/models/refinery/orders/line_item.rb +24 -0
  18. data/app/models/refinery/orders/order.rb +364 -0
  19. data/app/models/refinery/products/product.rb +17 -0
  20. data/app/models/refinery/stores/store.rb +33 -0
  21. data/app/views/refinery/addresses/admin/addresses/_actions.html.erb +25 -0
  22. data/app/views/refinery/addresses/admin/addresses/_address.html.erb +16 -0
  23. data/app/views/refinery/addresses/admin/addresses/_addresses.html.erb +2 -0
  24. data/app/views/refinery/addresses/admin/addresses/_form.html.erb +89 -0
  25. data/app/views/refinery/addresses/admin/addresses/_records.html.erb +18 -0
  26. data/app/views/refinery/addresses/admin/addresses/_sortable_list.html.erb +5 -0
  27. data/app/views/refinery/addresses/admin/addresses/edit.html.erb +1 -0
  28. data/app/views/refinery/addresses/admin/addresses/index.html.erb +7 -0
  29. data/app/views/refinery/addresses/admin/addresses/new.html.erb +1 -0
  30. data/app/views/refinery/orders/admin/orders/_actions.html.erb +25 -0
  31. data/app/views/refinery/orders/admin/orders/_form.html.erb +122 -0
  32. data/app/views/refinery/orders/admin/orders/_order.html.erb +20 -0
  33. data/app/views/refinery/orders/admin/orders/_orders.html.erb +2 -0
  34. data/app/views/refinery/orders/admin/orders/_records.html.erb +18 -0
  35. data/app/views/refinery/orders/admin/orders/_sortable_list.html.erb +5 -0
  36. data/app/views/refinery/orders/admin/orders/edit.html.erb +1 -0
  37. data/app/views/refinery/orders/admin/orders/index.html.erb +7 -0
  38. data/app/views/refinery/orders/admin/orders/new.html.erb +1 -0
  39. data/app/views/refinery/orders/orders/_address_form.html.haml +35 -0
  40. data/app/views/refinery/orders/orders/_card_form.html.haml +63 -0
  41. data/app/views/refinery/orders/orders/_order_snapshot.html.haml +44 -0
  42. data/app/views/refinery/orders/orders/confirmation.html.haml +26 -0
  43. data/app/views/refinery/orders/orders/edit.html.haml +36 -0
  44. data/app/views/refinery/orders/orders/index.html.haml +6 -0
  45. data/app/views/refinery/orders/orders/purchase.html.haml +25 -0
  46. data/app/views/refinery/orders/orders/show.html.haml +36 -0
  47. data/app/views/refinery/products/admin/products/_actions.html.erb +25 -0
  48. data/app/views/refinery/products/admin/products/_form.html.erb +127 -0
  49. data/app/views/refinery/products/admin/products/_product.html.erb +20 -0
  50. data/app/views/refinery/products/admin/products/_products.html.erb +2 -0
  51. data/app/views/refinery/products/admin/products/_records.html.erb +18 -0
  52. data/app/views/refinery/products/admin/products/_sortable_list.html.erb +5 -0
  53. data/app/views/refinery/products/admin/products/edit.html.erb +4 -0
  54. data/app/views/refinery/products/admin/products/index.html.erb +10 -0
  55. data/app/views/refinery/products/admin/products/new.html.erb +4 -0
  56. data/app/views/refinery/products/products/show.html.erb +105 -0
  57. data/app/views/refinery/stores/admin/stores/_actions.html.erb +57 -0
  58. data/app/views/refinery/stores/admin/stores/_form.html.erb +56 -0
  59. data/app/views/refinery/stores/admin/stores/_records.html.erb +18 -0
  60. data/app/views/refinery/stores/admin/stores/_sortable_list.html.erb +5 -0
  61. data/app/views/refinery/stores/admin/stores/_store.html.erb +20 -0
  62. data/app/views/refinery/stores/admin/stores/_stores.html.erb +2 -0
  63. data/app/views/refinery/stores/admin/stores/edit.html.erb +4 -0
  64. data/app/views/refinery/stores/admin/stores/index.html.erb +13 -0
  65. data/app/views/refinery/stores/admin/stores/new.html.erb +4 -0
  66. data/app/views/refinery/stores/stores/_cart.html.erb +22 -0
  67. data/app/views/refinery/stores/stores/_cart_item.html.erb +9 -0
  68. data/app/views/refinery/stores/stores/_list_product.html.erb +16 -0
  69. data/app/views/refinery/stores/stores/index.html.erb +11 -0
  70. data/app/views/refinery/stores/stores/show.html.erb +28 -0
  71. data/config/locales/en.yml +143 -0
  72. data/config/locales/es.yml +143 -0
  73. data/config/locales/fr.yml +139 -0
  74. data/config/locales/nb.yml +143 -0
  75. data/config/locales/nl.yml +143 -0
  76. data/config/routes.rb +81 -0
  77. data/db/migrate/1_create_stores_stores.rb +29 -0
  78. data/db/migrate/2_create_products_products.rb +44 -0
  79. data/db/migrate/3_create_orders_orders.rb +44 -0
  80. data/db/migrate/4_create_orders_line_items.rb +20 -0
  81. data/db/migrate/5_create_addresses_addresses.rb +39 -0
  82. data/db/seeds.rb +23 -0
  83. data/lib/generators/refinery/stores_generator.rb +17 -0
  84. data/lib/refinery/addresses/engine.rb +31 -0
  85. data/lib/refinery/addresses.rb +21 -0
  86. data/lib/refinery/cart.rb +36 -0
  87. data/lib/refinery/cart_item.rb +28 -0
  88. data/lib/refinery/orders/engine.rb +31 -0
  89. data/lib/refinery/orders.rb +21 -0
  90. data/lib/refinery/products/engine.rb +31 -0
  91. data/lib/refinery/products.rb +21 -0
  92. data/lib/refinery/store_gateway.rb +106 -0
  93. data/lib/refinery/stores/engine.rb +31 -0
  94. data/lib/refinery/stores.rb +21 -0
  95. data/lib/refinerycms-stores.rb +7 -0
  96. data/lib/tasks/refinery/stores.rake +13 -0
  97. data/readme.md +10 -0
  98. data/refinerycms-stores.gemspec +261 -0
  99. data/spec/models/refinery/addresses/address_spec.rb +18 -0
  100. data/spec/models/refinery/orders/order_spec.rb +18 -0
  101. data/spec/models/refinery/products/product_spec.rb +18 -0
  102. data/spec/models/refinery/stores/store_spec.rb +18 -0
  103. data/spec/requests/refinery/addresses/admin/addresses_spec.rb +101 -0
  104. data/spec/requests/refinery/orders/admin/orders_spec.rb +101 -0
  105. data/spec/requests/refinery/products/admin/products_spec.rb +101 -0
  106. data/spec/requests/refinery/stores/admin/stores_spec.rb +101 -0
  107. data/spec/spec_helper.rb +53 -0
  108. data/spec/support/factories/refinery/addresses.rb +7 -0
  109. data/spec/support/factories/refinery/orders.rb +7 -0
  110. data/spec/support/factories/refinery/products.rb +7 -0
  111. data/spec/support/factories/refinery/stores.rb +7 -0
  112. data/tasks/rspec.rake +6 -0
  113. data/tasks/testing.rake +8 -0
  114. data/test/helper.rb +17 -0
  115. data/test/test_refinerycms-cart.rb +7 -0
  116. metadata +571 -0
@@ -0,0 +1,143 @@
1
+ nl:
2
+ refinery:
3
+ plugins:
4
+ addresses:
5
+ title: Addresses
6
+ orders:
7
+ title: Orders
8
+ products:
9
+ title: Products
10
+ stores:
11
+ title: Stores
12
+ addresses:
13
+ admin:
14
+ addresses:
15
+ actions:
16
+ create_new: Maak een nieuwe Address
17
+ reorder: Wijzig de volgorde van de Addresses
18
+ reorder_done: Klaar met het wijzingen van de volgorde van de Addresses
19
+ records:
20
+ title: Addresses
21
+ sorry_no_results: Helaas! Er zijn geen resultaten gevonden.
22
+ no_items_yet: Er zijn nog geen Addresses. Druk op 'Maak een nieuwe Address'
23
+ om de eerste aan te maken.
24
+ address:
25
+ view_live_html: Bekijk deze address op de website <br/><em>(opent een
26
+ nieuw venster)</em>
27
+ edit: Bewerk deze address
28
+ delete: Verwijder deze address voor eeuwig
29
+ addresses:
30
+ show:
31
+ other: Andere Addresses
32
+ orders:
33
+ admin:
34
+ orders:
35
+ actions:
36
+ create_new: Maak een nieuwe Order
37
+ reorder: Wijzig de volgorde van de Orders
38
+ reorder_done: Klaar met het wijzingen van de volgorde van de Orders
39
+ records:
40
+ title: Orders
41
+ sorry_no_results: Helaas! Er zijn geen resultaten gevonden.
42
+ no_items_yet: Er zijn nog geen Orders. Druk op 'Maak een nieuwe Order'
43
+ om de eerste aan te maken.
44
+ order:
45
+ view_live_html: Bekijk deze order op de website <br/><em>(opent een nieuw
46
+ venster)</em>
47
+ edit: Bewerk deze order
48
+ delete: Verwijder deze order voor eeuwig
49
+ orders:
50
+ show:
51
+ other: Andere Orders
52
+ products:
53
+ admin:
54
+ products:
55
+ actions:
56
+ create_new: Maak een nieuwe Product
57
+ reorder: Wijzig de volgorde van de Products
58
+ reorder_done: Klaar met het wijzingen van de volgorde van de Products
59
+ records:
60
+ title: Products
61
+ sorry_no_results: Helaas! Er zijn geen resultaten gevonden.
62
+ no_items_yet: Er zijn nog geen Products. Druk op 'Maak een nieuwe Product'
63
+ om de eerste aan te maken.
64
+ product:
65
+ view_live_html: Bekijk deze product op de website <br/><em>(opent een
66
+ nieuw venster)</em>
67
+ edit: Bewerk deze product
68
+ delete: Verwijder deze product voor eeuwig
69
+ products:
70
+ show:
71
+ other: Andere Products
72
+ stores:
73
+ admin:
74
+ stores:
75
+ actions:
76
+ create_new: Maak een nieuwe Store
77
+ reorder: Wijzig de volgorde van de Stores
78
+ reorder_done: Klaar met het wijzingen van de volgorde van de Stores
79
+ records:
80
+ title: Stores
81
+ sorry_no_results: Helaas! Er zijn geen resultaten gevonden.
82
+ no_items_yet: Er zijn nog geen Stores. Druk op 'Maak een nieuwe Store'
83
+ om de eerste aan te maken.
84
+ store:
85
+ view_live_html: Bekijk deze store op de website <br/><em>(opent een nieuw
86
+ venster)</em>
87
+ edit: Bewerk deze store
88
+ delete: Verwijder deze store voor eeuwig
89
+ stores:
90
+ show:
91
+ other: Andere Stores
92
+ activerecord:
93
+ attributes:
94
+ refinery/addresses/address:
95
+ customer: Customer
96
+ order: Order
97
+ is_billing: Is Billing
98
+ first_name: First Name
99
+ last_name: Last Name
100
+ phone: Phone
101
+ email: Email
102
+ address1: Address1
103
+ address2: Address2
104
+ city: City
105
+ state: State
106
+ zip: Zip
107
+ country: Country
108
+ refinery/orders/order:
109
+ order_number: Order Number
110
+ order_customer: Order Customer
111
+ order_status: Order Status
112
+ order_notes: Order Notes
113
+ shipping_type: Shipping Type
114
+ shipped_on: Shipped On
115
+ product_total: Product Total
116
+ shipping_charges: Shipping Charges
117
+ tax_charges: Tax Charges
118
+ cc_last4: Cc Last4
119
+ cc_card_type: Cc Card Type
120
+ cc_expiry_month: Cc Expiry Month
121
+ cc_expiry_year: Cc Expiry Year
122
+ cc_token: Cc Token
123
+ cc_purchased_on: Cc Purchased On
124
+ refinery/products/product:
125
+ store: Store
126
+ name: Name
127
+ code: Code
128
+ description: Description
129
+ date_available: Date Available
130
+ price: Price
131
+ size_width: Size Width
132
+ size_height: Size Height
133
+ size_depth: Size Depth
134
+ weight: Weight
135
+ tax_type: Tax Type
136
+ digital_download: Digital Download
137
+ main_pic: Main Pic
138
+ inactive: Inactive
139
+ refinery/stores/store:
140
+ name: Name
141
+ meta_keywords: Meta Keywords
142
+ description: Description
143
+ is_active: Is Active
data/config/routes.rb ADDED
@@ -0,0 +1,81 @@
1
+ Refinery::Core::Engine.routes.draw do
2
+
3
+ # Frontend routes
4
+ namespace :stores do
5
+ resources :stores, :only => [:index, :show] do
6
+ collection do
7
+ post :add_to_cart
8
+ post :empty_cart
9
+ post :checkout
10
+ end
11
+ end
12
+
13
+ end
14
+
15
+ namespace :orders do
16
+ resources :orders, :only => [:index, :show, :update, :edit] do
17
+ member do
18
+ post :purchase
19
+ get :cancel_order
20
+ post :re_edit
21
+ end
22
+ end
23
+ end
24
+
25
+
26
+ namespace :products do
27
+ resources :products, :only => [:show]
28
+ end
29
+
30
+
31
+ # Admin routes
32
+ namespace :stores, :path => '' do
33
+ namespace :admin, :path => 'refinery' do
34
+ resources :stores, :except => :show do
35
+ collection do
36
+ post :update_positions
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ # Admin routes
43
+ namespace :products, :path => '' do
44
+ namespace :admin, :path => 'refinery' do
45
+ resources :products, :except => :show do
46
+ collection do
47
+ post :update_positions
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+
54
+ # Frontend routes
55
+ namespace :orders do
56
+ resources :orders, :path => '', :only => [:index, :show]
57
+ end
58
+
59
+ # Admin routes
60
+ namespace :orders, :path => '' do
61
+ namespace :admin, :path => 'refinery' do
62
+ resources :orders, :except => :show do
63
+ collection do
64
+ post :update_positions
65
+ end
66
+ end
67
+ end
68
+ end
69
+
70
+ # Admin routes
71
+ namespace :addresses, :path => '' do
72
+ namespace :admin, :path => 'refinery' do
73
+ resources :addresses, :except => :show do
74
+ collection do
75
+ post :update_positions
76
+ end
77
+ end
78
+ end
79
+ end
80
+
81
+ end
@@ -0,0 +1,29 @@
1
+ class CreateStoresStores < ActiveRecord::Migration
2
+
3
+ def up
4
+ create_table :refinery_stores do |t|
5
+ t.string :name
6
+ t.string :meta_keywords
7
+ t.text :description
8
+ t.boolean :is_active
9
+ t.integer :position
10
+
11
+ t.timestamps
12
+ end
13
+
14
+ end
15
+
16
+ def down
17
+ if defined?(::Refinery::UserPlugin)
18
+ ::Refinery::UserPlugin.destroy_all({:name => "refinerycms-stores"})
19
+ end
20
+
21
+ if defined?(::Refinery::Page)
22
+ ::Refinery::Page.delete_all({:link_url => "/stores/stores"})
23
+ end
24
+
25
+ drop_table :refinery_stores
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,44 @@
1
+ class CreateProductsProducts < ActiveRecord::Migration
2
+
3
+ def up
4
+ create_table :refinery_products do |t|
5
+ t.references :store, :null => false
6
+ t.string :name
7
+ t.string :code, :unique => true, :null => false
8
+ t.text :description
9
+ t.datetime :date_available
10
+ t.integer :quantity
11
+ t.float :price
12
+ t.float :size_width
13
+ t.float :size_height
14
+ t.float :size_depth
15
+ t.float :weight
16
+ t.references :tax_type
17
+ t.references :digital_download
18
+ t.references :main_pic
19
+ t.boolean :inactive, :default => false
20
+ t.integer :position
21
+
22
+ t.timestamps
23
+ end
24
+
25
+ add_index :refinery_products, :store_id
26
+ add_index :refinery_products, :code
27
+ add_index :refinery_products, :tax_type_id
28
+
29
+ end
30
+
31
+ def down
32
+ if defined?(::Refinery::UserPlugin)
33
+ ::Refinery::UserPlugin.destroy_all({:name => "refinerycms-products"})
34
+ end
35
+
36
+ if defined?(::Refinery::Page)
37
+ ::Refinery::Page.delete_all({:link_url => "/products/products"})
38
+ end
39
+
40
+ drop_table :refinery_products
41
+
42
+ end
43
+
44
+ end
@@ -0,0 +1,44 @@
1
+ class CreateOrdersOrders < ActiveRecord::Migration
2
+
3
+ def up
4
+ create_table :refinery_orders do |t|
5
+ t.integer :order_number, :null => false, :unique => true
6
+ t.references :order_customer
7
+ t.string :order_status, :default => '', :null => false
8
+ t.text :order_notes
9
+ t.references :shipping_type
10
+ t.datetime :shipped_on
11
+ t.float :product_total, :default => 0.0, :limit => 10
12
+ t.float :shipping_charges, :default => 0.0, :limit => 10
13
+ t.float :tax_charges, :default => 0.0, :limit => 5
14
+ t.string :cc_token
15
+ t.string :cc_last4, :limit => 8
16
+ t.string :cc_card_type, :limit => 32
17
+ t.integer :cc_expiry_month
18
+ t.integer :cc_expiry_year
19
+ t.datetime :cc_purchased_on
20
+ t.string :cc_confirmation_id
21
+ t.integer :position
22
+
23
+ t.timestamps
24
+ end
25
+ add_index :refinery_orders, :order_customer_id
26
+ add_index :refinery_orders, :shipping_type_id
27
+ add_index :refinery_orders, :order_number
28
+ add_index :refinery_orders, :order_status
29
+ end
30
+
31
+ def down
32
+ if defined?(::Refinery::UserPlugin)
33
+ ::Refinery::UserPlugin.destroy_all({:name => "refinerycms-orders"})
34
+ end
35
+
36
+ if defined?(::Refinery::Page)
37
+ ::Refinery::Page.delete_all({:link_url => "/orders/orders"})
38
+ end
39
+
40
+ drop_table :refinery_orders
41
+
42
+ end
43
+
44
+ end
@@ -0,0 +1,20 @@
1
+ class CreateOrdersLineItems < ActiveRecord::Migration
2
+
3
+ def up
4
+ create_table :refinery_line_items do |t|
5
+ t.references :order
6
+ t.references :product
7
+ t.integer :quantity
8
+ t.float :unit_price, :default => 0.0, :limit => 10, :null => false
9
+
10
+ t.timestamps
11
+ end
12
+ add_index :refinery_line_items, :order_id
13
+ add_index :refinery_line_items, :product_id
14
+ end
15
+
16
+ def down
17
+ drop_table :refinery_line_items
18
+ end
19
+
20
+ end
@@ -0,0 +1,39 @@
1
+ class CreateAddressesAddresses < ActiveRecord::Migration
2
+
3
+ def up
4
+ create_table :refinery_addresses do |t|
5
+ t.references :customer
6
+ t.references :order
7
+ t.boolean :is_billing, :default => false
8
+ t.string :first_name, :default => '', :null => false
9
+ t.string :last_name, :default => '', :null => false
10
+ t.string :phone
11
+ t.string :email
12
+ t.string :address1, :default => '', :null => false
13
+ t.string :address2
14
+ t.string :city
15
+ t.string :state, :default => '', :limit => 32
16
+ t.string :zip, :default => '', :limit => 32
17
+ t.string :country, :default => '', :limit => 16, :null => false
18
+ t.integer :position
19
+
20
+ t.timestamps
21
+ end
22
+ add_index :refinery_addresses, :customer_id
23
+ add_index :refinery_addresses, :order_id
24
+ add_index :refinery_addresses, [:last_name, :first_name]
25
+ add_index :refinery_addresses, :phone
26
+ add_index :refinery_addresses, :email
27
+
28
+ end
29
+
30
+ def down
31
+ if defined?(::Refinery::UserPlugin)
32
+ ::Refinery::UserPlugin.destroy_all({:name => "refinerycms-addresses"})
33
+ end
34
+
35
+ drop_table :refinery_addresses
36
+
37
+ end
38
+
39
+ end
data/db/seeds.rb ADDED
@@ -0,0 +1,23 @@
1
+ if defined?(::Refinery::User)
2
+ ::Refinery::User.all.each do |user|
3
+ if user.plugins.where(:name => 'refinerycms-stores').blank?
4
+ user.plugins.create(:name => 'refinerycms-stores',
5
+ :position => (user.plugins.maximum(:position) || -1) +1)
6
+ end
7
+ end
8
+ end
9
+
10
+
11
+ url = "/stores/stores"
12
+ if defined?(::Refinery::Page) && ::Refinery::Page.where(:link_url => url).empty?
13
+ page = ::Refinery::Page.create(
14
+ :title => 'Stores',
15
+ :link_url => url,
16
+ :deletable => false,
17
+ :menu_match => "^#{url}(\/|\/.+?|)$"
18
+ )
19
+ Refinery::Pages.default_parts.each do |default_page_part|
20
+ page.parts.create(:title => default_page_part, :body => nil)
21
+ end
22
+ end
23
+
@@ -0,0 +1,17 @@
1
+ module Refinery
2
+ class StoresGenerator < Rails::Generators::Base
3
+
4
+ def rake_db
5
+ rake("refinery_stores:install:migrations")
6
+ end
7
+
8
+ def append_load_seed_data
9
+ create_file 'db/seeds.rb' unless File.exists?(File.join(destination_root, 'db', 'seeds.rb'))
10
+ append_file 'db/seeds.rb', :verbose => true do
11
+ <<-EOH
12
+ Refinery::Stores::Engine.load_seed
13
+ EOH
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,31 @@
1
+ module Refinery
2
+ module Addresses
3
+ class Engine < Rails::Engine
4
+ include Refinery::Engine
5
+ isolate_namespace Refinery::Addresses
6
+
7
+ engine_name :refinery_stores
8
+
9
+ initializer "register refinerycms_addresses plugin" do |app|
10
+ # Refinery::Plugin.register do |plugin|
11
+ # plugin.name = "addresses"
12
+ # plugin.url = {
13
+ # :controller => 'refinery/addresses/admin/addresses',
14
+ # :action => 'index'
15
+ # }
16
+ # plugin.pathname = root
17
+
18
+ # plugin.activity = {
19
+ # :class_name => :'refinery/addresses/address',
20
+ # :title => 'first_name'
21
+ # }
22
+ #
23
+ # end
24
+ end
25
+
26
+ config.after_initialize do
27
+ Refinery.register_engine(Refinery::Addresses)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,21 @@
1
+ require 'refinerycms-core'
2
+
3
+ module Refinery
4
+ autoload :StoresGenerator, 'generators/refinery/stores_generator'
5
+
6
+ module Addresses
7
+ require 'refinery/addresses/engine'
8
+
9
+ class << self
10
+ attr_writer :root
11
+
12
+ def root
13
+ @root ||= Pathname.new(File.expand_path('../../../', __FILE__))
14
+ end
15
+
16
+ def factory_paths
17
+ @factory_paths ||= [ root.join('spec', 'factories').to_s ]
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,36 @@
1
+ require 'refinerycms-core'
2
+
3
+ module Refinery
4
+
5
+ class Cart
6
+
7
+ attr_reader :items
8
+
9
+ def initialize()
10
+ @items = []
11
+ end
12
+
13
+ def add_product(product)
14
+ current_item = @items.find {|item| item.product == product}
15
+ if current_item
16
+ current_item.increment_quantity
17
+ else
18
+ current_item = ::Refinery::CartItem.new(product)
19
+ @items << current_item
20
+ end
21
+ current_item
22
+ end
23
+
24
+
25
+ def total_items
26
+ @items.sum { |item| item.quantity }
27
+ end
28
+
29
+
30
+ def total_price
31
+ @items.sum { |item| item.price }
32
+ end
33
+
34
+ end # class Cart
35
+
36
+ end # module Refinery
@@ -0,0 +1,28 @@
1
+ require 'refinerycms-core'
2
+
3
+ module Refinery
4
+
5
+ class CartItem
6
+
7
+ attr_reader :product, :quantity
8
+
9
+ def initialize(product)
10
+ @product = product
11
+ @quantity = 1
12
+ end
13
+
14
+ def increment_quantity
15
+ @quantity += 1
16
+ end
17
+
18
+ def name
19
+ @product.name
20
+ end
21
+
22
+ def price
23
+ @product.price * @quantity
24
+ end
25
+
26
+ end # class CartItem
27
+
28
+ end # module Refinery
@@ -0,0 +1,31 @@
1
+ module Refinery
2
+ module Orders
3
+ class Engine < Rails::Engine
4
+ include Refinery::Engine
5
+ isolate_namespace Refinery::Orders
6
+
7
+ engine_name :refinery_stores
8
+
9
+ initializer "register refinerycms_orders plugin" do |app|
10
+ # Refinery::Plugin.register do |plugin|
11
+ # plugin.name = "orders"
12
+ # plugin.url = {
13
+ # :controller => 'refinery/orders/admin/orders',
14
+ # :action => 'index'
15
+ # }
16
+ # plugin.pathname = root
17
+
18
+ # plugin.activity = {
19
+ # :class_name => :'refinery/orders/order',
20
+ # :title => 'order_status'
21
+ # }
22
+ #
23
+ # end
24
+ end
25
+
26
+ config.after_initialize do
27
+ Refinery.register_engine(Refinery::Orders)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,21 @@
1
+ require 'refinerycms-core'
2
+
3
+ module Refinery
4
+ autoload :StoresGenerator, 'generators/refinery/stores_generator'
5
+
6
+ module Orders
7
+ require 'refinery/orders/engine'
8
+
9
+ class << self
10
+ attr_writer :root
11
+
12
+ def root
13
+ @root ||= Pathname.new(File.expand_path('../../../', __FILE__))
14
+ end
15
+
16
+ def factory_paths
17
+ @factory_paths ||= [ root.join('spec', 'factories').to_s ]
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,31 @@
1
+ module Refinery
2
+ module Products
3
+ class Engine < Rails::Engine
4
+ include Refinery::Engine
5
+ isolate_namespace Refinery::Products
6
+
7
+ engine_name :refinery_stores
8
+
9
+ initializer "register refinerycms_products plugin" do |app|
10
+ # Refinery::Plugin.register do |plugin|
11
+ # plugin.name = "products"
12
+ # plugin.url = {
13
+ # :controller => 'refinery/products/admin/products',
14
+ # :action => 'index'
15
+ # }
16
+ # plugin.pathname = root
17
+
18
+ # plugin.activity = {
19
+ # :class_name => :'refinery/products/product',
20
+ # :title => 'name'
21
+ # }
22
+ #
23
+ # end
24
+ end
25
+
26
+ config.after_initialize do
27
+ Refinery.register_engine(Refinery::Products)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,21 @@
1
+ require 'refinerycms-core'
2
+
3
+ module Refinery
4
+ autoload :StoresGenerator, 'generators/refinery/stores_generator'
5
+
6
+ module Products
7
+ require 'refinery/products/engine'
8
+
9
+ class << self
10
+ attr_writer :root
11
+
12
+ def root
13
+ @root ||= Pathname.new(File.expand_path('../../../', __FILE__))
14
+ end
15
+
16
+ def factory_paths
17
+ @factory_paths ||= [ root.join('spec', 'factories').to_s ]
18
+ end
19
+ end
20
+ end
21
+ end