kern 0.5.0 → 0.6.0

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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +13 -2
  4. data/README.md +15 -13
  5. data/app/assets/builds/tailwind.css +1 -1
  6. data/app/controllers/kern/billing_profiles/subscriptions_controller.rb +37 -0
  7. data/app/controllers/kern/billing_profiles/subscriptions_controller.rb.tt +37 -0
  8. data/app/controllers/kern/settings/subscriptions_controller.rb +6 -0
  9. data/app/controllers/kern/signups_controller.rb +1 -1
  10. data/app/models/billing_profile/subscription.rb +16 -0
  11. data/app/models/billing_profile.rb +7 -0
  12. data/app/models/session.rb +1 -1
  13. data/app/models/signup.rb +1 -1
  14. data/app/models/user.rb +1 -1
  15. data/app/models/workspace/access.rb +3 -0
  16. data/app/models/workspace/access.rb.tt +10 -0
  17. data/app/models/workspace/billable.rb +16 -0
  18. data/app/models/workspace/feature_access.rb +28 -0
  19. data/app/models/workspace/members.rb +9 -7
  20. data/app/models/workspace/setup.rb +5 -3
  21. data/app/models/workspace.rb +2 -0
  22. data/app/views/components/_dialog.html.erb +36 -0
  23. data/app/views/kern/pages/welcome.html.erb +10 -6
  24. data/app/views/kern/settings/_cards.html.erb +11 -3
  25. data/app/views/kern/settings/subscriptions/_plan.html.erb +35 -0
  26. data/app/views/kern/settings/subscriptions/show.html.erb +11 -0
  27. data/app/views/kern/settings/users/show.html.erb +2 -2
  28. data/app/views/kern/signups/new.html.erb +2 -0
  29. data/app/views/layouts/kern/application.html.erb +3 -1
  30. data/app/views/layouts/kern/application.html.erb.tt +1 -0
  31. data/app/views/layouts/kern/auth.html.erb +1 -1
  32. data/app/webhooks/stripe/base.rb +31 -0
  33. data/app/webhooks/stripe/checkout_session_completed.rb +46 -0
  34. data/app/webhooks/stripe/customer_subscription_deleted.rb +20 -0
  35. data/app/webhooks/stripe/customer_subscription_updated.rb +33 -0
  36. data/bin/release +2 -3
  37. data/config/initializers/stripe.rb +5 -0
  38. data/config/initializers/stripe.rb.tt +3 -0
  39. data/config/routes.rb +4 -0
  40. data/db/migrate/20250101000007_create_billing_profiles.rb +14 -0
  41. data/db/migrate/20250101000008_create_billing_profile_subscriptions.rb +20 -0
  42. data/lib/generators/kern/feature/USAGE +1 -0
  43. data/lib/generators/kern/feature/feature_generator.rb +82 -19
  44. data/lib/generators/kern/install/install_generator.rb +43 -7
  45. data/lib/generators/kern/install/templates/POST_INSTALL +25 -0
  46. data/lib/generators/kern/install/templates/configurations/plans.yml +43 -0
  47. data/lib/generators/kern/install/templates/configurations/stripe.yml +11 -0
  48. data/lib/generators/kern/layouts/layouts_generator.rb +12 -0
  49. data/lib/kern/version.rb +1 -1
  50. metadata +25 -3
  51. data/lib/generators/kern/views/USAGE +0 -22
  52. data/lib/generators/kern/views/views_generator.rb +0 -42
@@ -0,0 +1,43 @@
1
+ shared:
2
+ default:
3
+ name: default
4
+ price_id: price_id
5
+ amount: 0
6
+ features:
7
+ member_count: 1
8
+ email_notifications: true
9
+
10
+ production:
11
+ prod_id_1:
12
+ name: lite
13
+ price_id: price_1sv3l7ih6mxtl9cdmk5nqkrh
14
+ amount: 49
15
+ features:
16
+ member_count: 1
17
+ email_notifications: false
18
+
19
+ prod_id_2:
20
+ name: starter
21
+ price_id: price_id
22
+ amount: 99
23
+ features:
24
+ member_count: 10
25
+ email_notifications: true
26
+
27
+ development:
28
+ pro_plan_id:
29
+ name: pro
30
+ price_id: price_id
31
+ amount: 49
32
+ features:
33
+ member_count: 1
34
+ email_notifications: true
35
+
36
+ test:
37
+ pro_plan_id:
38
+ name: pro
39
+ price_id: price_id
40
+ amount: 49
41
+ features:
42
+ member_count: 1
43
+ email_notifications: true
@@ -0,0 +1,11 @@
1
+ shared:
2
+ api_key: <%= ENV.fetch("STRIPE_API_KEY", Rails.application.credentials&.stripe&.api_key) %>
3
+ api_version: <%= ENV.fetch("STRIPE_API_VERSION", "2025-10-29.clover") %>
4
+ max_network_retries: <%= ENV.fetch("STRIPE_MAX_NETWORK_RETRIES", 2) %>
5
+
6
+ development:
7
+ default_price_id: default_price_id
8
+
9
+ production:
10
+ default_price_id: <%= ENV.fetch("STRIPE_DEFAULT_PRICE_ID", "price_1SV3laIh6mxtl9CDpVY0viQy") %>
11
+ signing_secret_key: <%= ENV.fetch("STRIPE_SIGNING_KEY", Rails.application.credentials&.stripe&.signing_secret) %>
@@ -0,0 +1,12 @@
1
+ module Kern
2
+ class LayoutsGenerator < Rails::Generators::Base
3
+ source_root File.expand_path("../../../../../app/views", __FILE__)
4
+
5
+ def copy_layouts
6
+ template "layouts/kern/application.html.erb.tt", "app/views/layouts/application.html.erb"
7
+ copy_file "layouts/kern/application/_navigation.html.erb", "app/views/layouts/application/_navigation.html.erb"
8
+
9
+ copy_file "layouts/kern/auth.html.erb", "app/views/layouts/auth.html.erb"
10
+ end
11
+ end
12
+ end
data/lib/kern/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Kern
2
- VERSION = "0.5.0"
2
+ VERSION = "0.6.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kern
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rails Designer
@@ -39,9 +39,12 @@ files:
39
39
  - app/controllers/concerns/authentication.rb
40
40
  - app/controllers/concerns/authentication.rb.tt
41
41
  - app/controllers/kern/application_controller.rb
42
+ - app/controllers/kern/billing_profiles/subscriptions_controller.rb
43
+ - app/controllers/kern/billing_profiles/subscriptions_controller.rb.tt
42
44
  - app/controllers/kern/pages_controller.rb
43
45
  - app/controllers/kern/passwords_controller.rb
44
46
  - app/controllers/kern/sessions_controller.rb
47
+ - app/controllers/kern/settings/subscriptions_controller.rb
45
48
  - app/controllers/kern/settings/users_controller.rb
46
49
  - app/controllers/kern/settings_controller.rb
47
50
  - app/controllers/kern/signups_controller.rb
@@ -52,6 +55,8 @@ files:
52
55
  - app/mailers/kern/passwords_mailer.rb
53
56
  - app/models/actor.rb
54
57
  - app/models/application_form.rb
58
+ - app/models/billing_profile.rb
59
+ - app/models/billing_profile/subscription.rb
55
60
  - app/models/current.rb
56
61
  - app/models/member.rb
57
62
  - app/models/member/acting.rb
@@ -62,9 +67,14 @@ files:
62
67
  - app/models/user.rb
63
68
  - app/models/user/workspace_member.rb
64
69
  - app/models/workspace.rb
70
+ - app/models/workspace/access.rb
71
+ - app/models/workspace/access.rb.tt
72
+ - app/models/workspace/billable.rb
73
+ - app/models/workspace/feature_access.rb
65
74
  - app/models/workspace/members.rb
66
75
  - app/models/workspace/setup.rb
67
76
  - app/views/components/_container.html.erb
77
+ - app/views/components/_dialog.html.erb
68
78
  - app/views/components/_flash.html.erb
69
79
  - app/views/components/_heading.html.erb
70
80
  - app/views/components/flash/_message.html.erb
@@ -78,15 +88,23 @@ files:
78
88
  - app/views/kern/sessions/new.html.erb
79
89
  - app/views/kern/settings/_cards.html.erb
80
90
  - app/views/kern/settings/show.html.erb
91
+ - app/views/kern/settings/subscriptions/_plan.html.erb
92
+ - app/views/kern/settings/subscriptions/show.html.erb
81
93
  - app/views/kern/settings/users/show.html.erb
82
94
  - app/views/kern/signups/new.html.erb
83
95
  - app/views/layouts/kern/application.html.erb
84
96
  - app/views/layouts/kern/application.html.erb.tt
85
97
  - app/views/layouts/kern/application/_navigation.html.erb
86
98
  - app/views/layouts/kern/auth.html.erb
99
+ - app/webhooks/stripe/base.rb
100
+ - app/webhooks/stripe/checkout_session_completed.rb
101
+ - app/webhooks/stripe/customer_subscription_deleted.rb
102
+ - app/webhooks/stripe/customer_subscription_updated.rb
87
103
  - bin/dev
88
104
  - bin/rails
89
105
  - bin/release
106
+ - config/initializers/stripe.rb
107
+ - config/initializers/stripe.rb.tt
90
108
  - config/routes.rb
91
109
  - db/migrate/20250101000001_create_users.rb
92
110
  - db/migrate/20250101000002_create_sessions.rb
@@ -94,16 +112,20 @@ files:
94
112
  - db/migrate/20250101000004_create_members.rb
95
113
  - db/migrate/20250101000005_create_roles.rb
96
114
  - db/migrate/20250101000006_create_actors.rb
115
+ - db/migrate/20250101000007_create_billing_profiles.rb
116
+ - db/migrate/20250101000008_create_billing_profile_subscriptions.rb
97
117
  - kern.gemspec
98
118
  - lib/generators/kern/feature/USAGE
99
119
  - lib/generators/kern/feature/feature_generator.rb
100
120
  - lib/generators/kern/helpers.rb
101
121
  - lib/generators/kern/install/USAGE
102
122
  - lib/generators/kern/install/install_generator.rb
123
+ - lib/generators/kern/install/templates/POST_INSTALL
103
124
  - lib/generators/kern/install/templates/configurations/README.md
125
+ - lib/generators/kern/install/templates/configurations/plans.yml
126
+ - lib/generators/kern/install/templates/configurations/stripe.yml
104
127
  - lib/generators/kern/install/templates/configurations/urls.yml
105
- - lib/generators/kern/views/USAGE
106
- - lib/generators/kern/views/views_generator.rb
128
+ - lib/generators/kern/layouts/layouts_generator.rb
107
129
  - lib/kern.rb
108
130
  - lib/kern/config.rb
109
131
  - lib/kern/engine.rb
@@ -1,22 +0,0 @@
1
- Description:
2
- Generates Kern view templates in your application.
3
-
4
- Example:
5
- rails generate kern:views
6
-
7
- This will generate all available Kern views.
8
-
9
- rails generate kern:views sessions
10
-
11
- This will generate only the sessions views.
12
-
13
- rails generate kern:views sessions passwords
14
-
15
- This will generate sessions and passwords views.
16
-
17
- Available views:
18
- passwords Password reset views
19
- sessions Sign in views
20
- settings User settings views
21
- signups Sign up views
22
- layouts Kern layout files
@@ -1,42 +0,0 @@
1
- module Kern
2
- class ViewsGenerator < Rails::Generators::Base
3
- source_root File.expand_path("../../../../../app/views", __FILE__)
4
-
5
- AVAILABLE_VIEWS = %w[passwords sessions settings signups layouts]
6
-
7
- argument :views, type: :array, default: [], banner: "view view", desc: "Select specific view directories to generate (#{AVAILABLE_VIEWS.join(", ")}). Leave empty for all."
8
-
9
- def copy_views
10
- views_to_generate.map(&:inquiry).each do |view|
11
- verify_view_exists!(view)
12
-
13
- if view.layouts?
14
- generate_layouts
15
- else
16
- directory "kern/#{view}", "app/views/#{view}", recursive: true
17
- end
18
- end
19
- end
20
-
21
- private
22
-
23
- def views_to_generate
24
- views.any? ? views : AVAILABLE_VIEWS
25
- end
26
-
27
- def verify_view_exists!(view)
28
- return if AVAILABLE_VIEWS.include?(view)
29
-
30
- say "View `#{view}` not found. Available views: #{AVAILABLE_VIEWS.join(", ")}", :red
31
-
32
- exit(1)
33
- end
34
-
35
- def generate_layouts
36
- template "layouts/kern/application.html.erb.tt", "app/views/layouts/application.html.erb"
37
- copy_file "layouts/kern/application/_navigation.html.erb", "app/views/layouts/application/_navigation.html.erb"
38
-
39
- copy_file "layouts/kern/auth.html.erb", "app/views/layouts/auth.html.erb"
40
- end
41
- end
42
- end