double_entry 0.3.1 → 0.4.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/README.md CHANGED
@@ -31,16 +31,27 @@ Rails Versions: Rails 3.2.x, 4.0.x, 4.1.x
31
31
 
32
32
  In your application's `Gemfile`, add:
33
33
 
34
- gem 'double_entry'
34
+ ```ruby
35
+ gem 'double_entry'
36
+ ```
35
37
 
36
- Then run:
38
+ Download and install the gem with Bundler:
37
39
 
38
- bundle
39
- rails generate double_entry:install
40
+ ```sh
41
+ bundle
42
+ ```
40
43
 
41
- Run migration files:
44
+ Generate Rails schema migrations for the required tables:
42
45
 
43
- rake db:migrate
46
+ ```sh
47
+ rails generate double_entry:install
48
+ ```
49
+
50
+ Update the local database:
51
+
52
+ ```sh
53
+ rake db:migrate
54
+ ```
44
55
 
45
56
 
46
57
  ## Interface
@@ -91,7 +102,12 @@ will return the current balance for an account as a Money object.
91
102
  To transfer money between accounts:
92
103
 
93
104
  ```ruby
94
- DoubleEntry.transfer(20.dollars, :from => account_a, :to => account_b, :code => :purchase)
105
+ DoubleEntry.transfer(
106
+ 20.dollars,
107
+ :from => one_account,
108
+ :to => another_account,
109
+ :code => :a_business_code_for_this_type_of_transfer,
110
+ )
95
111
  ```
96
112
 
97
113
  The possible transfers, and their codes, should be defined in the configuration.
@@ -107,8 +123,9 @@ manually lock the accounts you're using:
107
123
 
108
124
  ```ruby
109
125
  DoubleEntry.lock_accounts(account_a, account_b) do
110
- # Do some other stuff in here...
126
+ # Perhaps transfer some money
111
127
  DoubleEntry.transfer(20.dollars, :from => account_a, :to => account_b, :code => :purchase)
128
+ # Perform other tasks that should be commited atomically with the transfer of funds...
112
129
  end
113
130
  ```
114
131
 
@@ -214,33 +231,45 @@ correct balances from the lines table.
214
231
 
215
232
  ## Future Direction
216
233
 
