core_merchant 0.6.2 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +4 -1
- data/README.md +2 -2
- data/core_merchant.gemspec +1 -0
- data/lib/core_merchant/customer_behavior.rb +12 -9
- data/lib/core_merchant/subscription.rb +0 -6
- data/lib/core_merchant/subscription_listener.rb +14 -0
- data/lib/core_merchant/subscription_manager.rb +22 -0
- data/lib/core_merchant/version.rb +1 -1
- data/lib/core_merchant.rb +12 -1
- data/lib/generators/core_merchant/install_generator.rb +9 -11
- data/lib/generators/core_merchant/templates/core_merchant.rb +26 -0
- metadata +18 -2
- data/lib/generators/core_merchant/templates/core_merchant.erb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 154e94061339edca03a2e9c88630c4e49ce37272252e5d6436810579ea2bd529
|
4
|
+
data.tar.gz: 5fe4eb2a4c24b26945a505f35d9a7694de69e7630c03776ac78b7dcd6671616b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9debecdb722370c173fc97648d5f38e130e95475edb673d5f420b7074db10dfad908221cb2b2a1dec966be064fa07040a4ad287ab10380741cd9d9df27f8d618
|
7
|
+
data.tar.gz: 6d5675f20dfa56f708026a28f64cb48dcc44792f6e2663a13e1c466867defb2120f5947f84db8314d983246ef511bac2ce434aa3956fc621bdaf9cdd12b4a04c
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
core_merchant (0.6.
|
4
|
+
core_merchant (0.6.2)
|
5
5
|
activesupport (~> 7.0)
|
6
6
|
rails (~> 7.0)
|
7
7
|
|
@@ -99,6 +99,8 @@ GEM
|
|
99
99
|
diff-lcs (1.5.1)
|
100
100
|
drb (2.2.1)
|
101
101
|
erubi (1.13.0)
|
102
|
+
factory_bot (6.4.6)
|
103
|
+
activesupport (>= 5.0.0)
|
102
104
|
generator_spec (0.9.5)
|
103
105
|
activesupport (>= 3.0.0)
|
104
106
|
railties (>= 3.0.0)
|
@@ -251,6 +253,7 @@ PLATFORMS
|
|
251
253
|
DEPENDENCIES
|
252
254
|
core_merchant!
|
253
255
|
database_cleaner
|
256
|
+
factory_bot
|
254
257
|
generator_spec (~> 0.9.4)
|
255
258
|
railties (~> 7.0)
|
256
259
|
rake (~> 13.0)
|
data/README.md
CHANGED
@@ -9,8 +9,8 @@ CoreMerchant is a library for customer, product, and subscription management in
|
|
9
9
|
- [X] Add customer behavior
|
10
10
|
- [X] Add initializer generator
|
11
11
|
- [X] Add SubscriptionPlan model
|
12
|
-
- [
|
13
|
-
- [ ]
|
12
|
+
- [X] Add Subscription model
|
13
|
+
- [ ] Implement subscription manager and callbacks
|
14
14
|
- [ ] Add sidekiq jobs for subscription management
|
15
15
|
- [ ] Add Invoice model
|
16
16
|
- [ ] Add billing and invoicing service
|
data/core_merchant.gemspec
CHANGED
@@ -37,6 +37,7 @@ Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
|
|
37
37
|
spec.add_dependency "rails", "~> 7.0"
|
38
38
|
|
39
39
|
spec.add_development_dependency "database_cleaner"
|
40
|
+
spec.add_development_dependency "factory_bot"
|
40
41
|
spec.add_development_dependency "generator_spec", "~> 0.9.4"
|
41
42
|
spec.add_development_dependency "railties", "~> 7.0"
|
42
43
|
spec.add_development_dependency "rspec-rails", "~> 5.0"
|
@@ -6,18 +6,21 @@ module CoreMerchant
|
|
6
6
|
extend ActiveSupport::Concern
|
7
7
|
|
8
8
|
included do
|
9
|
-
|
9
|
+
def core_merchant_customer_id
|
10
|
+
id
|
11
|
+
end
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
|
13
|
+
def core_merchant_customer_email
|
14
|
+
email
|
15
|
+
end
|
14
16
|
|
15
|
-
|
16
|
-
|
17
|
-
|
17
|
+
def core_merchant_customer_name
|
18
|
+
name if respond_to?(:name)
|
19
|
+
end
|
18
20
|
|
19
|
-
|
20
|
-
|
21
|
+
def subscriptions
|
22
|
+
CoreMerchant::Subscription.where(customer_id: core_merchant_customer_id)
|
23
|
+
end
|
21
24
|
end
|
22
25
|
end
|
23
26
|
end
|
@@ -99,12 +99,6 @@ module CoreMerchant
|
|
99
99
|
|
100
100
|
private
|
101
101
|
|
102
|
-
def set_period_dates
|
103
|
-
self.start_date ||= Time.current
|
104
|
-
self.current_period_start ||= start_date
|
105
|
-
self.current_period_end ||= start_date + subscription_plan.duration_in_date
|
106
|
-
end
|
107
|
-
|
108
102
|
def end_date_after_start_date
|
109
103
|
errors.add(:end_date, "must be after the `start date") if end_date <= start_date
|
110
104
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CoreMerchant
|
4
|
+
# Include this module in your application to listen for subscription events.
|
5
|
+
module SubscriptionListener
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
def on_test_event_received
|
10
|
+
puts "Test event received by CoreMerchant::SubscriptionListener. Override this method in your application."
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CoreMerchant
|
4
|
+
# Manages subscriptions in CoreMerchant.
|
5
|
+
class SubscriptionManager
|
6
|
+
attr_reader :listeners
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@listeners = []
|
10
|
+
end
|
11
|
+
|
12
|
+
def add_listener(listener)
|
13
|
+
@listeners << listener
|
14
|
+
end
|
15
|
+
|
16
|
+
def notify_test_event
|
17
|
+
@listeners.each do |listener|
|
18
|
+
listener.on_test_event_received if listener.respond_to?(:on_test_event_received)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/core_merchant.rb
CHANGED
@@ -5,6 +5,8 @@ require "active_support/concern"
|
|
5
5
|
require_relative "core_merchant/version"
|
6
6
|
require_relative "core_merchant/customer_behavior"
|
7
7
|
require_relative "core_merchant/subscription_plan"
|
8
|
+
require_relative "core_merchant/subscription_manager"
|
9
|
+
require_relative "core_merchant/subscription_listener"
|
8
10
|
|
9
11
|
# CoreMerchant module
|
10
12
|
module CoreMerchant
|
@@ -19,16 +21,25 @@ module CoreMerchant
|
|
19
21
|
|
20
22
|
def configure
|
21
23
|
yield(configuration)
|
24
|
+
|
25
|
+
return unless configuration.subscription_listener_class
|
26
|
+
|
27
|
+
listener = configuration.subscription_listener_class.constantize.new
|
28
|
+
subscription_manager.add_listener(listener)
|
22
29
|
end
|
23
30
|
|
24
31
|
def customer_class
|
25
32
|
configuration.customer_class.constantize
|
26
33
|
end
|
34
|
+
|
35
|
+
def subscription_manager
|
36
|
+
@subscription_manager ||= CoreMerchant::SubscriptionManager.new
|
37
|
+
end
|
27
38
|
end
|
28
39
|
|
29
40
|
# Used to configure CoreMerchant.
|
30
41
|
class Configuration
|
31
|
-
attr_accessor :customer_class
|
42
|
+
attr_accessor :customer_class, :subscription_listener_class
|
32
43
|
|
33
44
|
def initialize
|
34
45
|
@customer_class = "CoreMerchant::Customer"
|
@@ -10,12 +10,8 @@ module CoreMerchant
|
|
10
10
|
|
11
11
|
source_root File.expand_path("templates", __dir__)
|
12
12
|
|
13
|
-
class_option :customer_class, type: :string, required: true,
|
14
|
-
desc: "Name of your existing customer class, e.g. User"
|
15
|
-
|
16
13
|
def copy_initializer
|
17
|
-
|
18
|
-
template "core_merchant.erb", "config/initializers/core_merchant.rb"
|
14
|
+
template "core_merchant.rb", "config/initializers/core_merchant.rb"
|
19
15
|
end
|
20
16
|
|
21
17
|
def copy_locales
|
@@ -36,20 +32,22 @@ module CoreMerchant
|
|
36
32
|
|
37
33
|
def show_post_install
|
38
34
|
say "CoreMerchant has been successfully installed.", :green
|
39
|
-
|
40
|
-
|
35
|
+
next_steps = <<~MESSAGE
|
36
|
+
Next steps:
|
37
|
+
1. Set the customer class in the initializer file (config/initializers/core_merchant.rb) to the class you want to use for customers.
|
38
|
+
2. Create a subscription listener class (should include CoreMerchant::SubscriptionListener) in your app and set this class in the initializer file (config/initializers/core_merchant.rb) to the class you want to use for subscription listeners.
|
39
|
+
3. Run `rails db:migrate` to create the subscription and subscription plan tables.
|
41
40
|
MESSAGE
|
42
|
-
say
|
41
|
+
say next_steps, :yellow
|
43
42
|
end
|
44
43
|
|
45
44
|
def self.banner
|
46
|
-
"rails generate core_merchant:install
|
45
|
+
"rails generate core_merchant:install"
|
47
46
|
end
|
48
47
|
|
49
48
|
def self.description
|
50
49
|
<<~DESC
|
51
|
-
Installs CoreMerchant into your application
|
52
|
-
This could be User, Customer, or any other existing model in your application that represents a customer."
|
50
|
+
Installs CoreMerchant into your application. This generator will create an initializer file, migration files for the subscription and subscription plan tables, and a locale file."
|
53
51
|
DESC
|
54
52
|
end
|
55
53
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Created by: rails generate core_merchant:install
|
2
|
+
|
3
|
+
CoreMerchant.configure do |config|
|
4
|
+
# Set the class that represents a customer in your application.
|
5
|
+
# This class must include the CoreMerchant::CustomerBehavior module as such:
|
6
|
+
# class User < ApplicationRecord
|
7
|
+
# include CoreMerchant::CustomerBehavior
|
8
|
+
# ...
|
9
|
+
# end
|
10
|
+
config.customer_class = "User"
|
11
|
+
|
12
|
+
# Set the class that will receive subscription notifications/
|
13
|
+
# This class must include the CoreMerchant::SubscriptionListener module.
|
14
|
+
# class SubscriptionListener
|
15
|
+
# include CoreMerchant::SubscriptionListener
|
16
|
+
# def on_subscription_created(subscription)
|
17
|
+
# ...
|
18
|
+
# end
|
19
|
+
# ...
|
20
|
+
# end
|
21
|
+
# This class will receive notifications when a subscription is created, updated, canceled etc.
|
22
|
+
#
|
23
|
+
# To test notifications to this class, you can override `on_test_event_received` method
|
24
|
+
# and call `CoreMerchant.subscription_manager.notify_test_event`.
|
25
|
+
config.subscription_listener_class = "SubscriptionListener"
|
26
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: core_merchant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Seyithan Teymur
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: factory_bot
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: generator_spec
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -133,11 +147,13 @@ files:
|
|
133
147
|
- lib/core_merchant/concerns/subscription_state_machine.rb
|
134
148
|
- lib/core_merchant/customer_behavior.rb
|
135
149
|
- lib/core_merchant/subscription.rb
|
150
|
+
- lib/core_merchant/subscription_listener.rb
|
151
|
+
- lib/core_merchant/subscription_manager.rb
|
136
152
|
- lib/core_merchant/subscription_plan.rb
|
137
153
|
- lib/core_merchant/version.rb
|
138
154
|
- lib/generators/core_merchant/install_generator.rb
|
139
155
|
- lib/generators/core_merchant/templates/core_merchant.en.yml
|
140
|
-
- lib/generators/core_merchant/templates/core_merchant.
|
156
|
+
- lib/generators/core_merchant/templates/core_merchant.rb
|
141
157
|
- lib/generators/core_merchant/templates/migrate/create_core_merchant_subscription_plans.erb
|
142
158
|
- lib/generators/core_merchant/templates/migrate/create_core_merchant_subscriptions.erb
|
143
159
|
- sig/core_merchant.rbs
|