app_manager 1.5.1 → 1.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9eb9bc0a4313a949cced988b7ffa0e53024315cfb2b9eb569ff894ed88ac8560
4
- data.tar.gz: 0e472449feeed50f948429654a88af26270e04458a5b17c71ac1de744cea4561
3
+ metadata.gz: bf415f568160cb4d0f964d01a39022df2906cd0cce3f5511f1a3f2fc19fe1155
4
+ data.tar.gz: fe3d01cf07acc3346a00f43723a016d86884a1fc01820b882de0462a6d92ecec
5
5
  SHA512:
6
- metadata.gz: 9af3ef94b7b03ab0cfeaac11b0a86cca8f52aaf7fbb06505948284b85c50bec857d1c1299204213ca2e65b967d8a08f1856e3de74aaec8ffc4d5c541cecb5d62
7
- data.tar.gz: 9cbb882ff71992dc5653257c53906cea1f5db98f981ffc74001f0aa00f81ff16c4103774140a4053a941f99ba1cc7d115dc27e21b6031817bd8da2cd692cceb5
6
+ metadata.gz: 1d2884af860d6872fa7e434574743219b8f8ca6cba0fa186c7ce05f5383c68cb4323ceff6d5c0bf984fbdc6231939a81005fdad0f500efeb56c8888ecfc86e67
7
+ data.tar.gz: 00ade8b2e4e6a9160a8c8e445d8693b39b79ffe649dedde189fa83856e9876d06d8bdfa7963a87010da4f268c0ccfdbf34fc096f665929db79db2ecb38e80d14
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- app_manager (1.5.1)
4
+ app_manager (1.6.1)
5
5
  activerecord-import (~> 1.4)
6
6
  httparty
7
7
  kaminari (>= 0.16.3)
@@ -10,69 +10,69 @@ PATH
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
- actioncable (7.0.4.2)
14
- actionpack (= 7.0.4.2)
15
- activesupport (= 7.0.4.2)
13
+ actioncable (7.0.4.3)
14
+ actionpack (= 7.0.4.3)
15
+ activesupport (= 7.0.4.3)
16
16
  nio4r (~> 2.0)
17
17
  websocket-driver (>= 0.6.1)
18
- actionmailbox (7.0.4.2)
19
- actionpack (= 7.0.4.2)
20
- activejob (= 7.0.4.2)
21
- activerecord (= 7.0.4.2)
22
- activestorage (= 7.0.4.2)
23
- activesupport (= 7.0.4.2)
18
+ actionmailbox (7.0.4.3)
19
+ actionpack (= 7.0.4.3)
20
+ activejob (= 7.0.4.3)
21
+ activerecord (= 7.0.4.3)
22
+ activestorage (= 7.0.4.3)
23
+ activesupport (= 7.0.4.3)
24
24
  mail (>= 2.7.1)
25
25
  net-imap
26
26
  net-pop
27
27
  net-smtp
28
- actionmailer (7.0.4.2)
29
- actionpack (= 7.0.4.2)
30
- actionview (= 7.0.4.2)
31
- activejob (= 7.0.4.2)
32
- activesupport (= 7.0.4.2)
28
+ actionmailer (7.0.4.3)
29
+ actionpack (= 7.0.4.3)
30
+ actionview (= 7.0.4.3)
31
+ activejob (= 7.0.4.3)
32
+ activesupport (= 7.0.4.3)
33
33
  mail (~> 2.5, >= 2.5.4)
34
34
  net-imap
35
35
  net-pop
36
36
  net-smtp
37
37
  rails-dom-testing (~> 2.0)
38
- actionpack (7.0.4.2)
39
- actionview (= 7.0.4.2)
40
- activesupport (= 7.0.4.2)
38
+ actionpack (7.0.4.3)
39
+ actionview (= 7.0.4.3)
40
+ activesupport (= 7.0.4.3)
41
41
  rack (~> 2.0, >= 2.2.0)
42
42
  rack-test (>= 0.6.3)