217
- No immediate to-do's.
234
+ See the Github project [issues](https://github.com/envato/double_entry/issues).
218
235
 
219
236
  ## Development Environment Setup
220
237
 
221
238
  1. Clone this repo.
222
239
 
223
- git clone git@github.com:envato/double_entry.git && cd double_entry
240
+ ```sh
241
+ git clone git@github.com:envato/double_entry.git && cd double_entry
242
+ ```
224
243
 
225
244
  2. Run the included setup script to install the gem dependencies.
226
245
 
227
- ./script/setup.sh
246
+ ```sh
247
+ ./script/setup.sh
248
+ ```
228
249
 
229
- 3. Install MySQL and PostgreSQL. The tests run using both databases.
250
+ 3. Install MySQL and PostgreSQL. We run tests against both databases.
230
251
  4. Create a database in MySQL.
231
252
 
232
- mysql -u root -e 'create database double_entry_test;'
253
+ ```sh
254
+ mysql -u root -e 'create database double_entry_test;'
255
+ ```
233
256
 
234
257
  5. Create a database in PostgreSQL.
235
258
 
236
- psql -c 'create database double_entry_test;' -U postgres
259
+ ```sh
260
+ psql -c 'create database double_entry_test;' -U postgres
261
+ ```
237
262
 
238
263
  6. Specify how the tests should connect to the database
239
264
 
240
- cp spec/support/database.example.yml spec/support/database.yml
241
- vim spec/support/database.yml
265
+ ```sh
266
+ cp spec/support/{database.example.yml,database.yml}
267
+ vim spec/support/database.yml
268
+ ```
242
269
 
243
270
  7. Run the tests
244
271
 
245
- bundle exec rake
272
+ ```sh
273
+ bundle exec rake
274
+ ```
246
275
 
data/lib/double_entry.rb CHANGED
@@ -31,7 +31,7 @@ module DoubleEntry
31
31
  #
32
32
  # @example Obtain the 'cash' account for a user
33
33
  # DoubleEntry.account(:cash, scope: user)
34
- # @param identifier [Symbol] The symbol identifying the desired account. As
34
+ # @param [Symbol] identifier The symbol identifying the desired account. As
35
35
  # specified in the account configuration.
36
36
  # @option options :scope Limit the account to the given scope. As specified
37
37
  # in the account configuration.
@@ -56,12 +56,12 @@ module DoubleEntry
56
56
  # checking_account = DoubleEntry.account(:checking, scope: user)
57
57
  # savings_account = DoubleEntry.account(:savings, scope: user)
58
58
  # DoubleEntry.transfer(
59
- # Money.new(20_00),
60
- # from: checking_account,
61
- # to: savings_account,
62
- # code: :save,
59
+ # 20.dollars,
60
+ # :from => checking_account,
61
+ # :to => savings_account,
62
+ # :code => :save,
63
63
  # )
64
- # @param amount [Money] The quantity of money to transfer from one account
64
+ # @param [Money] amount The quantity of money to transfer from one account
65
65
  # to the other.
66
66
  # @option options :from [DoubleEntry::Account::Instance] Transfer money out
67
67
  # of this account.
@@ -69,7 +69,6 @@ module DoubleEntry
69
69
  # this account.
70
70
  # @option options :code [Symbol] The application specific code for this
71
71
  # type of transfer. As specified in the transfer configuration.
72
- # @option options :meta [String] Metadata to associate with this transfer.
73
72
  # @option options :detail [ActiveRecord::Base] ActiveRecord model
74
73
  # associated (via a polymorphic association) with the transfer.
75
74
  # @raise [DoubleEntry::TransferIsNegative] The amount is less than zero.
@@ -82,14 +81,50 @@ module DoubleEntry
82
81
 
83
82
  # Get the current or historic balance of an account.
84
83
  #
85
- # @param account [DoubleEntry::Account:Instance, Symbol]
86
- # @option options :scope [Object, String]
87
- # @option options :from [Time]
88
- # @option options :to [Time]
89
- # @option options :at [Time]
90
- # @option options :code [Symbol]
91
- # @option options :codes [Array<Symbol>]
92
- # @return [Money]
84
+ # @example Obtain the current balance of my checking account
85
+ # checking_account = DoubleEntry.account(:checking, :scope => user)
86
+ # DoubleEntry.balance(checking_account)
87
+ # @example Obtain the current balance of my checking account (without account or user model)
88
+ # DoubleEntry.balance(:checking, :scope => user_id)
89
+ # @example Obtain a historic balance of my checking account
90
+ # checking_account = DoubleEntry.account(:checking, :scope => user)
91
+ # DoubleEntry.balance(checking_account, :at => Time.new(2012, 1, 1))
92
+ # @example Obtain the net balance of my checking account during may
93
+ # checking_account = DoubleEntry.account(:checking, :scope => user)
94
+ # DoubleEntry.balance(
95
+ # checking_account,
96
+ # :from => Time.new(2012, 5, 1, 0, 0, 0),
97
+ # :to => Time.new(2012, 5, 31, 23, 59, 59),
98
+ # )
99
+ # @example Obtain the balance of salary deposits made to my checking account during may
100
+ # checking_account = DoubleEntry.account(:checking, :scope => user)
101
+ # DoubleEntry.balance(
102
+ # checking_account,
103
+ # :code => :salary,
104
+ # :from => Time.new(2012, 5, 1, 0, 0, 0),
105
+ # :to => Time.new(2012, 5, 31, 23, 59, 59),
106
+ # )
107
+ # @example Obtain the balance of salary & lottery deposits made to my checking account during may
108
+ # checking_account = DoubleEntry.account(:checking, :scope => user)
109
+ # DoubleEntry.balance(
110
+ # checking_account,
111
+ # :codes => [ :salary, :lottery ],
112
+ # :from => Time.new(2012, 5, 1, 0, 0, 0),
113
+ # :to => Time.new(2012, 5, 31, 23, 59, 59),
114
+ # )
115
+ # @param [DoubleEntry::Account:Instance, Symbol] account Find the balance
116
+ # for this account
117
+ # @option options :scope [Object] The scope identifier of the account (only
118
+ # needed if the provided account is a symbol).
119
+ # @option options :from [Time] used with :to, consider only the time
120
+ # between these dates
121
+ # @option options :to [Time] used with :from, consider only the time
122
+ # between these dates
123
+ # @option options :at [Time] obtain the account balance at this time
124
+ # @option options :code [Symbol] consider only the transfers with this code
125
+ # @option options :codes [Array<Symbol>] consider only the transfers with
126
+ # these codes
127
+ # @return [Money] The balance
93
128
  def balance(account, options = {})
94
129
  BalanceCalculator.calculate(account, options)
95
130
  end
@@ -72,16 +72,6 @@ module DoubleEntry
72
72
  self[:code].try(:to_sym)
73
73
  end
74
74
 
75
- def meta=(meta)
76
- self[:meta] = Marshal.dump(meta)
77
- meta
78
- end
79
-
80
- def meta
81
- meta = self[:meta]
82
- meta ? Marshal.load(meta) : {}
83
- end
84
-
85
75
  def account=(account)
86
76
  self[:account] = account.identifier.to_s
87
77
  self.scope = account.scope_identity
@@ -107,18 +97,18 @@ module DoubleEntry
107
97
  end
108
98
 
109
99
  def pair
110
- if credit?
100
+ if decrease?
111
101
  [self, partner]
112
102
  else
113
103
  [partner, self]
114
104
  end
115
105
  end
116
106
 
117
- def credit?
107
+ def decrease?
118
108
  amount < Money.empty
119
109
  end
120
110
 
121
- def debit?
111
+ def increase?
122
112
  amount > Money.empty
123
113
  end
124
114
 
@@ -34,28 +34,36 @@ module DoubleEntry
34
34
  # and provided custom filters.
35
35
  #
36
36
  # @example Find the sum for all $10 :save transfers in all :checking accounts in the current month (assume the date is January 30, 2014).
37
- # time_range = DoubleEntry::TimeRange.make(2014, 1)
38
- # class ::DoubleEntry::Line
37
+ # time_range = DoubleEntry::Reporting::TimeRange.make(2014, 1)
38
+ #
39
+ # DoubleEntry::Line.class_eval do
39
40
  # scope :ten_dollar_transfers, -> { where(:amount => 10_00) }
40
41
  # end
41
- # DoubleEntry.aggregate(:sum, :checking, :save, range: time_range, filter: [:ten_dollar_transfers])
42
- # @param function [Symbol] The function to perform on the set of transfers.
42
+ #
43
+ # DoubleEntry::Reporting.aggregate(
44
+ # :sum,
45
+ # :checking,
46
+ # :save,
47
+ # :range => time_range,
48
+ # :filter => [ :ten_dollar_transfers ],
49
+ # )
50
+ # @param [Symbol] function The function to perform on the set of transfers.
43
51
  # Valid functions are :sum, :count, and :average
44
- # @param account [Symbol] The symbol identifying the account to perform
52
+ # @param [Symbol] account The symbol identifying the account to perform
45
53
  # the aggregate calculation on. As specified in the account configuration.
46
- # @param code [Symbol] The application specific code for the type of
54
+ # @param [Symbol] code The application specific code for the type of
47
55
  # transfer to perform an aggregate calculation on. As specified in the
48
56
  # transfer configuration.
49
- # @option options :range [DoubleEntry::TimeRange] Only include transfers
50
- # in the given time range in the calculation.
51
- # @option options :filter [Array[Symbol], or Array[Hash<Symbol,Parameter>]]
57
+ # @option options :range [DoubleEntry::Reporting::TimeRange] Only include
58
+ # transfers in the given time range in the calculation.
59
+ # @option options :filter [Array<Symbol>, Array<Hash<Symbol, Object>>]
52
60
  # A custom filter to apply before performing the aggregate calculation.
53
- # Currently, filters must be monkey patched as scopes into the DoubleEntry::Line
54
- # class in order to be used as filters, as the example shows.
55
- # If the filter requires a parameter, it must be given in a Hash, otherwise
56
- # pass an array with the symbol names for the defined scopes.
57
- # @return Returns a Money object for :sum and :average calculations, or a
58
- # Fixnum for :count calculations.
61
+ # Currently, filters must be monkey patched as scopes into the
62
+ # DoubleEntry::Line class in order to be used as filters, as the example
63
+ # shows. If the filter requires a parameter, it must be given in a Hash,
64
+ # otherwise pass an array with the symbol names for the defined scopes.
65
+ # @return [Money, Fixnum] Returns a Money object for :sum and :average
66
+ # calculations, or a Fixnum for :count calculations.
59
67
  # @raise [Reporting::AggregateFunctionNotSupported] The provided function
60
68
  # is not supported.
61
69
  #
@@ -70,20 +78,27 @@ module DoubleEntry
70
78
  # and provided custom filters.
71
79
  #
72
80
  # @example Find the number of all $10 :save transfers in all :checking accounts per month for the entire year (Assume the year is 2014).
73
- # DoubleEntry.aggregate_array(:sum, :checking, :save, range_type: 'month', start: '2014-01-01', finish: '2014-12-31')
74
- # @param function [Symbol] The function to perform on the set of transfers.
81
+ # DoubleEntry::Reporting.aggregate_array(
82
+ # :sum,
83
+ # :checking,
84
+ # :save,
85
+ # :range_type => 'month',
86
+ # :start => '2014-01-01',
87
+ # :finish => '2014-12-31',
88
+ # )
89
+ # @param [Symbol] function The function to perform on the set of transfers.
75
90
  # Valid functions are :sum, :count, and :average
76
- # @param account [Symbol] The symbol identifying the account to perform
91
+ # @param [Symbol] account The symbol identifying the account to perform
77
92
  # the aggregate calculation on. As specified in the account configuration.
78
- # @param code [Symbol] The application specific code for the type of
93
+ # @param [Symbol] code The application specific code for the type of
79
94
  # transfer to perform an aggregate calculation on. As specified in the
80
95
  # transfer configuration.
81
- # @option options :filter [Array[Symbol], or Array[Hash<Symbol,Parameter>]]
96
+ # @option options :filter [Array<Symbol>, Array<Hash<Symbol, Object>>]
82
97
  # A custom filter to apply before performing the aggregate calculation.
83
- # Currently, filters must be monkey patched as scopes into the DoubleEntry::Line
84
- # class in order to be used as filters, as the example shows.
85
- # If the filter requires a parameter, it must be given in a Hash, otherwise
86
- # pass an array with the symbol names for the defined scopes.
98
+ # Currently, filters must be monkey patched as scopes into the
99
+ # DoubleEntry::Line class in order to be used as filters, as the example
100
+ # shows. If the filter requires a parameter, it must be given in a Hash,
101
+ # otherwise pass an array with the symbol names for the defined scopes.
87
102
  # @option options :range_type [String] The type of time range to return data
88
103
  # for. For example, specifying 'month' will return an array of the resulting
89
104
  # aggregate calculation for each month.
@@ -95,7 +110,7 @@ module DoubleEntry
95
110
  # @option options :finish [String] The finish (or end) date for the time range
96
111
  # to perform calculations in. The default finish date is the current date.
97
112
  # The format of the string must be as follows: 'YYYY-mm-dd'
98
- # @return [Array[Money/Fixnum]] Returns an array of Money objects for :sum
113
+ # @return [Array<Money, Fixnum>] Returns an array of Money objects for :sum
99
114
  # and :average calculations, or an array of Fixnum for :count calculations.
100
115
  # The array is indexed by the range_type. For example, if range_type is
101
116
  # specified as 'month', each index in the array will represent a month.
@@ -110,14 +125,15 @@ module DoubleEntry
110
125
  # the provided minimum balance.
111
126
  #
112
127
  # @example Find users with at least $1,000,000 in their savings accounts
113
- # DoubleEntry.scopes_with_minimum_balance_for_account(
114
- # Money.new(1_000_000_00),
115
- # :savings
116
- # ) # might return user ids: [ 1423, 12232, 34729 ]
117
- # @param minimum_balance [Money] Minimum account balance a scope must have
128
+ # DoubleEntry::Reporting.scopes_with_minimum_balance_for_account(
129
+ # 1_000_000.dollars,
130
+ # :savings,
131
+ # ) # might return the user ids: [ 1423, 12232, 34729 ]
132
+ # @param [Money] minimum_balance Minimum account balance a scope must have
118
133
  # to be included in the result set.
119
- # @param account_identifier [Symbol]
134
+ # @param [Symbol] account_identifier
120
135
  # @return [Array<Fixnum>] Scopes
136
+ #
121
137
  def scopes_with_minimum_balance_for_account(minimum_balance, account_identifier)
122
138
  select_values(sanitize_sql_array([<<-SQL, account_identifier, minimum_balance.cents])).map {|scope| scope.to_i }
123
139
  SELECT scope
@@ -132,6 +148,7 @@ module DoubleEntry
132
148
  # @api private
133
149
  # @return [Boolean] true if all the amounts for an account add up to the final balance,
134
150
  # which they always should.
151
+ #
135
152
  def reconciled?(account)
136
153
  scoped_lines = Line.where(:account => "#{account.identifier}", :scope => "#{account.scope}")
137
154
  sum_of_amounts = scoped_lines.sum(:amount)
@@ -5,10 +5,10 @@ module DoubleEntry
5
5
  # @api private
6
6
  def self.transfer(defined_transfers, amount, options = {})
7
7
  raise TransferIsNegative if amount < Money.empty
8
- from, to, code, meta, detail = options[:from], options[:to], options[:code], options[:meta], options[:detail]
8
+ from, to, code, detail = options[:from], options[:to], options[:code], options[:detail]
9
9
  defined_transfers.
10
10
  find!(from, to, code).
11
- process!(amount, from, to, code, meta, detail)
11
+ process(amount, from, to, code, detail)
12
12
  end
13
13
 
14
14
  # @api private
@@ -44,24 +44,17 @@ module DoubleEntry
44
44
  end
45
45
  end
46
46
 
47
- attr_accessor :code, :from, :to, :description, :meta_requirement
47
+ attr_accessor :code, :from, :to, :description
48
48
 
49
49
  def initialize(attributes)
50
- @meta_requirement = []
51
50
  attributes.each { |name, value| send("#{name}=", value) }
52
51
  end
53
52
 
54
- def process!(amount, from, to, code, meta, detail)
53
+ def process(amount, from, to, code, detail)
55
54
  if from.scope_identity == to.scope_identity and from.identifier == to.identifier
56
55
  raise TransferNotAllowed.new
57
56
  end
58
57
 
59
- meta_requirement.each do |key|
60
- if meta[key].nil?
61
- raise RequiredMetaMissing.new
62
- end
63
- end
64
-
65
58
  Locking.lock_accounts(from, to) do
66
59
  credit, debit = Line.new, Line.new
67
60
 
@@ -74,7 +67,6 @@ module DoubleEntry
74
67
  credit.amount, debit.amount = -amount, amount
75
68
  credit.account, debit.account = from, to
76
69
  credit.code, debit.code = code, code
77
- credit.meta, debit.meta = meta, meta
78
70
  credit.detail, debit.detail = detail, detail
79
71
  credit.balance, debit.balance = credit_balance.balance, debit_balance.balance
80
72
 
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module DoubleEntry
4
- VERSION = "0.3.1"
4
+ VERSION = "0.4.0"
5
5
  end
@@ -20,7 +20,6 @@ class CreateDoubleEntryTables < ActiveRecord::Migration
20
20
  t.integer "partner_id"
21
21
  t.string "partner_account"
22
22
  t.string "partner_scope"
23
- t.string "meta"
24
23
  t.integer "detail_id"
25
24
  t.string "detail_type"
26
25
  t.timestamps
@@ -10,13 +10,11 @@ describe DoubleEntry::Line do
10
10
  :account => account,
11
11
  :partner_account => partner_account,
12
12
  :code => code,
13
- :meta => meta,
14
13
  )
