multi_currencies 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +0 -0
- data/README.md +13 -0
- data/app/controllers/admin/currencies_controller.rb +6 -0
- data/app/controllers/admin/currency_converters_controller.rb +10 -0
- data/app/helpers/admin/currencies_helper.rb +2 -0
- data/app/helpers/admin/currency_converters_helper.rb +2 -0
- data/app/models/currency.rb +43 -0
- data/app/models/currency_converter.rb +9 -0
- data/app/views/admin/currencies/_form.html.erb +40 -0
- data/app/views/admin/currencies/edit.html.erb +8 -0
- data/app/views/admin/currencies/index.html.erb +40 -0
- data/app/views/admin/currencies/new.html.erb +10 -0
- data/app/views/admin/currency_converters/_form.html.erb +35 -0
- data/app/views/admin/currency_converters/edit.html.erb +8 -0
- data/app/views/admin/currency_converters/index.html.erb +38 -0
- data/app/views/admin/currency_converters/new.html.erb +10 -0
- data/lib/multi_currencies.rb +74 -0
- data/lib/multi_currencies_hooks.rb +18 -0
- data/lib/tasks/install.rake +26 -0
- data/lib/tasks/multi_currencies.rake +20 -0
- metadata +120 -0
    
        data/LICENSE
    ADDED
    
    | 
            File without changes
         | 
    
        data/README.md
    ADDED
    
    
| @@ -0,0 +1,10 @@ | |
| 1 | 
            +
            class Admin::CurrencyConvertersController < Admin::BaseController
         | 
| 2 | 
            +
              resource_controller
         | 
| 3 | 
            +
              update.wants.html { redirect_to collection_url }
         | 
| 4 | 
            +
              create.wants.html { redirect_to collection_url }
         | 
| 5 | 
            +
              destroy.wants.html { redirect_to collection_url }
         | 
| 6 | 
            +
              private
         | 
| 7 | 
            +
              def collection
         | 
| 8 | 
            +
                @collection = CurrencyConverter.all.paginate :per_page => 15, :page     => params[:page]
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
            end
         | 
| @@ -0,0 +1,43 @@ | |
| 1 | 
            +
            class Currency < ActiveRecord::Base
         | 
| 2 | 
            +
              has_many :currency_converters
         | 
| 3 | 
            +
              class << self
         | 
| 4 | 
            +
                # Текущая валюта определенная по текущей локали
         | 
| 5 | 
            +
                def current(_locale=I18n.locale)
         | 
| 6 | 
            +
                  find_by_locale(_locale.to_s)
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                # Конвертируем сумму к валюте текущей локале
         | 
| 10 | 
            +
                # Если валюта или локаль не найдена то возвращается та же сумма
         | 
| 11 | 
            +
                #
         | 
| 12 | 
            +
                def conversion_to_current(price, options = { })
         | 
| 13 | 
            +
                  _locale = options[:locale] || I18n.locale
         | 
| 14 | 
            +
                  _date = options[:date] || Time.now
         | 
| 15 | 
            +
                  return price if current(_locale).nil? || current(_locale).basic?
         | 
| 16 | 
            +
                  current_currency = current(_locale).currency_converters.last(:conditions => ["date_req <= ?", _date])
         | 
| 17 | 
            +
                  return price if current_currency.blank?
         | 
| 18 | 
            +
                  (price / current_currency.value.to_f) * current_currency.nominal.to_i
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                # Конвертируем значение из валюты текущей локали к основной валюте
         | 
| 22 | 
            +
                # в параметрах можно указать локаль из которой можно делать конвертацияю :locale
         | 
| 23 | 
            +
                # и дату курса :date, курс берется последний найденный до указанной даты
         | 
| 24 | 
            +
                #
         | 
| 25 | 
            +
                def conversion_from_current(value, options={})
         | 
| 26 | 
            +
                  _locale = options[:locale] || I18n.locale
         | 