43
43
  rails-dom-testing (~> 2.0)
44
44
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
45
- actiontext (7.0.4.2)
46
- actionpack (= 7.0.4.2)
47
- activerecord (= 7.0.4.2)
48
- activestorage (= 7.0.4.2)
49
- activesupport (= 7.0.4.2)
45
+ actiontext (7.0.4.3)
46
+ actionpack (= 7.0.4.3)
47
+ activerecord (= 7.0.4.3)
48
+ activestorage (= 7.0.4.3)
49
+ activesupport (= 7.0.4.3)
50
50
  globalid (>= 0.6.0)
51
51
  nokogiri (>= 1.8.5)
52
- actionview (7.0.4.2)
53
- activesupport (= 7.0.4.2)
52
+ actionview (7.0.4.3)
53
+ activesupport (= 7.0.4.3)
54
54
  builder (~> 3.1)
55
55
  erubi (~> 1.4)
56
56
  rails-dom-testing (~> 2.0)
57
57
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
58
- activejob (7.0.4.2)
59
- activesupport (= 7.0.4.2)
58
+ activejob (7.0.4.3)
59
+ activesupport (= 7.0.4.3)
60
60
  globalid (>= 0.3.6)
61
- activemodel (7.0.4.2)
62
- activesupport (= 7.0.4.2)
63
- activerecord (7.0.4.2)
64
- activemodel (= 7.0.4.2)
65
- activesupport (= 7.0.4.2)
61
+ activemodel (7.0.4.3)
62
+ activesupport (= 7.0.4.3)
63
+ activerecord (7.0.4.3)
64
+ activemodel (= 7.0.4.3)
65
+ activesupport (= 7.0.4.3)
66
66
  activerecord-import (1.4.1)
67
67
  activerecord (>= 4.2)
68
- activestorage (7.0.4.2)
69
- actionpack (= 7.0.4.2)
70
- activejob (= 7.0.4.2)
71
- activerecord (= 7.0.4.2)
72
- activesupport (= 7.0.4.2)
68
+ activestorage (7.0.4.3)
69
+ actionpack (= 7.0.4.3)
70
+ activejob (= 7.0.4.3)
71
+ activerecord (= 7.0.4.3)
72
+ activesupport (= 7.0.4.3)
73
73
  marcel (~> 1.0)
74
74
  mini_mime (>= 1.1.0)
75
- activesupport (7.0.4.2)
75
+ activesupport (7.0.4.3)
76
76
  concurrent-ruby (~> 1.0, >= 1.0.2)
77
77
  i18n (>= 1.6, < 2)
78
78
  minitest (>= 5.1)
@@ -81,7 +81,7 @@ GEM
81
81
  public_suffix (>= 2.0.2, < 5.0)
82
82
  builder (3.2.4)
83
83
  coderay (1.1.3)
84
- concurrent-ruby (1.2.0)
84
+ concurrent-ruby (1.2.2)
85
85
  crack (0.4.5)
86
86
  rexml
87
87
  crass (1.0.6)
@@ -121,7 +121,7 @@ GEM
121
121
  method_source (1.0.0)
122
122
  mini_mime (1.1.2)
123
123
  mini_portile2 (2.8.1)
124
- minitest (5.17.0)
124
+ minitest (5.18.0)
125
125
  multi_xml (0.6.0)
126
126
  net-imap (0.3.4)
127
127
  date
@@ -133,7 +133,7 @@ GEM
133
133
  net-smtp (0.3.3)
134
134
  net-protocol
135
135
  nio4r (2.5.8)
136
- nokogiri (1.14.1)
136
+ nokogiri (1.14.2)
137
137
  mini_portile2 (~> 2.8.0)
138
138
  racc (~> 1.4)
139
139
  pry (0.14.1)
@@ -141,31 +141,31 @@ GEM
141
141
  method_source (~> 1.0)
142
142
  public_suffix (4.0.6)
143
143
  racc (1.6.2)