15
14
  }
16
15
  let(:account) { DoubleEntry.account(:test, :scope => "17") }
17
16
  let(:partner_account) { DoubleEntry.account(:test, :scope => "72") }
18
17
  let(:code) { :test_code }
19
- let(:meta) { "test meta" }
20
18
  before { persisted_line.save! }
21
19
  subject { DoubleEntry::Line.last }
22
20
 
@@ -41,28 +39,6 @@ describe DoubleEntry::Line do
41
39
  its("partner_account.account.identifier") { should eq :test }
42
40
  its("partner_account.scope") { should eq "91" }
43
41
  end
44
-
45
- context "given meta = 'the meta'" do
46
- let(:meta) { "the meta" }
47
- its(:meta) { should eq "the meta" }
48
- end
49
-
50
- context "given meta = nil" do
51
- let(:meta) { nil }
52
- its(:meta) { should eq nil }
53
- end
54
-
55
- context "given meta has not been persisted (NULL)" do
56
- let(:persisted_line) {
57
- DoubleEntry::Line.new(
58
- :amount => Money.new(10_00),
59
- :balance => Money.empty,
60
- :account => DoubleEntry.account(:savings, :scope => User.make!),
61
- :code => code,
62
- )
63
- }
64
- its(:meta) { should eq Hash.new }
65
- end
66
42
  end