| 27 | 
            +
                  _date = options[:date] || Time.now
         | 
| 28 | 
            +
                  return value if current(_locale).nil? || current(_locale).basic?
         | 
| 29 | 
            +
                  current_currency = current(_locale).currency_converters.last(:conditions => ["date_req <= ?", _date])
         | 
| 30 | 
            +
                  return value if current_currency.blank?
         | 
| 31 | 
            +
                  return (value/current_currency.nominal.to_f)*current_currency.value
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                # Основная валюта
         | 
| 35 | 
            +
                def basic
         | 
| 36 | 
            +
                  first(:conditions => { :basic => true })
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                def get(num_code, options ={ })
         | 
| 40 | 
            +
                  find_by_num_code(num_code) || create(options)
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
            end
         | 
| @@ -0,0 +1,9 @@ | |
| 1 | 
            +
            class CurrencyConverter < ActiveRecord::Base
         | 
| 2 | 
            +
              belongs_to :currency
         | 
| 3 | 
            +
              default_scope :order =>  "currency_converters.date_req ASC"
         | 
| 4 | 
            +
              class << self
         | 
| 5 | 
            +
                def add(currency, date, value, nominal)
         | 
| 6 | 
            +
                  create({ :nominal => nominal, :value => value, :date_req => date, :currency => currency})
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
            end
         | 
| @@ -0,0 +1,40 @@ | |
| 1 | 
            +
            <table>
         | 
| 2 | 
            +
              <tr>
         | 
| 3 | 
            +
                <td><%= t("currency_name") %>: </td>
         | 
| 4 | 
            +
                <td>
         | 
| 5 | 
            +
                  <%= error_message_on :currency, :name %>
         | 
| 6 | 
            +
                  <%= f.text_field :name  %>
         | 
| 7 | 
            +
                </td>
         | 
| 8 | 
            +
              </tr>
         | 
| 9 | 
            +
              <tr>
         | 
| 10 | 
            +
                <td><%= t("currency_num_code") %>: </td>
         | 
| 11 | 
            +
                <td>
         | 
| 12 | 
            +
                  <%= error_message_on :currency, :num_code %>
         | 
| 13 | 
            +
                  <%= f.text_field :num_code  %>
         | 
| 14 | 
            +
                </td>
         | 
| 15 | 
            +
              </tr>
         | 
| 16 | 
            +
              <tr>
         | 
| 17 | 
            +
                <td><%= t("currency_char_code") %>: </td>
         | 
| 18 | 
            +
                <td>
         | 
| 19 | 
            +
                  <%= error_message_on :currency, :char_code %>
         | 
| 20 | 
            +
                  <%= f.text_field :char_code  %>
         | 
| 21 | 
            +
                </td>
         | 
| 22 | 
            +
              </tr>
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              <tr>
         | 
| 25 | 
            +
                <td><%= t("currency_basic") %>: </td>
         | 
| 26 | 
            +
                <td>
         | 
| 27 | 
            +
                  <%= error_message_on :currency, :basic %>
         | 
| 28 | 
            +
                  <%= f.check_box :basic  %>
         | 
| 29 | 
            +
                </td>
         | 
| 30 | 
            +
              </tr>
         | 
| 31 | 
            +
              <tr>
         | 
| 32 | 
            +
                <td><%= t("currency_locale") %>: </td>
         | 
| 33 | 
            +
                <td>
         | 
| 34 | 
            +
                  <%= error_message_on :currency, :locale %>
         | 
| 35 | 
            +
                  <%= f.select :locale, I18n.available_locales.map{|x| [x,x] }  %>
         | 
| 36 | 
            +
                </td>
         | 
| 37 | 
            +
              </tr>
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            </table>
         | 
| 40 | 
            +
             | 
| @@ -0,0 +1,8 @@ | |
| 1 | 
            +
            <h1><%= t("editing_currency") %></h1>
         | 