144
- rack (2.2.6.2)
145
- rack-test (2.0.2)
144
+ rack (2.2.6.4)
145
+ rack-test (2.1.0)
146
146
  rack (>= 1.3)
147
- rails (7.0.4.2)
148
- actioncable (= 7.0.4.2)
149
- actionmailbox (= 7.0.4.2)
150
- actionmailer (= 7.0.4.2)
151
- actionpack (= 7.0.4.2)
152
- actiontext (= 7.0.4.2)
153
- actionview (= 7.0.4.2)
154
- activejob (= 7.0.4.2)
155
- activemodel (= 7.0.4.2)
156
- activerecord (= 7.0.4.2)
157
- activestorage (= 7.0.4.2)
158
- activesupport (= 7.0.4.2)
147
+ rails (7.0.4.3)
148
+ actioncable (= 7.0.4.3)
149
+ actionmailbox (= 7.0.4.3)
150
+ actionmailer (= 7.0.4.3)
151
+ actionpack (= 7.0.4.3)
152
+ actiontext (= 7.0.4.3)
153
+ actionview (= 7.0.4.3)
154
+ activejob (= 7.0.4.3)
155
+ activemodel (= 7.0.4.3)
156
+ activerecord (= 7.0.4.3)
157
+ activestorage (= 7.0.4.3)
158
+ activesupport (= 7.0.4.3)
159
159
  bundler (>= 1.15.0)
160
- railties (= 7.0.4.2)
160
+ railties (= 7.0.4.3)
161
161
  rails-dom-testing (2.0.3)
162
162
  activesupport (>= 4.2.0)
163
163
  nokogiri (>= 1.6)
164
164
  rails-html-sanitizer (1.5.0)
165
165
  loofah (~> 2.19, >= 2.19.1)
166
- railties (7.0.4.2)
167
- actionpack (= 7.0.4.2)
168
- activesupport (= 7.0.4.2)
166
+ railties (7.0.4.3)
167
+ actionpack (= 7.0.4.3)
168
+ activesupport (= 7.0.4.3)
169
169
  method_source
170
170
  rake (>= 12.2)
171
171
  thor (~> 1.0)
@@ -188,7 +188,7 @@ GEM
188
188
  rspec-support (~> 3.11.0)
189
189
  rspec-support (3.11.0)
190
190
  thor (1.2.1)
191
- timeout (0.3.1)
191
+ timeout (0.3.2)
192
192
  tzinfo (2.0.6)
193
193
  concurrent-ruby (~> 1.0)
194
194
  webmock (3.14.0)
@@ -198,7 +198,7 @@ GEM
198
198
  websocket-driver (0.7.5)
199
199
  websocket-extensions (>= 0.1.0)
200
200
  websocket-extensions (0.1.5)
201
- zeitwerk (2.6.6)
201
+ zeitwerk (2.6.7)
202
202
 
203
203
  PLATFORMS
204
204
  ruby
data/README.md CHANGED
@@ -55,6 +55,7 @@ AppManager.configure do |config|
55
55
  config.shopify_table_name = 'shops' # Table name which is generated by shopify mostly it is 'shops'
56
56
  config.shopify_domain_field = 'shopify_domain' #shopify domain field
57
57
  config.plan_id_or_name_field = 'plan_id'
58
+ config.shopify_app_slug = '' #Add your app slug here
58
59
  config.field_names = {
59
60
  'name' => 'shopify_domain', # demo-rahul-tiwari.myshopify.com
60
61
  'shopify_email' => 'email', # rahul.t@hulkapps.com
@@ -63,7 +64,8 @@ AppManager.configure do |config|
63
64
  'plan_id' => 'plan_id', # 1. t
64
65
  'created_at' => 'created_at', # 2022-04-15 10:43:05
65
66
  'trial_activated_at' => 'trial_activated_at', # field name that stores trial start/activated date
66
- 'grandfathered' => 'grandfathered'
67
+ 'grandfathered' => 'grandfathered',
68
+ 'total_trial_days' => '' #optional, put a trial days field from your shops table otherwise leave it blank
67
69
  }
