moonshot-rails 0.0.7 → 0.0.8
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 +4 -4
- data/README.md +13 -0
- data/app/assets/javascripts/moonshot.js +1778 -1920
- data/app/jobs/moonshot/application_job.rb +6 -0
- data/app/jobs/moonshot/convertkit/subscribe_job.rb +68 -0
- data/app/jobs/moonshot/convertkit/unsubscribe_job.rb +33 -0
- data/app/models/moonshot/model_helper.rb +22 -0
- data/lib/generators/moonshot_rails_generator.rb +10 -0
- data/lib/moonshot-rails/config.rb +3 -0
- data/lib/moonshot-rails/engine.rb +1 -0
- data/lib/moonshot-rails/version.rb +1 -1
- data/lib/moonshot-rails.rb +2 -0
- metadata +21 -2
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Moonshot
|
4
|
+
module Convertkit
|
5
|
+
class SubscribeJob < ApplicationJob
|
6
|
+
queue_as :default
|
7
|
+
|
8
|
+
delegate :convertkit_api_key, :convertkit_api_secret, :convertkit_form_id, to: 'MoonshotRails.configuration'
|
9
|
+
|
10
|
+
def perform user
|
11
|
+
return unless Rails.env.production?
|
12
|
+
|
13
|
+
assert_required_config!
|
14
|
+
|
15
|
+
existing_subscriber = find_by(email: user.email)
|
16
|
+
return existing_subscriber if existing_subscriber
|
17
|
+
|
18
|
+
params = {
|
19
|
+
email: user.email
|
20
|
+
}
|
21
|
+
params.merge!(fields: user.convertkit_fields) if user.respond_to?(:convertkit_fields)
|
22
|
+
|
23
|
+
post_request "forms/#{convertkit_form_id}/subscribe", params
|
24
|
+
end
|
25
|
+
|
26
|
+
def find_by email:
|
27
|
+
response = get_request({ email_address: email })
|
28
|
+
|
29
|
+
return if response['total_subscribers'].zero?
|
30
|
+
|
31
|
+
if response['total_subscribers'] > 1
|
32
|
+
raise "Multiple (#{response['total_subscribers']}) subscribers found for email #{email}"
|
33
|
+
end
|
34
|
+
|
35
|
+
response['subscribers'].first
|
36
|
+
end
|
37
|
+
|
38
|
+
protected
|
39
|
+
|
40
|
+
def get_request query, path: 'subscribers'
|
41
|
+
params = query.merge({
|
42
|
+
api_key: convertkit_api_key,
|
43
|
+
api_secret: convertkit_api_secret
|
44
|
+
}).compact
|
45
|
+
|
46
|
+
url = "https://api.convertkit.com/v3/#{path}?#{params.to_query}"
|
47
|
+
|
48
|
+
Excon
|
49
|
+
.get(url)
|
50
|
+
.then { |response| JSON.parse(response.body) }
|
51
|
+
end
|
52
|
+
|
53
|
+
def post_request path, body
|
54
|
+
json_body = body.merge(api_key: convertkit_api_key).to_json
|
55
|
+
|
56
|
+
Excon
|
57
|
+
.post("https://api.convertkit.com/v3/#{path}", body: json_body, headers: { 'Content-Type' => 'application/json' })
|
58
|
+
.then { |response| JSON.parse(response.body) }
|
59
|
+
end
|
60
|
+
|
61
|
+
def assert_required_config!
|
62
|
+
%i[convertkit_api_key convertkit_api_secret convertkit_form_id].each do |config|
|
63
|
+
raise MoonshotRails::MissingConfig, "#{config} is required" unless send(config).present?
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Moonshot
|
4
|
+
module Convertkit
|
5
|
+
class UnsubscribeJob < ApplicationJob
|
6
|
+
queue_as :default
|
7
|
+
|
8
|
+
delegate :convertkit_api_secret, to: 'MoonshotRails.configuration'
|
9
|
+
|
10
|
+
def perform email
|
11
|
+
return unless Rails.env.production?
|
12
|
+
|
13
|
+
assert_required_config!
|
14
|
+
|
15
|
+
Excon
|
16
|
+
.put(
|
17
|
+
'https://api.convertkit.com/v3/unsubscribe',
|
18
|
+
body: {
|
19
|
+
email: email,
|
20
|
+
api_secret: convertkit_api_secret
|
21
|
+
}.to_json,
|
22
|
+
headers: { 'Content-Type' => 'application/json' }
|
23
|
+
).then { |response| JSON.parse(response.body) }
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def assert_required_config!
|
29
|
+
raise MoonshotRails::MissingConfig, 'Missing convertkit_api_secret' unless convertkit_api_secret
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Moonshot
|
4
|
+
module ModelHelper
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
class_methods do
|
8
|
+
def convertkit_sync
|
9
|
+
after_save_commit :moonshot_convertkit_subscribe
|
10
|
+
after_destroy_commit :moonshot_convertkit_unsubscribe
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def moonshot_convertkit_subscribe
|
15
|
+
Moonshot::Convertkit::SubscribeJob.perform_later self
|
16
|
+
end
|
17
|
+
|
18
|
+
def moonshot_convertkit_unsubscribe
|
19
|
+
Moonshot::Convertkit::UnsubscribeJob.perform_later email
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class MoonshotRailsGenerator < Rails::Generators::Base
|
4
|
+
source_root File.expand_path('../..', __dir__)
|
5
|
+
|
6
|
+
desc 'Generate an initializer'
|
7
|
+
def create_initializer_file
|
8
|
+
copy_file 'config/moonshot_rails_initializer.rb', 'config/initializers/moonshot_rails.rb'
|
9
|
+
end
|
10
|
+
end
|
data/lib/moonshot-rails.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: moonshot-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Catalin Ionescu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-03
|
11
|
+
date: 2024-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: excon
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.100'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.100'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: rails
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -55,6 +69,11 @@ files:
|
|
55
69
|
- app/components/moonshot/app/jobs_to_be_done.html.haml
|
56
70
|
- app/components/moonshot/app/jobs_to_be_done.rb
|
57
71
|
- app/helpers/moonshot/moonshot_helper.rb
|
72
|
+
- app/jobs/moonshot/application_job.rb
|
73
|
+
- app/jobs/moonshot/convertkit/subscribe_job.rb
|
74
|
+
- app/jobs/moonshot/convertkit/unsubscribe_job.rb
|
75
|
+
- app/models/moonshot/model_helper.rb
|
76
|
+
- lib/generators/moonshot_rails_generator.rb
|
58
77
|
- lib/moonshot-rails.rb
|
59
78
|
- lib/moonshot-rails/config.rb
|
60
79
|
- lib/moonshot-rails/engine.rb
|