bloom_remit 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +37 -0
  3. data/app/assets/javascripts/bloom_remit/application.js +13 -0
  4. data/app/assets/stylesheets/bloom_remit/application.css +15 -0
  5. data/app/concepts/bloom_remit/txns/callbacks/after_create.rb +15 -0
  6. data/app/concepts/bloom_remit/txns/contracts/create.rb +17 -0
  7. data/app/concepts/bloom_remit/txns/contracts/update.rb +11 -0
  8. data/app/concepts/bloom_remit/txns/operations/create.rb +25 -0
  9. data/app/concepts/bloom_remit/txns/operations/update.rb +26 -0
  10. data/app/controllers/bloom_remit/api/v1/txns_controller.rb +15 -0
  11. data/app/controllers/bloom_remit/application_controller.rb +13 -0
  12. data/app/helpers/bloom_remit/application_helper.rb +4 -0
  13. data/app/jobs/bloom_remit/sync_billers_job.rb +19 -0
  14. data/app/jobs/bloom_remit/txns/payout_job.rb +15 -0
  15. data/app/models/bloom_remit/biller.rb +21 -0
  16. data/app/models/bloom_remit/txn.rb +23 -0
  17. data/app/services/bloom_remit/billers/sync.rb +15 -0
  18. data/app/services/bloom_remit/create_txn.rb +17 -0
  19. data/app/services/bloom_remit/initialize_client.rb +17 -0
  20. data/app/services/bloom_remit/txns/payout.rb +16 -0
  21. data/app/services/bloom_remit/txns/post.rb +25 -0
  22. data/app/views/layouts/bloom_remit/application.html.erb +14 -0
  23. data/config/routes.rb +7 -0
  24. data/db/migrate/20160720038018_install_hstore.rb +5 -0
  25. data/db/migrate/20160720040018_create_bloom_remit_billers.rb +12 -0
  26. data/db/migrate/20160729070509_create_bloom_remit_txns.rb +14 -0
  27. data/lib/bloom_remit/engine.rb +11 -0
  28. data/lib/bloom_remit/version.rb +3 -0
  29. data/lib/bloom_remit.rb +32 -0
  30. data/lib/tasks/bloom_remit_tasks.rake +4 -0
  31. metadata +380 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 329b69261f0dd3ce1c80717973da1c342393f21d
4
+ data.tar.gz: 6a1a4a41a31bbe5186508b63c9cfaeef30aa4046
5
+ SHA512:
6
+ metadata.gz: 9a789f5dd11c5966934e18b8135a7d947a5a4d7b53ff28d8b50c744de0ee600dd1c4516f31b4dc09d92c38a6636de9fa86d78db4a59d45581ba0e419c694f961
7
+ data.tar.gz: 82ac77e0ebf73065012728771226e532a8976835e7d651181a29d615e77004f5b2adff9f15eb9c81479fef25e7b8e14dbcc0a64dda6abefd8847f7e184251260
data/Rakefile ADDED
@@ -0,0 +1,37 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'BloomRemit'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+ load 'rails/tasks/statistics.rake'
22
+
23
+
24
+
25
+ Bundler::GemHelper.install_tasks
26
+
27
+ require 'rake/testtask'
28
+
29
+ Rake::TestTask.new(:test) do |t|
30
+ t.libs << 'lib'
31
+ t.libs << 'test'
32
+ t.pattern = 'test/**/*_test.rb'
33
+ t.verbose = false
34
+ end
35
+
36
+
37
+ task default: :test
@@ -0,0 +1,13 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file.
9
+ //
10
+ // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require_tree .
@@ -0,0 +1,15 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any styles
10
+ * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
11
+ * file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
@@ -0,0 +1,15 @@
1
+ module BloomRemit
2
+ module Txns
3
+ module Callbacks
4
+ class AfterCreate < Disposable::Callback::Group
5
+
6
+ on_change :enqueue!
7
+
8
+ def enqueue!(form, **)
9
+ PayoutJob.perform_async(form.model)
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ module BloomRemit
2
+ module Txns
3
+ module Contracts
4
+ class Create < Reform::Form
5
+
6
+ property :recipient_type
7
+ property :recipient_id
8
+ property :sender_type
9
+ property :sender_id
10
+ property :amount
11
+ property :account_name
12
+ property :account_id
13
+
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,11 @@
1
+ module BloomRemit
2
+ module Txns
3
+ module Contracts
4
+ class Update < Reform::Form
5
+
6
+ property :status
7
+
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ module BloomRemit
2
+ module Txns
3
+ module Operations
4
+ class Create < Trailblazer::Operation
5
+
6
+ include Model
7
+ model Txn, :create
8
+
9
+ contract Contracts::Create
10
+
11
+ include Dispatch
12
+ callback :after_create, Callbacks::AfterCreate
13
+
14
+ def process(params)
15
+ validate(params[:txn]) do |f|
16
+ f.model.secret = SecureRandom.uuid
17
+ f.save
18
+ dispatch! :after_create
19
+ end
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,26 @@
1
+ module BloomRemit
2
+ module Txns
3
+ module Operations
4
+ class Update < Trailblazer::Operation
5
+
6
+ include Model
7
+ model Txn, :update
8
+
9
+ contract Contracts::Update
10
+
11
+ def process(params)
12
+ validate(params[:txn]) do |f|
13
+ f.save
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def model!(params)
20
+ Txn.find_by!(id: params[:id], secret: params[:secret])
21
+ end
22
+
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ module BloomRemit
2
+ module Api
3
+ module V1
4
+ class TxnsController < ApplicationController
5
+
6
+ respond_to :json
7
+
8
+ def update
9
+ respond Txns::Operations::Update
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ module BloomRemit
2
+ class ApplicationController < ActionController::Base
3
+
4
+ include Trailblazer::Operation::Controller
5
+
6
+ rescue_from ActiveRecord::RecordNotFound, with: :record_not_found
7
+
8
+ def record_not_found
9
+ render nothing: true, status: 404
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ module BloomRemit
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,19 @@
1
+ module BloomRemit
2
+ class SyncBillersJob
3
+
4
+ include Sidekiq::Worker
5
+ sidekiq_options retry: false
6
+
7
+ def perform
8
+ Billers::Sync.()
9
+ end
10
+
11
+ end
12
+ end
13
+
14
+ if Sidekiq.server?
15
+ Sidekiq::Cron::Job.create(
16
+ class: BloomRemit::SyncBillersJob.name,
17
+ cron: '0 * * * *',
18
+ )
19
+ end
@@ -0,0 +1,15 @@
1
+ module BloomRemit
2
+ module Txns
3
+ class PayoutJob
4
+
5
+ include Sidekiq::Worker
6
+ sidekiq_options retry: false
7
+
8
+ def perform(txn_id)
9
+ txn = Txn.find(txn_id)
10
+ Payout.(txn)
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,21 @@
1
+ module BloomRemit
2
+ class Biller < ActiveRecord::Base
3
+
4
+ scope :active, -> { where(deactivated_at: nil) }
5
+
6
+ include Storext.model
7
+ store_attributes(:fields) do
8
+ first_field String
9
+ first_field_format String
10
+ first_field_width Integer
11
+ second_field String
12
+ second_field_format String
13
+ second_field_width Integer
14
+ end
15
+
16
+ def active?
17
+ self.deactivated_at.nil?
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ module BloomRemit
2
+ class Txn < ActiveRecord::Base
3
+
4
+ belongs_to :recipient, polymorphic: true
5
+ belongs_to :sender, polymorphic: true
6
+
7
+ enum status: {
8
+ bank_error: -2,
9
+ incomplete: 0,
10
+ paid: 1,
11
+ completed: 3,
12
+ rejected: 4,
13
+ refunded: 5,
14
+ cancelled: 6,
15
+ error: 7,
16
+ delayed: 8,
17
+ waiting: 9,
18
+ unpaid: 10,
19
+ outstanding: 11,
20
+ }
21
+
22
+ end
23
+ end
@@ -0,0 +1,15 @@
1
+ module BloomRemit
2
+ module Billers
3
+ class Sync
4
+
5
+ def self.call
6
+ client = InitializeClient.execute.client
7
+ client.billers.billers.each do |remote_biller|
8
+ biller = Biller.where(slug: remote_biller.slug).first_or_initialize
9
+ biller.update_attributes(remote_biller.attributes)
10
+ end
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ module BloomRemit
2
+ class CreateTxn
3
+
4
+ def self.call(recipient:, sender:, amount:, account_name:, account_id:)
5
+ Txns::Operations::Create.(txn: {
6
+ recipient_id: recipient.id,
7
+ recipient_type: recipient.class.name,
8
+ sender_id: sender.id,
9
+ sender_type: sender.class.name,
10
+ amount: amount,
11
+ account_name: account_name,
12
+ account_id: account_id,
13
+ })
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module BloomRemit
2
+ class InitializeClient
3
+
4
+ extend LightService::Action
5
+ promises :client
6
+
7
+ executed do |c|
8
+ c.client = BloomRemitClient.new(
9
+ token: BloomRemit.token,
10
+ secret: BloomRemit.secret,
11
+ agent_id: BloomRemit.agent_id,
12
+ url: BloomRemit.url,
13
+ )
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ module BloomRemit
2
+ module Txns
3
+ class Payout
4
+
5
+ extend LightService::Organizer
6
+
7
+ def self.call(txn)
8
+ with(txn: txn).reduce(
9
+ InitializeClient,
10
+ Post,
11
+ )
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,25 @@
1
+ module BloomRemit
2
+ module Txns
3
+ class Post
4
+
5
+ extend LightService::Action
6
+ expects :client, :txn
7
+
8
+ executed do |c|
9
+ txn = c.txn
10
+
11
+ c.client.create_payment(
12
+ sender_id: txn.sender.send(BloomRemit.sender_id_method),
13
+ account_name: txn.account_name,
14
+ account_number: txn.account_id,
15
+ callback_url: Engine.routes.url_helpers.api_v1_txn_url(txn),
16
+ dest_currency: "PHP",
17
+ orig_currency: "PHP",
18
+ payout_method: txn.recipient.slug,
19
+ receivable_in_dest_currency: txn.amount,
20
+ )
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>BloomRemit</title>
5
+ <%= stylesheet_link_tag "bloom_remit/application", media: "all" %>
6
+ <%= javascript_include_tag "bloom_remit/application" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
data/config/routes.rb ADDED
@@ -0,0 +1,7 @@
1
+ BloomRemit::Engine.routes.draw do
2
+ namespace :api do
3
+ namespace :v1 do
4
+ resources :txns, only: %i[update]
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ class InstallHstore < ActiveRecord::Migration
2
+ def change
3
+ enable_extension "hstore"
4
+ end
5
+ end
@@ -0,0 +1,12 @@
1
+ class CreateBloomRemitBillers < ActiveRecord::Migration
2
+ def change
3
+ create_table :bloom_remit_billers do |t|
4
+ t.string :slug, null: false
5
+ t.text :description
6
+ t.hstore :fields
7
+ t.decimal :service_charge, default: 0.0, null: false
8
+ t.datetime :deactivated_at
9
+ t.timestamps null: false
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ class CreateBloomRemitTxns < ActiveRecord::Migration
2
+ def change
3
+ create_table :bloom_remit_txns do |t|
4
+ t.integer :status, null: false, default: 0
5
+ t.string :recipient_type, null: false
6
+ t.string :recipient_id, null: false
7
+ t.references :sender, polymorphic: true, null: false
8
+ t.decimal :amount, null: false
9
+ t.string :account_name
10
+ t.string :account_id
11
+ t.uuid :secret, null: false
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ module BloomRemit
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace BloomRemit
4
+
5
+ config.to_prepare do
6
+ Engine.routes.default_url_options =
7
+ Rails.application.routes.default_url_options
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ module BloomRemit
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,32 @@
1
+ require "storext"
2
+ require "sidekiq"
3
+ require "light-service"
4
+ require "disposable"
5
+ require "disposable/callback"
6
+ require "trailblazer"
7
+ require "trailblazer/operation/model"
8
+ require "trailblazer/operation/controller"
9
+ require "trailblazer/operation/representer"
10
+ require "trailblazer/operation/dispatch"
11
+ require "reform/rails"
12
+ require "roar-rails"
13
+ require "active_support/core_ext/module/attribute_accessors"
14
+ require "bloom_remit_client"
15
+ require "bloom_remit/engine"
16
+
17
+ module BloomRemit
18
+
19
+ mattr_accessor :token
20
+ mattr_accessor :secret
21
+ mattr_accessor :agent_id
22
+ mattr_accessor :url
23
+ mattr_reader :sender_id_method_default
24
+ @@sender_id_method_default = :bloom_remit_id
25
+ mattr_accessor :sender_id_method
26
+ self.sender_id_method = self.sender_id_method_default
27
+
28
+ def self.configure(&block)
29
+ yield self
30
+ end
31
+
32
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :bloom_remit do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,380 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bloom_remit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ramon Tayag
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-08-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pg
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: storext
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bloom_remit_client
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: sidekiq
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: sidekiq-cron
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: trailblazer
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: light-service
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: disposable
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: reform-rails
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: roar-rails
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: representable
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: multi_json
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: sqlite3
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: rspec-rails
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: factory_girl_rails
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: storext-matchers
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ - !ruby/object:Gem::Dependency
252
+ name: vcr
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - ">="
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ version: '0'
265
+ - !ruby/object:Gem::Dependency
266
+ name: webmock
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - ">="
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ type: :development
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ version: '0'
279
+ - !ruby/object:Gem::Dependency
280
+ name: dotenv
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - ">="
284
+ - !ruby/object:Gem::Version
285
+ version: '0'
286
+ type: :development
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - ">="
291
+ - !ruby/object:Gem::Version
292
+ version: '0'
293
+ - !ruby/object:Gem::Dependency
294
+ name: rspec-sidekiq
295
+ requirement: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - ">="
298
+ - !ruby/object:Gem::Version
299
+ version: '0'
300
+ type: :development
301
+ prerelease: false
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - ">="
305
+ - !ruby/object:Gem::Version
306
+ version: '0'
307
+ - !ruby/object:Gem::Dependency
308
+ name: shoulda-matchers
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - ">="
312
+ - !ruby/object:Gem::Version
313
+ version: '0'
314
+ type: :development
315
+ prerelease: false
316
+ version_requirements: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - ">="
319
+ - !ruby/object:Gem::Version
320
+ version: '0'
321
+ description:
322
+ email:
323
+ - ramon.tayag@gmail.com
324
+ executables: []
325
+ extensions: []
326
+ extra_rdoc_files: []
327
+ files:
328
+ - Rakefile
329
+ - app/assets/javascripts/bloom_remit/application.js
330
+ - app/assets/stylesheets/bloom_remit/application.css
331
+ - app/concepts/bloom_remit/txns/callbacks/after_create.rb
332
+ - app/concepts/bloom_remit/txns/contracts/create.rb
333
+ - app/concepts/bloom_remit/txns/contracts/update.rb
334
+ - app/concepts/bloom_remit/txns/operations/create.rb
335
+ - app/concepts/bloom_remit/txns/operations/update.rb
336
+ - app/controllers/bloom_remit/api/v1/txns_controller.rb
337
+ - app/controllers/bloom_remit/application_controller.rb
338
+ - app/helpers/bloom_remit/application_helper.rb
339
+ - app/jobs/bloom_remit/sync_billers_job.rb
340
+ - app/jobs/bloom_remit/txns/payout_job.rb
341
+ - app/models/bloom_remit/biller.rb
342
+ - app/models/bloom_remit/txn.rb
343
+ - app/services/bloom_remit/billers/sync.rb
344
+ - app/services/bloom_remit/create_txn.rb
345
+ - app/services/bloom_remit/initialize_client.rb
346
+ - app/services/bloom_remit/txns/payout.rb
347
+ - app/services/bloom_remit/txns/post.rb
348
+ - app/views/layouts/bloom_remit/application.html.erb
349
+ - config/routes.rb
350
+ - db/migrate/20160720038018_install_hstore.rb
351
+ - db/migrate/20160720040018_create_bloom_remit_billers.rb
352
+ - db/migrate/20160729070509_create_bloom_remit_txns.rb
353
+ - lib/bloom_remit.rb
354
+ - lib/bloom_remit/engine.rb
355
+ - lib/bloom_remit/version.rb
356
+ - lib/tasks/bloom_remit_tasks.rake
357
+ homepage: https://github.com/imacchiato/bloom_remit-rails
358
+ licenses: []
359
+ metadata: {}
360
+ post_install_message:
361
+ rdoc_options: []
362
+ require_paths:
363
+ - lib
364
+ required_ruby_version: !ruby/object:Gem::Requirement
365
+ requirements:
366
+ - - ">="
367
+ - !ruby/object:Gem::Version
368
+ version: '0'
369
+ required_rubygems_version: !ruby/object:Gem::Requirement
370
+ requirements:
371
+ - - ">="
372
+ - !ruby/object:Gem::Version
373
+ version: '0'
374
+ requirements: []
375
+ rubyforge_project:
376
+ rubygems_version: 2.6.4
377
+ signing_key:
378
+ specification_version: 4
379
+ summary: Rails engine for Bloom Remit users
380
+ test_files: []