68
70
  config.plan_features = [
69
71
  {
@@ -119,7 +121,7 @@ AppManager.configure do |config|
119
121
  "group_order" => "1",
120
122
  "group" => "Group Name",
121
123
  }
122
- ]
124
+ ]
123
125
  end
124
126
  #Required, Values type : integer, boolean, string, array #
125
127
  #Format: percentage, count, string
@@ -173,9 +175,11 @@ and then you can use follwing methods with your shop objects.
173
175
 
174
176
  if you pass @shop.get_plan(plan_id) it will return that particular plan hash like @shop.get_plan(311)
175
177
 
176
- @shop.get_charge # return current charge hash, it will return nil if current plan is free
178
+ @shop.get_charge # return current charge hash from app manager with 'active_charge' & 'cancelled_charge' keys, it will return nil if current plan is free
177
179
 
178
- @shop.set_default_plan(plan_id=nil) #if plan id is passed nil, then it will set the free(public and $0 price) to active and if passed it will set that plan to active plan
180
+ @shop.cancel_charge # it will cancel charge in app manager and will return success to true if done from app manager
181
+
182
+ @shop.set_default_plan(plan_id=nil) #if plan id is passed nil, then it will set the free(public and $0 price) plan_id in database and if passed it will set that plan_id in database.
179
183
 
180
184
  @shop.get_plans_by_features(feature_slugs) # pass feature_slugs as an array even if one slug and it will return plans array which have that slug found. Example:
181
185
 
@@ -191,6 +195,16 @@ and then you can use follwing methods with your shop objects.
191
195
 
192
196
  @shop.get_all_plans # return all app plans array
193
197
 