67
43
 
68
44
  it "has a table name prefixed with double_entry_" do
@@ -100,7 +100,7 @@ describe DoubleEntry do
100
100
  end
101
101
 
102
102
  config.define_transfers do |transfers|
103
- transfers.define(:from => :savings, :to => :cash, :code => :xfer, :meta_requirement => [:ref])
103
+ transfers.define(:from => :savings, :to => :cash, :code => :xfer)
104
104
  end
105
105
  end
106
106
  end
@@ -115,7 +115,6 @@ describe DoubleEntry do
115
115
  :from => savings,
116
116
  :to => cash,
117
117
  :code => :xfer,
118
- :meta => { :ref => 'shopping!' },
119
118
  )
120
119
  end
121
120
 
@@ -137,7 +136,6 @@ describe DoubleEntry do
137
136
  :from => savings,
138
137
  :to => cash,
139
138
  :code => :yfer,
140
- :meta => { :ref => 'shopping!' },
141
139
  )
142
140
  }.to raise_error DoubleEntry::TransferNotAllowed
143
141
  end
@@ -151,18 +149,6 @@ describe DoubleEntry do
151
149
  )
152
150
  }.to raise_error DoubleEntry::TransferNotAllowed
153
151
  end
154
-
155
- it 'raises an exception when required meta data is omitted' do
156
- expect {
157
- DoubleEntry.transfer(
158
- Money.new(100_00),
159
- :from => savings,
160
- :to => cash,
161
- :code => :xfer,
162
- :meta => {},
163
- )
164
- }.to raise_error DoubleEntry::RequiredMetaMissing
165
- end
166
152
  end
167
153
 
168
154
  describe 'lines' do
@@ -173,7 +159,7 @@ describe DoubleEntry do
173
159
  accounts.define(:identifier => :b)
174
160
  end
175
161
 
176
- description = ->(line) { "Money goes #{line.credit? ? 'out' : 'in'}: #{line.amount.format}" }
162
+ description = ->(line) { "Money goes #{line.decrease? ? 'out' : 'in'}: #{line.amount.format}" }
177
163
  config.define_transfers do |transfers|
178
164
  transfers.define(:code => :xfer, :from => :a, :to => :b, :description => description)
179
165
  end
@@ -208,11 +194,11 @@ describe DoubleEntry do
208
194
  expect(credit_line.partner_account).to eq debit_line.account
209
195
  end
210
196
 
211
- it 'knows if it is a credit or debit' do
212
- expect(credit_line).to be_credit
213
- expect(debit_line).to be_debit
214
- expect(credit_line).to_not be_debit
215
- expect(debit_line).to_not be_credit
197
+ it 'knows if it is an increase or decrease' do
198
+ expect(credit_line).to be_decrease
199
+ expect(debit_line).to be_increase
200
+ expect(credit_line).to_not be_increase
201
+ expect(debit_line).to_not be_decrease
216
202
  end
217
203
 
218
204
  it 'can reference its partner' do
@@ -21,7 +21,6 @@ ActiveRecord::Schema.define do
21
21
  t.integer "partner_id"
22
22
  t.string "partner_account"
23
23
  t.string "partner_scope"
24
- t.string "meta"
25
24
  t.integer "detail_id"
26
25
  t.string "detail_type"
27
26
  t.datetime "created_at"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: double_entry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -16,7 +16,7 @@ authors:
16
16
  autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
- date: 2014-07-11 00:00:00.000000000 Z
19
+ date: 2014-07-17 00:00:00.000000000 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: money