app_manager 1.1.1 → 1.1.2

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: 92d071e3e478e20f2fb063d5a821be4d772edb68de15c862c50f0a01c69727d8
4
- data.tar.gz: 1e171148960d955ca01c76a7bf715630508e2766e4a46790a85e86ffba4ea7a1
3
+ metadata.gz: ac02414e46b02e9c7e33c7a5625dce22ba413e4a1081dc4f99596c659b1d08da
4
+ data.tar.gz: d61fdc1266e5c9946ae2a4e32c79db8d6179f155a7b9f3827079046624820563
5
5
  SHA512:
6
- metadata.gz: 205c194f35ab5df4a9fab9fe374a1e83c89ff5ca2ceaa8327ae6ca92589343522ba8c35bdac61d63c92932d9dd7b5769410d4975c8b7fc191e9fcbcf6df4ba61
7
- data.tar.gz: b8f6a607d5f1a71e5d0b2537909a87a771718b5f31bbe2d39d3ae291521e40eac5b807c2749806f6c20f1bc19453c6e04ebf52533e69c490441f6d9b33ca8b3d
6
+ metadata.gz: 218eacfcbc353cdbdacc77d72ff557c28c8b354ad4f0c4d07d781d6f6b556cf067e955dc77f29c8fa5bd81b2acba7883dd507ddeeb6853024c406e73e03ccfb2
7
+ data.tar.gz: e71153006dfeb712762d4da2064534e6b1801ccd4a9010ee2b0f61aae29fe1eda1bfa6c5d8867b61931dca7cf8adddb7493f08faf2f0d0a981ba6859e4fd0a30
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- app_manager (1.1.1)
4
+ app_manager (1.1.2)
5
5
  httparty
6
6
  kaminari (>= 0.16.3)
7
7
  rails (>= 5.2.0)
@@ -119,7 +119,7 @@ GEM
119
119
  mime-types-data (3.2022.0105)
120
120
  mini_mime (1.1.2)
121
121
  mini_portile2 (2.8.0)
122
- minitest (5.16.0)
122
+ minitest (5.16.1)
123
123
  multi_xml (0.6.0)
124
124
  net-imap (0.2.3)
125
125
  digest
@@ -147,8 +147,8 @@ GEM
147
147
  public_suffix (4.0.6)
148
148
  racc (1.6.0)
149
149
  rack (2.2.3.1)
150
- rack-test (1.1.0)
151
- rack (>= 1.0, < 3)
150
+ rack-test (2.0.0)
151
+ rack (>= 1.3)
152
152
  rails (7.0.3)
153
153
  actioncable (= 7.0.3)
154
154
  actionmailbox (= 7.0.3)
@@ -14,6 +14,23 @@ module AppManager
14
14
  plan_obj = AppManager::Client.new
15
15
  plan_data = plan_obj.get_plan(params[:plan_id],params[:shop])
16
16
  if plan_data.present? && plan_data.is_a?(Hash)
17
+ if plan_data['price'] == 0
18
+ if @shop.update(@plan_field => params[:plan_id])
19
+ begin
20
+ AppManager::EventHandler.new('charge_created',{
21
+ "plan" => plan_data,
22
+ "charge" => nil,
23
+ "previous_charge" => nil
24
+ })
25
+ rescue Exception => e
26
+ Rails.logger.info "APP MANGAGER >>>> #{e.inspect}"
27
+ end
28
+ AppManager.clear_cache
29
+ render json: {'redirect_url' => "#{app_url}?shop=#{params[:shop]}"} and return true
30
+ else
31
+ raise Error, "Invalid charge"
32
+ end
33
+ end
17
34
  request_data = {'shop' => @shop.shopify_domain, 'timestamp' => Time.now.to_i, 'plan' => params[:plan_id]}
18
35
  return_url = "#{app_url}#{plan_callback_path}?#{Rack::Utils.build_query(request_data)}"
19
36
  gq_obj = AppManager::GraphqlHelper.new(@shop.shopify_domain,@shop.shopify_token)
@@ -61,7 +78,7 @@ module AppManager
61
78
  begin
62
79
  plan_obj.cancel_charge(@shop[shopify_domain],@shop[@plan_field])
63
80
  rescue Exception => e
64
-
81
+ Rails.logger.info "APP MANGAGER >>>> #{e.inspect}"
65
82
  end
66
83
  end
67
84
 
@@ -70,13 +87,17 @@ module AppManager
70
87
 
71
88
  if response['message'] == "success"
72
89
  AppManager.clear_cache