198
+ @shop.get_active_charge_app_manager # return active charge hash from app manager otherwise nil
199
+
200
+ @shop.update_app_manager_charge # return true if shop has shopify recurring charge but app manager doesn't then it update to app manager and return true otherwise nil
201
+
202
+ @shop.get_current_shopify_charge # return active charge hash from shopify https://shopify.dev/docs/api/admin-graphql/2022-10/queries/currentAppInstallation otherwise nil
203
+
204
+ @shop.active_shopify_charge_id # return active shopify charge id if shop has any current shopify reccurring charge otherwise nil
205
+
206
+ @shop.cancel_current_shopify_charge # It will cancel charge in shopify if there is any, if success then it will cancel charge in app manager as well using (@shop.cancel_charge ) and will make plan_id and grandfathered field to false. It will clear cache as well.
207
+
194
208
  ```
195
209
 
196
210
 
@@ -16,15 +16,18 @@ module AppManager
16
16
  plan_data = plan_obj.get_plan(params[:plan_id], params[:shop])
17
17
  # render json: plan_data and return #use this to test plan failsafe api
18
18
  if plan_data.present? && plan_data.is_a?(Hash)
19
- if plan_data['price'] == 0
19
+ if plan_data['price'] == 0 && plan_data['is_external_charge'] == false
20
20
  active_charge_data = plan_obj.get_charge(params[:shop])
21
21
  begin
22
22
  if active_charge_data && active_charge_data.any? && !active_charge_data['active_charge'].nil? && !active_charge_data['active_charge']['charge_id'].nil?
23
23
  gq_obj = AppManager::GraphqlHelper.new(@shop.shopify_domain, @shop.shopify_token)
24
24
  rec_cancel_data = gq_obj.recurring_charge_cancel_api_call(active_charge_data['active_charge']['charge_id'], @shop)
25
25
  if !rec_cancel_data["errors"].present? && (rec_cancel_data["data"].present? && rec_cancel_data["data"]["appSubscriptionCancel"].present? && !rec_cancel_data["data"]["appSubscriptionCancel"]["userErrors"].any? && (rec_cancel_data["data"]["appSubscriptionCancel"]["appSubscription"]["status"] == 'CANCELLED'))
26
- cancelled_charge_id = rec_cancel_data["data"]["appSubscriptionCancel"]["appSubscription"]["id"].split('/')[-1]
27
- plan_obj.cancel_charge(params[:shop], cancelled_charge_id)
26
+ # cancelled_charge_id = rec_cancel_data["data"]["appSubscriptionCancel"]["appSubscription"]["id"].split('/')[-1]
27
+ shop_plan_id = @shop[AppManager.configuration.plan_id_or_name_field]
28
+ if !shop_plan_id.nil?
29
+ plan_obj.cancel_charge(params[:shop], shop_plan_id)
30
+ end
28
31
  end
29
32
  end
30
33
  rescue Exception => e
data/app_manager.gemspec CHANGED
@@ -5,7 +5,7 @@ require_relative "lib/app_manager/version"
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "app_manager"
7
7
  spec.version = AppManager::VERSION
8
- spec.authors = "Hulkapps"
8
+ spec.authors = "Rahul Tiwari @ Hulkapps"
9
9
  spec.email = "rahul.t@hulkapps.com"
10
10
 
11
11
  spec.summary = "An API wrapper of Hulkapps AppManager portal"
@@ -42,6 +42,8 @@ module AppManager
42
42
  query = query.dup.force_encoding("UTF-8")
43
43
  if variables.present?
44
44
  query = {"query": "#{query}","variables": variables }
45
+ else
46
+ query = {"query": "#{query}","variables": {} }
45
47
  end
46
48
  if is_json
47
49
  response = api_call(query.to_json,true)
@@ -176,6 +178,20 @@ module AppManager
176
178
  return data
177
179
  end
178
180
 
181
+ def recurring_charge_current_api_call(shop)
182
+ query = 'query {
183
+ currentAppInstallation {
184
+ activeSubscriptions {
185
+ id
186
+ name
187
+ test
188
+ }
189
+ }
190
+ }'
191
+ data = run_graph_api(query,{})
192
+ return data
193
+ end
194
+
179
195
  end
180
196
  end
181
197
 
@@ -152,6 +152,176 @@ module AppManager
152
152
  end
153
153
  end
154
154
 
155
+ def cancel_current_shopify_charge
156
+ begin
157
+ @field_names = AppManager.configuration.field_names
158
+ shopify_active_charge_id = self.active_shopify_charge_id
159
+ if shopify_active_charge_id.present?
160
+ gq_obj = AppManager::GraphqlHelper.new(self.shopify_domain, self.shopify_token)
161
+ rec_cancel_data = gq_obj.recurring_charge_cancel_api_call(shopify_active_charge_id, self)
162
+ if !rec_cancel_data["errors"].present? && (rec_cancel_data["data"].present? && rec_cancel_data["data"]["appSubscriptionCancel"].present? && !rec_cancel_data["data"]["appSubscriptionCancel"]["userErrors"].any? && (rec_cancel_data["data"]["appSubscriptionCancel"]["appSubscription"]["status"] == 'CANCELLED'))
163
+ cancelled_charge_id = rec_cancel_data["data"]["appSubscriptionCancel"]["appSubscription"]["id"].split('/')[-1]
164
+ self.cancel_charge
165
+ grandfathered_field = @field_names['grandfathered']
166
+ update_info = {AppManager.configuration.plan_id_or_name_field => nil,grandfathered_field => false}
167
+ if self.update(update_info)
168
+ AppManager.clear_cache
169
+ end
170
+ end
171
+ end
172
+ rescue Exception => e
173
+ return "#{e.inspect}"
174
+ end
175
+ end
176
+
177
+ def get_current_shopify_charge
178
+ begin
179
+ gq_obj = AppManager::GraphqlHelper.new(self.shopify_domain, self.shopify_token)
180
+ data = gq_obj.recurring_charge_current_api_call(self)
181
+ if !data["errors"].present? && (data["data"].present? && data["data"]["currentAppInstallation"].present? && data["data"]["currentAppInstallation"]["activeSubscriptions"].present?)
182
+ return data["data"]["currentAppInstallation"]["activeSubscriptions"].first
183
+ end
184
+ rescue Exception => e
185
+ Rollbar.error("Warning in APP MANAGER, trying to get_current_shopify_charge >>>> #{e.inspect}")
186
+ return nil
187
+ end
188
+ end
189
+
190
+ def get_active_charge_app_manager
191
+ active_charge = self.get_charge rescue nil
192
+ return active_charge && active_charge['active_charge'].present? && !active_charge['active_charge'].nil? ? active_charge['active_charge'] : nil
193
+ end
194
+
195
+ def has_valid_app_manager_plan_id
196
+ shop_plan_id = self[AppManager.configuration.plan_id_or_name_field]
197
+ shop_domain = self[AppManager.configuration.shopify_domain_field]
198
+ plan_obj = AppManager::Client.new
199
+ plans = plan_obj.get_plans(shop_domain) rescue nil
200
+ return shop_plan_id && (plans && plans.any? && plans.collect{|e| e['id']}.include?(shop_plan_id)) ? true : false
201
+ end
202
+
203
+ def update_app_manager_charge(current_shopify_charge_id=nil)
204
+ charge_updated = nil
205
+ begin
206
+ shop_plan_id = self[AppManager.configuration.plan_id_or_name_field]
207
+ shop_domain = self[AppManager.configuration.shopify_domain_field]
208
+ if get_active_charge_app_manager.nil?
209
+ current_charge_id = current_shopify_charge_id.present? ? current_shopify_charge_id : active_shopify_charge_id
210
+ if current_charge_id.present?
211
+ if has_valid_app_manager_plan_id
212
+ if charge_update_call(self,shop_plan_id,current_charge_id)
213
+ charge_updated = true
214
+ end
215
+ end
216
+ end
217
+ end
218
+ return charge_updated
219
+ rescue Exception => e
220
+ Rollbar.error("Warning in APP MANAGER, trying to get update_app_manager_charge >>>> #{e.inspect}")
221
+ return nil
222
+ end
223
+ end
224
+
225
+ def active_shopify_charge_id
226
+ begin
227
+ get_active_shopify_charge = self.get_current_shopify_charge
228
+ if get_active_shopify_charge.present? && !get_active_shopify_charge.nil?
229
+ current_shopify_charge_id = get_active_shopify_charge["id"]
230
+ if current_shopify_charge_id
231
+ return current_shopify_charge_id.split('/')[-1] rescue nil
232
+ else
233
+ return nil
234
+ end
235
+ else
236
+ return nil
237
+ end
238
+ rescue Exception => e
239
+ Rollbar.error("Warning in APP MANAGER, trying to get active shopify charge id >>>> #{e.inspect}")
240
+ return nil
241
+ end
242
+ end
243
+
244
+ def app_manager_charge_update(shop,shopify_current_charge_obj)
245
+ if shop.present? && shop.plan_id.present? && shopify_current_charge_obj.present?
246
+ charge_update_call(shop,shop.plan_id,shopify_current_charge_obj['id'],shopify_current_charge_obj)
247
+ end
248
+ end
249
+
250
+ def charge_update_call(shop,shop_plan_id,current_charge_id,charge_obj={})
251
+ charge_callback_done = nil
252
+ # begin
253
+ @shop = shop
254
+ @field_names = AppManager.configuration.field_names
255
+ shopify_token = @field_names['shopify_token']
256
+ shopify_domain = @field_names['name']
257
+ grandfathered_field = @field_names['grandfathered']
258
+ shop_domain = @shop[AppManager.configuration.shopify_domain_field]
259
+ if !@shop.nil?
260
+ if charge_obj.present? && !charge_obj.nil?
261
+ shopify_charge_obj = charge_obj
262
+ else
263
+ headers = {"X-Shopify-Access-Token" => @shop[shopify_token]}
264
+ charges = HTTParty.get('https://' + shop_domain + '/admin/api/' + AppManager.configuration.shopify_api_version + '/recurring_application_charges/' + current_charge_id + '.json', :headers => headers)
265
+ shopify_charge_obj = charges.parsed_response && charges.parsed_response.is_a?(Hash) && charges.parsed_response.has_key?('recurring_application_charge') ? charges.parsed_response['recurring_application_charge'] : {}
266
+ end
267
+
268
+ if shopify_charge_obj.present?
269
+ plan_obj = AppManager::Client.new
270
+ plan_data = plan_obj.get_plan(shop_plan_id, shop_domain)
271
+ charge = shopify_charge_obj
272
+ charge['charge_id'] = charge['id']
273
+ charge['type'] = 'recurring'
274
+ charge['plan_id'] = shop_plan_id
275
+ charge['shop_domain'] = shop_domain
276
+ charge['interval'] = plan_data['interval']['value']
277
+ ['api_client_id', 'return_url', 'decorated_return_url','id','id','currency'].each { |k| charge.delete k }
278
+ charge_ob = AppManager::Client.new(nil, json_req = true)
279
+ response = charge_ob.store_charge(charge.to_json)
280
+
281
+ if response['message'] == "success"
282
+ AppManager.clear_cache
283
+
284
+ update_info = {AppManager.configuration.plan_id_or_name_field => shop_plan_id,grandfathered_field => 0}
285
+ if !config_trial_days.nil? && !plan_data.nil?
286
+ trial_days = plan_data['trial_days'] || 0
287
+ update_info[config_trial_days] = trial_days
288
+ end
289
+
290
+ if @shop.update(update_info)
291
+ charge_callback_done = true
292
+ end
293
+ Thread.new do
294
+ charge_data = plan_obj.get_charge(@shop[shopify_domain])
295
+ begin
296
+ AppManager::EventHandler.new('charge_created', {
297
+ "plan" => plan_data,
298
+ "charge" => charge,
299
+ "previous_charge" => charge_data ? (charge_data['cancelled_charge'] || nil) : nil,
300
+ "shopify_domain" => shop_domain
301
+ })
302
+ rescue Exception => e
303
+ Rollbar.error("Warning in APP MANAGER model Charge Created Callback Event Fire>>>> #{e.inspect}")
304
+ end
305
+ end
306
+ end
307
+ end
308
+ end
309
+ return charge_callback_done
310
+ # rescue Exception => e
311
+ # Rollbar.error("Warning in APP MANAGER model charge_callback, trying to update active shopify charge in app manager>>>> #{e.inspect}")
312
+ # return nil
313
+ # end
314
+ end
315
+
316
+ def config_trial_days
317
+ @field_names = AppManager.configuration.field_names
318
+ if !@field_names.nil? && @field_names.has_key?('total_trial_days') && !@field_names['total_trial_days'].nil? && !@field_names['total_trial_days'].blank?
319
+ return @field_names['total_trial_days']
320
+ else
321
+ return nil
322
+ end
323
+ end
324
+
155
325
  def set_default_plan(plan_id = nil)
156
326
  begin
157
327
  if plan_id.nil?
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AppManager
4
- VERSION = "1.5.1"
4
+ VERSION = "1.6.1"
5
5
  end
@@ -7,6 +7,7 @@ AppManager.configure do |config|
7
7
  config.shopify_table_name = 'shops' # Table name which is generated by shopify mostly it is 'shops'
8
8
  config.shopify_domain_field = 'shopify_domain' #shopify domain field
9
9
  config.plan_id_or_name_field = 'plan_id'
10
+ config.shopify_app_slug = '' #Add your app slug here
10
11
  config.field_names = {
11
12
  'name' => 'shopify_domain', # demo-rahul-tiwari.myshopify.com
12
13
  'shopify_email' => 'email', # rahul.t@hulkapps.com
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.5.1
4
+ version: 1.6.1
5
5
  platform: ruby
6
6
  authors:
7
- - Hulkapps
7
+ - Rahul Tiwari @ Hulkapps
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-02-08 00:00:00.000000000 Z
11
+ date: 2023-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty