app_manager 1.5.1 → 1.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9eb9bc0a4313a949cced988b7ffa0e53024315cfb2b9eb569ff894ed88ac8560
4
- data.tar.gz: 0e472449feeed50f948429654a88af26270e04458a5b17c71ac1de744cea4561
3
+ metadata.gz: 2fd3e056fce2196e44c5eb349cd910cf80a7d94bac2530a957c88bb3c5799685
4
+ data.tar.gz: 80ae23cafeb5680a542e3abe6050b9663e3407c395a0f293aea0b4815575ef17
5
5
  SHA512:
6
- metadata.gz: 9af3ef94b7b03ab0cfeaac11b0a86cca8f52aaf7fbb06505948284b85c50bec857d1c1299204213ca2e65b967d8a08f1856e3de74aaec8ffc4d5c541cecb5d62
7
- data.tar.gz: 9cbb882ff71992dc5653257c53906cea1f5db98f981ffc74001f0aa00f81ff16c4103774140a4053a941f99ba1cc7d115dc27e21b6031817bd8da2cd692cceb5
6
+ metadata.gz: a3fc7ee4d7b213c658229d352234a4d43732fd8adc25685e58f3e16bceec6384b8c7dab4b51974c89cf59eba4ce6781aad7afa1638a41f20207957a08b937cd8
7
+ data.tar.gz: f1a631d14d3ef1633a773bff3a5bbda2b93f612703086caec1fddf36a2cf2901154422ccbd7ff17badc38de59e9f5ece5ce883b90b9b8b20b20988655265807a
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.0)
5
5
  activerecord-import (~> 1.4)
6
6
  httparty
7
7
  kaminari (>= 0.16.3)
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
@@ -191,6 +193,12 @@ and then you can use follwing methods with your shop objects.
191
193
 
192
194
  @shop.get_all_plans # return all app plans array
193
195
 