73
- model.update(@plan_field => params[:plan])
90
+ @shop.update(@plan_field => params[:plan])
74
91
  charge_data = plan_obj.get_charge(@shop[shopify_domain])
75
- AppManager::EventHandler.new('charge_created',{
92
+ begin
93
+ AppManager::EventHandler.new('charge_created',{
76
94
  "plan" => plan_data,
77
95
  "charge" => charge,
78
96
  "previous_charge" => charge_data ? (charge_data['cancelled_charge'] || nil) : nil
79
97
  })
98
+ rescue Exception => e
99
+ Rails.logger.info "APP MANGAGER >>>> #{e.inspect}"
100
+ end
80
101
  end
81
102
  redirect_to "#{app_url}?shop=#{params[:shop]}", :status => 301 and return
82
103
  else
@@ -14,6 +14,7 @@ module AppManager
14
14
  def plans
15
15
  active_plan_id_or_name = shopify_plan = plan = nil
16
16
  default_plan_id = nil
17
+ choose_later = false
17
18
  plan_obj = AppManager::Client.new
18
19
  plans = []
19
20
  if params[:shop_domain].present? && !AppManager.configuration.plan_features.nil?
@@ -25,6 +26,14 @@ module AppManager
25
26
  shopify_plan_field = AppManager.configuration.field_names['shopify_plan']
26
27
  shopify_plan = @shop[shopify_plan_field] rescue nil
27
28
  plan = plans.any? && !active_plan_id_or_name.nil? ? (plans.find{|x| x["id"] == active_plan_id_or_name}.present? ? plans.find{|x| x["id"] == active_plan_id_or_name} : nil ) : nil
29
+
30
+ @trial_activated_field = AppManager.configuration.field_names['trial_activated_at']
31
+ trial_activated_at = @shop[@trial_activated_field] rescue nil
32
+ active_charge = plan_obj.get_charge(params[:shop_domain])
33
+ if active_charge.any? && active_charge['active_charge'].nil? && active_charge['cancelled_charge'].nil? && trial_activated_at
34
+ choose_later = true
35
+ end
36
+
28
37
  end
29
38
  else
30
39
  Rails.logger.info "APP MANGAGER >>>> Either model is defined wrong or config.plan_id_or_name_field is nil in initializer ==="
@@ -34,33 +43,27 @@ module AppManager
34
43
  end
35
44
 
36
45
 
37
- default_plan_id = 0;
38
- default_plan_data = plans.select{|x| x['interval'] == 'EVERY_30_DAYS' }.sort_by { |k| -k["price"] }
39
- store_base_plan = default_plan_data.map{|e| e['store_base_plan']}.first rescue false
40
-
41
- if store_base_plan
42
- begin
43
- shopify_plans = default_plan_data.map { |e| e.map { |key, value| [e['shopify_plans'], e['id']] }.to_h }
46
+ default_plan_data = plans.select{|x| x['choose_later_plan'] == true }
47
+ if default_plan_data.any?
48
+ if default_plan_data.select{|x| x['store_base_plan'] == true }.size > 0
49
+ shopify_plans = plans.select{|x| x['interval'] == 'EVERY_30_DAYS' }
44
50
  shopify_plans.each do |shp|
45
- if shp.keys && shp.keys.first && shp.keys.first.class == Array
46
- if shp.keys.first.include?(shopify_plan) && shp.values && shp.values.first && shp.values.first.to_i > 0
47
- default_plan_id = shp.values.first.to_i
48
- break
49
- end
51
+ if shp && shp["shopify_plans"].include?(shopify_plan)
52
+ default_plan_id = shp["id"]
53
+ break
50
54
  end
51
55
  end
52
- rescue Exception => e
53
- Rails.logger.info "APP MANGAGER >>>> ERROR #{e.inspect}"
56
+ else
57
+ default_plan_id = default_plan_data.map{|e| e['id']}.first if default_plan_data.any? rescue nil
54
58
  end
55
- else
56
- default_plan_id = default_plan_data.map{|e| e['id']}.first if default_plan_data.any? rescue nil
57
59
  end
58
60
 
59
61
  response = {
60
62
  'plans' => plans,
61
63
  'shopify_plan' => shopify_plan,
62
64
  'plan' => plan,
63
- 'default_plan_id' => default_plan_id
65
+ 'default_plan_id' => default_plan_id,
66
+ 'choose_later' => choose_later
64
67
  }
65
68
  render json: response
66
69
  end
@@ -98,8 +101,9 @@ module AppManager
98
101
 
99
102
  def active_without_plan
100
103
  if params[:shop_domain].present? && params[:plan_id].present? && model
104
+ @shop = shop_data
101
105
  @trial_activated_field = AppManager.configuration.field_names['trial_activated_at']
102
- model.update(@plan_field => params[:plan_id],@trial_activated_field => DateTime.now)
106
+ @shop.update(@plan_field => params[:plan_id],@trial_activated_field => DateTime.now)
103
107
  render json: {'status' => true}
104
108
  else
105
109
  render json: {'status' => false,'error' => 'Shop not found or missing shop'}, status: 422
@@ -50,7 +50,7 @@ module AppManager
50
50
 
51
51
  def save_api_plans(plans)
52
52
  @apm_db.execute("DROP TABLE IF EXISTS plans;")
53
- @apm_db.execute "CREATE TABLE IF NOT EXISTS plans(id integer,type varchar(255), name varchar(255), price float, offer_text varchar(255), interval text, shopify_plans text, trial_days integer, test boolean, on_install integer, is_custom boolean, app_id integer, base_plan integer, created_at datetime, updated_at datetime, public boolean, discount integer, cycle_count integer, store_base_plan boolean, discount_type varchar(255), affiliate text, features text, deleted_at datetime)"
53
+ @apm_db.execute "CREATE TABLE IF NOT EXISTS plans(id integer,type varchar(255), name varchar(255), price float, offer_text varchar(255), description varchar(255), interval text, shopify_plans text, trial_days integer, test boolean, on_install integer, is_custom boolean, app_id integer, base_plan integer, created_at datetime, updated_at datetime, public boolean, discount integer, cycle_count integer, store_base_plan boolean, choose_later_plan boolean, discount_type varchar(255), affiliate text, features text, deleted_at datetime)"
54
54
 
55
55
  if plans.any?
56
56
  plans.each do |plan|
@@ -66,7 +66,8 @@ module AppManager
66
66
  is_custom = plan['is_custom'] ? 1 : 0
67
67
  public_val = plan['public'] ? 1 : 0
68
68
  store_base_plan = plan['store_base_plan'] ? 1 : 0
69
- @apm_db.execute("INSERT INTO plans ( id , type , name , price , offer_text , interval , shopify_plans , trial_days , test , on_install , is_custom , app_id , base_plan , created_at, updated_at , public , discount , cycle_count , store_base_plan , discount_type, affiliate, features, deleted_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",plan["id"], plan["type"], plan["name"], plan["price"], plan["offer_text"], "#{interval}", "#{shopify_plans}", plan["trial_days"], plan_test, plan["on_install"], is_custom, plan["app_id"], plan["base_plan"], plan["created_at"], plan["updated_at"],public_val, plan["discount"], plan["cycle_count"], store_base_plan, plan["discount_type"], "#{affiliate}", "#{features}",plan["deleted_at"])
69
+ choose_later_plan = plan['choose_later_plan'] ? 1 : 0
70
+ @apm_db.execute("INSERT INTO plans ( id , type , name , price , offer_text, description , interval , shopify_plans , trial_days , test , on_install , is_custom , app_id , base_plan , created_at, updated_at , public , discount , cycle_count , store_base_plan, choose_later_plan , discount_type, affiliate, features, deleted_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",plan["id"], plan["type"], plan["name"], plan["price"], plan["offer_text"], plan["description"], "#{interval}", "#{shopify_plans}", plan["trial_days"], plan_test, plan["on_install"], is_custom, plan["app_id"], plan["base_plan"], plan["created_at"], plan["updated_at"],public_val, plan["discount"], plan["cycle_count"], store_base_plan, choose_later_plan, plan["discount_type"], "#{affiliate}", "#{features}",plan["deleted_at"])
70
71
  end
71
72
  end
72
73
  end
@@ -77,7 +78,8 @@ module AppManager
77
78
  @apm_db.execute "CREATE TABLE IF NOT EXISTS charges(id INTEGER PRIMARY KEY,charge_id varchar(255),test boolean, status varchar(255),name varchar(255), type varchar(255), price float,interval varchar(255),trial_days integer,billing_on datetime,activated_on datetime,trial_ends_on datetime,cancelled_on datetime, expires_on datetime,plan_id integer,description text,shop_domain varchar(255),created_at datetime, updated_at datetime, app_id integer, sync boolean DEFAULT 0,process_type varchar(255))"
78
79
  if charges.any?
79
80
  charges.each do |charge|
80
- @apm_db.execute("INSERT INTO charges (id ,charge_id ,test , status ,name , type , price ,interval ,trial_days ,billing_on ,activated_on ,trial_ends_on ,cancelled_on , expires_on ,plan_id ,description ,shop_domain ,created_at , updated_at, app_id, sync ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", nil,charge["charge_id"],charge["test"],charge["status"],charge["name"],charge["type"],charge["price"],charge["interval"],charge["trial_days"],charge["billing_on"],charge["activated_on"],charge["trial_ends_on"],charge["cancelled_on"],charge["expires_on"],charge["plan_id"],charge["description"],charge["shop_domain"],charge["created_at"],charge["updated_at"],charge["app_id"],1)
81
+ charge_test = charge['test'] ? 1 : 0
82
+ @apm_db.execute("INSERT INTO charges (id ,charge_id ,test , status ,name , type , price ,interval ,trial_days ,billing_on ,activated_on ,trial_ends_on ,cancelled_on , expires_on ,plan_id ,description ,shop_domain ,created_at , updated_at, app_id, sync ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", nil,charge["charge_id"],charge_test,charge["status"],charge["name"],charge["type"],charge["price"],charge["interval"],charge["trial_days"],charge["billing_on"],charge["activated_on"],charge["trial_ends_on"],charge["cancelled_on"],charge["expires_on"],charge["plan_id"],charge["description"],charge["shop_domain"],charge["created_at"],charge["updated_at"],charge["app_id"],1)
81
83
  end
82
84
  end
83
85
  end
@@ -23,7 +23,7 @@ module AppManager
23
23
  shopify_fields = @field_names = AppManager.configuration.field_names
24
24
  plan_obj = AppManager::Client.new
25
25
  active_charge = plan_obj.get_charge(shopify_fields['name']) rescue nil
26
- return active_charge ? true : false
26
+ return activeCharge['active_charge'].present? && !activeCharge['active_charge'].nil? ? true : false
27
27
  end
28
28
 
29
29
 
@@ -86,14 +86,58 @@ module AppManager
86
86
  begin
87
87
  shop_domain = self[AppManager.configuration.shopify_domain_field]
88
88
  plan_obj = AppManager::Client.new
89
- return plan_obj.get_charge(self[AppManager.configuration.shopify_domain_field])
89
+ return plan_obj.get_charge(shop_domain)
90
90
  rescue Exception => e
91
91
  return "#{e.inspect}"
92
92
  end
93
93
  end
94
94
 
95
+ def set_default_plan(plan_id=nil)
96
+ begin
97
+ if plan_id.nil?
98
+ shop_domain = self[AppManager.configuration.shopify_domain_field]
99
+ plan_obj = AppManager::Client.new
100
+ plans = plan_obj.get_plans(shop_domain)
101
+ free_plans = plans.select{|x| x['price'] == 0 && x['public'] == true}
102
+ if free_plans.any?
103
+ self.plan_id = free_plans.first["id"]
104
+ self.save
105
+ else
106
+ raise Error, "Free Plan is not available"
107
+ end
108
+ else
109
+ self.plan_id = plan_id
110
+ self.save
111
+ end
112
+ rescue Exception => e
113
+ return "#{e.inspect}"
114
+ end
115
+ end
116
+
117
+
95
118
 
96
119
 
120
+ def get_plans_by_features(feature_slugs)
121
+ if feature_slugs.any?
122
+ plan_data = []
123
+ shop_domain = self[AppManager.configuration.shopify_domain_field]
124
+ plan_obj = AppManager::Client.new
125
+ plans = plan_obj.get_plans(shop_domain)
126
+ plans = plans.select{|x| x['interval'] == 'EVERY_30_DAYS' && x['public'] == true}
127
+ plans.each do |plan|
128
+ if plan['features'].any? && plan['features'].values.any? && plan['features'].values.collect{|c| c['slug']}.any?
129
+ plan_feature_slugs = plan['features'].values.collect{|c| c['slug']}.sort
130
+ if (feature_slugs & plan_feature_slugs).any? && ((feature_slugs & plan_feature_slugs).sort == feature_slugs.sort)
131
+ plan_data.push(plan)
132
+ end
133
+ end
134
+ end
135
+ return plan_data
136
+ else
137
+ return 'feature_slugs is required'
138
+ end
139
+ end
140
+
97
141
  private
98
142
 
99
143
  def casted_value(value,value_type)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AppManager
4
- VERSION = "1.1.1"
4
+ VERSION = "1.1.2"
5
5
  end
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.1.1
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hulkapps
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-06-16 00:00:00.000000000 Z
11
+ date: 2022-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty