bullet_train 1.0.81 → 1.0.83

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: 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