196
+ @shop.active_shopify_charge_id # return active shopify charge id if shop has any current reccurring charge otherwise nil
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
+
194
202
  ```
195
203
 
196
204
 
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,142 @@ module AppManager
152
152
  end
153
153
  end
154
154
 
155
+ def get_active_charge_app_manager
156
+ active_charge = self.get_charge rescue nil
157
+ return active_charge && active_charge['active_charge'].present? && !active_charge['active_charge'].nil? ? active_charge['active_charge'] : nil
158
+ end
159
+
160
+ def has_valid_app_manager_plan_id
161
+ shop_plan_id = self[AppManager.configuration.plan_id_or_name_field]
162
+ shop_domain = self[AppManager.configuration.shopify_domain_field]
163
+ plan_obj = AppManager::Client.new
164
+ plans = plan_obj.get_plans(shop_domain) rescue nil
165
+ return shop_plan_id && (plans && plans.any? && plans.collect{|e| e['id']}.include?(shop_plan_id)) ? true : false
166
+ end
167
+
168
+ def update_app_manager_charge(current_shopify_charge_id=nil)
169
+ charge_updated = nil
170
+ begin
171
+ shop_plan_id = self[AppManager.configuration.plan_id_or_name_field]
172
+ shop_domain = self[AppManager.configuration.shopify_domain_field]
173
+ if get_active_charge_app_manager.nil?
174
+ current_charge_id = current_shopify_charge_id.present? ? current_shopify_charge_id : active_shopify_charge_id
175
+ if current_charge_id.present?
176
+ if has_valid_app_manager_plan_id
177
+ if charge_update_call(self,shop_plan_id,current_charge_id)
178
+ charge_updated = true
179
+ end
180
+ end
181
+ end
182
+ end
183
+ return charge_updated
184
+ rescue Exception => e
185
+ Rollbar.error("Warning in APP MANAGER, trying to get active shopify charge id >>>> #{e.inspect}")
186
+ return nil
187
+ end
188
+ end
189
+
190
+ def active_shopify_charge_id
191
+ begin
192
+ gq_obj = AppManager::GraphqlHelper.new(self.shopify_domain, self.shopify_token)
193
+ data = gq_obj.recurring_charge_current_api_call(self)
194
+ if !data["errors"].present? && (data["data"].present? && data["data"]["currentAppInstallation"].present? && data["data"]["currentAppInstallation"]["activeSubscriptions"].present?)
195
+ current_shopify_charge_id = data["data"]["currentAppInstallation"]["activeSubscriptions"].first["id"]
196
+ if current_shopify_charge_id
197
+ return current_shopify_charge_id.split('/')[-1] rescue nil
198
+ else
199
+ return nil
200
+ end
201
+ else
202
+ return nil
203
+ end
204
+ rescue Exception => e
205
+ Rollbar.error("Warning in APP MANAGER, trying to get active shopify charge id >>>> #{e.inspect}")
206
+ return nil
207
+ end
208
+ end
209
+
210
+ def app_manager_charge_update(shop,shopify_current_charge_obj)
211
+ if shop.present? && shop.plan_id.present? && shopify_current_charge_obj.present?
212
+ charge_update_call(shop,shop.plan_id,shopify_current_charge_obj['id'],shopify_current_charge_obj)
213
+ end
214
+ end
215
+
216
+ def charge_update_call(shop,shop_plan_id,current_charge_id,charge_obj={})
217
+ charge_callback_done = nil
218
+ # begin
219
+ @shop = shop
220
+ @field_names = AppManager.configuration.field_names
221
+ shopify_token = @field_names['shopify_token']
222
+ shopify_domain = @field_names['name']
223
+ grandfathered_field = @field_names['grandfathered']
224
+ shop_domain = @shop[AppManager.configuration.shopify_domain_field]
225
+ if !@shop.nil?
226
+ if charge_obj.present? && !charge_obj.nil?
227
+ shopify_charge_obj = charge_obj
228
+ else
229
+ headers = {"X-Shopify-Access-Token" => @shop[shopify_token]}
230
+ charges = HTTParty.get('https://' + shop_domain + '/admin/api/' + AppManager.configuration.shopify_api_version + '/recurring_application_charges/' + current_charge_id + '.json', :headers => headers)
231
+ 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'] : {}
232
+ end
233
+
234
+ if shopify_charge_obj.present?
235
+ plan_obj = AppManager::Client.new
236
+ plan_data = plan_obj.get_plan(shop_plan_id, shop_domain)
237
+ charge = shopify_charge_obj
238
+ charge['charge_id'] = charge['id']
239
+ charge['type'] = 'recurring'
240
+ charge['plan_id'] = shop_plan_id
241
+ charge['shop_domain'] = shop_domain
242
+ charge['interval'] = plan_data['interval']['value']
243
+ ['api_client_id', 'return_url', 'decorated_return_url','id','id','currency'].each { |k| charge.delete k }
244
+ charge_ob = AppManager::Client.new(nil, json_req = true)
245
+ response = charge_ob.store_charge(charge.to_json)
246
+
247
+ if response['message'] == "success"
248
+ AppManager.clear_cache
249
+
250
+ update_info = {AppManager.configuration.plan_id_or_name_field => shop_plan_id,grandfathered_field => 0}
251
+ if !config_trial_days.nil? && !plan_data.nil?
252
+ trial_days = plan_data['trial_days'] || 0
253
+ update_info[config_trial_days] = trial_days
254
+ end
255
+
256
+ if @shop.update(update_info)
257
+ charge_callback_done = true
258
+ end
259
+ Thread.new do
260
+ charge_data = plan_obj.get_charge(@shop[shopify_domain])
261
+ begin
262
+ AppManager::EventHandler.new('charge_created', {
263
+ "plan" => plan_data,
264
+ "charge" => charge,
265
+ "previous_charge" => charge_data ? (charge_data['cancelled_charge'] || nil) : nil,
266
+ "shopify_domain" => shop_domain
267
+ })
268
+ rescue Exception => e
269
+ Rollbar.error("Warning in APP MANAGER model Charge Created Callback Event Fire>>>> #{e.inspect}")
270
+ end
271
+ end
272
+ end
273
+ end
274
+ end
275
+ return charge_callback_done
276
+ # rescue Exception => e
277
+ # Rollbar.error("Warning in APP MANAGER model charge_callback, trying to update active shopify charge in app manager>>>> #{e.inspect}")
278
+ # return nil
279
+ # end
280
+ end
281
+
282
+ def config_trial_days
283
+ @field_names = AppManager.configuration.field_names
284
+ if !@field_names.nil? && @field_names.has_key?('total_trial_days') && !@field_names['total_trial_days'].nil? && !@field_names['total_trial_days'].blank?
285
+ return @field_names['total_trial_days']
286
+ else
287
+ return nil
288
+ end
289
+ end
290
+
155
291
  def set_default_plan(plan_id = nil)
156
292
  begin
157
293
  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.0"
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,10 +1,10 @@
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.0
5
5
  platform: ruby
6
6
  authors:
7
- - Hulkapps
7
+ - Rahul Tiwari @ Hulkapps
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []