# RightnowOms ## Description A common gem for managing your carts and orders. RightnowOms is a rails mountable engine. It gets a lot of benifits from [Ember.JS](http://emberjs.com) ## Requirements Add the following gems to your Gemfile: ```ruby gem 'jquery-rails' gem 'ember-rails' gem 'acts_as_api' gem 'haml-rails' gem 'confstruct' gem 'ransack' group :assets do gem 'uglifier' gem 'coffee-rails' gem 'sass-rails' end ``` ## Installation Make sure that all requirements are met and add RightnowOms to your Gemfile. ```ruby gem 'rightnow_oms' ``` and run `bundle install` ## Setup Mount `rightnow_oms` to your application. ```ruby # config/routes.rb mount RightnowOms::Engine => "rightnow_oms", as: :rightnow_oms ``` Install the migrations of `rightnow_oms`: ```bash rake rightnow_oms:install:migrations rake db:migrate ``` `rightnow_oms` is built based on ember, ember-data and ember-i18n, so you need to install these libs first. Or you can use the files in `rightnow_oms`. So you need to add the following lines to your `app/assets/javascripts/application.js`: ``` = require rightnow_oms/vendor/ember = require rightnow_oms/vendor/ember-data = require rightnow_oms/vendor/ember-i18n ``` After ember libs installed, you need to add `rightnow_oms/application` to your `app/assets/javascripts/application.js`: ``` = require rightnow_oms/application ``` To enable the default theme of `rightnow_oms`, you need to link the default stylesheet into your `app/assets/stylesheets/application.css`: ``` = require rightnow_oms/application ``` The configurations of `rightnow_oms` ember application are saved in key-value pairs. To override the default configurations, you only need to call `RightnowOms.configure` and reset the values of the configurations. ```javascript RightnowOms.configure(function(config) { // Disable autoCommit config.set('autoCommit', false); // Set the default locale to zh_CN config.set('defaultLocale', 'zh_CN'); }); ``` ## Usage ### Add a Float Cart to Your Pages First, you need to load/create a cart for your pages. By adding a before filter `load_or_create_cart` to your controllers, you can get the cart. ```ruby # This before filter will create an instance variable @cart before_filter :load_or_create_cart ``` Secondly, you need to add a place holder for your cart in your views: ```html
``` And then you can load the cart: ```javascript $(function() { RightnowOms.cartController.load(#{@cart.as_api_response(:default).to_json.html_safe}); }); ``` ### Add Cartable Things to Your Cart `rightnow_oms` can only accept cartable model, so the things you added to the cart must be a cartable model. To define a cartable model, you just need to call the extended method `acts_as_cartable` in the model class. ``` ruby class Product < ActiveRecord::Base acts_as_cartable end ``` By default, Cart loads the name and price of cartable models by attributes named name and price. But you can define your own name and price attributes as follows: ```ruby class Product < ActiveRecord::Base acts_as_cartable name: :your_name_attr, price: :your_price_attr end ``` Now you can add cartables to the cart. ```javascript RightnowOms.cartController.addCartItem({ cartable_id: 1, // required cartable_type: 'Product', // required price: '10.00', // required name: 'Parent Product', // optional quantity: 1, // optional // optional, grouping cart items group: 'booking', // optional children: [{ cartable_id: 2, // required cartable_type: 'Product', // required price: '5.00', // required name: 'Child Product', // optional quantity: 1, // optional // optional, grouping cart items group: 'booking', }) }) ``` ### Manage Your Cart Create a layout for your detailed cart view like: ```haml # app/views/layouts/rightnow_oms/cart.html.haml !!! %html %head %title RightnowOms = stylesheet_link_tag "application" = javascript_include_tag "application" = csrf_meta_tags %body = yield ``` ### Create an Order with the Cart To create an order, you need to specify the url of the page which the customer will add more detailed information on it. After you click the submit button on the detailed cart page, you will be redirected to the url which you have set. ```ruby # config/initializers/rightnow_oms.rb RightnowOms.configure do new_order_url '/orders/new' end ``` ### Checkout WIP ## I18n `rightnow_oms` supports I18n now. By default it only includes two locales: en and zh_CN, but you can create your own locales easily. First, you need to define your translations, for example: ```javascript var zh_CN = { 'cart.cartable.counter': '购物车' 'cart.total': '总计' 'cart_item.name': '名称' 'cart_item.price': '价格' 'cart_item.quantity': '数量' 'cart_item.total': '小计' 'currency.unit': '¥' 'buttons.check_cart': '查看我的购物车' 'buttons.delete': '删除' 'buttons.clean_cart': '清空购物车' 'buttons.continue_to_shop': '继续购物' 'buttons.new_order': '提交订单' 'titles.cart': '我的购物车' 'alerts.saving_cart': '正在保存购物车,请稍后。。。' 'confirmations.delete_cart_item': '您确定要删除该商品吗?' 'confirmations.clean_up_cart': '您确定要清空您的购物车吗?' }; ``` And then add your translations to `rightnow_oms` and set it as the default locale: ```javascript RightnowOms.configure(function(config) { config.set('locales.zh_CN', zh_CN); config.set('defaultLocale', 'zh_CN'); }); ``` It's welcome to create a pull request for your locale. ## Development RightnowOms is developed with Ruby 1.9.3-p0 and Rails 3.1.3 First of all, you need to create a database config for RightnowOms. There are already some useful templates for you under `spec/dummy/config/`. RightnowOms use MySQL by default. If you want to setup to use other databases, for example PostgreSQL, you need to modify the Gemfile and add the adapters by yourself. ```bash bundle install bundle exec rake app:db:migrate bundle exec rake app:db:seed # Run the tests. Please make sure you have firefox installed bundle exec rake app:db:test:prepare rspec # Start the dummy application rails s ``` For the javascript unit tests, you need to start the dummy application first, and then open your browser and visit [http://localhost:3000/test/qunit](http://localhost:3000/test/qunit) ## Copyright Copyright 2011-2012 Beijing Menglifang Network Technology and Science Co.,Ltd. All rights reserved.