app_manager 1.3.6 → 1.3.7
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/app/controllers/app_manager/charges_controller.rb +27 -6
- data/app/controllers/app_manager/plans_controller.rb +20 -6
- data/lib/app_manager/client/connection.rb +9 -6
- data/lib/app_manager/fail_safe.rb +47 -7
- data/lib/app_manager/graphql_helper.rb +15 -3
- data/lib/app_manager/version.rb +1 -1
- data/lib/generators/app_manager/install/templates/app_manager.rb.tt +2 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac3a1d17d520c154419fd5917813fda210900f58d12686723bacf05d99ecbd14
|
4
|
+
data.tar.gz: 0f62d38f1160f30e07eb96007f845395ce397f70d82043f76f71aaf8c564e0e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c6136666c06d579b448ab775a4e9cc6c72f314f0ffc39baccece2d9fe3951a56c1853848d6e83bdfb847037680d2b1e978a4e04b0d440fbc783169a6ecac3e06
|
7
|
+
data.tar.gz: 730a1f415a8d7a679ade4bb74b60b84ddc109ecfa661dc950c666c8fa8bdef44dd3faf6d14d0979052ae73c58350ff53225e0fe51f96f4f463a19f7c50314e95
|
data/Gemfile.lock
CHANGED
@@ -10,6 +10,7 @@ module AppManager
|
|
10
10
|
def process_plan
|
11
11
|
if params[:shop].present? && params[:plan_id].present?
|
12
12
|
@shop = shop_data
|
13
|
+
grandfathered_field = @field_names['grandfathered']
|
13
14
|
if !@shop.nil?
|
14
15
|
plan_obj = AppManager::Client.new
|
15
16
|
plan_data = plan_obj.get_plan(params[:plan_id], params[:shop])
|
@@ -29,8 +30,13 @@ module AppManager
|
|
29
30
|
rescue Exception => e
|
30
31
|
Rollbar.error("APP MANAGER Process Plan Failed #{e}")
|
31
32
|
end
|
32
|
-
|
33
|
-
|
33
|
+
@trial_activated_field = AppManager.configuration.field_names['trial_activated_at']
|
34
|
+
update_info = {@plan_field => params[:plan_id], @trial_activated_field => nil,grandfathered_field => 0}
|
35
|
+
if !config_trial_days.nil? && !plan_data.nil?
|
36
|
+
trial_days = plan_data['trial_days'] || 0
|
37
|
+
update_info[config_trial_days] = trial_days
|
38
|
+
end
|
39
|
+
if @shop.update(update_info)
|
34
40
|
begin
|
35
41
|
AppManager::EventHandler.new('charge_created', {
|
36
42
|
"plan" => plan_data,
|
@@ -42,8 +48,8 @@ module AppManager
|
|
42
48
|
Rollbar.error("APP MANAGER Error in Process Plan #{e}")
|
43
49
|
end
|
44
50
|
AppManager.clear_cache
|
45
|
-
render json: {'redirect_url' => "#{app_url}?shop=#{params[:shop]}"} and return true
|
46
|
-
|
51
|
+
# render json: {'redirect_url' => "#{app_url}?shop=#{params[:shop]}"} and return true
|
52
|
+
render json: {'status' => true,'plan_type' => 'free_plan'} and return true
|
47
53
|
else
|
48
54
|
raise Error, "Invalid charge"
|
49
55
|
end
|
@@ -106,7 +112,14 @@ module AppManager
|
|
106
112
|
|
107
113
|
if response['message'] == "success"
|
108
114
|
AppManager.clear_cache
|
109
|
-
|
115
|
+
|
116
|
+
update_info = {@plan_field => params[:plan],grandfathered_field => 0}
|
117
|
+
if !config_trial_days.nil? && !plan_data.nil?
|
118
|
+
trial_days = plan_data['trial_days'] || 0
|
119
|
+
update_info[config_trial_days] = trial_days
|
120
|
+
end
|
121
|
+
|
122
|
+
@shop.update(update_info)
|
110
123
|
Thread.new do
|
111
124
|
charge_data = plan_obj.get_charge(@shop[shopify_domain])
|
112
125
|
begin
|
@@ -133,7 +146,6 @@ module AppManager
|
|
133
146
|
redirect_to "#{app_url}?shop=#{params[:shop]}", :status => 301 and return
|
134
147
|
else
|
135
148
|
raise Error, "Invalid params, must have charge_id,shop && plan in charge controller"
|
136
|
-
|
137
149
|
end
|
138
150
|
end
|
139
151
|
end
|
@@ -170,6 +182,15 @@ module AppManager
|
|
170
182
|
AppManager.configuration.app_url
|
171
183
|
end
|
172
184
|
|
185
|
+
def config_trial_days
|
186
|
+
@field_names = AppManager.configuration.field_names
|
187
|
+
if !@field_names.nil? && @field_names.has_key?('total_trial_days') && !@field_names['total_trial_days'].nil? && !@field_names['total_trial_days'].blank?
|
188
|
+
return @field_names['total_trial_days']
|
189
|
+
else
|
190
|
+
return nil
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
173
194
|
|
174
195
|
end
|
175
196
|
end
|
@@ -86,17 +86,17 @@ module AppManager
|
|
86
86
|
plans = plans.values if !plans.nil?
|
87
87
|
shopify_plans = params[:shopify_plans] || nil
|
88
88
|
shopify_plans = shopify_plans.values if !shopify_plans.nil?
|
89
|
-
items_per_page =
|
89
|
+
items_per_page = 25
|
90
90
|
@shopify_email = AppManager.configuration.field_names['shopify_email']
|
91
91
|
@shopify_plan_name_field = AppManager.configuration.field_names['shopify_plan']
|
92
|
-
data = model
|
93
92
|
if params[:search]
|
94
93
|
data = model.where("#{@shopify_domain} LIKE :search OR #{@shopify_email} LIKE :search", search: "%#{search}%")
|
95
94
|
data = data.where(@plan_field => plans) if !plans.nil?
|
96
95
|
data = data.where(@shopify_plan_name_field => shopify_plans) if !shopify_plans.nil?
|
97
96
|
data = data.page(params[:page]).per(items_per_page)
|
98
97
|
else
|
99
|
-
data = model
|
98
|
+
data = model
|
99
|
+
data = data.where(@plan_field => plans) if !plans.nil?
|
100
100
|
data = data.where(@shopify_plan_name_field => shopify_plans) if !shopify_plans.nil?
|
101
101
|
data = data.page(params[:page]).per(items_per_page)
|
102
102
|
end
|
@@ -126,11 +126,16 @@ module AppManager
|
|
126
126
|
if params[:shop_domain].present? && params[:plan_id].present? && model
|
127
127
|
@shop = shop_data
|
128
128
|
@trial_activated_field = AppManager.configuration.field_names['trial_activated_at']
|
129
|
-
|
129
|
+
plan_obj = AppManager::Client.new
|
130
|
+
plan_data = plan_obj.get_plan(params[:plan_id], params[:shop_domain]) rescue nil
|
131
|
+
update_info = {@plan_field => params[:plan_id], @trial_activated_field => DateTime.now}
|
132
|
+
if !config_trial_days.nil? && !plan_data.nil?
|
133
|
+
trial_days = plan_data['trial_days'] || 0
|
134
|
+
update_info[config_trial_days] = trial_days
|
135
|
+
end
|
136
|
+
if @shop.update(update_info)
|
130
137
|
begin
|
131
138
|
AppManager.clear_cache
|
132
|
-
plan_obj = AppManager::Client.new
|
133
|
-
plan_data = plan_obj.get_plan(params[:plan_id], params[:shop_domain]) rescue nil
|
134
139
|
AppManager::EventHandler.new('charge_created', {
|
135
140
|
"plan" => plan_data,
|
136
141
|
"charge" => nil,
|
@@ -210,5 +215,14 @@ module AppManager
|
|
210
215
|
AppManager.configuration.app_url
|
211
216
|
end
|
212
217
|
|
218
|
+
def config_trial_days
|
219
|
+
@field_names = AppManager.configuration.field_names
|
220
|
+
if !@field_names.nil? && @field_names.has_key?('total_trial_days') && !@field_names['total_trial_days'].nil? && !@field_names['total_trial_days'].blank?
|
221
|
+
return @field_names['total_trial_days']
|
222
|
+
else
|
223
|
+
return nil
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
213
227
|
end
|
214
228
|
end
|
@@ -28,7 +28,8 @@ module AppManager
|
|
28
28
|
response = response_from_cache_for_api(http_method, path, options)
|
29
29
|
failsafe_or_caching_done = true
|
30
30
|
else
|
31
|
-
|
31
|
+
time_out = Rails.env.development? ? 120 : 30
|
32
|
+
response = self.class.send(http_method, path, { body: options, timeout: time_out })
|
32
33
|
end
|
33
34
|
if path.include? "/get-status"
|
34
35
|
data = response
|
@@ -60,13 +61,15 @@ module AppManager
|
|
60
61
|
end
|
61
62
|
begin
|
62
63
|
response = self.class.send(http_method, path, { body: options, timeout: 15 })
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
64
|
+
if response.class.to_s == "HTTParty::Response" && (response.code.to_s.start_with?('2') or response.code.to_s.start_with?('4')) && (response.code.to_s != '429')
|
65
|
+
Rails.cache.write(cache_key, response, expires_in: AppManager.configuration.expires_in)
|
66
|
+
else
|
67
|
+
response = response_from_failsafe(path,options)
|
68
|
+
end
|
68
69
|
rescue Net::ReadTimeout => error
|
69
70
|
response = response_from_failsafe(path,options)
|
71
|
+
rescue Exception => e
|
72
|
+
response = response_from_failsafe(path,options)
|
70
73
|
end
|
71
74
|
return response
|
72
75
|
end
|
@@ -63,7 +63,12 @@ module AppManager
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def save_api_plans(plans)
|
66
|
-
|
66
|
+
begin
|
67
|
+
# ActiveRecord::Base.establish_connection(:app_manager).connection.execute("TRUNCATE plans RESTART IDENTITY")
|
68
|
+
AppManager::Plan.connection.truncate(AppManager::Plan.table_name)
|
69
|
+
rescue
|
70
|
+
AppManager::Plan.delete_all
|
71
|
+
end
|
67
72
|
if plans.any?
|
68
73
|
plan_data = []
|
69
74
|
plans.each do |plan|
|
@@ -87,7 +92,12 @@ module AppManager
|
|
87
92
|
|
88
93
|
|
89
94
|
def save_api_charges(charges)
|
90
|
-
|
95
|
+
begin
|
96
|
+
# ActiveRecord::Base.establish_connection(:app_manager).connection.execute("TRUNCATE charges RESTART IDENTITY")
|
97
|
+
AppManager::Charge.connection.truncate(AppManager::Charge.table_name)
|
98
|
+
rescue
|
99
|
+
AppManager::Charge.delete_all
|
100
|
+
end
|
91
101
|
if charges.any?
|
92
102
|
charge_data = []
|
93
103
|
charges.each do |charge|
|
@@ -100,7 +110,12 @@ module AppManager
|
|
100
110
|
|
101
111
|
|
102
112
|
def save_api_apps(apps)
|
103
|
-
|
113
|
+
begin
|
114
|
+
# ActiveRecord::Base.establish_connection(:app_manager).connection.execute("TRUNCATE apps RESTART IDENTITY")
|
115
|
+
AppManager::App.connection.truncate(AppManager::App.table_name)
|
116
|
+
rescue
|
117
|
+
AppManager::App.delete_all
|
118
|
+
end
|
104
119
|
if apps.any?
|
105
120
|
apps_data = []
|
106
121
|
apps.each do |app|
|
@@ -112,12 +127,22 @@ module AppManager
|
|
112
127
|
|
113
128
|
#Complete
|
114
129
|
def save_api_app_structures(app_structures)
|
115
|
-
|
130
|
+
begin
|
131
|
+
# ActiveRecord::Base.establish_connection(:app_manager).connection.execute("TRUNCATE app_structures RESTART IDENTITY")
|
132
|
+
AppManager::AppStructure.connection.truncate(AppManager::AppStructure.table_name)
|
133
|
+
rescue
|
134
|
+
AppManager::AppStructure.delete_all
|
135
|
+
end
|
116
136
|
AppManager::AppStructure.create(banners: app_structures.to_h)
|
117
137
|
end
|
118
138
|
|
119
139
|
def save_api_discount_plans(discount_plans)
|
120
|
-
|
140
|
+
begin
|
141
|
+
# ActiveRecord::Base.establish_connection(:app_manager).connection.execute("TRUNCATE discount_plans RESTART IDENTITY")
|
142
|
+
AppManager::DiscountPlan.connection.truncate(AppManager::DiscountPlan.table_name)
|
143
|
+
rescue
|
144
|
+
AppManager::DiscountPlan.delete_all
|
145
|
+
end
|
121
146
|
if discount_plans.any?
|
122
147
|
discount_plans_data = []
|
123
148
|
discount_plans.each do |discount_plan|
|
@@ -128,7 +153,12 @@ module AppManager
|
|
128
153
|
end
|
129
154
|
|
130
155
|
def save_api_extend_trials(extend_trials)
|
131
|
-
|
156
|
+
begin
|
157
|
+
# ActiveRecord::Base.establish_connection(:app_manager).connection.execute("TRUNCATE extend_trials RESTART IDENTITY")
|
158
|
+
AppManager::ExtendTrial.connection.truncate(AppManager::ExtendTrial.table_name)
|
159
|
+
rescue
|
160
|
+
AppManager::ExtendTrial.delete_all
|
161
|
+
end
|
132
162
|
if extend_trials.any?
|
133
163
|
extend_trials_data = []
|
134
164
|
extend_trials.each do |extend_trial|
|
@@ -139,7 +169,12 @@ module AppManager
|
|
139
169
|
end
|
140
170
|
|
141
171
|
def save_api_plan_users(plan_users)
|
142
|
-
|
172
|
+
begin
|
173
|
+
# ActiveRecord::Base.establish_connection(:app_manager).connection.execute("TRUNCATE plan_users RESTART IDENTITY")
|
174
|
+
AppManager::PlanUser.connection.truncate(AppManager::PlanUser.table_name)
|
175
|
+
rescue
|
176
|
+
AppManager::PlanUser.delete_all
|
177
|
+
end
|
143
178
|
if plan_users.any?
|
144
179
|
extend_plan_users = []
|
145
180
|
plan_users.each do |plan_user|
|
@@ -376,6 +411,11 @@ module AppManager
|
|
376
411
|
if charge['trial_ends_on'] && DateTime.now < charge['trial_ends_on']
|
377
412
|
@remaining_days = (charge['trial_ends_on'].to_datetime - DateTime.now.to_datetime).to_i
|
378
413
|
end
|
414
|
+
|
415
|
+
# ADD EXTRA DAY
|
416
|
+
if charge['created_at'] && ((charge['created_at'].to_datetime - DateTime.now.to_datetime).to_i == 0)
|
417
|
+
@remaining_days = @remaining_days + 1
|
418
|
+
end
|
379
419
|
# TODO: Uncomment this code when we implement Shopify trial extension apis
|
380
420
|
# trial_extension_data = AppManager::ExtendTrial.where(shop_domain: @shop_domain, plan_id: @plan_id).order(extend_trial_start_at: :desc)
|
381
421
|
# if trial_extension_data.any?
|
@@ -59,15 +59,27 @@ module AppManager
|
|
59
59
|
plan_test = true
|
60
60
|
end
|
61
61
|
trial_days = plan['trial_days'] || 0
|
62
|
-
|
63
62
|
if shop && shop.shopify_domain && trial_days
|
64
63
|
trial_activated_at = shop[AppManager.configuration.field_names['trial_activated_at']] rescue nil
|
65
64
|
plan_id_field = shop[AppManager.configuration.plan_id_or_name_field] rescue nil
|
66
65
|
remaining_obj = AppManager::Client.new
|
67
66
|
remaining = remaining_obj.get_remaining_days(shop.shopify_domain,trial_activated_at,plan_id_field)
|
68
|
-
trial_days = !remaining.nil? ? remaining : trial_days
|
67
|
+
# trial_days = !remaining.nil? ? remaining : trial_days
|
68
|
+
if !remaining.nil?
|
69
|
+
if !plan_id_field.nil?
|
70
|
+
plan_obj = AppManager::Client.new
|
71
|
+
current_plan = plan_obj.get_plan(plan_id_field) rescue nil
|
72
|
+
used_days = (current_plan['trial_days'].to_i - remaining.to_i) if current_plan rescue 0
|
73
|
+
if used_days > 0
|
74
|
+
days = trial_days - used_days
|
75
|
+
trial_days = days > 0 ? days : 0
|
76
|
+
end
|
77
|
+
else
|
78
|
+
trial_days = remaining
|
79
|
+
end
|
80
|
+
end
|
69
81
|
end
|
70
|
-
|
82
|
+
|
71
83
|
discount_type = plan['discount_type'] || "percentage"
|
72
84
|
discount_val = discount_type == "percentage" ? (plan['discount'].to_f/ 100) : "#{plan['discount']}"
|
73
85
|
plan_discount = plan['discount'] ? { "discount" => { "durationLimitInIntervals" => (plan['cycle_count'].to_i || 0), "value" => {"#{discount_type}" => discount_val} } } : {}
|
data/lib/app_manager/version.rb
CHANGED
@@ -15,7 +15,8 @@ AppManager.configure do |config|
|
|
15
15
|
'plan_id' => 'plan_id', # 1. t
|
16
16
|
'created_at' => 'created_at', # 2022-04-15 10:43:05
|
17
17
|
'trial_activated_at' => 'trial_activated_at', # field name that stores trial start/activated date
|
18
|
-
'grandfathered' => 'grandfathered'
|
18
|
+
'grandfathered' => 'grandfathered',
|
19
|
+
'total_trial_days' => '' #optional, put a trial days field from your shops table otherwise leave it blank
|
19
20
|
}
|
20
21
|
config.plan_features = [
|
21
22
|
{
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: app_manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hulkapps
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-07-
|
11
|
+
date: 2022-07-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|