bullet_train 1.0.81 → 1.0.83

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: e07a863ffd021a1e4da0bf8e18e68fb9e357d90264d5a0d0d92770363f48390c
4
- data.tar.gz: be20709eb91a25d64c9ef4371326cb56cc9b938b34bbb2e80db8ad21396d085c
3
+ metadata.gz: d2119a17f5ed1aace492642ab674c8fb67cadefd29100aee3809e590813da3bb
4
+ data.tar.gz: '0679c15de2ec6260be9beab3c1261fbef4892cacd961d285f813229aac5b1616'
5
5
  SHA512:
6
- metadata.gz: 1f887941fdeb2c3cb567b7011a1ff7edbf47558bc362d4b714c8a0d6ea6d4da922ac4d3eccc16c01c384ed9773eacc3f1b84ed3aadcf41adc7fd5d692b9ff0b4
7
- data.tar.gz: bd70518110d78e2c7d455fa314a70a874fc6d82b109c28188098b7ef91701af31c85ae9eb7be5f1dbff67b95e8c91005c4babb89179b2cbbc2bda7a0bd38254a
6
+ metadata.gz: 807684f8b6d5a99a6d35a78d0e50cbeb8a0ef40d06b1e56c1c653a6851ea0289e50c75f2a1e75a1500f6799f3fcd91a603fffaa64ea12324068a851290e67186
7
+ data.tar.gz: 964b44f5ddaa872e26e8cefcf0dd6f9a11d19fc7d3b435e10e7a14d6f62c420a60945dde1eb0c9c588f049cd64423e93c82c52e2b207c01c2cfbe7d58c5b125b
@@ -5,6 +5,10 @@ module Account::Controllers::Base
5
5
  include LoadsAndAuthorizesResource
6
6
  include Fields::ControllerSupport
7
7
 
8
+ if billing_enabled?
9
+ include Billing::ControllerSupport
10
+ end
11
+
8
12
  before_action :set_last_seen_at, if: proc {
9
13
  user_signed_in? && (current_user.last_seen_at.nil? || current_user.last_seen_at < 1.minute.ago)
10
14
  }
@@ -106,6 +110,11 @@ module Account::Controllers::Base
106
110
  end
107
111
  end
108
112
 
113
+ # TODO Maybe in this context we should check whether `Billing::ControllerSupport` is included instead of just defined?
114
+ if defined?(Billing::ControllerSupport)
115
+ enforce_billing_requirements
116
+ # See `app/controllers/concerns/billing_support.rb` for details.
117
+ end
109
118
  end
110
119
 
111
120
  true
@@ -1,6 +1,10 @@
1
1
  module BaseHelper
2
2
  # TODO This is for the billing package to override, but I feel like there has got to be a better way to do this.
3
3
  def hide_team_resource_menus?
4
- false
4
+ if billing_enabled?
5
+ current_team.needs_billing_subscription?
6
+ else
7
+ false
8
+ end
5
9
  end
6
10
  end
@@ -29,6 +29,11 @@ module Memberships::Base
29
29
  scope :current_and_invited, -> { includes(:invitation).where("user_id IS NOT NULL OR invitations.id IS NOT NULL").references(:invitation) }
30
30
  scope :current, -> { where("user_id IS NOT NULL") }
31
31
  scope :tombstones, -> { includes(:invitation).where("user_id IS NULL AND invitations.id IS NULL").references(:invitation) }
32
+
33
+ # TODO Probably we can provide a way for gem packages to define these kinds of extensions.
34
+ if billing_enabled?
35
+ scope :billable, -> { current }
36
+ end
32
37
  end
33
38
 
34
39
  def name
@@ -28,6 +28,14 @@ module Records::Base
28
28
  scope :newest_updated, -> { order("updated_at DESC") }
29
29
  scope :oldest_updated, -> { order("updated_at ASC") }
30
30
 
