counterfeit 0.0.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/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.md +64 -0
- data/Rakefile +19 -0
- data/counterfeit.gemspec +27 -0
- data/counterfeit.sqlite3 +0 -0
- data/lib/counterfeit.rb +11 -0
- data/lib/counterfeit/active_record.rb +31 -0
- data/lib/counterfeit/money.rb +28 -0
- data/lib/counterfeit/schema.rb +8 -0
- data/lib/counterfeit/version.rb +3 -0
- data/spec/counterfeit_spec.rb +55 -0
- data/spec/debug.log +63 -0
- data/spec/models.rb +8 -0
- data/spec/schema.rb +9 -0
- data/spec/spec_helper.rb +42 -0
- metadata +128 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
Counterfeit
|
2
|
+
===========
|
3
|
+
|
4
|
+
This gem helps you count somebody's money in your Rails application.
|
5
|
+
It is basically a nice rails-wrapper for Money gem.
|
6
|
+
|
7
|
+
Installation
|
8
|
+
------------
|
9
|
+
Gemfile:
|
10
|
+
|
11
|
+
gem 'counterfeit'
|
12
|
+
|
13
|
+
Console:
|
14
|
+
|
15
|
+
bundle install
|
16
|
+
|
17
|
+
Usage
|
18
|
+
-----
|
19
|
+
|
20
|
+
In your migrations:
|
21
|
+
|
22
|
+
create_table(:products) do |t|
|
23
|
+
t.integer :price_in_cents, :default => 0, :null => false
|
24
|
+
t.string :price_currency, :limit => 3, :null => false
|
25
|
+
end
|
26
|
+
|
27
|
+
or
|
28
|
+
|
29
|
+
create_table(:products) do |t|
|
30
|
+
t.money :price
|
31
|
+
end
|
32
|
+
|
33
|
+
In your models:
|
34
|
+
|
35
|
+
class Product < ActiveRecord::Base
|
36
|
+
has_counterfeit :price
|
37
|
+
end
|
38
|
+
|
39
|
+
You can specify default currency like this:
|
40
|
+
|
41
|
+
has_counterfeit :price, :currency => 'EUR'
|
42
|
+
|
43
|
+
Now lets play a little:
|
44
|
+
|
45
|
+
product = Product.new
|
46
|
+
product.price
|
47
|
+
# => #<Money cents:0 currency:USD>
|
48
|
+
product.price = 500
|
49
|
+
product.price
|
50
|
+
# => #<Money cents:50000 currency:USD>
|
51
|
+
product.price.exchange_to('EUR')
|
52
|
+
# => #<Money cents:35491 currency:EUR>
|
53
|
+
user = User.new
|
54
|
+
user.balance = Money.new(100000, 'RUB')
|
55
|
+
user.balance > product.price
|
56
|
+
# => false
|
57
|
+
# need moar moneez
|
58
|
+
|
59
|
+
You can get more info on the ```money``` gem page here: https://github.com/RubyMoney/money
|
60
|
+
|
61
|
+
|
62
|
+
License
|
63
|
+
-------
|
64
|
+
Counterfeit is released under the MIT license.
|
data/Rakefile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'rubygems'
|
3
|
+
begin
|
4
|
+
require 'bundler/setup'
|
5
|
+
rescue LoadError
|
6
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
7
|
+
end
|
8
|
+
|
9
|
+
require 'rake'
|
10
|
+
require 'rake/testtask'
|
11
|
+
|
12
|
+
Rake::TestTask.new(:test) do |t|
|
13
|
+
t.libs << 'lib'
|
14
|
+
t.libs << 'test'
|
15
|
+
t.pattern = 'test/**/*_test.rb'
|
16
|
+
t.verbose = false
|
17
|
+
end
|
18
|
+
|
19
|
+
task :default => :test
|
data/counterfeit.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
3
|
+
require 'counterfeit/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'counterfeit'
|
7
|
+
s.version = Counterfeit::VERSION
|
8
|
+
s.authors = ['Pavel Pravosud']
|
9
|
+
s.email = ['rwz@duckroll.ru']
|
10
|
+
s.homepage = 'https://github.com/rwz/counterfeit'
|
11
|
+
s.summary = %q{Easy Money gem integration for rails 3.}
|
12
|
+
s.description = %q{Easy Money gem integration for rails 3.}
|
13
|
+
|
14
|
+
s.rubyforge_project = 'counterfeit'
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ['lib']
|
20
|
+
|
21
|
+
s.add_dependency 'rails', '~> 3.0'
|
22
|
+
s.add_dependency 'money', '~> 3.7.1'
|
23
|
+
s.add_dependency 'google_currency', '~> 1.2.0'
|
24
|
+
|
25
|
+
s.add_development_dependency 'sqlite3', '~> 1.3.3'
|
26
|
+
s.add_development_dependency 'rspec', '~> 2.6.0'
|
27
|
+
end
|
data/counterfeit.sqlite3
ADDED
Binary file
|
data/lib/counterfeit.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'money'
|
2
|
+
require 'money/bank/google_currency'
|
3
|
+
require 'counterfeit/version'
|
4
|
+
require 'counterfeit/schema'
|
5
|
+
require 'counterfeit/active_record'
|
6
|
+
require 'counterfeit/money'
|
7
|
+
|
8
|
+
|
9
|
+
ActiveRecord::Base.send :include, Counterfeit::ActiveRecord
|
10
|
+
ActiveRecord::ConnectionAdapters::Table.send :include, Counterfeit::Schema
|
11
|
+
ActiveRecord::ConnectionAdapters::TableDefinition.send :include, Counterfeit::Schema
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Counterfeit
|
2
|
+
module ActiveRecord
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
module ClassMethods
|
6
|
+
|
7
|
+
def has_counterfeit(attr, options={})
|
8
|
+
options = options.with_indifferent_access
|
9
|
+
|
10
|
+
default_currency = options.delete(:currency).try(:to_s).try(:upcase)
|
11
|
+
amount_attr = options.delete(:amount_attribute) || "#{attr}_in_cents"
|
12
|
+
currency_attr = options.delete(:currency_attribute) || "#{attr}_currency"
|
13
|
+
|
14
|
+
mapping = [[ amount_attr, 'cents' ], [ currency_attr, 'currency_as_string' ]]
|
15
|
+
|
16
|
+
after_initialize do
|
17
|
+
self[currency_attr] = default_currency || Money.default_currency.iso_code
|
18
|
+
end
|
19
|
+
|
20
|
+
composed_of attr.to_sym,
|
21
|
+
:class_name => 'Money',
|
22
|
+
:mapping => mapping,
|
23
|
+
:constructor => Proc.new { |cents, currency| Money.new(cents || 0, currency || Money.default_currency) },
|
24
|
+
:converter => Proc.new { |value| value.respond_to?(:to_money) ? value.to_money : raise(ArgumentError, "Can't convert #{value.class} to Money") }
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
alias :has_money :has_counterfeit
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# monkeypatching Money class to catch Money::Bank::UnknownRate error
|
2
|
+
|
3
|
+
class Money
|
4
|
+
mattr_accessor :google_saved_the_day
|
5
|
+
|
6
|
+
self.google_saved_the_day = false
|
7
|
+
|
8
|
+
def self.google_to_the_rescue
|
9
|
+
!google_saved_the_day && self.google_saved_the_day = true
|
10
|
+
end
|
11
|
+
|
12
|
+
def exchange_to_with_google(*args)
|
13
|
+
exchange_to_without_google(*args)
|
14
|
+
rescue Money::Bank::UnknownRate => e
|
15
|
+
|
16
|
+
if @bank == Money::Bank::VariableExchange.instance &&
|
17
|
+
self.class.google_to_the_rescue
|
18
|
+
|
19
|
+
Money.default_bank = @bank = Money::Bank::GoogleCurrency.new
|
20
|
+
retry
|
21
|
+
else
|
22
|
+
raise e
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
alias_method :exchange_to_without_google, :exchange_to
|
27
|
+
alias_method :exchange_to, :exchange_to_with_google
|
28
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Item do
|
4
|
+
it 'responds to price method' do
|
5
|
+
Item.new.should respond_to(:price)
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'responds to counterfeit method with Money object' do
|
9
|
+
Item.new.price.should be_kind_of(Money)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'sets default currency' do
|
13
|
+
Money.default_currency = Money::Currency.new('RUB')
|
14
|
+
Item.new.price_currency.should == 'RUB'
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'sets specified currency by default' do
|
18
|
+
Item.new.balance_currency.should == 'THB'
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should handle custom attribute names' do
|
22
|
+
item = Item.new(:money => 500)
|
23
|
+
item.custom_money_amount.should == 500_00
|
24
|
+
item.custom_money_currency.should == 'EUR'
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should work witn has_money alias' do
|
28
|
+
Item.new.should respond_to(:another_money_attr)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'google saved the day' do
|
32
|
+
Money.google_to_the_rescue.should be_true
|
33
|
+
Money.google_to_the_rescue.should be_false
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should automatically turn on google exchange on fail' do
|
37
|
+
Money.google_saved_the_day = false
|
38
|
+
Money.default_bank = Money::Bank::VariableExchange.instance
|
39
|
+
money = Money.new(50000, 'USD')
|
40
|
+
lambda do
|
41
|
+
money.exchange_to('EUR')
|
42
|
+
end.should_not raise_error
|
43
|
+
|
44
|
+
Money.default_bank.should be_kind_of(Money::Bank::GoogleCurrency)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should use the google hack only once' do
|
48
|
+
Money.default_bank = Money::Bank::VariableExchange.instance
|
49
|
+
money = Money.new(50000, 'USD')
|
50
|
+
money.bank.should be_kind_of(Money::Bank::VariableExchange)
|
51
|
+
lambda do
|
52
|
+
money.exchange_to('EUR')
|
53
|
+
end.should raise_error(Money::Bank::UnknownRate)
|
54
|
+
end
|
55
|
+
end
|
data/spec/debug.log
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
# Logfile created on 2011-06-16 20:34:50 +0700 by logger.rb/25413
|
2
|
+
[1m[36mSQL (0.2ms)[0m [1m SELECT name
|
3
|
+
FROM sqlite_master
|
4
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
5
|
+
[0m
|
6
|
+
[1m[35mAREL (0.3ms)[0m INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'RUB', 0, 'RUB')
|
7
|
+
[1m[36mAREL (0.2ms)[0m [1mINSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'RUB', 0, 'RUB')[0m
|
8
|
+
[1m[36mSQL (0.2ms)[0m [1m SELECT name
|
9
|
+
FROM sqlite_master
|
10
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
11
|
+
[0m
|
12
|
+
[1m[35mAREL (0.4ms)[0m INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'RUB', 0, 'RUB')
|
13
|
+
[1m[36mAREL (0.4ms)[0m [1mINSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'RUB', 0, 'RUB')[0m
|
14
|
+
[1m[36mSQL (0.1ms)[0m [1m SELECT name
|
15
|
+
FROM sqlite_master
|
16
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
17
|
+
[0m
|
18
|
+
[1m[35mAREL (0.3ms)[0m INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'THB', 0, 'RUB')
|
19
|
+
[1m[36mAREL (0.2ms)[0m [1mINSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'THB', 0, 'RUB')[0m
|
20
|
+
[1m[36mSQL (0.2ms)[0m [1m SELECT name
|
21
|
+
FROM sqlite_master
|
22
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
23
|
+
[0m
|
24
|
+
[1m[35mAREL (0.3ms)[0m INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'THB', 0, 'RUB')
|
25
|
+
[1m[36mAREL (0.3ms)[0m [1mINSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'THB', 0, 'RUB')[0m
|
26
|
+
[1m[36mSQL (0.2ms)[0m [1m SELECT name
|
27
|
+
FROM sqlite_master
|
28
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
29
|
+
[0m
|
30
|
+
[1m[35mAREL (0.3ms)[0m INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'THB', 0, 'RUB')
|
31
|
+
[1m[36mAREL (0.3ms)[0m [1mINSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "money_in_cents", "money_currency") VALUES (0, 'RUB', 0, 'THB', 0, 'RUB')[0m
|
32
|
+
[1m[36mSQL (0.2ms)[0m [1m SELECT name
|
33
|
+
FROM sqlite_master
|
34
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
35
|
+
[0m
|
36
|
+
[1m[35mAREL (0.3ms)[0m INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', NULL, NULL)
|
37
|
+
[1m[36mAREL (0.3ms)[0m [1mINSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', NULL, NULL)[0m
|
38
|
+
[1m[36mSQL (0.1ms)[0m [1m SELECT name
|
39
|
+
FROM sqlite_master
|
40
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
41
|
+
[0m
|
42
|
+
[1m[35mAREL (0.3ms)[0m INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', NULL, NULL)
|
43
|
+
[1m[36mAREL (0.3ms)[0m [1mINSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', NULL, NULL)[0m
|
44
|
+
[1m[35mAREL (0.3ms)[0m INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', 50000, 'RUB')
|
45
|
+
[1m[36mSQL (0.1ms)[0m [1m SELECT name
|
46
|
+
FROM sqlite_master
|
47
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
48
|
+
[0m
|
49
|
+
[1m[35mAREL (0.3ms)[0m INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', NULL, NULL)
|
50
|
+
[1m[36mAREL (0.2ms)[0m [1mINSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', NULL, NULL)[0m
|
51
|
+
[1m[35mAREL (0.3ms)[0m INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', 50000, 'RUB')
|
52
|
+
[1m[36mSQL (0.1ms)[0m [1m SELECT name
|
53
|
+
FROM sqlite_master
|
54
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
55
|
+
[0m
|
56
|
+
[1m[35mAREL (0.3ms)[0m INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', NULL, NULL)
|
57
|
+
[1m[36mAREL (0.2ms)[0m [1mINSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', NULL, NULL)[0m
|
58
|
+
[1m[35mAREL (0.3ms)[0m INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', 50000, 'RUB')
|
59
|
+
[1m[36mSQL (0.1ms)[0m [1m SELECT name
|
60
|
+
FROM sqlite_master
|
61
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
62
|
+
[0m
|
63
|
+
[1m[35mAREL (0.3ms)[0m INSERT INTO "items" ("price_in_cents", "price_currency", "balance_in_cents", "balance_currency", "custom_money_amount", "custom_money_currency") VALUES (0, 'RUB', 0, 'THB', 50000, 'RUB')
|
data/spec/models.rb
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
class Item < ActiveRecord::Base
|
2
|
+
has_counterfeit :price
|
3
|
+
has_counterfeit :balance, :currency => :thb
|
4
|
+
has_money :another_money_attr
|
5
|
+
has_counterfeit :money, :currency => 'EUR',
|
6
|
+
:currency_attribute => :custom_money_currency,
|
7
|
+
:amount_attribute => :custom_money_amount
|
8
|
+
end
|
data/spec/schema.rb
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
$LOAD_PATH << '.' unless $LOAD_PATH.include?('.')
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'rubygems'
|
5
|
+
require 'bundler'
|
6
|
+
|
7
|
+
if Gem::Version.new(Bundler::VERSION) <= Gem::Version.new('0.9.5')
|
8
|
+
raise RuntimeError, 'Your bundler version is too old.' +
|
9
|
+
'Run `gem install bundler` to upgrade.'
|
10
|
+
end
|
11
|
+
|
12
|
+
# Set up load paths for all bundled gems
|
13
|
+
Bundler.setup
|
14
|
+
rescue Bundler::GemNotFound
|
15
|
+
raise RuntimeError, 'Bundler couldn\'t find some gems.' +
|
16
|
+
'Did you run `bundlee install`?'
|
17
|
+
end
|
18
|
+
|
19
|
+
require 'rails/all'
|
20
|
+
|
21
|
+
Bundler.require
|
22
|
+
require File.expand_path('../../lib/counterfeit', __FILE__)
|
23
|
+
|
24
|
+
db_filename = 'counterfeit.sqlite3'
|
25
|
+
|
26
|
+
File.delete(db_filename)
|
27
|
+
|
28
|
+
active_record_configuration = { :adapter => 'sqlite3', :database => db_filename }
|
29
|
+
|
30
|
+
ActiveRecord::Base.establish_connection(active_record_configuration)
|
31
|
+
ActiveRecord::Base.logger = Logger.new(File.join(File.dirname(__FILE__), "debug.log"))
|
32
|
+
|
33
|
+
ActiveRecord::Base.silence do
|
34
|
+
ActiveRecord::Migration.verbose = false
|
35
|
+
|
36
|
+
load(File.dirname(__FILE__) + '/schema.rb')
|
37
|
+
load(File.dirname(__FILE__) + '/models.rb')
|
38
|
+
end
|
39
|
+
|
40
|
+
def clean_database!
|
41
|
+
ActiveRecord::Base.connection.execute "DELETE FROM #{Item.table_name}"
|
42
|
+
end
|
metadata
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: counterfeit
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Pavel Pravosud
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-06-16 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rails
|
17
|
+
prerelease: false
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
21
|
+
- - ~>
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "3.0"
|
24
|
+
type: :runtime
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: money
|
28
|
+
prerelease: false
|
29
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
31
|
+
requirements:
|
32
|
+
- - ~>
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 3.7.1
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id002
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: google_currency
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.2.0
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id003
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: sqlite3
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ~>
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 1.3.3
|
57
|
+
type: :development
|
58
|
+
version_requirements: *id004
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: rspec
|
61
|
+
prerelease: false
|
62
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ~>
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 2.6.0
|
68
|
+
type: :development
|
69
|
+
version_requirements: *id005
|
70
|
+
description: Easy Money gem integration for rails 3.
|
71
|
+
email:
|
72
|
+
- rwz@duckroll.ru
|
73
|
+
executables: []
|
74
|
+
|
75
|
+
extensions: []
|
76
|
+
|
77
|
+
extra_rdoc_files: []
|
78
|
+
|
79
|
+
files:
|
80
|
+
- .gitignore
|
81
|
+
- Gemfile
|
82
|
+
- README.md
|
83
|
+
- Rakefile
|
84
|
+
- counterfeit.gemspec
|
85
|
+
- counterfeit.sqlite3
|
86
|
+
- lib/counterfeit.rb
|
87
|
+
- lib/counterfeit/active_record.rb
|
88
|
+
- lib/counterfeit/money.rb
|
89
|
+
- lib/counterfeit/schema.rb
|
90
|
+
- lib/counterfeit/version.rb
|
91
|
+
- spec/counterfeit_spec.rb
|
92
|
+
- spec/debug.log
|
93
|
+
- spec/models.rb
|
94
|
+
- spec/schema.rb
|
95
|
+
- spec/spec_helper.rb
|
96
|
+
homepage: https://github.com/rwz/counterfeit
|
97
|
+
licenses: []
|
98
|
+
|
99
|
+
post_install_message:
|
100
|
+
rdoc_options: []
|
101
|
+
|
102
|
+
require_paths:
|
103
|
+
- lib
|
104
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: "0"
|
110
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
|
+
none: false
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: "0"
|
116
|
+
requirements: []
|
117
|
+
|
118
|
+
rubyforge_project: counterfeit
|
119
|
+
rubygems_version: 1.8.5
|
120
|
+
signing_key:
|
121
|
+
specification_version: 3
|
122
|
+
summary: Easy Money gem integration for rails 3.
|
123
|
+
test_files:
|
124
|
+
- spec/counterfeit_spec.rb
|
125
|
+
- spec/debug.log
|
126
|
+
- spec/models.rb
|
127
|
+
- spec/schema.rb
|
128
|
+
- spec/spec_helper.rb
|