forest_liana 1.9.7 → 1.9.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/forest_liana/stripe_controller.rb +72 -15
- data/app/serializers/forest_liana/serializer_factory.rb +6 -0
- data/app/serializers/forest_liana/stripe_bank_account_serializer.rb +1 -3
- data/app/services/forest_liana/integration_base_getter.rb +23 -0
- data/app/services/forest_liana/intercom_attributes_getter.rb +1 -7
- data/app/services/forest_liana/intercom_conversation_getter.rb +1 -1
- data/app/services/forest_liana/intercom_conversations_getter.rb +1 -19
- data/app/services/forest_liana/line_stat_getter.rb +6 -2
- data/app/services/forest_liana/stripe_base_getter.rb +12 -0
- data/app/services/forest_liana/stripe_invoice_getter.rb +30 -0
- data/app/services/forest_liana/stripe_invoices_getter.rb +1 -26
- data/app/services/forest_liana/stripe_payment_getter.rb +26 -0
- data/app/services/forest_liana/stripe_payments_getter.rb +1 -26
- data/app/services/forest_liana/stripe_source_getter.rb +25 -0
- data/app/services/forest_liana/{stripe_bank_accounts_getter.rb → stripe_sources_getter.rb} +2 -27
- data/app/services/forest_liana/stripe_subscription_getter.rb +23 -0
- data/app/services/forest_liana/stripe_subscriptions_getter.rb +1 -35
- data/config/routes.rb +8 -3
- data/lib/forest_liana/bootstraper.rb +1 -1
- data/lib/forest_liana/version.rb +1 -1
- metadata +9 -4
- data/app/services/forest_liana/stripe_cards_getter.rb +0 -86
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9ce5ea697e568c0b4a0e09ab82d43f3282ca521d
|
4
|
+
data.tar.gz: 3c2f2d65713d2eebd007e8b43bbdbdc0566835ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27cfc6f40884c10ff33f1e8880ebdc8d834f5b627f5095093b56301e4ac30f4b9f8d9cd64ce33a687139229e58687a741829c95b7de6bbba50645c4cf870a524
|
7
|
+
data.tar.gz: 3fbb9eea9f7a0d75edd6eea0a037f66c2e43d99e31028b54e78bbed564a8d826a9ca0a8b89757a6e9d9120ef5aba6645f7d476b8698a077801d1452db220fb94
|
@@ -2,9 +2,8 @@ module ForestLiana
|
|
2
2
|
class StripeController < ForestLiana::ApplicationController
|
3
3
|
|
4
4
|
def payments
|
5
|
-
getter = StripePaymentsGetter.new(params,
|
6
|
-
|
7
|
-
request.headers['Stripe-Reference'])
|
5
|
+
getter = StripePaymentsGetter.new(params, request.headers['Stripe-Secret-Key'],
|
6
|
+
request.headers['Stripe-Reference'])
|
8
7
|
getter.perform
|
9
8
|
|
10
9
|
render serializer: nil, json: serialize_models(getter.records, {
|
@@ -14,6 +13,18 @@ module ForestLiana
|
|
14
13
|
})
|
15
14
|
end
|
16
15
|
|
16
|
+
def payment
|
17
|
+
getter = StripePaymentGetter.new(params, request.headers['Stripe-Secret-Key'],
|
18
|
+
request.headers['Stripe-Reference'])
|
19
|
+
getter.perform
|
20
|
+
|
21
|
+
render serializer: nil, json: serialize_model(getter.record, {
|
22
|
+
context: { type: get_serializer_type('stripe_payments') },
|
23
|
+
skip_collection_check: true,
|
24
|
+
include: ['customer']
|
25
|
+
})
|
26
|
+
end
|
27
|
+
|
17
28
|
def refund
|
18
29
|
begin
|
19
30
|
refunder = StripePaymentRefunder.new(params)
|
@@ -26,9 +37,9 @@ module ForestLiana
|
|
26
37
|
end
|
27
38
|
|
28
39
|
def cards
|
29
|
-
|
30
|
-
|
31
|
-
|
40
|
+
params[:object] = 'card'
|
41
|
+
getter = StripeSourcesGetter.new(params, request.headers['Stripe-Secret-Key'],
|
42
|
+
request.headers['Stripe-Reference'])
|
32
43
|
getter.perform
|
33
44
|
|
34
45
|
render serializer: nil, json: serialize_models(getter.records, {
|
@@ -38,10 +49,21 @@ module ForestLiana
|
|
38
49
|
})
|
39
50
|
end
|
40
51
|
|
52
|
+
def card
|
53
|
+
getter = StripeSourceGetter.new(params, request.headers['Stripe-Secret-Key'],
|
54
|
+
request.headers['Stripe-Reference'])
|
55
|
+
getter.perform
|
56
|
+
|
57
|
+
render serializer: nil, json: serialize_model(getter.record, {
|
58
|
+
context: { type: get_serializer_type('stripe_cards') },
|
59
|
+
skip_collection_check: true,
|
60
|
+
include: ['customer']
|
61
|
+
})
|
62
|
+
end
|
63
|
+
|
41
64
|
def invoices
|
42
|
-
getter = StripeInvoicesGetter.new(params,
|
43
|
-
|
44
|
-
request.headers['Stripe-Reference'])
|
65
|
+
getter = StripeInvoicesGetter.new(params, request.headers['Stripe-Secret-Key'],
|
66
|
+
request.headers['Stripe-Reference'])
|
45
67
|
getter.perform
|
46
68
|
|
47
69
|
render serializer: nil, json: serialize_models(getter.records, {
|
@@ -51,10 +73,21 @@ module ForestLiana
|
|
51
73
|
})
|
52
74
|
end
|
53
75
|
|
76
|
+
def invoice
|
77
|
+
getter = StripeInvoiceGetter.new(params, request.headers['Stripe-Secret-Key'],
|
78
|
+
request.headers['Stripe-Reference'])
|
79
|
+
getter.perform
|
80
|
+
|
81
|
+
render serializer: nil, json: serialize_model(getter.record, {
|
82
|
+
context: { type: get_serializer_type('stripe_invoices') },
|
83
|
+
skip_collection_check: true,
|
84
|
+
include: ['customer']
|
85
|
+
})
|
86
|
+
end
|
87
|
+
|
54
88
|
def subscriptions
|
55
|
-
getter = StripeSubscriptionsGetter.new(params,
|
56
|
-
|
57
|
-
request.headers['Stripe-Reference'])
|
89
|
+
getter = StripeSubscriptionsGetter.new(params, request.headers['Stripe-Secret-Key'],
|
90
|
+
request.headers['Stripe-Reference'])
|
58
91
|
getter.perform
|
59
92
|
|
60
93
|
render serializer: nil, json: serialize_models(getter.records, {
|
@@ -64,10 +97,22 @@ module ForestLiana
|
|
64
97
|
})
|
65
98
|
end
|
66
99
|
|
100
|
+
def subscription
|
101
|
+
getter = StripeSubscriptionGetter.new(params, request.headers['Stripe-Secret-Key'],
|
102
|
+
request.headers['Stripe-Reference'])
|
103
|
+
getter.perform
|
104
|
+
|
105
|
+
render serializer: nil, json: serialize_model(getter.record, {
|
106
|
+
context: { type: get_serializer_type('stripe_subscriptions') },
|
107
|
+
skip_collection_check: true,
|
108
|
+
include: ['customer']
|
109
|
+
})
|
110
|
+
end
|
111
|
+
|
67
112
|
def bank_accounts
|
68
|
-
|
69
|
-
|
70
|
-
|
113
|
+
params[:object] = 'bank_account'
|
114
|
+
getter = StripeSourcesGetter.new(params, request.headers['Stripe-Secret-Key'],
|
115
|
+
request.headers['Stripe-Reference'])
|
71
116
|
getter.perform
|
72
117
|
|
73
118
|
render serializer: nil, json: serialize_models(getter.records, {
|
@@ -77,6 +122,18 @@ module ForestLiana
|
|
77
122
|
})
|
78
123
|
end
|
79
124
|
|
125
|
+
def bank_account
|
126
|
+
getter = StripeSourceGetter.new(params, request.headers['Stripe-Secret-Key'],
|
127
|
+
request.headers['Stripe-Reference'])
|
128
|
+
getter.perform
|
129
|
+
|
130
|
+
render serializer: nil, json: serialize_model(getter.record, {
|
131
|
+
context: { type: get_serializer_type('stripe_bank_accounts') },
|
132
|
+
skip_collection_check: true,
|
133
|
+
include: ['customer']
|
134
|
+
})
|
135
|
+
end
|
136
|
+
|
80
137
|
def get_serializer_type(suffix)
|
81
138
|
"#{params[:collection]}_#{suffix}"
|
82
139
|
end
|
@@ -111,6 +111,10 @@ module ForestLiana
|
|
111
111
|
ret[:href] = "/forest/#{ForestLiana.name_for(object.class)}/#{object.id}/stripe_invoices"
|
112
112
|
when :stripe_cards
|
113
113
|
ret[:href] = "/forest/#{ForestLiana.name_for(object.class)}/#{object.id}/stripe_cards"
|
114
|
+
when :stripe_subscriptions
|
115
|
+
ret[:href] = "/forest/#{ForestLiana.name_for(object.class)}/#{object.id}/stripe_subscriptions"
|
116
|
+
when :stripe_bank_accounts
|
117
|
+
ret[:href] = "/forest/#{ForestLiana.name_for(object.class)}/#{object.id}/stripe_bank_accounts"
|
114
118
|
end
|
115
119
|
end
|
116
120
|
|
@@ -241,6 +245,8 @@ module ForestLiana
|
|
241
245
|
serializer.send(:has_many, :stripe_payments) { }
|
242
246
|
serializer.send(:has_many, :stripe_invoices) { }
|
243
247
|
serializer.send(:has_many, :stripe_cards) { }
|
248
|
+
serializer.send(:has_many, :stripe_subscriptions) { }
|
249
|
+
serializer.send(:has_many, :stripe_bank_accounts) { }
|
244
250
|
end
|
245
251
|
|
246
252
|
ForestLiana::SerializerFactory.define_serializer(active_record_class,
|
@@ -2,16 +2,14 @@ module ForestLiana
|
|
2
2
|
class StripeBankAccountSerializer
|
3
3
|
include JSONAPI::Serializer
|
4
4
|
|
5
|
-
attribute :account
|
6
5
|
attribute :account_holder_name
|
7
6
|
attribute :account_holder_type
|
8
7
|
attribute :bank_name
|
9
8
|
attribute :country
|
10
9
|
attribute :currency
|
11
|
-
attribute :default_for_currency
|
12
10
|
attribute :fingerprint
|
13
11
|
attribute :last4
|
14
|
-
attribute :
|
12
|
+
attribute :routing_number
|
15
13
|
attribute :status
|
16
14
|
|
17
15
|
has_one :customer
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module ForestLiana
|
2
|
+
class IntegrationBaseGetter
|
3
|
+
private
|
4
|
+
|
5
|
+
def pagination?
|
6
|
+
@params[:page] && @params[:page][:number]
|
7
|
+
end
|
8
|
+
|
9
|
+
def limit
|
10
|
+
return 10 unless pagination?
|
11
|
+
|
12
|
+
if @params[:page][:size]
|
13
|
+
@params[:page][:size].to_i
|
14
|
+
else
|
15
|
+
10
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def collection
|
20
|
+
@params[:collection].singularize.camelize.constantize
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ForestLiana
|
2
|
-
class IntercomAttributesGetter
|
2
|
+
class IntercomAttributesGetter < IntegrationBaseGetter
|
3
3
|
attr_accessor :record
|
4
4
|
|
5
5
|
def initialize(params)
|
@@ -21,11 +21,5 @@ module ForestLiana
|
|
21
21
|
FOREST_LOGGER.error "Cannot retrieve the Intercom attributes: #{exception.message}"
|
22
22
|
end
|
23
23
|
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def collection
|
28
|
-
@params[:collection].singularize.camelize.constantize
|
29
|
-
end
|
30
24
|
end
|
31
25
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ForestLiana
|
2
|
-
class IntercomConversationsGetter
|
2
|
+
class IntercomConversationsGetter < IntegrationBaseGetter
|
3
3
|
def initialize(params)
|
4
4
|
@params = params
|
5
5
|
@access_token = ForestLiana.integrations[:intercom][:access_token]
|
@@ -38,10 +38,6 @@ module ForestLiana
|
|
38
38
|
|
39
39
|
private
|
40
40
|
|
41
|
-
def collection
|
42
|
-
@params[:collection].singularize.camelize.constantize
|
43
|
-
end
|
44
|
-
|
45
41
|
def pagination
|
46
42
|
offset..(offset + limit - 1)
|
47
43
|
end
|
@@ -56,19 +52,5 @@ module ForestLiana
|
|
56
52
|
0
|
57
53
|
end
|
58
54
|
end
|
59
|
-
|
60
|
-
def limit
|
61
|
-
return 10 unless pagination?
|
62
|
-
|
63
|
-
if @params[:page][:size]
|
64
|
-
@params[:page][:size].to_i
|
65
|
-
else
|
66
|
-
10
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def pagination?
|
71
|
-
@params[:page] && @params[:page][:number]
|
72
|
-
end
|
73
55
|
end
|
74
56
|
end
|
@@ -16,7 +16,7 @@ module ForestLiana
|
|
16
16
|
when 'day'
|
17
17
|
'%d/%m/%Y'
|
18
18
|
when 'week'
|
19
|
-
'W%
|
19
|
+
'W%V-%Y'
|
20
20
|
when 'month'
|
21
21
|
'%b %Y'
|
22
22
|
when 'year'
|
@@ -40,7 +40,11 @@ module ForestLiana
|
|
40
40
|
value = value.where(conditions.join(filter_operator))
|
41
41
|
end
|
42
42
|
|
43
|
-
value = value.send(time_range, group_by_date_field, {
|
43
|
+
value = value.send(time_range, group_by_date_field, {
|
44
|
+
time_zone: client_timezone,
|
45
|
+
week_start: :mon
|
46
|
+
})
|
47
|
+
|
44
48
|
value = value.send(@params[:aggregate].downcase, @params[:aggregate_field])
|
45
49
|
.map do |k, v|
|
46
50
|
{ label: k.strftime(get_format), values: { value: v }}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module ForestLiana
|
2
|
+
class StripeBaseGetter < IntegrationBaseGetter
|
3
|
+
private
|
4
|
+
|
5
|
+
def field
|
6
|
+
ForestLiana.integrations[:stripe][:mapping].select { |value|
|
7
|
+
value.split('.')[0] == ForestLiana::SchemaUtils
|
8
|
+
.find_model_from_collection_name(@params[:collection]).try(:name)
|
9
|
+
}.first.split('.')[1]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module ForestLiana
|
2
|
+
class StripeInvoiceGetter < StripeBaseGetter
|
3
|
+
attr_accessor :record
|
4
|
+
|
5
|
+
def initialize(params, secret_key, reference)
|
6
|
+
@params = params
|
7
|
+
Stripe.api_key = ForestLiana.integrations[:stripe][:api_key]
|
8
|
+
end
|
9
|
+
|
10
|
+
def perform
|
11
|
+
query = {}
|
12
|
+
@record = Stripe::Invoice.retrieve(@params[:invoice_id])
|
13
|
+
|
14
|
+
@record.date = Time.at(@record.date).to_datetime
|
15
|
+
@record.period_start = Time.at(@record.period_start).to_datetime
|
16
|
+
@record.period_end = Time.at(@record.period_end).to_datetime
|
17
|
+
@record.subtotal /= 100.00
|
18
|
+
@record.total /= 100.00
|
19
|
+
@record.amount_due /= 100.00
|
20
|
+
|
21
|
+
query[field] = @record.customer
|
22
|
+
if collection
|
23
|
+
@record.customer = collection.find_by(query)
|
24
|
+
else
|
25
|
+
@record.customer = nil
|
26
|
+
end
|
27
|
+
@record
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ForestLiana
|
2
|
-
class StripeInvoicesGetter
|
2
|
+
class StripeInvoicesGetter < StripeBaseGetter
|
3
3
|
attr_accessor :records
|
4
4
|
|
5
5
|
def initialize(params, secret_key, reference)
|
@@ -66,30 +66,5 @@ module ForestLiana
|
|
66
66
|
@params[:ending_before]
|
67
67
|
end
|
68
68
|
end
|
69
|
-
|
70
|
-
def limit
|
71
|
-
return 10 unless pagination?
|
72
|
-
|
73
|
-
if @params[:page][:size]
|
74
|
-
@params[:page][:size].to_i
|
75
|
-
else
|
76
|
-
10
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def pagination?
|
81
|
-
@params[:page]
|
82
|
-
end
|
83
|
-
|
84
|
-
def collection
|
85
|
-
@params[:collection].singularize.camelize.constantize
|
86
|
-
end
|
87
|
-
|
88
|
-
def field
|
89
|
-
ForestLiana.integrations[:stripe][:mapping].select { |value|
|
90
|
-
value.split('.')[0] == ForestLiana::SchemaUtils
|
91
|
-
.find_model_from_collection_name(@params[:collection]).try(:name)
|
92
|
-
}.first.split('.')[1]
|
93
|
-
end
|
94
69
|
end
|
95
70
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module ForestLiana
|
2
|
+
class StripePaymentGetter < StripeBaseGetter
|
3
|
+
attr_accessor :record
|
4
|
+
|
5
|
+
def initialize(params, secret_key, reference)
|
6
|
+
@params = params
|
7
|
+
Stripe.api_key = ForestLiana.integrations[:stripe][:api_key]
|
8
|
+
end
|
9
|
+
|
10
|
+
def perform
|
11
|
+
query = {}
|
12
|
+
@record = Stripe::Charge.retrieve(@params[:payment_id])
|
13
|
+
|
14
|
+
@record.created = Time.at(@record.created).to_datetime
|
15
|
+
@record.amount /= 100.00
|
16
|
+
|
17
|
+
query[field] = @record.customer
|
18
|
+
if collection
|
19
|
+
@record.customer = collection.find_by(query)
|
20
|
+
else
|
21
|
+
@record.customer = nil
|
22
|
+
end
|
23
|
+
@record
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ForestLiana
|
2
|
-
class StripePaymentsGetter
|
2
|
+
class StripePaymentsGetter < StripeBaseGetter
|
3
3
|
attr_accessor :records
|
4
4
|
|
5
5
|
def initialize(params, secret_key, reference)
|
@@ -64,30 +64,5 @@ module ForestLiana
|
|
64
64
|
@params[:ending_before]
|
65
65
|
end
|
66
66
|
end
|
67
|
-
|
68
|
-
def limit
|
69
|
-
return 10 unless pagination?
|
70
|
-
|
71
|
-
if @params[:page][:size]
|
72
|
-
@params[:page][:size].to_i
|
73
|
-
else
|
74
|
-
10
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def pagination?
|
79
|
-
@params[:page]
|
80
|
-
end
|
81
|
-
|
82
|
-
def collection
|
83
|
-
@params[:collection].singularize.camelize.constantize
|
84
|
-
end
|
85
|
-
|
86
|
-
def field
|
87
|
-
ForestLiana.integrations[:stripe][:mapping].select { |value|
|
88
|
-
value.split('.')[0] == ForestLiana::SchemaUtils
|
89
|
-
.find_model_from_collection_name(@params[:collection]).try(:name)
|
90
|
-
}.first.split('.')[1]
|
91
|
-
end
|
92
67
|
end
|
93
68
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module ForestLiana
|
2
|
+
class StripeSourceGetter < StripeBaseGetter
|
3
|
+
attr_accessor :record
|
4
|
+
|
5
|
+
def initialize(params, secret_key, reference)
|
6
|
+
@params = params
|
7
|
+
Stripe.api_key = ForestLiana.integrations[:stripe][:api_key]
|
8
|
+
end
|
9
|
+
|
10
|
+
def perform
|
11
|
+
resource = collection.find(@params[:recordId])
|
12
|
+
customer = resource[field]
|
13
|
+
|
14
|
+
@record = Stripe::Customer
|
15
|
+
.retrieve(customer)
|
16
|
+
.sources.retrieve(@params[:objectId])
|
17
|
+
|
18
|
+
query = {}
|
19
|
+
query[field] = @record.customer
|
20
|
+
@record.customer = collection.find_by(query)
|
21
|
+
|
22
|
+
@record
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ForestLiana
|
2
|
-
class
|
2
|
+
class StripeSourcesGetter < StripeBaseGetter
|
3
3
|
attr_accessor :records
|
4
4
|
|
5
5
|
def initialize(params, secret_key, reference)
|
@@ -16,7 +16,7 @@ module ForestLiana
|
|
16
16
|
limit: limit,
|
17
17
|
starting_after: starting_after,
|
18
18
|
ending_before: ending_before,
|
19
|
-
object:
|
19
|
+
object: @params[:object]
|
20
20
|
}
|
21
21
|
params['include[]'] = 'total_count'
|
22
22
|
|
@@ -57,30 +57,5 @@ module ForestLiana
|
|
57
57
|
@params[:ending_before]
|
58
58
|
end
|
59
59
|
end
|
60
|
-
|
61
|
-
def limit
|
62
|
-
return 10 unless pagination?
|
63
|
-
|
64
|
-
if @params[:page][:size]
|
65
|
-
@params[:page][:size].to_i
|
66
|
-
else
|
67
|
-
10
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def pagination?
|
72
|
-
@params[:page]
|
73
|
-
end
|
74
|
-
|
75
|
-
def collection
|
76
|
-
@params[:collection].singularize.camelize.constantize
|
77
|
-
end
|
78
|
-
|
79
|
-
def field
|
80
|
-
ForestLiana.integrations[:stripe][:mapping].select { |value|
|
81
|
-
value.split('.')[0] == ForestLiana::SchemaUtils
|
82
|
-
.find_model_from_collection_name(@params[:collection]).try(:name)
|
83
|
-
}.first.split('.')[1]
|
84
|
-
end
|
85
60
|
end
|
86
61
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module ForestLiana
|
2
|
+
class StripeSubscriptionGetter < StripeBaseGetter
|
3
|
+
attr_accessor :record
|
4
|
+
|
5
|
+
def initialize(params, secret_key, reference)
|
6
|
+
@params = params
|
7
|
+
Stripe.api_key = ForestLiana.integrations[:stripe][:api_key]
|
8
|
+
end
|
9
|
+
|
10
|
+
def perform
|
11
|
+
query = {}
|
12
|
+
@record = Stripe::Subscription.retrieve(@params[:subscription_id])
|
13
|
+
|
14
|
+
query[field] = @record.customer
|
15
|
+
if collection
|
16
|
+
@record.customer = collection.find_by(query)
|
17
|
+
else
|
18
|
+
@record.customer = nil
|
19
|
+
end
|
20
|
+
@record
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ForestLiana
|
2
|
-
class StripeSubscriptionsGetter
|
2
|
+
class StripeSubscriptionsGetter < StripeBaseGetter
|
3
3
|
attr_accessor :records
|
4
4
|
|
5
5
|
def initialize(params, secret_key, reference)
|
@@ -31,15 +31,6 @@ module ForestLiana
|
|
31
31
|
end
|
32
32
|
|
33
33
|
@records = @subscriptions.data.map do |d|
|
34
|
-
d.canceled_at = Time.at(d.canceled_at).to_datetime
|
35
|
-
d.created = Time.at(d.created).to_datetime
|
36
|
-
d.current_period_end = Time.at(d.current_period_end).to_datetime
|
37
|
-
d.current_period_start = Time.at(d.current_period_start).to_datetime
|
38
|
-
d.ended_at = Time.at(d.ended_at).to_datetime
|
39
|
-
d.start = Time.at(d.start).to_datetime
|
40
|
-
d.trial_end = Time.at(d.trial_end).to_datetime
|
41
|
-
d.trial_start = Time.at(d.trial_start).to_datetime
|
42
|
-
|
43
34
|
query = {}
|
44
35
|
query[field] = d.customer
|
45
36
|
if collection
|
@@ -68,30 +59,5 @@ module ForestLiana
|
|
68
59
|
@params[:ending_before]
|
69
60
|
end
|
70
61
|
end
|
71
|
-
|
72
|
-
def limit
|
73
|
-
return 10 unless pagination?
|
74
|
-
|
75
|
-
if @params[:page][:size]
|
76
|
-
@params[:page][:size].to_i
|
77
|
-
else
|
78
|
-
10
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def pagination?
|
83
|
-
@params[:page]
|
84
|
-
end
|
85
|
-
|
86
|
-
def collection
|
87
|
-
@params[:collection].singularize.camelize.constantize
|
88
|
-
end
|
89
|
-
|
90
|
-
def field
|
91
|
-
ForestLiana.integrations[:stripe][:mapping].select { |value|
|
92
|
-
value.split('.')[0] == ForestLiana::SchemaUtils
|
93
|
-
.find_model_from_collection_name(@params[:collection]).try(:name)
|
94
|
-
}.first.split('.')[1]
|
95
|
-
end
|
96
62
|
end
|
97
63
|
end
|
data/config/routes.rb
CHANGED
@@ -17,15 +17,20 @@ ForestLiana::Engine.routes.draw do
|
|
17
17
|
post '/stats/:collection' => 'stats#show'
|
18
18
|
|
19
19
|
# Stripe Integration
|
20
|
-
get '(
|
20
|
+
get '(*collection)_stripe_payments' => 'stripe#payments'
|
21
21
|
get ':collection/:id/stripe_payments' => 'stripe#payments'
|
22
|
+
get '(*collection)_stripe_payments/:payment_id' => 'stripe#payment'
|
22
23
|
post 'stripe_payments/refunds' => 'stripe#refund'
|
23
|
-
get '(
|
24
|
+
get '(*collection)_stripe_invoices' => 'stripe#invoices'
|
24
25
|
get ':collection/:id/stripe_invoices' => 'stripe#invoices'
|
26
|
+
get '(*collection)_stripe_invoices/:invoice_id' => 'stripe#invoice'
|
25
27
|
get ':collection/:id/stripe_cards' => 'stripe#cards'
|
26
|
-
get '(
|
28
|
+
get '(*collection)_stripe_cards' => 'stripe#card'
|
29
|
+
get '(*collection)_stripe_subscriptions' => 'stripe#subscriptions'
|
27
30
|
get ':collection/:id/stripe_subscriptions' => 'stripe#subscriptions'
|
31
|
+
get '(*collection)_stripe_subscriptions/:subscription_id' => 'stripe#subscription'
|
28
32
|
get ':collection/:id/stripe_bank_accounts' => 'stripe#bank_accounts'
|
33
|
+
get '(*collection)_stripe_bank_accounts' => 'stripe#bank_account'
|
29
34
|
|
30
35
|
# Intercom Integration
|
31
36
|
get ':collection/:id/intercom_conversations' => 'intercom#conversations'
|
@@ -269,7 +269,7 @@ module ForestLiana
|
|
269
269
|
|
270
270
|
def setup_stripe_integration(collection_name_and_field)
|
271
271
|
collection_name = collection_name_and_field.split('.')[0]
|
272
|
-
model_name = collection_name.constantize
|
272
|
+
model_name = ForestLiana.name_for(collection_name.constantize)
|
273
273
|
collection_display_name = model_name.capitalize
|
274
274
|
|
275
275
|
ForestLiana.apimap << ForestLiana::Model::Collection.new({
|
data/lib/forest_liana/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: forest_liana
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.9.
|
4
|
+
version: 1.9.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sandro Munda
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-11-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -174,6 +174,7 @@ files:
|
|
174
174
|
- app/services/forest_liana/has_many_associator.rb
|
175
175
|
- app/services/forest_liana/has_many_dissociator.rb
|
176
176
|
- app/services/forest_liana/has_many_getter.rb
|
177
|
+
- app/services/forest_liana/integration_base_getter.rb
|
177
178
|
- app/services/forest_liana/intercom_attributes_getter.rb
|
178
179
|
- app/services/forest_liana/intercom_conversation_getter.rb
|
179
180
|
- app/services/forest_liana/intercom_conversations_getter.rb
|
@@ -189,11 +190,15 @@ files:
|
|
189
190
|
- app/services/forest_liana/schema_utils.rb
|
190
191
|
- app/services/forest_liana/search_query_builder.rb
|
191
192
|
- app/services/forest_liana/stat_getter.rb
|
192
|
-
- app/services/forest_liana/
|
193
|
-
- app/services/forest_liana/
|
193
|
+
- app/services/forest_liana/stripe_base_getter.rb
|
194
|
+
- app/services/forest_liana/stripe_invoice_getter.rb
|
194
195
|
- app/services/forest_liana/stripe_invoices_getter.rb
|
196
|
+
- app/services/forest_liana/stripe_payment_getter.rb
|
195
197
|
- app/services/forest_liana/stripe_payment_refunder.rb
|
196
198
|
- app/services/forest_liana/stripe_payments_getter.rb
|
199
|
+
- app/services/forest_liana/stripe_source_getter.rb
|
200
|
+
- app/services/forest_liana/stripe_sources_getter.rb
|
201
|
+
- app/services/forest_liana/stripe_subscription_getter.rb
|
197
202
|
- app/services/forest_liana/stripe_subscriptions_getter.rb
|
198
203
|
- app/services/forest_liana/value_stat_getter.rb
|
199
204
|
- app/views/layouts/forest_liana/application.html.erb
|
@@ -1,86 +0,0 @@
|
|
1
|
-
module ForestLiana
|
2
|
-
class StripeCardsGetter
|
3
|
-
attr_accessor :records
|
4
|
-
|
5
|
-
def initialize(params, secret_key, reference)
|
6
|
-
@params = params
|
7
|
-
Stripe.api_key = ForestLiana.integrations[:stripe][:api_key]
|
8
|
-
end
|
9
|
-
|
10
|
-
def count
|
11
|
-
@cards.try(:total_count) || 0
|
12
|
-
end
|
13
|
-
|
14
|
-
def perform
|
15
|
-
params = {
|
16
|
-
limit: limit,
|
17
|
-
starting_after: starting_after,
|
18
|
-
ending_before: ending_before,
|
19
|
-
object: 'card'
|
20
|
-
}
|
21
|
-
params['include[]'] = 'total_count'
|
22
|
-
|
23
|
-
resource = collection.find(@params[:id])
|
24
|
-
customer = resource[field]
|
25
|
-
|
26
|
-
if customer.blank?
|
27
|
-
@records = []
|
28
|
-
else
|
29
|
-
fetch_cards(customer, params)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def fetch_cards(customer, params)
|
34
|
-
@cards = Stripe::Customer.retrieve(customer).sources.all(params)
|
35
|
-
if @cards.blank?
|
36
|
-
@records = []
|
37
|
-
return
|
38
|
-
end
|
39
|
-
|
40
|
-
@records = @cards.data.map do |d|
|
41
|
-
query = {}
|
42
|
-
query[field] = d.customer
|
43
|
-
d.customer = collection.find_by(query)
|
44
|
-
|
45
|
-
d
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def starting_after
|
50
|
-
if pagination? && @params[:starting_after]
|
51
|
-
@params[:starting_after]
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def ending_before
|
56
|
-
if pagination? && @params[:ending_before]
|
57
|
-
@params[:ending_before]
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def limit
|
62
|
-
return 10 unless pagination?
|
63
|
-
|
64
|
-
if @params[:page][:size]
|
65
|
-
@params[:page][:size].to_i
|
66
|
-
else
|
67
|
-
10
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def pagination?
|
72
|
-
@params[:page]
|
73
|
-
end
|
74
|
-
|
75
|
-
def collection
|
76
|
-
@params[:collection].singularize.camelize.constantize
|
77
|
-
end
|
78
|
-
|
79
|
-
def field
|
80
|
-
ForestLiana.integrations[:stripe][:mapping].select { |value|
|
81
|
-
value.split('.')[0] == ForestLiana::SchemaUtils
|
82
|
-
.find_model_from_collection_name(@params[:collection]).try(:name)
|
83
|
-
}.first.split('.')[1]
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|