discourse_subscription_client 0.1.0.pre11 → 0.1.0.pre13

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: 6182382e0517359b04736dd702fc121669e40775a138eaf6bab7493ae722591a
4
- data.tar.gz: 4554111e5f4b3659cfbf5d1ac70bed551237435e32c5265acf8a8093ca7db5d4
3
+ metadata.gz: 0eb5ae72b353d0c2247634efd915ba4702c6ce9e7edc79a6cd1bfec8ed008d12
4
+ data.tar.gz: 7ad730452ccc89cf452571029f3d1f4a4c6844d6bd642d32a63d92ddf3b0250d
5
5
  SHA512:
6
- metadata.gz: 2988268b14449153a71e2345489f8cc97861b1d6562d62901724ba0db2151465a58bc153bffad9d5a516e2218cfd761523a0d95d8ca90a3e0c24351c1f21365b
7
- data.tar.gz: e7d340f95ce7995c7edb4444987daec675706e056898613a2b7526af5010d5a239249e764d4e7804a0e3c75ac1ae0f16386c03e9c691d72ce0ff0f96bfeb45d1
6
+ metadata.gz: 60f355d11aa8199f740908df977e4e7a6e6c54dc2a52f5ed3d0e656672580230bfc30019f5dd6e68b801843a9bb1192e6d9f8938d8753924f474caf02534717c
7
+ data.tar.gz: 3de6d7e1ec21a234e8fe1c1a45c53f9db5135327cf4ceda307c262b413a903dcade95796d0268445c34abc2eb03a854da59d0b878e109cada669c63b59db90fc
@@ -19,13 +19,11 @@ class SubscriptionClientSupplier < ActiveRecord::Base
19
19
  api_key.present?
20
20
  end
21
21
 
22
- def product_slugs
23
- if products.present?
24
- products.each_with_object({}) do |product, result|
25
- result[product["product_id"]] = product["product_slug"]
26
- end
27
- else
28
- {}
22
+ def product_slugs(resource)
23
+ return {} unless products.present? && products[resource]
24
+
25
+ products[resource].each_with_object({}) do |product, result|
26
+ result[product["product_id"]] = product["product_slug"]
29
27
  end
30
28
  end
31
29
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  class AddProductsToSubscriptionClientSuppliers < ActiveRecord::Migration[7.0]
4
4
  def change
5
- add_column :subscription_client_suppliers, :products, :json
5
+ add_column :subscription_client_suppliers, :products, :json, if_not_exists: true
6
6
  end
7
7
  end
@@ -7,9 +7,18 @@ module DiscourseSubscriptionClient
7
7
  engine_name PLUGIN_NAME
8
8
  isolate_namespace DiscourseSubscriptionClient
9
9
 
10
+ def enabled_site_setting
11
+ @enabled_site_setting = "subscription_client_enabled"
12
+ end
13
+
14
+ def configurable?
15
+ true
16
+ end
17
+
10
18
  config.before_initialize do
11
19
  config.i18n.load_path += Dir["#{config.root}/config/locales/**/*.yml"]
12
20
  Rails.autoloaders.main.ignore(config.root) if defined?(Rails) == "constant"
21
+ Discourse.plugins_by_name[PLUGIN_NAME] = self
13
22
  end
14
23
 
15
24
  config.after_initialize do
@@ -88,7 +97,7 @@ module DiscourseSubscriptionClient
88
97
  end
89
98
 
90
99
  def plugin_status_server_url
91
- "https://discourse.pluginmanager.org"
100
+ "https://coop.pavilion.tech"
92
101
  end
93
102
 
94
103
  def database_exists?
@@ -110,9 +119,15 @@ module DiscourseSubscriptionClient
110
119
  result = DiscourseSubscriptionClient::Subscriptions::Result.new
111
120
  return result unless subscriptions.exists?
112
121
 
113
- result.resource = subscriptions.first.resource
114
- result.supplier = subscriptions.first.resource.supplier
122
+ resource = subscriptions.first.resource
123
+ supplier = resource.supplier
124
+ products = supplier.product_slugs(resource_name)
125
+ return result unless products.present?
126
+
127
+ result.resource = resource
128
+ result.supplier = supplier
115
129
  result.subscriptions = subscriptions.to_a
130
+ result.products = products
116
131
 
117
132
  result
118
133
  end
@@ -42,21 +42,13 @@ module DiscourseSubscriptionClient
42
42
  supplier_urls = @resources.map { |resource| resource[:supplier_url] }.uniq.compact
43
43
 
44
44
  supplier_urls.each do |url|
45
- supplier = SubscriptionClientSupplier.find_by(url: url)
45
+ supplier = SubscriptionClientSupplier.find_or_create_by(url: url)
46
+ request = DiscourseSubscriptionClient::Request.new(:supplier, supplier.id)
47
+ data = request.perform("#{url}/subscription-server")
46
48
 
47
- if supplier&.name
49
+ if valid_supplier_data?(data)
50
+ supplier.update(name: data[:supplier], products: data[:products])
48
51
  @suppliers << supplier
49
- else
50
- supplier ||= SubscriptionClientSupplier.create!(url: url)
51
- request = DiscourseSubscriptionClient::Request.new(:supplier, supplier.id)
52
- data = request.perform("#{url}/subscription-server")
53
-
54
- if valid_supplier_data?(data)
55
- supplier.update(name: data[:supplier], products: data[:products])
56
- @suppliers << supplier
57
- else
58
- supplier.destroy!
59
- end
60
52
  end
61
53
  end
62
54
  end
@@ -98,12 +90,14 @@ module DiscourseSubscriptionClient
98
90
  return false unless data.present? && data.is_a?(Hash)
99
91
  return false unless %i[supplier products].all? { |key| data.key?(key) }
100
92
  return false unless data[:supplier].is_a?(String)
101
- return false unless data[:products].is_a?(Array)
102
-
103
- data[:products].all? do |product|
104
- product.is_a?(Hash) &&
105
- %i[product_id product_slug].all? do |key|
106
- product.key?(key) && product[key].is_a?(String)
93
+ return false unless data[:products].is_a?(Hash)
94
+
95
+ data[:products].all? do |_resource, products|
96
+ products.is_a?(Array) &&
97
+ products.all? do |product|
98
+ %i[product_id product_slug].all? do |key|
99
+ product.key?(key) && product[key].is_a?(String)
100
+ end
107
101
  end
108
102
  end
109
103
  end
@@ -5,10 +5,11 @@ module DiscourseSubscriptionClient
5
5
  class Result
6
6
  attr_accessor :supplier,
7
7
  :resource,
8
- :subscriptions
8
+ :subscriptions,
9
+ :products
9
10
 
10
11
  def any?
11
- supplier.present? && resource.present? && subscriptions.present?
12
+ supplier.present? && resource.present? && subscriptions.present? && products.present?
12
13
  end
13
14
  end
14
15
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DiscourseSubscriptionClient
4
- VERSION = "0.1.0.pre11"
4
+ VERSION = "0.1.0.pre13"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: discourse_subscription_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre11
4
+ version: 0.1.0.pre13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Angus McLeod
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-29 00:00:00.000000000 Z
11
+ date: 2023-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_model_serializers
@@ -293,7 +293,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
293
293
  - !ruby/object:Gem::Version
294
294
  version: 1.3.1
295
295
  requirements: []
296
- rubygems_version: 3.3.26
296
+ rubygems_version: 3.4.6
297
297
  signing_key:
298
298
  specification_version: 4
299
299
  summary: Discourse plugin subscription client.