app_manager 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
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