moduler 0.2.0 → 0.3.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 (101) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/builds/moduler/tailwind.css +1358 -1
  3. data/app/assets/javascripts/moduler/application.js +1 -0
  4. data/app/assets/javascripts/moduler/controllers/flash_controller.js +19 -0
  5. data/app/assets/stylesheets/moduler/tailwind.css +3 -0
  6. data/app/components/moduler/administration/page_component.html.erb +7 -0
  7. data/app/components/moduler/administration/page_component.rb +6 -0
  8. data/app/components/moduler/badge_component.html.erb +8 -0
  9. data/app/components/moduler/badge_component.rb +10 -0
  10. data/app/components/moduler/button_component.html.erb +7 -0
  11. data/app/components/moduler/button_component.rb +19 -0
  12. data/app/components/moduler/button_link_component.html.erb +5 -0
  13. data/app/components/moduler/button_link_component.rb +15 -0
  14. data/app/components/moduler/filter_component.html.erb +12 -0
  15. data/app/components/moduler/filter_component.rb +15 -0
  16. data/app/components/moduler/form/base_error_component.html.erb +1 -0
  17. data/app/components/moduler/form/base_error_component.rb +9 -0
  18. data/app/components/moduler/form/email_component.html.erb +14 -0
  19. data/app/components/moduler/form/email_component.rb +11 -0
  20. data/app/components/moduler/form/password_component.html.erb +14 -0
  21. data/app/components/moduler/form/password_component.rb +11 -0
  22. data/app/components/moduler/form/section_component.html.erb +5 -0
  23. data/app/components/moduler/form/section_component.rb +14 -0
  24. data/app/components/moduler/form/select_component.html.erb +14 -0
  25. data/app/components/moduler/form/select_component.rb +12 -0
  26. data/app/components/moduler/form/submit_component.html.erb +3 -0
  27. data/app/components/moduler/form/submit_component.rb +10 -0
  28. data/app/components/moduler/form/text_component.html.erb +14 -0
  29. data/app/components/moduler/form/text_component.rb +11 -0
  30. data/app/components/moduler/list_component.html.erb +15 -0
  31. data/app/components/moduler/list_component.rb +18 -0
  32. data/app/components/moduler/list_item_component.html.erb +23 -0
  33. data/app/components/moduler/list_item_component.rb +14 -0
  34. data/app/components/moduler/page_header_component.html.erb +16 -0
  35. data/app/components/moduler/page_header_component.rb +12 -0
  36. data/app/components/moduler/sidebar_action_component.html.erb +5 -0
  37. data/app/components/moduler/sidebar_action_component.rb +15 -0
  38. data/app/controllers/concerns/moduler/authentication.rb +10 -2
  39. data/app/controllers/moduler/administration/application_controller.rb +7 -0
  40. data/app/controllers/moduler/administration/home_controller.rb +9 -0
  41. data/app/controllers/moduler/administration/sessions_controller.rb +34 -0
  42. data/app/controllers/moduler/administration/users_controller.rb +56 -0
  43. data/app/controllers/moduler/application_controller.rb +15 -0
  44. data/app/controllers/moduler/profile/sessions/revocation_controller.rb +14 -0
  45. data/app/controllers/moduler/profile/sessions_controller.rb +21 -0
  46. data/app/controllers/moduler/profile_controller.rb +27 -0
  47. data/app/controllers/moduler/sessions_controller.rb +8 -1
  48. data/app/controllers/moduler/users_controller.rb +7 -0
  49. data/app/filters/application_filter.rb +41 -0
  50. data/app/filters/query_filter.rb +18 -0
  51. data/app/lib/moduler/form_builder.rb +2 -2
  52. data/app/models/moduler/session.rb +12 -0
  53. data/app/models/moduler/user.rb +9 -0
  54. data/app/policies/moduler/administration/base_policy.rb +11 -0
  55. data/app/policies/moduler/administration/home_policy.rb +9 -0
  56. data/app/policies/moduler/administration/session_policy.rb +13 -0
  57. data/app/policies/moduler/administration/user_policy.rb +25 -0
  58. data/app/policies/moduler/application_policy.rb +38 -0
  59. data/app/views/kaminari/_gap.html.erb +1 -0
  60. data/app/views/kaminari/_next_page.html.erb +1 -0
  61. data/app/views/kaminari/_page.html.erb +3 -0
  62. data/app/views/kaminari/_paginator.html.erb +13 -0
  63. data/app/views/kaminari/_prev_page.html.erb +1 -0
  64. data/app/views/layouts/moduler/application.html.erb +5 -6
  65. data/app/views/moduler/administration/home/index.html.erb +6 -0
  66. data/app/views/moduler/administration/sessions/_session.html.erb +30 -0
  67. data/app/views/moduler/administration/sessions/index.html.erb +9 -0
  68. data/app/views/moduler/administration/users/_user.html.erb +13 -0
  69. data/app/views/moduler/administration/users/edit.html.erb +14 -0
  70. data/app/views/moduler/administration/users/index.html.erb +13 -0
  71. data/app/views/moduler/administration/users/new.html.erb +18 -0
  72. data/app/views/moduler/common/_flash.html.erb +16 -0
  73. data/app/views/moduler/common/_header.html.erb +12 -3
  74. data/app/views/moduler/common/_sidebar.html.erb +6 -0
  75. data/app/views/moduler/common/administration/_sidebar.html.erb +6 -0
  76. data/app/views/moduler/profile/edit.html.erb +28 -0
  77. data/app/views/moduler/profile/sessions/_session.html.erb +52 -0
  78. data/app/views/moduler/profile/sessions/index.html.erb +26 -0
  79. data/app/views/moduler/sessions/new.html.erb +4 -18
  80. data/app/views/moduler/users/new.html.erb +5 -32
  81. data/config/importmap.rb +1 -0
  82. data/config/locales/moduler/administration/sessions/en.yml +24 -0
  83. data/config/locales/moduler/administration/users/en.yml +43 -0
  84. data/config/locales/moduler/common/en.yml +5 -0
  85. data/config/locales/moduler/components/en.yml +11 -0
  86. data/config/locales/moduler/en.yml +4 -0
  87. data/config/locales/moduler/profile/en.yml +26 -0
  88. data/config/locales/moduler/profile/sessions/en.yml +25 -0
  89. data/config/locales/moduler/sessions/en.yml +1 -0
  90. data/config/locales/moduler/users/en.yml +7 -1
  91. data/config/routes.rb +14 -1
  92. data/db/migrate/20261015171504_add_role_to_moduler_users.rb +5 -0
  93. data/db/migrate/20261020191709_enable_pg_trgm.rb +5 -0
  94. data/lib/moduler/engine.rb +2 -0
  95. data/lib/moduler/version.rb +1 -1
  96. data/lib/moduler.rb +4 -0
  97. data/lib/tasks/moduler_tasks.rake +2 -4
  98. metadata +151 -5
  99. data/app/assets/javascripts/moduler/controllers/hello_controller.js +0 -6
  100. data/app/controllers/moduler/hello_controller.rb +0 -5
  101. data/app/views/moduler/hello/index.html.erb +0 -5