| 2 | 
            +
            <% form_for(:currency, :url => object_url, :html => { :method => :put }) do |f| %>
         | 
| 3 | 
            +
            <%= render :partial => "form", :locals => { :f => f } %>
         | 
| 4 | 
            +
            <p class="form-buttons">
         | 
| 5 | 
            +
              <%= button t("update") %>
         | 
| 6 | 
            +
              <%= link_to t('cancel'), collection_url %>
         | 
| 7 | 
            +
            </p>
         | 
| 8 | 
            +
            <% end -%>
         | 
| @@ -0,0 +1,40 @@ | |
| 1 | 
            +
            <div class='toolbar'>
         | 
| 2 | 
            +
              <ul class='actions'>
         | 
| 3 | 
            +
                <li>
         | 
| 4 | 
            +
                  <p><%= button_link_to t("add_currency"), new_object_url, :icon => 'add' %></p>
         | 
| 5 | 
            +
                </li>
         | 
| 6 | 
            +
              </ul>
         | 
| 7 | 
            +
              <br class='clear' />
         | 
| 8 | 
            +
            </div>
         | 
| 9 | 
            +
            <h1><%= t("list_currency") %></h1>
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            <table class="index">
         | 
| 12 | 
            +
              <thead>
         | 
| 13 | 
            +
            	<tr>
         | 
| 14 | 
            +
                <th><%= t("currency_name")%></th>
         | 
| 15 | 
            +
                <th><%= t("currency_code")%></th>
         | 
| 16 | 
            +
                <th><%= t("currency_locale")%></th>
         | 
| 17 | 
            +
                <th><%= t("currency_basic")%></th>
         | 
| 18 | 
            +
                <th><%= t("action") %></th>
         | 
| 19 | 
            +
            	</tr>
         | 
| 20 | 
            +
              </thead>
         | 
| 21 | 
            +
              <tbody>
         | 
| 22 | 
            +
                <% collection.each do |currency|%>
         | 
| 23 | 
            +
                <tr id="<%= dom_id currency %>">
         | 
| 24 | 
            +
                  <td width="350px"><%= currency.name %></td>
         | 
| 25 | 
            +
                  <td>
         | 
| 26 | 
            +
                    <%= currency.num_code %> - <%= currency.char_code %>
         | 
| 27 | 
            +
                  </td>
         | 
| 28 | 
            +
                  <td> <%= currency.locale %></td>
         | 
| 29 | 
            +
                  <td> <%= currency.basic %></td>
         | 
| 30 | 
            +
                  <td>
         | 
| 31 | 
            +
                  	<%= link_to_edit currency %>  
         | 
| 32 | 
            +
            	      <%= link_to_delete currency %>  
         | 
| 33 | 
            +
                  </td>
         | 
| 34 | 
            +
                </tr>
         | 
| 35 | 
            +
                <% end %>
         | 
| 36 | 
            +
              </tbody>
         | 
| 37 | 
            +
            </table>
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            <%#= will_paginate(:prev => "« #{t('previous')}", :next => "#{t('next')} »") %>
         | 
| 40 | 
            +
             | 
| @@ -0,0 +1,10 @@ | |
| 1 | 
            +
            <h1><%= t("new_currency") %></h1>
         | 
| 2 | 
            +
            <% form_for(:currency,  :url => collection_url) do |f| %>
         | 
| 3 | 
            +
            <%= render :partial => "form", :locals => { :f => f } %>
         | 
| 4 | 
            +
            <p class="form-buttons">
         | 
| 5 | 
            +
              <%= button t("create") %>
         | 
| 6 | 
            +
              <%= link_to t('cancel'), collection_url %>
         | 
| 7 | 
            +
            </p>
         | 
| 8 | 
            +
            <% end -%>
         | 
| 9 | 
            +
             | 
| 10 | 
            +
             | 
| @@ -0,0 +1,35 @@ | |
| 1 | 
            +
            <table>
         | 
| 2 | 
            +
              <tr>
         | 
| 3 | 
            +
                <td><%= t("currency_converter_currency") %>: </td>
         | 
| 4 | 
            +
                <td>
         | 
| 5 | 
            +
                  <%= error_message_on :currency_converter, :currency_id %>
         | 
| 6 | 
            +
                  <%= f.select :currency_id, Currency.all.map{|x| [x.name, x.id]}  %>
         | 
| 7 | 
            +
                </td>
         | 
| 8 | 
            +
              </tr>
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              <tr>
         | 
| 11 | 
            +
                <td><%= t("currency_converter_date_req") %>: </td>
         | 
| 12 | 
            +
                <td>
         | 
| 13 | 
            +
                  <%= error_message_on :currency_converter, :date_req %>
         | 
| 14 | 
            +
                  <%= f.datetime_select :date_req  %>
         | 
| 15 | 
            +
                </td>
         | 
| 16 | 
            +
              </tr>
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              <tr>
         | 
| 19 | 
            +
                <td><%= t("currency_converter_nominal") %>: </td>
         | 
| 20 | 
            +
                <td>
         | 
| 21 | 
            +
                  <%= error_message_on :currency_converter, :nominal %>
         | 
| 22 | 
            +
                  <%= f.text_field :nominal  %>
         | 
| 23 | 
            +
                </td>
         | 
| 24 | 
            +
              </tr>
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              <tr>
         | 
| 27 | 
            +
                <td><%= t("currency_converter_value") %>: </td>
         | 
| 28 | 
            +
                <td>
         | 
| 29 | 
            +
                  <%= error_message_on :currency_converter, :value %>
         | 
| 30 | 
            +
                  <%= f.text_field :value  %>
         | 
| 31 | 
            +
                </td>
         | 
| 32 | 
            +
              </tr>
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            </table>
         | 
| 35 | 
            +
             | 
| @@ -0,0 +1,8 @@ | |
| 1 | 
            +
            <h1><%= t("editing_currency_converter") %></h1>
         | 
| 2 | 
            +
            <% form_for(:currency_converter, :url => object_url, :html => { :method => :put }) do |f| %>
         | 
| 3 | 
            +
            <%= render :partial => "form", :locals => { :f => f } %>
         | 
| 4 | 
            +
            <p class="form-buttons">
         | 
| 5 | 
            +
              <%= button t("update") %>
         | 
| 6 | 
            +
              <%= link_to t('cancel'), collection_url %>
         | 
| 7 | 
            +
            </p>
         | 
| 8 | 
            +
            <% end -%>
         | 
| @@ -0,0 +1,38 @@ | |
| 1 | 
            +
            <div class='toolbar'>
         | 
| 2 | 
            +
              <ul class='actions'>
         | 
| 3 | 
            +
                <li>
         | 
| 4 | 
            +
                  <p><%= button_link_to t("add_currency_converter"), new_object_url, :icon => 'add' %></p>
         | 
| 5 | 
            +
                </li>
         | 
| 6 | 
            +
              </ul>
         | 
| 7 | 
            +
              <br class='clear' />
         | 
| 8 | 
            +
            </div>
         | 
| 9 | 
            +
            <h1><%= t("currency_converter") %></h1>
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            <table class="index">
         | 
| 12 | 
            +
              <thead>
         | 
| 13 | 
            +
            	<tr>
         | 
| 14 | 
            +
                <th><%= t("currency_converter_date_req") %></th>
         | 
| 15 | 
            +
                <th><%= t("currency_converter_currency") %></th>
         | 
| 16 | 
            +
                <th><%= t("currency_converter_nominal") %></th>
         | 
| 17 | 
            +
                <th><%= t("currency_converter_value") %></th>
         | 
| 18 | 
            +
                <th><%= t("action") %></th>
         | 
| 19 | 
            +
            	</tr>
         | 
| 20 | 
            +
              </thead>
         | 
| 21 | 
            +
              <tbody>
         | 
| 22 | 
            +
                <% collection.each do |currency_converter|%>
         | 
| 23 | 
            +
                <tr id="<%= dom_id currency_converter %>">
         | 
| 24 | 
            +
                  <td><%=  currency_converter.date_req %></td>
         | 
| 25 | 
            +
                  <td width="350px"><%= currency_converter.currency.try(:name) %></td>
         | 
| 26 | 
            +
                  <td><%=  currency_converter.nominal %></td>
         | 
| 27 | 
            +
                  <td><%=  currency_converter.value %></td>
         | 
| 28 | 
            +
                  <td>
         | 
| 29 | 
            +
                  	<%= link_to_edit currency_converter %>  
         | 
| 30 | 
            +
            	      <%= link_to_delete currency_converter %>  
         | 
| 31 | 
            +
                  </td>
         | 
| 32 | 
            +
                </tr>
         | 
| 33 | 
            +
                <% end %>
         | 
| 34 | 
            +
              </tbody>
         | 
| 35 | 
            +
            </table>
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            <%= will_paginate(:prev => "« #{t('previous')}", :next => "#{t('next')} »") %>
         | 
| 38 | 
            +
             | 
| @@ -0,0 +1,10 @@ | |
| 1 | 
            +
            <h1><%= t("new_currency_converter") %></h1>
         | 
| 2 | 
            +
            <% form_for(:currency_converter,  :url => collection_url) do |f| %>
         | 
| 3 | 
            +
            <%= render :partial => "form", :locals => { :f => f } %>
         | 
| 4 | 
            +
            <p class="form-buttons">
         | 
| 5 | 
            +
              <%= button t("create") %>
         | 
| 6 | 
            +
              <%= link_to t('cancel'), collection_url %>
         | 
| 7 | 
            +
            </p>
         | 
| 8 | 
            +
            <% end -%>
         | 
| 9 | 
            +
             | 
| 10 | 
            +
             | 
| @@ -0,0 +1,74 @@ | |
| 1 | 
            +
            require 'spree_core'
         | 
| 2 | 
            +
            require 'multi_currencies_hooks'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module MultiCurrencies
         | 
| 5 | 
            +
              class Engine < Rails::Engine
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                config.autoload_paths += %W(#{config.root}/lib)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                def self.activate
         | 
| 10 | 
            +
                  Dir.glob(File.join(File.dirname(__FILE__), "../app/**/*_decorator*.rb")) do |c|
         | 
| 11 | 
            +
                    Rails.env.production? ? require(c) : load(c)
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
                  Variant.class_eval do
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    def price
         | 
| 16 | 
            +
                      Currency.conversion_to_current(read_attribute(:price))
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    def price=(value)
         | 
| 20 | 
            +
                      conversion_value = Currency.conversion_from_current(value)
         | 
| 21 | 
            +
                      write_attribute(:price, conversion_value)
         | 
| 22 | 
            +
                    end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
             | 
| 27 | 
            +
             | 
| 28 | 
            +
                  Order.class_eval do
         | 
| 29 | 
            +
                    def total
         | 
| 30 | 
            +
                      Currency.conversion_to_current(read_attribute(:total))
         | 
| 31 | 
            +
                    end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                    def total=(value)
         | 
| 34 | 
            +
                      conversion_value = Currency.conversion_from_current(value)
         | 
| 35 | 
            +
                      write_attribute(:total, conversion_value)
         | 
| 36 | 
            +
                    end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                    def item_total
         | 
| 39 | 
            +
                      Currency.conversion_to_current(read_attribute(:item_total))
         | 
| 40 | 
            +
                    end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                    def item_total=(value)
         | 
| 43 | 
            +
                      conversion_value = Currency.conversion_from_current(value)
         | 
| 44 | 
            +
                      write_attribute(:item_total, conversion_value)
         | 
| 45 | 
            +
                    end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                    def credit_total
         | 
| 48 | 
            +
                      Currency.conversion_to_current(read_attribute(:credit_total))
         | 
| 49 | 
            +
                    end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                    def credit_total=(value)
         | 
| 52 | 
            +
                      conversion_value = Currency.conversion_from_current(value)
         | 
| 53 | 
            +
                      write_attribute(:credit_total, conversion_value)
         | 
| 54 | 
            +
                    end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
             | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                  LineItem.class_eval do
         | 
| 60 | 
            +
                    def price
         | 
| 61 | 
            +
                      Currency.conversion_to_current(read_attribute(:price))
         | 
| 62 | 
            +
                    end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                    def price=(value)
         | 
| 65 | 
            +
                      conversion_value = Currency.conversion_from_current(value)
         | 
| 66 | 
            +
                      write_attribute(:price, conversion_value)
         | 
| 67 | 
            +
                    end
         | 
| 68 | 
            +
                  end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                config.to_prepare &method(:activate).to_proc
         | 
| 73 | 
            +
              end
         | 
| 74 | 
            +
            end
         | 
| @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            class MultiCurrenciesHooks < Spree::ThemeSupport::HookListener
         | 
| 2 | 
            +
              # custom hooks go here
         | 
| 3 | 
            +
              insert_after :admin_configurations_menu do
         | 
| 4 | 
            +
                %(
         | 
| 5 | 
            +
                  <% if current_user.has_role?(:admin) %>
         | 
| 6 | 
            +
                   <tr>
         | 
| 7 | 
            +
                     <td><%= link_to t("currency_settings"), admin_currencies_path %></td>
         | 
| 8 | 
            +
                     <td><%= t("currency_description") %></td>
         | 
| 9 | 
            +
                   </tr>
         | 
| 10 | 
            +
                   <tr>
         | 
| 11 | 
            +
                     <td><%= link_to t("currency_converters_settings"), admin_currency_converters_path %></td>
         | 
| 12 | 
            +
                     <td><%= t("currency_converters_description") %></td>
         | 
| 13 | 
            +
                   </tr>
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  <% end %>
         | 
| 16 | 
            +
                 )
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
            end
         | 
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            namespace :multi_currencies do
         | 
| 2 | 
            +
              desc "Copies all migrations and assets (NOTE: This will be obsolete with Rails 3.1)"
         | 
| 3 | 
            +
              task :install do
         | 
| 4 | 
            +
                Rake::Task['multi_currencies:install:migrations'].invoke
         | 
| 5 | 
            +
                Rake::Task['multi_currencies:install:assets'].invoke
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              namespace :install do
         | 
| 9 | 
            +
                desc "Copies all migrations (NOTE: This will be obsolete with Rails 3.1)"
         | 
| 10 | 
            +
                task :migrations do
         | 
| 11 | 
            +
                  source = File.join(File.dirname(__FILE__), '..', '..', 'db')
         | 
| 12 | 
            +
                  destination = File.join(Rails.root, 'db')
         | 
| 13 | 
            +
                  puts "INFO: Mirroring assets from #{source} to #{destination}"
         | 
| 14 | 
            +
                  Spree::FileUtilz.mirror_files(source, destination)
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                desc "Copies all assets (NOTE: This will be obsolete with Rails 3.1)"
         | 
| 18 | 
            +
                task :assets do
         | 
| 19 | 
            +
                  source = File.join(File.dirname(__FILE__), '..', '..', 'public')
         | 
| 20 | 
            +
                  destination = File.join(Rails.root, 'public')
         | 
| 21 | 
            +
                  puts "INFO: Mirroring assets from #{source} to #{destination}"
         | 
| 22 | 
            +
                  Spree::FileUtilz.mirror_files(source, destination)
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            end
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            # add custom rake tasks here
         | 
| 2 | 
            +
            namespace :multi_currencies do
         | 
| 3 | 
            +
              desc "Получение валют Сбербанк РФ"
         | 
| 4 | 
            +
              task :currency_sb => :environment do
         | 
| 5 | 
            +
                require 'open-uri'
         | 
| 6 | 
            +
                doc = Nokogiri::XML.parse(open("http://www.cbr.ru/scripts/XML_daily.asp?date_req=#{Time.now.strftime('%d/%m/%Y')}"))
         | 
| 7 | 
            +
                date = Date.strptime(doc.xpath("//ValCurs").attr("Date").to_s, '%d/%m/%Y')
         | 
| 8 | 
            +
                doc.xpath("//ValCurs/Valute").each do |valute|
         | 
| 9 | 
            +
                  char_code  = valute.xpath("./CharCode").text.to_s
         | 
| 10 | 
            +
                  num_code   = valute.xpath("./NumCode").text.to_s
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  name       =  valute.xpath("./Name").text.to_s
         | 
| 13 | 
            +
                  value      = valute.xpath("./Value").text.gsub(',','.').to_f
         | 
| 14 | 
            +
                  nominal    = valute.xpath("./Nominal").text
         | 
| 15 | 
            +
                  currency = Currency.get(num_code, { :num_code => num_code, :char_code => char_code, :name => name})
         | 
| 16 | 
            +
                  currency && CurrencyConverter.add(currency, date, value, nominal)
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,120 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification 
         | 
| 2 | 
            +
            name: multi_currencies
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            +
              hash: 23
         | 
| 5 | 
            +
              prerelease: false
         | 
| 6 | 
            +
              segments: 
         | 
| 7 | 
            +
              - 1
         | 
| 8 | 
            +
              - 0
         | 
| 9 | 
            +
              - 0
         | 
| 10 | 
            +
              version: 1.0.0
         | 
| 11 | 
            +
            platform: ruby
         | 
| 12 | 
            +
            authors: []
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            autorequire: 
         | 
| 15 | 
            +
            bindir: bin
         | 
| 16 | 
            +
            cert_chain: []
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            date: 2010-11-14 00:00:00 +03:00
         | 
| 19 | 
            +
            default_executable: 
         | 
| 20 | 
            +
            dependencies: 
         | 
| 21 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 22 | 
            +
              name: spree_core
         | 
| 23 | 
            +
              prerelease: false
         | 
| 24 | 
            +
              requirement: &id001 !ruby/object:Gem::Requirement 
         | 
| 25 | 
            +
                none: false
         | 
| 26 | 
            +
                requirements: 
         | 
| 27 | 
            +
                - - ">="
         | 
| 28 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 29 | 
            +
                    hash: 103
         | 
| 30 | 
            +
                    segments: 
         | 
| 31 | 
            +
                    - 0
         | 
| 32 | 
            +
                    - 30
         | 
| 33 | 
            +
                    - 0
         | 
| 34 | 
            +
                    version: 0.30.0
         | 
| 35 | 
            +
              type: :runtime
         | 
| 36 | 
            +
              version_requirements: *id001
         | 
| 37 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 38 | 
            +
              name: nokogiri
         | 
| 39 | 
            +
              prerelease: false
         | 
| 40 | 
            +
              requirement: &id002 !ruby/object:Gem::Requirement 
         | 
| 41 | 
            +
                none: false
         | 
| 42 | 
            +
                requirements: 
         | 
| 43 | 
            +
                - - ">="
         | 
| 44 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 45 | 
            +
                    hash: 113
         | 
| 46 | 
            +
                    segments: 
         | 
| 47 | 
            +
                    - 1
         | 
| 48 | 
            +
                    - 4
         | 
| 49 | 
            +
                    - 3
         | 
| 50 | 
            +
                    - 1
         | 
| 51 | 
            +
                    version: 1.4.3.1
         | 
| 52 | 
            +
              type: :runtime
         | 
| 53 | 
            +
              version_requirements: *id002
         | 
| 54 | 
            +
            description: 
         | 
| 55 | 
            +
            email: 
         | 
| 56 | 
            +
            executables: []
         | 
| 57 | 
            +
             | 
| 58 | 
            +
            extensions: []
         | 
| 59 | 
            +
             | 
| 60 | 
            +
            extra_rdoc_files: []
         | 
| 61 | 
            +
             | 
| 62 | 
            +
            files: 
         | 
| 63 | 
            +
            - README.md
         | 
| 64 | 
            +
            - LICENSE
         | 
| 65 | 
            +
            - lib/multi_currencies_hooks.rb
         | 
| 66 | 
            +
            - lib/multi_currencies.rb
         | 
| 67 | 
            +
            - lib/tasks/multi_currencies.rake
         | 
| 68 | 
            +
            - lib/tasks/install.rake
         | 
| 69 | 
            +
            - app/helpers/admin/currencies_helper.rb
         | 
| 70 | 
            +
            - app/helpers/admin/currency_converters_helper.rb
         | 
| 71 | 
            +
            - app/models/currency.rb
         | 
| 72 | 
            +
            - app/models/currency_converter.rb
         | 
| 73 | 
            +
            - app/views/admin/currencies/edit.html.erb
         | 
| 74 | 
            +
            - app/views/admin/currencies/index.html.erb
         | 
| 75 | 
            +
            - app/views/admin/currencies/_form.html.erb
         | 
| 76 | 
            +
            - app/views/admin/currencies/new.html.erb
         | 
| 77 | 
            +
            - app/views/admin/currency_converters/edit.html.erb
         | 
| 78 | 
            +
            - app/views/admin/currency_converters/index.html.erb
         | 
| 79 | 
            +
            - app/views/admin/currency_converters/_form.html.erb
         | 
| 80 | 
            +
            - app/views/admin/currency_converters/new.html.erb
         | 
| 81 | 
            +
            - app/controllers/admin/currency_converters_controller.rb
         | 
| 82 | 
            +
            - app/controllers/admin/currencies_controller.rb
         | 
| 83 | 
            +
            has_rdoc: true
         | 
| 84 | 
            +
            homepage: 
         | 
| 85 | 
            +
            licenses: []
         | 
| 86 | 
            +
             | 
| 87 | 
            +
            post_install_message: 
         | 
| 88 | 
            +
            rdoc_options: []
         | 
| 89 | 
            +
             | 
| 90 | 
            +
            require_paths: 
         | 
| 91 | 
            +
            - lib
         | 
| 92 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement 
         | 
| 93 | 
            +
              none: false
         | 
| 94 | 
            +
              requirements: 
         | 
| 95 | 
            +
              - - ">="
         | 
| 96 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 97 | 
            +
                  hash: 57
         | 
| 98 | 
            +
                  segments: 
         | 
| 99 | 
            +
                  - 1
         | 
| 100 | 
            +
                  - 8
         | 
| 101 | 
            +
                  - 7
         | 
| 102 | 
            +
                  version: 1.8.7
         | 
| 103 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement 
         | 
| 104 | 
            +
              none: false
         | 
| 105 | 
            +
              requirements: 
         | 
| 106 | 
            +
              - - ">="
         | 
| 107 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 108 | 
            +
                  hash: 3
         | 
| 109 | 
            +
                  segments: 
         | 
| 110 | 
            +
                  - 0
         | 
| 111 | 
            +
                  version: "0"
         | 
| 112 | 
            +
            requirements: 
         | 
| 113 | 
            +
            - none
         | 
| 114 | 
            +
            rubyforge_project: 
         | 
| 115 | 
            +
            rubygems_version: 1.3.7
         | 
| 116 | 
            +
            signing_key: 
         | 
| 117 | 
            +
            specification_version: 3
         | 
| 118 | 
            +
            summary: Add gem summary here
         | 
| 119 | 
            +
            test_files: []
         | 
| 120 | 
            +
             |