easy_rails_money 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 +20 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +165 -0
- data/Rakefile +7 -0
- data/easy_rails_money.gemspec +28 -0
- data/lib/easy_rails_money/active_record/migration/schema_statements.rb +21 -0
- data/lib/easy_rails_money/active_record/migration/table.rb +21 -0
- data/lib/easy_rails_money/active_record/money_dsl.rb +17 -0
- data/lib/easy_rails_money/active_record.rb +8 -0
- data/lib/easy_rails_money/configuration.rb +13 -0
- data/lib/easy_rails_money/version.rb +3 -0
- data/lib/easy_rails_money.rb +11 -0
- data/spec/active_record/migration_spec.rb +120 -0
- data/spec/active_record/money_dsl_spec.rb +11 -0
- data/spec/active_record_spec_helper.rb +42 -0
- data/spec/configuration_spec.rb +28 -0
- data/spec/spec_helper.rb +4 -0
- metadata +181 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Deepak Kannan
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,165 @@
|
|
1
|
+
Under Development. only the migration part is done now
|
2
|
+
|
3
|
+
# EasyRailsMoney
|
4
|
+
|
5
|
+
This library provides integration of [money](http://github.com/Rubymoney/money) gem with Rails.
|
6
|
+
|
7
|
+
Use 'money' to specify which fields you want to be backed by a Money
|
8
|
+
object
|
9
|
+
|
10
|
+
[money-rails](https://github.com/RubyMoney/money-rails) is much more
|
11
|
+
popular and full-featured. Definately try it out. I have actually
|
12
|
+
submitted a PR to that project and it is actively maintained.
|
13
|
+
|
14
|
+
I have tried to create a simpler version of [money-rails](https://github.com/RubyMoney/money-rails)
|
15
|
+
With a better API and database schema, in my opinion
|
16
|
+
I created this project to scratch my itch.
|
17
|
+
|
18
|
+
Have stolen lots of code from [money-rails](https://github.com/RubyMoney/money-rails)
|
19
|
+
API and tests are written from scratch
|
20
|
+
|
21
|
+
## How it works
|
22
|
+
|
23
|
+
Let us say you want to store a Rupee Money object in the database
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
principal = Money.new(100, "inr")
|
27
|
+
```
|
28
|
+
|
29
|
+
Option 1:
|
30
|
+
```ruby
|
31
|
+
class CreateLoan < ActiveRecord::Migration
|
32
|
+
def change
|
33
|
+
create_table :loans do |t|
|
34
|
+
t.integer :principal
|
35
|
+
t.string :principal_currency
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
```
|
40
|
+
|
41
|
+
Option 2:
|
42
|
+
Another option would be
|
43
|
+
```ruby
|
44
|
+
class CreateLoan < ActiveRecord::Migration
|
45
|
+
def change
|
46
|
+
create_table :loans do |t|
|
47
|
+
t.integer :principal_as_paise
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
```
|
52
|
+
|
53
|
+
Note that we are storing the base unit in the database. If the amount
|
54
|
+
is in dollars we store in cents or if the amount is in Indian Rupees
|
55
|
+
we store in paise and so on. This is done because FLoats do not have a
|
56
|
+
accurate representation but Integers do. Can store BigDecimal as well
|
57
|
+
but it is slower. This is why the Money gem stores amounts as integer
|
58
|
+
Watch [Rubyconf 2011 Float-is-legacy](http://www.confreaks.com/videos/698-rubyconf2011-float-is-legacy) for more details
|
59
|
+
|
60
|
+
We have encoded the currency in the column name. I like it because
|
61
|
+
there is no need to define another column and it is simple. But the
|
62
|
+
disadvantage is that it is inflexible and changing the column name in
|
63
|
+
Mysql might require downtime for a big table
|
64
|
+
|
65
|
+
So let us go with the first option. The disadvantage is that currency
|
66
|
+
is stored as a string. Integer might be better for storing in the database
|
67
|
+
|
68
|
+
Now let us say we want to store multiple columns:
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
principal = Money.new(100, "inr")
|
72
|
+
repaid = Money.new(20, "inr")
|
73
|
+
npa = Money.new(10, "inr")
|
74
|
+
```
|
75
|
+
|
76
|
+
Now we would represent it as
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
class CreateLoan < ActiveRecord::Migration
|
80
|
+
def change
|
81
|
+
create_table :loans do |t|
|
82
|
+
t.integer :principal
|
83
|
+
t.string :principal_currency
|
84
|
+
t.integer :repaid
|
85
|
+
t.string :repaid_currency
|
86
|
+
t.integer :npa
|
87
|
+
t.string :npa_currency
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
```
|
92
|
+
|
93
|
+
We are repeating ourself and mostly all currencies for a record will be
|
94
|
+
the same. So we can configure the currency on a per-record basis and write
|
95
|
+
|
96
|
+
Option 3:
|
97
|
+
```ruby
|
98
|
+
class CreateLoan < ActiveRecord::Migration
|
99
|
+
def change
|
100
|
+
create_table :loans do |t|
|
101
|
+
t.string :currency
|
102
|
+
t.integer :principal
|
103
|
+
t.integer :repaid
|
104
|
+
t.integer :npa
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
```
|
109
|
+
|
110
|
+
It might be possible that we set a currency once for the whole app and
|
111
|
+
never change it. But this seems like a nice tradeoff api-wise
|
112
|
+
|
113
|
+
### TODO's
|
114
|
+
1. currency is stored as a string. Integer might be better for storing in the database
|
115
|
+
2. store a snapshot of the exchange rate as well when the record was
|
116
|
+
inserted or if we want to "freeze" the exchange rate per-record
|
117
|
+
|
118
|
+
## Installation
|
119
|
+
|
120
|
+
Add this line to your application's Gemfile:
|
121
|
+
|
122
|
+
gem 'easy_rails_money'
|
123
|
+
|
124
|
+
And then execute:
|
125
|
+
|
126
|
+
$ bundle
|
127
|
+
|
128
|
+
Or install it yourself as:
|
129
|
+
|
130
|
+
$ gem install easy_rails_money
|
131
|
+
|
132
|
+
## Usage
|
133
|
+
|
134
|
+
### ActiveRecord
|
135
|
+
|
136
|
+
Only ActiveRecord is supported for now
|
137
|
+
|
138
|
+
#### Migration helpers
|
139
|
+
|
140
|
+
If you want to add money field to product model you may use ```add_money``` helper
|
141
|
+
|
142
|
+
```ruby
|
143
|
+
class MonetizeLoan < ActiveRecord::Migration
|
144
|
+
def change
|
145
|
+
add_money :loans, :principal
|
146
|
+
|
147
|
+
# OR
|
148
|
+
|
149
|
+
change_table :products do |t|
|
150
|
+
t.money :principal
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
```
|
155
|
+
|
156
|
+
```add_money``` helper is revertable, so you may use it inside ```change``` migrations.
|
157
|
+
If you writing separate ```up``` and ```down``` methods, you may use ```remove_money``` helper.
|
158
|
+
|
159
|
+
## Contributing
|
160
|
+
|
161
|
+
1. Fork it
|
162
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
163
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
164
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
165
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'easy_rails_money/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "easy_rails_money"
|
8
|
+
gem.version = EasyRailsMoney::VERSION
|
9
|
+
gem.authors = ["Deepak Kannan"]
|
10
|
+
gem.email = ["kannan.deepak@gmail.com"]
|
11
|
+
gem.description = %q{Integrate Rails's ActiveRecord gem and the money gem. Focus is on a simple code and API}
|
12
|
+
gem.summary = %q{Integrate rails and the money gem}
|
13
|
+
gem.homepage = "https://github.com/deepak/easy_rails_money"
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
|
20
|
+
gem.add_dependency "money", "~> 5.1.1"
|
21
|
+
gem.add_dependency "activesupport", "~> 3.2"
|
22
|
+
|
23
|
+
gem.add_development_dependency "rspec", "~> 2.12"
|
24
|
+
gem.add_development_dependency "rails", "~> 3.2"
|
25
|
+
gem.add_development_dependency "activerecord", "~> 3.2"
|
26
|
+
gem.add_development_dependency "sqlite3", "~> 1.3.7"
|
27
|
+
gem.add_development_dependency "debugger", "~> 1.3.3"
|
28
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module EasyRailsMoney
|
2
|
+
module ActiveRecord
|
3
|
+
module Migration
|
4
|
+
module SchemaStatements
|
5
|
+
def add_money(table_name, *columns)
|
6
|
+
columns.each do |name|
|
7
|
+
add_column table_name, name, :integer
|
8
|
+
add_column table_name, "#{name}_currency", :string
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def remove_money(table_name, *columns)
|
13
|
+
columns.each do |name|
|
14
|
+
remove_column table_name, name
|
15
|
+
remove_column table_name, "#{name}_currency"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module EasyRailsMoney
|
2
|
+
module ActiveRecord
|
3
|
+
module Migration
|
4
|
+
module Table
|
5
|
+
def money(*columns)
|
6
|
+
columns.each do |name|
|
7
|
+
column name, :integer
|
8
|
+
column "#{name}_currency", :string
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def remove_money(*columns)
|
13
|
+
columns.each do |name|
|
14
|
+
remove name, :integer
|
15
|
+
remove "#{name}_currency", :string
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
require 'active_support/core_ext/array/extract_options'
|
3
|
+
|
4
|
+
module EasyRailsMoney
|
5
|
+
module ActiveRecord
|
6
|
+
module MoneyDsl
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
def money(field, *args)
|
11
|
+
options = args.extract_options!
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
require "easy_rails_money/active_record/money_dsl"
|
2
|
+
require "easy_rails_money/active_record/migration/schema_statements"
|
3
|
+
require "easy_rails_money/active_record/migration/table"
|
4
|
+
|
5
|
+
ActiveRecord::Base.send :include, EasyRailsMoney::ActiveRecord::MoneyDsl
|
6
|
+
ActiveRecord::Migration.send :include, EasyRailsMoney::ActiveRecord::Migration::SchemaStatements
|
7
|
+
ActiveRecord::ConnectionAdapters::TableDefinition.send :include, EasyRailsMoney::ActiveRecord::Migration::Table
|
8
|
+
ActiveRecord::ConnectionAdapters::Table.send :include, EasyRailsMoney::ActiveRecord::Migration::Table
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'active_support/core_ext/module/delegation'
|
2
|
+
|
3
|
+
module EasyRailsMoney
|
4
|
+
module Configuration
|
5
|
+
def configure
|
6
|
+
yield self
|
7
|
+
end
|
8
|
+
|
9
|
+
# Configuration parameters
|
10
|
+
delegate :default_currency=, :to => :Money
|
11
|
+
delegate :default_currency, :to => :Money
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'active_record_spec_helper'
|
3
|
+
require 'tempfile'
|
4
|
+
|
5
|
+
class String
|
6
|
+
def strip_spaces
|
7
|
+
strip.gsub(/\s+/, ' ')
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
if defined? ActiveRecord
|
12
|
+
|
13
|
+
require 'active_record/schema_dumper'
|
14
|
+
|
15
|
+
class CreateLoanWithPrincipal < ActiveRecord::Migration
|
16
|
+
def change
|
17
|
+
suppress_messages do
|
18
|
+
create_table :loans do |t|
|
19
|
+
t.string :name
|
20
|
+
end
|
21
|
+
add_money :loans, :principal
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class RemovePrincipalFromLoan < ActiveRecord::Migration
|
27
|
+
def change
|
28
|
+
suppress_messages do
|
29
|
+
remove_money :loans, :principal
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class CreateLoanWithPrincipalUsingTableApi < ActiveRecord::Migration
|
35
|
+
def change
|
36
|
+
suppress_messages do
|
37
|
+
create_table :loans do |t|
|
38
|
+
t.string :name
|
39
|
+
t.money :principal
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class RemovePrincipalFromLoanUsingTableApi < ActiveRecord::Migration
|
46
|
+
def change
|
47
|
+
suppress_messages do
|
48
|
+
change_table :loans do |t|
|
49
|
+
t.remove_money :principal
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# class Loan < ActiveRecord::Base
|
56
|
+
# attr_accessible :principal, :name
|
57
|
+
# # money :principal
|
58
|
+
# end
|
59
|
+
|
60
|
+
describe "migration" do
|
61
|
+
|
62
|
+
let(:schema_with_principal) do
|
63
|
+
<<-EOF.strip_spaces
|
64
|
+
create_table "loans", :force => true do |t|
|
65
|
+
t.string "name"
|
66
|
+
t.integer "principal"
|
67
|
+
t.string "principal_currency"
|
68
|
+
end
|
69
|
+
EOF
|
70
|
+
end
|
71
|
+
|
72
|
+
let(:schema_with_only_name) do
|
73
|
+
<<-EOF.strip_spaces
|
74
|
+
create_table "loans", :force => true do |t|
|
75
|
+
t.string "name"
|
76
|
+
end
|
77
|
+
EOF
|
78
|
+
end
|
79
|
+
|
80
|
+
context "schema_statements" do
|
81
|
+
before(:each) do
|
82
|
+
migrate CreateLoanWithPrincipal
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "add_money" do
|
86
|
+
it "creates integer column for money and a string column for currency" do
|
87
|
+
expect(dump_schema).to eq schema_with_principal
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "remove_money" do
|
92
|
+
it "remove integer column for money and a string column for currency" do
|
93
|
+
expect { migrate RemovePrincipalFromLoan }.to change { dump_schema }.from(schema_with_principal).to(schema_with_only_name)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context "table_statements" do
|
99
|
+
before(:each) do
|
100
|
+
migrate CreateLoanWithPrincipalUsingTableApi
|
101
|
+
end
|
102
|
+
|
103
|
+
describe "add_money" do
|
104
|
+
it "creates integer column for money and a string column for currency" do
|
105
|
+
expect(dump_schema).to eq schema_with_principal
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
describe "remove_money" do
|
110
|
+
it "remove integer column for money and a string column for currency" do
|
111
|
+
expect { migrate RemovePrincipalFromLoanUsingTableApi }.to change { dump_schema }.from(schema_with_principal).to(schema_with_only_name)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module SchemaHelpers
|
2
|
+
def dump_schema
|
3
|
+
Tempfile.open('schema', encoding: "utf-8") do |schema_file|
|
4
|
+
ActiveRecord::SchemaDumper.send(:new, ActiveRecord::Base.connection).send(:tables, schema_file)
|
5
|
+
schema_file.rewind
|
6
|
+
schema_file.read.strip_spaces
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def create_ar_connection
|
11
|
+
conn = { :adapter => 'sqlite3', :database => ':memory:' }
|
12
|
+
|
13
|
+
begin
|
14
|
+
ActiveRecord::Base.establish_connection(conn)
|
15
|
+
ActiveRecord::Base.connection
|
16
|
+
rescue Exception => e
|
17
|
+
$stderr.puts e, *(e.backtrace)
|
18
|
+
$stderr.puts "Couldn't create database for #{conn.inspect}"
|
19
|
+
return
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def migrate klass
|
24
|
+
klass.migrate(:up)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
module ActiveRecord
|
29
|
+
class Migration
|
30
|
+
def announce(message)
|
31
|
+
# noop
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
RSpec.configure do |c|
|
37
|
+
c.include SchemaHelpers
|
38
|
+
|
39
|
+
c.before(:each) do
|
40
|
+
create_ar_connection
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Configuration" do
|
4
|
+
|
5
|
+
describe "#default_currency=" do
|
6
|
+
let(:existing_currency) { Money::Currency.new(:usd) }
|
7
|
+
let(:new_currency) { Money::Currency.new(:inr) }
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
Money.default_currency = existing_currency
|
11
|
+
end
|
12
|
+
|
13
|
+
it "sets default currency" do
|
14
|
+
expect { EasyRailsMoney.default_currency = new_currency }.
|
15
|
+
to change { Money.default_currency }.
|
16
|
+
from(existing_currency).
|
17
|
+
to(new_currency)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "reads default currency" do
|
21
|
+
expect { EasyRailsMoney.default_currency = new_currency }.
|
22
|
+
to change { EasyRailsMoney.default_currency }.
|
23
|
+
from(existing_currency).
|
24
|
+
to(new_currency)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,181 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: easy_rails_money
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Deepak Kannan
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-03-28 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: money
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 5.1.1
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 5.1.1
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: activesupport
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '3.2'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '3.2'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '2.12'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.12'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rails
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '3.2'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '3.2'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: activerecord
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '3.2'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '3.2'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: sqlite3
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ~>
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 1.3.7
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.3.7
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: debugger
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 1.3.3
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 1.3.3
|
126
|
+
description: Integrate Rails's ActiveRecord gem and the money gem. Focus is on a simple
|
127
|
+
code and API
|
128
|
+
email:
|
129
|
+
- kannan.deepak@gmail.com
|
130
|
+
executables: []
|
131
|
+
extensions: []
|
132
|
+
extra_rdoc_files: []
|
133
|
+
files:
|
134
|
+
- .gitignore
|
135
|
+
- Gemfile
|
136
|
+
- LICENSE.txt
|
137
|
+
- README.md
|
138
|
+
- Rakefile
|
139
|
+
- easy_rails_money.gemspec
|
140
|
+
- lib/easy_rails_money.rb
|
141
|
+
- lib/easy_rails_money/active_record.rb
|
142
|
+
- lib/easy_rails_money/active_record/migration/schema_statements.rb
|
143
|
+
- lib/easy_rails_money/active_record/migration/table.rb
|
144
|
+
- lib/easy_rails_money/active_record/money_dsl.rb
|
145
|
+
- lib/easy_rails_money/configuration.rb
|
146
|
+
- lib/easy_rails_money/version.rb
|
147
|
+
- spec/active_record/migration_spec.rb
|
148
|
+
- spec/active_record/money_dsl_spec.rb
|
149
|
+
- spec/active_record_spec_helper.rb
|
150
|
+
- spec/configuration_spec.rb
|
151
|
+
- spec/spec_helper.rb
|
152
|
+
homepage: https://github.com/deepak/easy_rails_money
|
153
|
+
licenses: []
|
154
|
+
post_install_message:
|
155
|
+
rdoc_options: []
|
156
|
+
require_paths:
|
157
|
+
- lib
|
158
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
159
|
+
none: false
|
160
|
+
requirements:
|
161
|
+
- - ! '>='
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '0'
|
164
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
165
|
+
none: false
|
166
|
+
requirements:
|
167
|
+
- - ! '>='
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: '0'
|
170
|
+
requirements: []
|
171
|
+
rubyforge_project:
|
172
|
+
rubygems_version: 1.8.24
|
173
|
+
signing_key:
|
174
|
+
specification_version: 3
|
175
|
+
summary: Integrate rails and the money gem
|
176
|
+
test_files:
|
177
|
+
- spec/active_record/migration_spec.rb
|
178
|
+
- spec/active_record/money_dsl_spec.rb
|
179
|
+
- spec/active_record_spec_helper.rb
|
180
|
+
- spec/configuration_spec.rb
|
181
|
+
- spec/spec_helper.rb
|