@@ -18,25 +18,11 @@
18
18
 
19
19
  <div>
20
20
  <%= form_for @user, url: moduler.session_path, class: "space-y-6", data: { turbo: false } do |form| %>
21
- <%= form.full_error :base, class: "my-2 text-sm text-red-600" %>
21
+ <%= render(::Moduler::Form::BaseErrorComponent.new(form)) %>
22
22
 
23
- <div class="mt-2">
24
- <label for="email" class="block text-sm/6 font-medium text-gray-900"><%= t(".label.email_address") %></label>
25
- <div class="mt-2">
26
- <%= form.email_field :email_address, autofocus: true, placeholder: t(".placeholder.email_address"), value: params[:email_address], class: "block w-full rounded-md bg-white px-3 py-1.5 text-base text-gray-900 outline outline-1 -outline-offset-1 outline-gray-300 placeholder:text-gray-400 focus:outline focus:outline-2 focus:-outline-offset-2 focus:outline-custom sm:text-sm/6" %>
27
- </div>
28
- </div>
29
-
30
- <div class="mt-2">
31
- <label for="password" class="block text-sm/6 font-medium text-gray-900"><%= t(".label.password") %></label>
32
- <div class="mt-2">
33
- <%= form.password_field :password, placeholder: t(".placeholder.password"), class: "block w-full rounded-md bg-white px-3 py-1.5 text-base text-gray-900 outline outline-1 -outline-offset-1 outline-gray-300 placeholder:text-gray-400 focus:outline focus:outline-2 focus:-outline-offset-2 focus:outline-custom sm:text-sm/6" %>
34
- </div>
35
- </div>
36
-
37
- <div class="mt-4">
38
- <button type="submit" class="cursor-pointer flex w-full justify-center rounded-md bg-custom px-3 py-1.5 text-sm/6 font-semibold text-white shadow-sm hover:bg-custom focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-custom"><%= t(".action.sign_in") %></button>
39
- </div>
23
+ <%= render(::Moduler::Form::EmailComponent.new(form, :email_address, label: t(".label.email_address"), placeholder: t(".placeholder.email_address"))) %>
24
+ <%= render(::Moduler::Form::PasswordComponent.new(form, :password, label: t(".label.password"), placeholder: t(".placeholder.password"))) %>
25
+ <%= render(::Moduler::Form::SubmitComponent.new(form, text: t(".action.sign_in"))) %>
40
26
  <% end %>
41
27
  </div>
42
28
  </div>
@@ -12,39 +12,12 @@
12
12
  <div class="mt-10">
13
13
  <div>
14
14
  <%= form_for @user, url: moduler.user_path, class: "space-y-6", data: { turbo: false } do |form| %>
15
- <div class="mt-2">
16
- <label for="email" class="block text-sm/6 font-medium text-gray-900"><%= t(".label.email_address") %></label>
17
- <div class="mt-2">
18
- <%= form.email_field :email_address, autofocus: true, placeholder: t(".placeholder.email_address"), class: "block w-full rounded-md bg-white px-3 py-1.5 text-base text-gray-900 outline outline-1 -outline-offset-1 outline-gray-300 placeholder:text-gray-400 focus:outline focus:outline-2 focus:-outline-offset-2 focus:outline-custom sm:text-sm/6" %>
19
- </div>
20
- <% if form.error?(:email_address) %>
21
- <%= form.error(:email_address, class: "text-red-500 text-sm mt-1") %>
22
- <% end %>
23
- </div>
15
+ <%= render(::Moduler::Form::BaseErrorComponent.new(form)) %>
24
16
 
25
- <div class="mt-2">
26
- <label for="password" class="block text-sm/6 font-medium text-gray-900"><%= t(".label.password") %></label>
27
- <div class="mt-2">
28
- <%= form.password_field :password, placeholder: t(".placeholder.password"), class: "block w-full rounded-md bg-white px-3 py-1.5 text-base text-gray-900 outline outline-1 -outline-offset-1 outline-gray-300 placeholder:text-gray-400 focus:outline focus:outline-2 focus:-outline-offset-2 focus:outline-custom sm:text-sm/6" %>
29
- </div>
30
- <% if form.error?(:password) %>
31
- <%= form.error(:password, class: "text-red-500 text-sm mt-1") %>
32
- <% end %>
33
- </div>
34
-
35
- <div class="mt-2">
36
- <label for="password_confirmation" class="block text-sm/6 font-medium text-gray-900"><%= t(".label.password_confirmation") %></label>
37
- <div class="mt-2">
38
- <%= form.password_field :password_confirmation, placeholder: t(".placeholder.password_confirmation"), class: "block w-full rounded-md bg-white px-3 py-1.5 text-base text-gray-900 outline outline-1 -outline-offset-1 outline-gray-300 placeholder:text-gray-400 focus:outline focus:outline-2 focus:-outline-offset-2 focus:outline-custom sm:text-sm/6" %>
39
- </div>
40
- <% if form.error?(:password_confirmation) %>
41
- <%= form.error(:password_confirmation, class: "text-red-500 text-sm mt-1") %>
42
- <% end %>
43
- </div>
44
-
45
- <div class="mt-4">
46
- <button type="submit" class="cursor-pointer flex w-full justify-center rounded-md bg-custom px-3 py-1.5 text-sm/6 font-semibold text-white shadow-sm hover:bg-custom focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-custom"><%= t(".action.sign_up") %></button>
47
- </div>
17
+ <%= render(::Moduler::Form::EmailComponent.new(form, :email_address, label: t(".label.email_address"), placeholder: t(".placeholder.email_address"))) %>
18
+ <%= render(::Moduler::Form::PasswordComponent.new(form, :password, label: t(".label.password"), placeholder: t(".placeholder.password"), description: t(".description.password"))) %>
19
+ <%= render(::Moduler::Form::PasswordComponent.new(form, :password_confirmation, placeholder: t(".placeholder.password_confirmation"))) %>
20
+ <%= render(::Moduler::Form::SubmitComponent.new(form, text: t(".action.sign_up"))) %>
48
21
  <% end %>
49
22
  </div>
50
23
  </div>
data/config/importmap.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  pin "moduler/application"
2
+ pin "@hotwired/turbo-rails", to: "turbo.min.js"
2
3
  pin "@hotwired/stimulus", to: "stimulus.min.js"
3
4
  pin "@hotwired/stimulus-loading", to: "stimulus-loading.js"
4
5
  pin_all_from File.expand_path("../app/assets/javascripts/moduler/controllers", __dir__), under: "moduler/controllers"
@@ -0,0 +1,24 @@
1
+ en:
2
+ moduler:
3
+ administration:
4
+ sessions:
5
+ index:
6
+ title: Sessions
7
+ description: Sessions of all users. Search sessions by email address, IP address or device and revoke any of them.
8
+ empty: No sessions found.
9
+ destroy:
10
+ notice: Session has been revoked
11
+ session:
12
+ action:
13
+ destroy: Revoke
14
+ status:
15
+ active: Active
16
+ signed_out: Signed out
17
+ current: This device
18
+ signed_in: Signed in %{time} ago
19
+ signed_out: Signed out %{time} ago
20
+ unknown_ip: Unknown IP address
21
+ unknown_device: Unknown device
22
+ confirmation:
23
+ destroy: The user will be signed out of this session. Are you sure?
24
+ destroy_current: You will be signed out of this device. Are you sure?
@@ -0,0 +1,43 @@
1
+ en:
2
+ moduler:
3
+ administration:
4
+ users:
5
+ roles:
6
+ member: Member
7
+ administrator: Administrator
8
+ index:
9
+ title: Users
10
+ description: Manage user accounts and their roles. Search users by email address.
11
+ empty: No users found.
12
+ action:
13
+ new: Create
14
+ new:
15
+ title: New user
16
+ label:
17
+ email_address: Email address
18
+ role: Role
19
+ password: Password
20
+ description:
21
+ password: Use at least 8 characters.
22
+ section:
23
+ data: User data
24
+ password: Password
25
+ action:
26
+ create: Create
27
+ create:
28
+ notice: User has been created
29
+ edit:
30
+ title: Edit user
31
+ label:
32
+ email_address: Email address
33
+ role: Role
34
+ section:
35
+ data: User data
36
+ action:
37
+ save: Save
38
+ update:
39
+ notice: User has been updated
40
+ user:
41
+ action:
42
+ edit: Edit
43
+ created: Created %{time} ago
@@ -1,8 +1,13 @@
1
1
  en:
2
2
  moduler:
3
3
  common:
4
+ sidebar:
5
+ action:
6
+ profile: Profile
7
+ sessions: Sessions
4
8
  header:
5
9
  nav:
10
+ administration: Administration
6
11
  home: Home
7
12
  action:
8
13
  sign_out: Sign out
@@ -0,0 +1,11 @@
1
+ en:
2
+ moduler:
3
+ components:
4
+ filter:
5
+ placeholder:
6
+ query: Search...
7
+ action:
8
+ filter: Filter
9
+ clear: Clear
10
+ list:
11
+ empty: No results found.
@@ -0,0 +1,4 @@
1
+ en:
2
+ moduler:
3
+ flash:
4
+ not_authorized: You are not authorized to perform this action.
@@ -0,0 +1,26 @@
1
+ en:
2
+ moduler:
3
+ profile:
4
+ edit:
5
+ title: Profile
6
+ label:
7
+ email_address: Email address
8
+ password: New password
9
+ password_confirmation: Confirm new password
10
+ password_challenge: Current password
11
+ description:
12
+ password_confirmation: Leave blank to keep your current password. Changing it signs out your other active sessions.
13
+ password_challenge: Required to save changes to password.
14
+ action:
15
+ save: Save
16
+ section:
17
+ data: Your data
18
+ password: Change password
19
+ current_password: Confirm changes
20
+ sidebar:
21
+ profile: Profile
22
+ notifications: Notifications
23
+ security: Security
24
+ billing: Billing
25
+ update:
26
+ notice: Your profile has been updated
@@ -0,0 +1,25 @@
1
+ en:
2
+ moduler:
3
+ profile:
4
+ sessions:
5
+ index:
6
+ title: Sessions
7
+ description: Devices where you are signed in to your account. Revoke any session you don't recognize.
8
+ action:
9
+ revoke_all: Revoke all
10
+ confirmation:
11
+ revoke: You will be signed out of all sessions, including this one. Are you sure?
12
+ session:
13
+ action:
14
+ destroy: Revoke
15
+ status:
16
+ active: Active
17
+ signed_out: Signed out
18
+ current: This device
19
+ signed_in: Signed in %{time} ago
20
+ signed_out: Signed out %{time} ago
21
+ unknown_ip: Unknown IP address
22
+ unknown_device: Unknown device
23
+ confirmation:
24
+ destroy: Are you sure?
25
+ destroy_current: You will be signed out of this device. Are you sure?
@@ -15,3 +15,4 @@ en:
15
15
  password: Enter your password
16
16
  create:
17
17
  invalid_credentials: Invalid credentials
18
+ rate_limited: Too many sign-in attempts. Please try again in a few minutes.
@@ -7,9 +7,15 @@ en:
7
7
  action:
8
8
  sign_in: "Sign in"
9
9
  sign_up: "Sign up"
10
+ label:
11
+ email_address: "Email address"
12
+ password: "Password"
10
13
  placeholder:
11
14
  email_address: "Email address"
12
15
  password: "Password"
13
- password_confirmation: "Password confirmation"
16
+ password_confirmation: "Confirm password"
17
+ description:
18
+ password: "Use at least 8 characters containing at least 1 number and 1 lowercase letter"
14
19
  create:
15
20
  success: "User created successfully."
21
+ rate_limited: "Too many sign-up attempts. Please try again in a few minutes."
data/config/routes.rb CHANGED
@@ -2,7 +2,20 @@ Moduler::Engine.routes.draw do
2
2
  resource :session, only: %i[new create destroy]
3
3
  resource :user, only: %i[new create]
4
4
 
5
- get "/hello", to: "hello#index"
5
+ resource :profile, only: %i[ edit update ], controller: :profile
6
+ namespace :profile do
7
+ namespace :sessions do
8
+ resource :revocation, only: :destroy, controller: :revocation
9
+ end
10
+ resources :sessions, only: %i[ index destroy ]
11
+ end
12
+
13
+ namespace :administration do
14
+ resources :users, only: %i[ index new create edit update ]
15
+ resources :sessions, only: %i[ index destroy ]
16
+
17
+ root "home#index"
18
+ end
6
19
 
7
20
  root "home#index"
8
21
  end
@@ -0,0 +1,5 @@
1
+ class AddRoleToModulerUsers < ActiveRecord::Migration[8.1]
2
+ def change
3
+ add_column :moduler_users, :role, :integer, default: 0
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class EnablePgTrgm < ActiveRecord::Migration[8.1]
2
+ def change
3
+ enable_extension "pg_trgm"
4
+ end
5
+ end
@@ -1,6 +1,8 @@
1
1
  require "importmap-rails"
2
2
  require "stimulus-rails"
3
+ require "turbo-rails"
3
4
  require "tailwindcss-rails"
5
+ require "kaminari"
4
6
 
5
7
  module Moduler
6
8
  class Engine < ::Rails::Engine
@@ -1,3 +1,3 @@
1
1
  module Moduler
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/moduler.rb CHANGED
@@ -1,3 +1,7 @@
1
+ require "view_component"
2
+ require "pg_search"
3
+ require "pundit"
4
+
1
5
  require "moduler/version"
2
6
  require "moduler/engine"
3
7
  require "moduler/configuration"
@@ -12,8 +12,7 @@ namespace :moduler do
12
12
  command = [
13
13
  Tailwindcss::Ruby.executable,
14
14
  "--input", input_path,
15
- "--output", output_path,
16
- "--minify"
15
+ "--output", output_path
17
16
  ]
18
17
 
19
18
  Dir.chdir(Moduler::Engine.root) do
@@ -32,8 +31,7 @@ namespace :moduler do
32
31
  Tailwindcss::Ruby.executable,
33
32
  "--input", input_path,
34
33
  "--output", output_path,
35
- "--watch",
36
- "--minify"
34
+ "--watch"
37
35
  ]
38
36
 
39
37
  Dir.chdir(Moduler::Engine.root) do
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomasz Kowalewski
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-09-27 00:00:00.000000000 Z
10
+ date: 2026-10-25 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: rails
@@ -69,6 +69,26 @@ dependencies:
69
69
  - - ">="
70
70
  - !ruby/object:Gem::Version
71
71
  version: 1.3.4
72
+ - !ruby/object:Gem::Dependency
73
+ name: turbo-rails
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - "~>"
77
+ - !ruby/object:Gem::Version
78
+ version: '2.0'
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 2.0.23
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '2.0'
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: 2.0.23
72
92
  - !ruby/object:Gem::Dependency
73
93
  name: tailwindcss-rails
74
94
  requirement: !ruby/object:Gem::Requirement
@@ -103,6 +123,62 @@ dependencies:
103
123
  - - ">="
104
124
  - !ruby/object:Gem::Version
105
125
  version: 3.1.22
126
+ - !ruby/object:Gem::Dependency
127
+ name: view_component
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '4.15'
133
+ type: :runtime
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '4.15'
140
+ - !ruby/object:Gem::Dependency
141
+ name: kaminari
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: '1.2'
147
+ type: :runtime
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: '1.2'
154
+ - !ruby/object:Gem::Dependency
155
+ name: pg_search
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '2.4'
161
+ type: :runtime
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '2.4'
168
+ - !ruby/object:Gem::Dependency
169
+ name: pundit
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: '2.5'
175
+ type: :runtime
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - "~>"
180
+ - !ruby/object:Gem::Version
181
+ version: '2.5'
106
182
  email:
107
183
  - me@tkowalewski.pl
108
184
  executables: []
@@ -115,15 +191,55 @@ files:
115
191
  - app/assets/builds/moduler/tailwind.css
116
192
  - app/assets/config/moduler/manifest.js
117
193
  - app/assets/javascripts/moduler/application.js
118
- - app/assets/javascripts/moduler/controllers/hello_controller.js
194
+ - app/assets/javascripts/moduler/controllers/flash_controller.js
119
195
  - app/assets/stylesheets/moduler/application.css
120
196
  - app/assets/stylesheets/moduler/tailwind.css
197
+ - app/components/moduler/administration/page_component.html.erb
198
+ - app/components/moduler/administration/page_component.rb
199
+ - app/components/moduler/badge_component.html.erb
200
+ - app/components/moduler/badge_component.rb
201
+ - app/components/moduler/button_component.html.erb
202
+ - app/components/moduler/button_component.rb
203
+ - app/components/moduler/button_link_component.html.erb
204
+ - app/components/moduler/button_link_component.rb
205
+ - app/components/moduler/filter_component.html.erb
206
+ - app/components/moduler/filter_component.rb
207
+ - app/components/moduler/form/base_error_component.html.erb
208
+ - app/components/moduler/form/base_error_component.rb
209
+ - app/components/moduler/form/email_component.html.erb
210
+ - app/components/moduler/form/email_component.rb
211
+ - app/components/moduler/form/password_component.html.erb
212
+ - app/components/moduler/form/password_component.rb
213
+ - app/components/moduler/form/section_component.html.erb
214
+ - app/components/moduler/form/section_component.rb
215
+ - app/components/moduler/form/select_component.html.erb
216
+ - app/components/moduler/form/select_component.rb
217
+ - app/components/moduler/form/submit_component.html.erb
218
+ - app/components/moduler/form/submit_component.rb
219
+ - app/components/moduler/form/text_component.html.erb
220
+ - app/components/moduler/form/text_component.rb
221
+ - app/components/moduler/list_component.html.erb
222
+ - app/components/moduler/list_component.rb
223
+ - app/components/moduler/list_item_component.html.erb
224
+ - app/components/moduler/list_item_component.rb
225
+ - app/components/moduler/page_header_component.html.erb
226
+ - app/components/moduler/page_header_component.rb
227
+ - app/components/moduler/sidebar_action_component.html.erb
228
+ - app/components/moduler/sidebar_action_component.rb
121
229
  - app/controllers/concerns/moduler/authentication.rb
230
+ - app/controllers/moduler/administration/application_controller.rb
231
+ - app/controllers/moduler/administration/home_controller.rb
232
+ - app/controllers/moduler/administration/sessions_controller.rb
233
+ - app/controllers/moduler/administration/users_controller.rb
122
234
  - app/controllers/moduler/application_controller.rb
123
- - app/controllers/moduler/hello_controller.rb
124
235
  - app/controllers/moduler/home_controller.rb
236
+ - app/controllers/moduler/profile/sessions/revocation_controller.rb
237
+ - app/controllers/moduler/profile/sessions_controller.rb
238
+ - app/controllers/moduler/profile_controller.rb
125
239
  - app/controllers/moduler/sessions_controller.rb
126
240
  - app/controllers/moduler/users_controller.rb
241
+ - app/filters/application_filter.rb
242
+ - app/filters/query_filter.rb
127
243
  - app/helpers/moduler/application_helper.rb
128
244
  - app/jobs/moduler/application_job.rb
129
245
  - app/lib/moduler/form_builder.rb
@@ -132,19 +248,49 @@ files:
132
248
  - app/models/moduler/current.rb
133
249
  - app/models/moduler/session.rb
134
250
  - app/models/moduler/user.rb
251
+ - app/policies/moduler/administration/base_policy.rb
252
+ - app/policies/moduler/administration/home_policy.rb
253
+ - app/policies/moduler/administration/session_policy.rb
254
+ - app/policies/moduler/administration/user_policy.rb
255
+ - app/policies/moduler/application_policy.rb
256
+ - app/views/kaminari/_gap.html.erb
257
+ - app/views/kaminari/_next_page.html.erb
258
+ - app/views/kaminari/_page.html.erb
259
+ - app/views/kaminari/_paginator.html.erb
260
+ - app/views/kaminari/_prev_page.html.erb
135
261
  - app/views/layouts/moduler/application.html.erb
262
+ - app/views/moduler/administration/home/index.html.erb
263
+ - app/views/moduler/administration/sessions/_session.html.erb
264
+ - app/views/moduler/administration/sessions/index.html.erb
265
+ - app/views/moduler/administration/users/_user.html.erb
266
+ - app/views/moduler/administration/users/edit.html.erb
267
+ - app/views/moduler/administration/users/index.html.erb
268
+ - app/views/moduler/administration/users/new.html.erb
269
+ - app/views/moduler/common/_flash.html.erb
136
270
  - app/views/moduler/common/_header.html.erb
137
- - app/views/moduler/hello/index.html.erb
271
+ - app/views/moduler/common/_sidebar.html.erb
272
+ - app/views/moduler/common/administration/_sidebar.html.erb
138
273
  - app/views/moduler/home/index.html.erb
274
+ - app/views/moduler/profile/edit.html.erb
275
+ - app/views/moduler/profile/sessions/_session.html.erb
276
+ - app/views/moduler/profile/sessions/index.html.erb
139
277
  - app/views/moduler/sessions/new.html.erb
140
278
  - app/views/moduler/users/new.html.erb
141
279
  - config/importmap.rb
280
+ - config/locales/moduler/administration/sessions/en.yml
281
+ - config/locales/moduler/administration/users/en.yml
142
282
  - config/locales/moduler/common/en.yml
283
+ - config/locales/moduler/components/en.yml
284
+ - config/locales/moduler/en.yml
285
+ - config/locales/moduler/profile/en.yml
286
+ - config/locales/moduler/profile/sessions/en.yml
143
287
  - config/locales/moduler/sessions/en.yml
144
288
  - config/locales/moduler/users/en.yml
145
289
  - config/routes.rb
146
290
  - db/migrate/20260322152259_create_moduler_users.rb
147
291
  - db/migrate/20260322153744_create_moduler_sessions.rb
292
+ - db/migrate/20261015171504_add_role_to_moduler_users.rb
293
+ - db/migrate/20261020191709_enable_pg_trgm.rb
148
294
  - lib/moduler.rb
149
295
  - lib/moduler/configuration.rb
150
296
  - lib/moduler/engine.rb
@@ -1,6 +0,0 @@
1
- import { Controller } from "@hotwired/stimulus";
2
- export default class extends Controller {
3
- connect() {
4
- this.element.textContent = "Moduler 🔥";
5
- }
6
- }
@@ -1,5 +0,0 @@
1
- module Moduler
2
- class HelloController < ApplicationController
3
- def index; end
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- <div class="bg-white px-6 py-24 sm:py-32 lg:px-8">
2
- <div class="mx-auto max-w-2xl text-center">
3
- <h2 class="text-4xl font-bold tracking-tight text-custom sm:text-6xl"><div data-controller="hello"></div></h2>
4
- </div>
5
- </div>