31
+ # TODO Probably we can provide a way for gem packages to define these kinds of extensions.
32
+ if billing_enabled?
33
+ # By default, any model in a collection is considered active for billing purposes.
34
+ # This can be overloaded in the child model class to specify more specific criteria for billing.
35
+ # See `app/models/concerns/memberships/base.rb` for an example.
36
+ scope :billable, -> { order("TRUE") }
37
+ end
38
+
31
39
  # Microscope adds useful scopes targeting ActiveRecord `boolean`, `date` and `datetime` attributes.
32
40
  # https://github.com/mirego/microscope
33
41
  acts_as_microscope
@@ -18,6 +18,17 @@ module Teams::Base
18
18
  # integrations
19
19
  has_many :integrations_stripe_installations, class_name: "Integrations::StripeInstallation", dependent: :destroy if stripe_enabled?
20
20
 
21
+ # TODO Probably we can provide a way for gem packages to define these kinds of extensions.
22
+ if billing_enabled?
23
+ # subscriptions
24
+ has_many :billing_subscriptions, class_name: "Billing::Subscription", dependent: :destroy, foreign_key: :team_id
25
+
26
+ # TODO We need a way for `bullet_train-billing-stripe` to define these.
27
+ if defined?(Billing::Stripe::Subscription)
28
+ has_many :billing_stripe_subscriptions, class_name: "Billing::Stripe::Subscription", dependent: :destroy, foreign_key: :team_id
29
+ end
30
+ end
31
+
21
32
  # validations
22
33
  validates :name, presence: true
23
34
  validates :time_zone, inclusion: {in: ActiveSupport::TimeZone.all.map(&:name)}, allow_nil: true
@@ -48,4 +59,12 @@ module Teams::Base
48
59
  # generic functions need to function for a team model as well, so we do this.
49
60
  self
50
61
  end
62
+
63
+ # TODO Probably we can provide a way for gem packages to define these kinds of extensions.
64
+ if billing_enabled?
65
+ def needs_billing_subscription?
66
+ return false if freemium_enabled?
67
+ billing_subscriptions.active.empty?
68
+ end
69
+ end
51
70
  end
@@ -0,0 +1,17 @@
1
+ en:
2
+ billing/products:
3
+ free:
4
+ name: Free
5
+ basic:
6
+ name: Basic
7
+ description: This is an example plan that includes a free trial when paid for monthly.
8
+ features:
9
+ - Demonstrates pricing per team member.
10
+ - Allows creation of up to fifty "Creative Concepts".
11
+ - Soft enforcement that limit.
12
+ pro:
13
+ name: Pro
14
+ description: An improved example plan that demonstrates different features.
15
+ features:
16
+ - Demonstrates a fixed price for up to ten team members.
17
+ - Allows creation of an unlimited number of "Creative Concepts".
@@ -1,3 +1,3 @@
1
1
  module BulletTrain
2
- VERSION = "1.0.81"
2
+ VERSION = "1.0.83"
3
3
  end
data/lib/bullet_train.rb CHANGED
@@ -61,7 +61,12 @@ def inbound_email_enabled?
61
61
  ENV["INBOUND_EMAIL_DOMAIN"].present?
62
62
  end
63
63
 
64
- def subscriptions_enabled?
64
+ def billing_enabled?
65
+ defined?(BulletTrain::Billing)
66
+ end
67
+
68
+ # TODO This should be in an initializer or something.
69
+ def billing_subscription_creation_disabled?
65
70
  false
66
71
  end
67
72
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bullet_train
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.81
4
+ version: 1.0.83
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Culver
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-16 00:00:00.000000000 Z
11
+ date: 2022-06-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: standard
@@ -556,6 +556,7 @@ files:
556
556
  - config/initializers/concerns/inflections_base.rb
557
557
  - config/initializers/concerns/turbo_failure_app.rb
558
558
  - config/locales/en/base.yml
559
+ - config/locales/en/billing/products.en.yml
559
560
  - config/locales/en/devise.en.yml
560
561
  - config/locales/en/doorkeeper.en.yml
561
562
  - config/locales/en/invitations.en.yml