opensteam 0.9.0 → 0.9.1
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.
- data/CHANGELOG +78 -0
- data/LICENSE +345 -0
- data/{README.txt → README.rdoc} +20 -17
- data/Rakefile +40 -0
- data/generators/opensteam/opensteam_generator.rb +95 -194
- data/generators/opensteam/templates/{controllers/administration → app/controllers/admin}/inventories_controller.rb +4 -4
- data/generators/opensteam/templates/app/controllers/admin/invoices_controller.rb +106 -0
- data/generators/opensteam/templates/app/controllers/admin/orders_controller.rb +113 -0
- data/generators/opensteam/templates/app/controllers/admin/search_controller.rb +17 -0
- data/generators/opensteam/templates/app/controllers/admin/shipments_controller.rb +106 -0
- data/generators/opensteam/templates/app/controllers/admin/users_controller.rb +99 -0
- data/generators/opensteam/templates/app/controllers/admin_controller.rb +40 -0
- data/generators/opensteam/templates/app/controllers/cart_controller.rb +94 -0
- data/generators/opensteam/templates/app/controllers/checkout_controller.rb +139 -0
- data/generators/opensteam/templates/app/controllers/profile/infos_controller.rb +52 -0
- data/generators/opensteam/templates/app/controllers/profile/orders_controller.rb +105 -0
- data/generators/opensteam/templates/app/controllers/profile_controller.rb +37 -0
- data/generators/opensteam/templates/app/controllers/searches_controller.rb +23 -0
- data/generators/opensteam/templates/app/controllers/user_sessions_controller.rb +38 -0
- data/generators/opensteam/templates/app/controllers/users_controller.rb +40 -0
- data/generators/opensteam/templates/{controllers → app/controllers}/webshop_controller.rb +35 -13
- data/generators/opensteam/templates/app/helpers/admin_helper.rb +40 -0
- data/generators/opensteam/templates/app/helpers/users_helper.rb +53 -0
- data/generators/opensteam/templates/app/helpers/webshop_helper.rb +91 -0
- data/generators/opensteam/templates/app/models/search.rb +36 -0
- data/generators/opensteam/templates/{views/administration → app/views/admin}/_address.html.erb +0 -0
- data/generators/opensteam/templates/app/views/admin/_nav.html.erb +5 -0
- data/generators/opensteam/templates/app/views/admin/catalog.html.erb +5 -0
- data/generators/opensteam/templates/app/views/admin/index.html.erb +21 -0
- data/generators/opensteam/templates/{views/administration → app/views/admin}/inventories/edit.html.erb +10 -9
- data/generators/opensteam/templates/{views/administration → app/views/admin}/inventories/index.html.erb +3 -3
- data/generators/opensteam/templates/{views/administration → app/views/admin}/inventories/new.html.erb +3 -3
- data/generators/opensteam/templates/app/views/admin/inventories/show.html.erb +46 -0
- data/generators/opensteam/templates/app/views/admin/invoices/_invoice.html.erb +12 -0
- data/generators/opensteam/templates/app/views/admin/invoices/_invoices.html.erb +11 -0
- data/generators/opensteam/templates/app/views/admin/invoices/index.html.erb +6 -0
- data/generators/opensteam/templates/app/views/admin/invoices/new.html.erb +54 -0
- data/generators/opensteam/templates/app/views/admin/invoices/show.html.erb +55 -0
- data/generators/opensteam/templates/app/views/admin/orders/_event.html.erb +5 -0
- data/generators/opensteam/templates/app/views/admin/orders/_order.html.erb +11 -0
- data/generators/opensteam/templates/app/views/admin/orders/_order_item.html.erb +10 -0
- data/generators/opensteam/templates/app/views/admin/orders/_orders.html.erb +19 -0
- data/generators/opensteam/templates/app/views/admin/orders/index.html.erb +14 -0
- data/generators/opensteam/templates/app/views/admin/orders/livesearch.rjs +6 -0
- data/generators/opensteam/templates/app/views/admin/orders/show.html.erb +58 -0
- data/generators/opensteam/templates/app/views/admin/products.html.erb +8 -0
- data/generators/opensteam/templates/app/views/admin/properties.html.erb +7 -0
- data/generators/opensteam/templates/app/views/admin/sales.html.erb +5 -0
- data/generators/opensteam/templates/app/views/admin/shipments/_shipment.erb +11 -0
- data/generators/opensteam/templates/app/views/admin/shipments/_shipments.html.erb +11 -0
- data/generators/opensteam/templates/app/views/admin/shipments/index.html.erb +6 -0
- data/generators/opensteam/templates/app/views/admin/shipments/new.html.erb +51 -0
- data/generators/opensteam/templates/app/views/admin/shipments/show.html.erb +55 -0
- data/generators/opensteam/templates/app/views/admin/users/_admins.html.erb +26 -0
- data/generators/opensteam/templates/app/views/admin/users/_admins_header.html.erb +10 -0
- data/generators/opensteam/templates/app/views/admin/users/_customer.html.erb +32 -0
- data/generators/opensteam/templates/app/views/admin/users/_customers.html.erb +29 -0
- data/generators/opensteam/templates/app/views/admin/users/_customers_header.html.erb +11 -0
- data/generators/opensteam/templates/app/views/admin/users/_user_fields.html.erb +9 -0
- data/generators/opensteam/templates/app/views/admin/users/_users.html.erb +29 -0
- data/generators/opensteam/templates/app/views/admin/users/_users_header.html.erb +11 -0
- data/generators/opensteam/templates/app/views/admin/users/edit.html.erb +6 -0
- data/generators/opensteam/templates/app/views/admin/users/index.html.erb +7 -0
- data/generators/opensteam/templates/app/views/admin/users/new.html.erb +6 -0
- data/generators/opensteam/templates/app/views/admin/users/show.html.erb +34 -0
- data/generators/opensteam/templates/app/views/admin/users.html.erb +4 -0
- data/generators/opensteam/templates/{views → app/views}/administration_mailer/order_admin.erb +0 -0
- data/generators/opensteam/templates/{views → app/views}/administration_mailer/order_customer.erb +0 -0
- data/generators/opensteam/templates/app/views/cart/_cart.html.erb +8 -0
- data/generators/opensteam/templates/{views/webshop → app/views/cart}/_cart_content.html.erb +7 -10
- data/generators/opensteam/templates/app/views/cart/index.html.erb +5 -0
- data/generators/opensteam/templates/app/views/cart/update.rjs +1 -0
- data/generators/opensteam/templates/app/views/checkout/intro.html.erb +18 -0
- data/generators/opensteam/templates/{views → app/views}/checkout/outro.html.erb +0 -1
- data/generators/opensteam/templates/{views → app/views}/checkout/payment.html.erb +0 -0
- data/generators/opensteam/templates/app/views/checkout/shipping.html.erb +45 -0
- data/generators/opensteam/templates/app/views/checkout/show_cart.html.erb +13 -0
- data/generators/opensteam/templates/{views → app/views}/checkout/update_cart_content.rjs +0 -0
- data/generators/opensteam/templates/{views → app/views}/common/_cart.html.erb +2 -2
- data/generators/opensteam/templates/{views → app/views}/common/_cart_content.html.erb +1 -1
- data/generators/opensteam/templates/app/views/common/_footer.html.erb +1 -0
- data/generators/opensteam/templates/app/views/common/_header.html.erb +4 -0
- data/generators/opensteam/templates/app/views/common/_header_flash.html.erb +3 -0
- data/generators/opensteam/templates/app/views/common/_signup_fields.html.erb +16 -0
- data/generators/opensteam/templates/app/views/common/_top_links.html.erb +10 -0
- data/generators/opensteam/templates/app/views/layouts/admin.html.erb +45 -0
- data/generators/opensteam/templates/app/views/layouts/profile.html.erb +45 -0
- data/generators/opensteam/templates/app/views/layouts/webshop.html.erb +51 -0
- data/generators/opensteam/templates/app/views/profile/_customer_sidebar.html.erb +12 -0
- data/generators/opensteam/templates/app/views/profile/index.html.erb +11 -0
- data/generators/opensteam/templates/app/views/profile/infos/_customer.html.erb +5 -0
- data/generators/opensteam/templates/app/views/profile/infos/edit.html.erb +25 -0
- data/generators/opensteam/templates/app/views/profile/infos/edit_password.html.erb +26 -0
- data/generators/opensteam/templates/app/views/profile/orders/_order.html.erb +11 -0
- data/generators/opensteam/templates/app/views/profile/orders/_order_item.html.erb +10 -0
- data/generators/opensteam/templates/app/views/profile/orders/_orders.html.erb +19 -0
- data/generators/opensteam/templates/app/views/profile/orders/index.html.erb +14 -0
- data/generators/opensteam/templates/app/views/profile/orders/show.html.erb +48 -0
- data/generators/opensteam/templates/app/views/searches/_search_bar.html.erb +5 -0
- data/generators/opensteam/templates/app/views/searches/new.html.erb +23 -0
- data/generators/opensteam/templates/app/views/searches/show.html.erb +1 -0
- data/generators/opensteam/templates/app/views/user_sessions/new.html.erb +14 -0
- data/generators/opensteam/templates/app/views/users/_user_bar.html.erb +5 -0
- data/generators/opensteam/templates/app/views/users/index.html.erb +27 -0
- data/generators/opensteam/templates/app/views/users/new.html.erb +7 -0
- data/generators/opensteam/templates/app/views/users/show.html.erb +5 -0
- data/generators/opensteam/templates/{views → app/views}/webshop/_inventory_content.html.erb +0 -0
- data/generators/opensteam/templates/app/views/webshop/_nav.html.erb +6 -0
- data/generators/opensteam/templates/{views → app/views}/webshop/add_inventory_to_cart.rjs +0 -0
- data/generators/opensteam/templates/{views → app/views}/webshop/add_to_cart_with_parameters.rjs +0 -0
- data/generators/opensteam/templates/{views → app/views}/webshop/del_item.rjs +0 -0
- data/generators/opensteam/templates/app/views/webshop/index.html.erb +11 -0
- data/generators/opensteam/templates/{views → app/views}/webshop/inventory.rjs +0 -0
- data/generators/opensteam/templates/{views → app/views}/webshop/show.html.erb +15 -15
- data/generators/opensteam/templates/config/initializers/init_states.rb +68 -0
- data/generators/opensteam/templates/{init → config/initializers}/opensteam.rb +6 -0
- data/generators/opensteam/templates/config/initializers/opensteam_model_tables.rb +57 -0
- data/generators/opensteam/templates/db/migrate/20080609095714_create_profiles.rb +14 -0
- data/generators/opensteam/templates/{migrations/create_sessions.rb → db/migrate/20080609095720_create_sessions.rb} +0 -0
- data/generators/opensteam/templates/db/migrate/20080609095721_create_users.rb +29 -0
- data/generators/opensteam/templates/{migrations/create_addresses.rb → db/migrate/20080609095723_create_addresses.rb} +0 -0
- data/generators/opensteam/templates/{migrations/create_customers.rb → db/migrate/20080609095724_create_customers.rb} +0 -0
- data/generators/opensteam/templates/db/migrate/20080609095725_create_dummy_users.rb +21 -0
- data/generators/opensteam/templates/{migrations/create_inventories.rb → db/migrate/20080609095726_create_inventories.rb} +0 -0
- data/generators/opensteam/templates/{migrations/create_inventories_properties.rb → db/migrate/20080609095727_create_inventories_properties.rb} +0 -0
- data/generators/opensteam/templates/{migrations/create_order_items.rb → db/migrate/20080609095728_create_order_items.rb} +5 -0
- data/generators/opensteam/templates/db/migrate/20080609095729_create_orders.rb +32 -0
- data/generators/opensteam/templates/{migrations/create_payment_types.rb → db/migrate/20080609095730_create_payment_types.rb} +0 -0
- data/generators/opensteam/templates/{migrations/create_properties.rb → db/migrate/20080609095731_create_properties.rb} +0 -0
- data/generators/opensteam/templates/db/migrate/20080623075613_create_states.rb +13 -0
- data/generators/opensteam/templates/db/migrate/20080624132807_create_searches.rb +20 -0
- data/generators/opensteam/templates/db/migrate/20080630114155_create_state_histories.rb +14 -0
- data/generators/opensteam/templates/db/migrate/20080714131513_create_invoices.rb +20 -0
- data/generators/opensteam/templates/db/migrate/20080714131650_create_shipments.rb +19 -0
- data/generators/opensteam/templates/lib/authenticated_system.rb +201 -0
- data/generators/opensteam/templates/lib/authentication/by_cookie_token.rb +90 -0
- data/generators/opensteam/templates/lib/authentication/by_password.rb +68 -0
- data/generators/opensteam/templates/lib/authentication.rb +46 -0
- data/generators/opensteam/templates/lib/states/invoice/finished.rb +6 -0
- data/generators/opensteam/templates/lib/states/invoice/payment_received.rb +8 -0
- data/generators/opensteam/templates/lib/states/invoice/pending.rb +6 -0
- data/generators/opensteam/templates/lib/states/invoice/waiting_for_payment.rb +5 -0
- data/generators/opensteam/templates/lib/states/order/finished.rb +6 -0
- data/generators/opensteam/templates/lib/states/order/pending.rb +19 -0
- data/generators/opensteam/templates/lib/states/order/processing.rb +11 -0
- data/generators/opensteam/templates/lib/states/shipment/finished.rb +6 -0
- data/generators/opensteam/templates/lib/states/shipment/pending.rb +5 -0
- data/generators/opensteam/templates/lib/tasks/opensteam.rake +114 -0
- data/generators/opensteam/templates/public/images/athmo_background.jpg +0 -0
- data/generators/opensteam/templates/public/images/bg.jpg +0 -0
- data/generators/opensteam/templates/public/images/cart_big.gif +0 -0
- data/generators/opensteam/templates/public/images/cross.png +0 -0
- data/generators/opensteam/templates/public/images/enter.gif +0 -0
- data/generators/opensteam/templates/public/images/menu_background.jpg +0 -0
- data/generators/opensteam/templates/public/images/opensteam_background.jpg +0 -0
- data/generators/opensteam/templates/public/images/opensteam_logo1.jpg +0 -0
- data/generators/opensteam/templates/public/images/opensteam_petstore_logo1.jpg +0 -0
- data/generators/opensteam/templates/public/images/opensteam_store_logo.jpg +0 -0
- data/generators/opensteam/templates/public/images/os_logo.gif +0 -0
- data/generators/opensteam/templates/public/images/slogan.png +0 -0
- data/generators/opensteam/templates/public/images/tick.png +0 -0
- data/generators/opensteam/templates/public/images/zoom.png +0 -0
- data/generators/opensteam/templates/public/index.html +19 -36
- data/generators/opensteam/templates/public/javascripts/opensteam.js +30 -0
- data/generators/opensteam/templates/public/stylesheets/opensteam_newdesign.css +188 -0
- data/generators/opensteam/templates/public/stylesheets/opensteam_white.css +168 -0
- data/generators/opensteam/templates/public/stylesheets/webshop.css +0 -1
- data/generators/opensteam/templates/tasks/opensteam.rake +1 -1
- data/generators/opensteam/templates/{fixtures → test/fixtures}/inventories.yml +0 -0
- data/generators/opensteam/templates/{fixtures → test/fixtures}/inventories_properties.yml +0 -0
- data/generators/opensteam/templates/{fixtures → test/fixtures}/product_animals.yml +0 -0
- data/generators/opensteam/templates/{fixtures → test/fixtures}/product_dog_foods.yml +0 -0
- data/generators/opensteam/templates/{fixtures → test/fixtures}/properties.yml +0 -0
- data/generators/opensteam_product/opensteam_product_generator.rb +25 -9
- data/generators/opensteam_product/templates/controllers/product_controller.rb +5 -4
- data/generators/opensteam_product/templates/migration.rb +2 -1
- data/generators/opensteam_product/templates/models/product.rb +1 -0
- data/generators/opensteam_product/templates/views/{administration → admin}/_attributes.html.erb +1 -1
- data/generators/opensteam_product/templates/views/{administration → admin}/_get_products.html.erb +0 -0
- data/generators/opensteam_product/templates/views/{administration → admin}/_inventories.html.erb +2 -2
- data/generators/opensteam_product/templates/views/admin/edit.html.erb +13 -0
- data/generators/opensteam_product/templates/views/{administration → admin}/index.html.erb +5 -5
- data/generators/opensteam_product/templates/views/admin/new.html.erb +16 -0
- data/generators/opensteam_product/templates/views/{administration → admin}/show.html.erb +2 -2
- data/generators/opensteam_property/opensteam_property_generator.rb +8 -8
- data/generators/opensteam_property/templates/controllers/property_controller.rb +6 -4
- data/generators/opensteam_property/templates/migration.rb +2 -1
- data/generators/opensteam_property/templates/models/property.rb +1 -0
- data/generators/opensteam_property/templates/views/{administration → admin}/edit.html.erb +3 -3
- data/generators/opensteam_property/templates/views/admin/index.html.erb +24 -0
- data/generators/opensteam_property/templates/views/{administration → admin}/new.html.erb +2 -2
- data/generators/opensteam_property/templates/views/admin/show.html.erb +10 -0
- data/lib/opensteam/base.rb +16 -0
- data/lib/opensteam/cart_base.rb +227 -0
- data/lib/opensteam/checkout.rb +30 -3
- data/lib/opensteam/config.rb +37 -0
- data/lib/opensteam/extension_base.rb +76 -0
- data/lib/opensteam/finder.rb +36 -5
- data/lib/opensteam/helper/configurable_table.rb +228 -0
- data/lib/opensteam/history.rb +56 -0
- data/lib/opensteam/initializer.rb +127 -0
- data/lib/opensteam/inventory_base.rb +24 -1
- data/lib/opensteam/invoice_base.rb +61 -0
- data/lib/opensteam/order_base.rb +105 -14
- data/lib/opensteam/product_base.rb +31 -3
- data/lib/opensteam/property_base.rb +16 -0
- data/lib/opensteam/shipment_base.rb +60 -0
- data/lib/opensteam/shopping_cart.rb +32 -14
- data/lib/opensteam/state_logic.rb +218 -0
- data/lib/opensteam/state_machine.rb +216 -0
- data/lib/opensteam/user_base.rb +115 -131
- data/lib/opensteam/version.rb +17 -1
- data/lib/opensteam.rb +30 -35
- metadata +245 -146
- data/History.txt +0 -0
- data/License.txt +0 -4
- data/Manifest.txt +0 -131
- data/Manifest.txt.bak +0 -132
- data/generators/opensteam/templates/controllers/administration/customers_controller.rb +0 -23
- data/generators/opensteam/templates/controllers/administration/orders_controller.rb +0 -61
- data/generators/opensteam/templates/controllers/administration_controller.rb +0 -80
- data/generators/opensteam/templates/controllers/checkout_controller.rb +0 -142
- data/generators/opensteam/templates/helpers/webshop_helper.rb +0 -29
- data/generators/opensteam/templates/migrations/create_dummy_users.rb +0 -16
- data/generators/opensteam/templates/migrations/create_orders.rb +0 -18
- data/generators/opensteam/templates/migrations/create_users.rb +0 -19
- data/generators/opensteam/templates/models/administration_mailer.rb +0 -18
- data/generators/opensteam/templates/models/inventories_property.rb +0 -10
- data/generators/opensteam/templates/models/inventory.rb +0 -57
- data/generators/opensteam/templates/public/images/rails.png +0 -0
- data/generators/opensteam/templates/views/administration/_nav.html.erb +0 -11
- data/generators/opensteam/templates/views/administration/_update_tree.html.erb +0 -18
- data/generators/opensteam/templates/views/administration/admin_info.html.erb +0 -12
- data/generators/opensteam/templates/views/administration/customers/index.html.erb +0 -27
- data/generators/opensteam/templates/views/administration/customers/show.html.erb +0 -27
- data/generators/opensteam/templates/views/administration/customers.html.erb +0 -44
- data/generators/opensteam/templates/views/administration/index.html.erb +0 -9
- data/generators/opensteam/templates/views/administration/inventories/show.html.erb +0 -45
- data/generators/opensteam/templates/views/administration/login.html.erb +0 -16
- data/generators/opensteam/templates/views/administration/order.html.erb +0 -22
- data/generators/opensteam/templates/views/administration/orders/_order_item.html.erb +0 -22
- data/generators/opensteam/templates/views/administration/orders/index.html.erb +0 -32
- data/generators/opensteam/templates/views/administration/orders/show.html.erb +0 -25
- data/generators/opensteam/templates/views/administration/orders.html.erb +0 -32
- data/generators/opensteam/templates/views/administration/products.html.erb +0 -7
- data/generators/opensteam/templates/views/administration/properties.html.erb +0 -7
- data/generators/opensteam/templates/views/administration/show_order_item.html.erb +0 -5
- data/generators/opensteam/templates/views/administration/signup.html.erb +0 -65
- data/generators/opensteam/templates/views/administration/tree.html.erb +0 -15
- data/generators/opensteam/templates/views/administration/update_products.html.erb +0 -5
- data/generators/opensteam/templates/views/administration/update_properties.html.erb +0 -5
- data/generators/opensteam/templates/views/administration/update_tree.rjs +0 -3
- data/generators/opensteam/templates/views/checkout/intro.html.erb +0 -5
- data/generators/opensteam/templates/views/checkout/shipping.html.erb +0 -39
- data/generators/opensteam/templates/views/checkout/show_cart.html.erb +0 -13
- data/generators/opensteam/templates/views/common/_header.html.erb +0 -15
- data/generators/opensteam/templates/views/layouts/administration.html.erb +0 -29
- data/generators/opensteam/templates/views/layouts/webshop.html.erb +0 -36
- data/generators/opensteam/templates/views/webshop/_cart.html.erb +0 -11
- data/generators/opensteam/templates/views/webshop/_header.html.erb +0 -15
- data/generators/opensteam/templates/views/webshop/index.html.erb +0 -12
- data/generators/opensteam_product/templates/views/administration/edit.html.erb +0 -13
- data/generators/opensteam_product/templates/views/administration/new.html.erb +0 -16
- data/generators/opensteam_property/templates/views/administration/index.html.erb +0 -24
- data/generators/opensteam_property/templates/views/administration/show.html.erb +0 -10
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
# openSteam - http://www.opensteam.net
|
|
2
|
+
# Copyright (C) 2008 DiamondDogs Webconsulting
|
|
3
|
+
#
|
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation; version 2 of the License.
|
|
7
|
+
#
|
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
+
# GNU General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
|
+
|
|
1
17
|
module Opensteam
|
|
2
18
|
|
|
3
19
|
=begin rdoc
|
|
@@ -49,7 +65,7 @@ Used to either be included into a model or injected with the
|
|
|
49
65
|
products = (self._has_product || []).inject({}) { |r,v|
|
|
50
66
|
r.merge!( { v => v.to_s.classify.constantize.find(:all) } ) } || {}
|
|
51
67
|
|
|
52
|
-
products.delete(self.to_s.tableize)
|
|
68
|
+
products.delete(self.to_s.tableize)
|
|
53
69
|
|
|
54
70
|
products
|
|
55
71
|
end
|
|
@@ -78,11 +94,23 @@ Used to either be included into a model or injected with the
|
|
|
78
94
|
|
|
79
95
|
|
|
80
96
|
|
|
97
|
+
|
|
98
|
+
|
|
81
99
|
# inventory association
|
|
82
100
|
has_many :inventories, :as => :product,
|
|
83
101
|
:extend => Opensteam::Base::ExistByPropertiesExtension,
|
|
84
102
|
:class_name => "Opensteam::InventoryBase::Inventory"
|
|
85
|
-
|
|
103
|
+
|
|
104
|
+
has_many :inventories_properties, :through => :inventories, :include => :property
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
86
114
|
|
|
87
115
|
# holds the properties the product is allowed to have
|
|
88
116
|
# used for view
|
|
@@ -136,7 +164,7 @@ Used to either be included into a model or injected with the
|
|
|
136
164
|
# inventoy-objects which are currently associated with the product and do not
|
|
137
165
|
# match the properties (p) are deleted.
|
|
138
166
|
#
|
|
139
|
-
# used in the
|
|
167
|
+
# used in the admin-views, to update the product-property associations.
|
|
140
168
|
#
|
|
141
169
|
def set_properties=(p)
|
|
142
170
|
save
|
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
# openSteam - http://www.opensteam.net
|
|
2
|
+
# Copyright (C) 2008 DiamondDogs Webconsulting
|
|
3
|
+
#
|
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation; version 2 of the License.
|
|
7
|
+
#
|
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
+
# GNU General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
|
+
|
|
1
17
|
module Opensteam
|
|
2
18
|
|
|
3
19
|
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# openSteam - http://www.opensteam.net
|
|
2
|
+
# Copyright (C) 2008 DiamondDogs Webconsulting
|
|
3
|
+
#
|
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation; version 2 of the License.
|
|
7
|
+
#
|
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
+
# GNU General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
|
+
|
|
17
|
+
module Opensteam
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
module ShipmentBase
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# available States for an Shipment-Instance
|
|
24
|
+
module States
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# Shipment Model
|
|
31
|
+
class Shipment < ActiveRecord::Base
|
|
32
|
+
|
|
33
|
+
include Opensteam::StateMachine
|
|
34
|
+
|
|
35
|
+
belongs_to :order, :class_name => 'Opensteam::OrderBase::Order'
|
|
36
|
+
belongs_to :customer, :class_name => 'Opensteam::UserBase::User'
|
|
37
|
+
belongs_to :address, :class_name => 'Opensteam::UserBase::Address'
|
|
38
|
+
|
|
39
|
+
has_many :order_items, :class_name => 'Opensteam::OrderBase::OrderItem'
|
|
40
|
+
|
|
41
|
+
def initialize(*args)
|
|
42
|
+
super(*args)
|
|
43
|
+
|
|
44
|
+
if order
|
|
45
|
+
self.address = order.shipping_address
|
|
46
|
+
self.customer = order.customer
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
end
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
# openSteam - http://www.opensteam.net
|
|
2
|
+
# Copyright (C) 2008 DiamondDogs Webconsulting
|
|
3
|
+
#
|
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation; version 2 of the License.
|
|
7
|
+
#
|
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
+
# GNU General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
1
16
|
|
|
2
17
|
require 'opensteam/finder'
|
|
3
18
|
|
|
@@ -8,20 +23,23 @@ module Opensteam
|
|
|
8
23
|
module ShoppingCart
|
|
9
24
|
|
|
10
25
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
26
|
+
def self.included(base)
|
|
27
|
+
base.extend ClassMethods
|
|
28
|
+
|
|
29
|
+
base.class_eval do
|
|
30
|
+
include InstanceMethods
|
|
31
|
+
before_filter :set_instance_vars
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
module ClassMethods
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
module InstanceMethods
|
|
42
|
+
|
|
25
43
|
|
|
26
44
|
# delete item from cart
|
|
27
45
|
#
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# openSteam - http://www.opensteam.net
|
|
2
|
+
# Copyright (C) 2008 DiamondDogs Webconsulting
|
|
3
|
+
#
|
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation; version 2 of the License.
|
|
7
|
+
#
|
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
+
# GNU General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
module Opensteam
|
|
19
|
+
|
|
20
|
+
module StateLogic
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# StateLogic Module
|
|
24
|
+
# included in State Modules
|
|
25
|
+
module Mod
|
|
26
|
+
|
|
27
|
+
@@states = []
|
|
28
|
+
mattr_accessor :states
|
|
29
|
+
|
|
30
|
+
def self.included(base)
|
|
31
|
+
@@states << base
|
|
32
|
+
base.extend(ClassMethods) if base.is_a?(Module)
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
module ClassMethods
|
|
37
|
+
|
|
38
|
+
def name ; self.to_s.demodulize.downcase.to_sym ; end
|
|
39
|
+
|
|
40
|
+
def respond_to?( method )
|
|
41
|
+
self.protected_instance_methods.include?( method )
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def state_module? ; true ; end
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
# included method
|
|
50
|
+
# called when the state-module is included into the receiver-class (like Order, Shipment, Invoice)
|
|
51
|
+
#
|
|
52
|
+
# for each instance-method of the state-module, it creates an alias (in the receiver-klass) and delegates it
|
|
53
|
+
# to the corresponding state-module (based on receiver.state -> StatePattern) through the fire_event method.
|
|
54
|
+
#
|
|
55
|
+
|
|
56
|
+
def included(receiver)
|
|
57
|
+
self.instance_methods(false).each do |m|
|
|
58
|
+
|
|
59
|
+
receiver.class_eval do
|
|
60
|
+
define_method(m) { |*args| fire_event( m, *args ) }
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
state_name = self.to_s.demodulize.downcase
|
|
66
|
+
receiver.class_eval do
|
|
67
|
+
define_method("#{state_name}?") { self.state == state_name }
|
|
68
|
+
named_scope state_name, :conditions => ["#{self.table_name}.state = ?", state_name ]
|
|
69
|
+
|
|
70
|
+
class << self ;
|
|
71
|
+
def available_states
|
|
72
|
+
self.included_modules.select { |s|
|
|
73
|
+
s.ancestors.include?( Opensteam::StateLogic::Mod ) }.reject { |s|
|
|
74
|
+
s == Opensteam::StateLogic::Mod }
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
require 'observer'
|
|
89
|
+
|
|
90
|
+
#
|
|
91
|
+
# class Base < ActiveRecord::Base
|
|
92
|
+
# self.table_name = "states"
|
|
93
|
+
#
|
|
94
|
+
#
|
|
95
|
+
# def self.state_type ; :state_base ; end
|
|
96
|
+
# def state_type ; self.class.state_type ; end
|
|
97
|
+
#
|
|
98
|
+
# Object.const_set "State", self
|
|
99
|
+
#
|
|
100
|
+
# @@sub_states = []
|
|
101
|
+
# class_inheritable_accessor :sub_states
|
|
102
|
+
#
|
|
103
|
+
#
|
|
104
|
+
# def self.inherited(base)
|
|
105
|
+
# ( self.sub_states ||= [] ) << base
|
|
106
|
+
#
|
|
107
|
+
# end
|
|
108
|
+
#
|
|
109
|
+
#
|
|
110
|
+
#
|
|
111
|
+
#
|
|
112
|
+
# def self.mod ; "#{self.to_s}Module".classify.constantize ; end
|
|
113
|
+
# def mod ; self.class.mod ; end
|
|
114
|
+
#
|
|
115
|
+
# def self.state_name
|
|
116
|
+
# self.to_s =~ /^(.+)State$/
|
|
117
|
+
# $1 ? $1.underscore.to_sym : self.to_s.to_sym
|
|
118
|
+
# end
|
|
119
|
+
#
|
|
120
|
+
# def state_name ; self.class.state_name ; end
|
|
121
|
+
#
|
|
122
|
+
# def to_s ; self.state_name ; end
|
|
123
|
+
#
|
|
124
|
+
#
|
|
125
|
+
# def self.events
|
|
126
|
+
# ( ( self.instance_methods(false) - self.generated_methods.to_a ).collect { |x|
|
|
127
|
+
# x =~ /!$/ ? x : nil }.compact.collect(&:to_sym) )
|
|
128
|
+
# end
|
|
129
|
+
#
|
|
130
|
+
#
|
|
131
|
+
# def events ; self.events ; end
|
|
132
|
+
#
|
|
133
|
+
#
|
|
134
|
+
# def self.instance_for_event( sym )
|
|
135
|
+
# "#{sym}State".classify.constantize.create
|
|
136
|
+
# end
|
|
137
|
+
#
|
|
138
|
+
#
|
|
139
|
+
#
|
|
140
|
+
#
|
|
141
|
+
#
|
|
142
|
+
#
|
|
143
|
+
#
|
|
144
|
+
#
|
|
145
|
+
#
|
|
146
|
+
# def self.state(name, &block)
|
|
147
|
+
# klass_name = "#{name}State".classify
|
|
148
|
+
# begin
|
|
149
|
+
# klass = klass_name.constantize
|
|
150
|
+
# raise NameError if klass.superclass != self
|
|
151
|
+
# puts "#{klass} is defined!!"
|
|
152
|
+
# rescue NameError
|
|
153
|
+
# klass = Class.new( self )
|
|
154
|
+
# Object.const_set klass_name, klass
|
|
155
|
+
# end
|
|
156
|
+
# klass.class_eval(&block) if block_given?
|
|
157
|
+
# end
|
|
158
|
+
#
|
|
159
|
+
#
|
|
160
|
+
# def self.event(name, *args, &block)
|
|
161
|
+
# self.class_eval { define_method(name) { block.call } if block_given? }
|
|
162
|
+
# Opensteam::StateMachine.inject_state_queries( self )
|
|
163
|
+
# Opensteam::StateMachine.inject_event_methods( self )
|
|
164
|
+
# end
|
|
165
|
+
#
|
|
166
|
+
#
|
|
167
|
+
# def self.transition_observer(*args, &block)
|
|
168
|
+
# if args.first.is_a?( Hash )
|
|
169
|
+
# from, to = args.first.keys.first, args.first.values.first
|
|
170
|
+
# else
|
|
171
|
+
# from, to = self.state_name, args.first
|
|
172
|
+
# end##
|
|
173
|
+
#
|
|
174
|
+
# if block_given?
|
|
175
|
+
# # Opensteam::StateMachine.transitions[from] ||= {}
|
|
176
|
+
# # ( Opensteam::StateMachine.transitions[from][to] ||= [] ) << block
|
|
177
|
+
# end
|
|
178
|
+
#
|
|
179
|
+
# end
|
|
180
|
+
#
|
|
181
|
+
# end
|
|
182
|
+
#
|
|
183
|
+
#
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
#if defined? RAILS_ROOT
|
|
194
|
+
#
|
|
195
|
+
# Dir.glob("#{RAILS_ROOT}/app/states/**/*.rb").collect { |f|
|
|
196
|
+
# puts f
|
|
197
|
+
# require f
|
|
198
|
+
# klass_name = "#{File.basename(f,'.rb')}State".classify
|
|
199
|
+
# begin
|
|
200
|
+
# klass = klass_name.constantize
|
|
201
|
+
# rescue NameError
|
|
202
|
+
# klass = Class.new( Opensteam::StateLogic::Base )
|
|
203
|
+
# Object.const_set klass_name, klass
|
|
204
|
+
# end
|
|
205
|
+
# }
|
|
206
|
+
#
|
|
207
|
+
#end
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
## if rails is runniny
|
|
211
|
+
#if defined? RAILS_ROOT
|
|
212
|
+
# ## init all states and create event methods for the Order-Instance
|
|
213
|
+
# Dir.glob("#{RAILS_ROOT}/app/models/*_states.rb").collect { |f|
|
|
214
|
+
# require Opensteam::State::Machine.create_event_methods_for_order( File.basename(f, ".rb").classify.constantize )
|
|
215
|
+
# }
|
|
216
|
+
#end
|
|
217
|
+
|
|
218
|
+
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
# openSteam - http://www.opensteam.net
|
|
2
|
+
# Copyright (C) 2008 DiamondDogs Webconsulting
|
|
3
|
+
#
|
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation; version 2 of the License.
|
|
7
|
+
#
|
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
+
# GNU General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
|
+
|
|
17
|
+
module Opensteam
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# StateMachine Module
|
|
21
|
+
#
|
|
22
|
+
#
|
|
23
|
+
module StateMachine
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class EventNotDefined < Opensteam::Config::Errors::OpensteamError
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# raised when the event is not defined for current state
|
|
30
|
+
class EventNotDefinedForCurrentState < Opensteam::Config::Errors::OpensteamError
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class EventExecutionError < Opensteam::Config::Errors::OpensteamError
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
module ClassMethods
|
|
37
|
+
|
|
38
|
+
def get_observer ; @@observer ||= [] ; end
|
|
39
|
+
|
|
40
|
+
def initial_state( state )
|
|
41
|
+
after_create { |record| record.state = state }
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# observe state-changes -> calls given block after change_state
|
|
45
|
+
def observe( &block )
|
|
46
|
+
observers << Opensteam::StateMachine::Observer.new( self, &block )
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# notify association on state-change
|
|
50
|
+
# calls the observers of the association
|
|
51
|
+
def notify(assoc)
|
|
52
|
+
observers << Opensteam::StateMachine::Observer.new( self ) do |record|
|
|
53
|
+
record.send( assoc ).class.observers.each { |o| o.exc( record.send( assoc ) ) }
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def self.included(base)
|
|
62
|
+
base.extend(ClassMethods)
|
|
63
|
+
base.class_eval do
|
|
64
|
+
include InstanceMethods
|
|
65
|
+
|
|
66
|
+
# include the history module
|
|
67
|
+
include Opensteam::History
|
|
68
|
+
|
|
69
|
+
@observers = []
|
|
70
|
+
class << self ; attr_accessor :observers ; end
|
|
71
|
+
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class Observer
|
|
78
|
+
attr_accessor :receiver, :code
|
|
79
|
+
|
|
80
|
+
def initialize( receiver, &block )
|
|
81
|
+
@receiver = receiver
|
|
82
|
+
@code = block
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def exc( instance )
|
|
86
|
+
@code.call( instance )
|
|
87
|
+
# @code.bind( instance ).call
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
module ClassMethods
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
module InstanceMethods
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
# returns an array of event-methods for the current state
|
|
102
|
+
# -> the instance_methods of the current +state_module+
|
|
103
|
+
def events ; (s = self.state_module ) ? s.instance_methods : [] ; end
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
# returns the corresponding module for the current state
|
|
107
|
+
#
|
|
108
|
+
# ex:
|
|
109
|
+
# o = Order.create
|
|
110
|
+
# o.state = :pending
|
|
111
|
+
# o.state_module # => OrderStates::Pending
|
|
112
|
+
#
|
|
113
|
+
def state_module
|
|
114
|
+
return nil unless state
|
|
115
|
+
"#{self.class.to_s.demodulize}States::#{self.state.to_s.classify}".constantize rescue nil
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
# overrides state-attribute setter
|
|
120
|
+
# calls +change_state+
|
|
121
|
+
def state=(new_state)
|
|
122
|
+
change_state(new_state)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
# fire an event for current state
|
|
129
|
+
#
|
|
130
|
+
# if self.state is nil, returns false
|
|
131
|
+
# if +event+ is not defined for current state (not an instance method of +state_module+), an error is raised
|
|
132
|
+
# if an error occured during the event, an error-entry is saved into the history
|
|
133
|
+
# calls +change_state+ (return value of the event is used as next-state, if return value is a Symbol or a Module)
|
|
134
|
+
#
|
|
135
|
+
def fire_event(event, *args, &block )
|
|
136
|
+
|
|
137
|
+
return false unless self.state
|
|
138
|
+
|
|
139
|
+
add_history( "trying to fire event '#{event}' for state '#{self.state}'" )
|
|
140
|
+
|
|
141
|
+
return false unless event_scope = self.state_module
|
|
142
|
+
|
|
143
|
+
unless events.include?( event.to_s )
|
|
144
|
+
add_history( msg = "Error: event '#{event}' not defined for state '#{self.state}'")
|
|
145
|
+
raise EventNotDefined, msg
|
|
146
|
+
return false
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
begin
|
|
150
|
+
event_return = event_scope.instance_method( event ).bind( self ).call( *args, &block )
|
|
151
|
+
add_history( "Successfully executed event '#{event}' for state '#{self.state}'" )
|
|
152
|
+
rescue
|
|
153
|
+
add_history("Error: An error occured during event '#{event}' in state '#{self.state}' : '#{$!}'")
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
unless event_return == false
|
|
157
|
+
self.state = event_return if( event_return.is_a?(Symbol) || event_return.is_a?(Module) )
|
|
158
|
+
return event_return
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
# changes state to +new_state+
|
|
165
|
+
#
|
|
166
|
+
# if current_state is equal +new_state+, return false
|
|
167
|
+
#
|
|
168
|
+
def change_state( new_state )
|
|
169
|
+
if new_state.is_a?( Module )
|
|
170
|
+
new_state = new_state.name
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
current_state = state
|
|
174
|
+
|
|
175
|
+
add_history "starting transition from state '#{current_state}' to state '#{new_state}'"
|
|
176
|
+
|
|
177
|
+
if current_state == new_state
|
|
178
|
+
add_history "transition failed: current_state '#{current_state}' and new_state '#{new_state}' are the same!"
|
|
179
|
+
return false
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
write_attribute(:state, new_state.to_s)
|
|
183
|
+
ret = save
|
|
184
|
+
|
|
185
|
+
if ret
|
|
186
|
+
add_history( "Successfull: transition from state '#{current_state}' to state '#{new_state.to_s}'" )
|
|
187
|
+
else
|
|
188
|
+
add_history("Failed: transition from state '#{current_state}' to state '#{new_state.to_s}'")
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
self.execute_observers
|
|
193
|
+
# self.class.observers.each do |o|
|
|
194
|
+
# o.exc( self )
|
|
195
|
+
# end
|
|
196
|
+
|
|
197
|
+
ret
|
|
198
|
+
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
def execute_observers
|
|
203
|
+
self.class.observers.each do |o|
|
|
204
|
+
o.exc( self )
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
end
|
|
216
|
+
|