practical 0.1.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 (119) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +37 -0
  3. data/Rakefile +10 -0
  4. data/app/components/practical/views/base_component.rb +6 -0
  5. data/app/components/practical/views/button_component.rb +27 -0
  6. data/app/components/practical/views/datatable/filter_applied.rb +25 -0
  7. data/app/components/practical/views/datatable/filter_section_component.html.erb +9 -0
  8. data/app/components/practical/views/datatable/filter_section_component.rb +19 -0
  9. data/app/components/practical/views/datatable/sort_link_component.rb +48 -0
  10. data/app/components/practical/views/datatable.rb +36 -0
  11. data/app/components/practical/views/flash_messages_component.rb +65 -0
  12. data/app/components/practical/views/form/error_list_component.rb +15 -0
  13. data/app/components/practical/views/form/error_list_item_component.rb +20 -0
  14. data/app/components/practical/views/form/error_list_item_template_component.rb +9 -0
  15. data/app/components/practical/views/form/fallback_errors_section_component.html.erb +7 -0
  16. data/app/components/practical/views/form/fallback_errors_section_component.rb +21 -0
  17. data/app/components/practical/views/form/field_errors_component.rb +28 -0
  18. data/app/components/practical/views/form/field_title_component.rb +23 -0
  19. data/app/components/practical/views/form/fieldset_title_component.rb +20 -0
  20. data/app/components/practical/views/form/input_component.html.erb +7 -0
  21. data/app/components/practical/views/form/input_component.rb +22 -0
  22. data/app/components/practical/views/form/option_label_component.rb +21 -0
  23. data/app/components/practical/views/form/practical_editor_component.rb +26 -0
  24. data/app/components/practical/views/form/required_radio_collection_wrapper_component.rb +23 -0
  25. data/app/components/practical/views/form_wrapper.rb +21 -0
  26. data/app/components/practical/views/icon_component.rb +36 -0
  27. data/app/components/practical/views/icon_for_file_extension_component.rb +53 -0
  28. data/app/components/practical/views/modal_dialog_component.html.erb +10 -0
  29. data/app/components/practical/views/modal_dialog_component.rb +16 -0
  30. data/app/components/practical/views/navigation/breadcrumb_item_component.rb +20 -0
  31. data/app/components/practical/views/navigation/breadcrumbs_component.html.erb +31 -0
  32. data/app/components/practical/views/navigation/breadcrumbs_component.rb +41 -0
  33. data/app/components/practical/views/navigation/navigation_link_component.rb +39 -0
  34. data/app/components/practical/views/navigation/pagination/goto_form_component.html.erb +31 -0
  35. data/app/components/practical/views/navigation/pagination/goto_form_component.rb +34 -0
  36. data/app/components/practical/views/navigation/pagination_component.html.erb +11 -0
  37. data/app/components/practical/views/navigation/pagination_component.rb +98 -0
  38. data/app/components/practical/views/open_dialog_button_component.rb +16 -0
  39. data/app/components/practical/views/page_component.html.erb +53 -0
  40. data/app/components/practical/views/page_component.rb +12 -0
  41. data/app/components/practical/views/relative_time_component.rb +13 -0
  42. data/app/components/practical/views/tiptap_document_component.rb +311 -0
  43. data/app/components/practical/views/toast_component.html.erb +26 -0
  44. data/app/components/practical/views/toast_component.rb +19 -0
  45. data/app/controllers/concerns/practical/auth/passkeys/emergency_registrations.rb +57 -0
  46. data/app/controllers/concerns/practical/auth/passkeys/web_authn_debug_context.rb +13 -0
  47. data/app/controllers/concerns/practical/views/flash_helpers.rb +37 -0
  48. data/app/controllers/concerns/practical/views/json_redirection.rb +7 -0
  49. data/app/lib/practical/defaults/shrine.rb +48 -0
  50. data/app/lib/practical/test/helpers/administrator/test_helpers.rb +7 -0
  51. data/app/lib/practical/test/helpers/extra_assertions.rb +7 -0
  52. data/app/lib/practical/test/helpers/flash_assertions.rb +8 -0
  53. data/app/lib/practical/test/helpers/integration/assertions.rb +23 -0
  54. data/app/lib/practical/test/helpers/passkey/system/base.rb +52 -0
  55. data/app/lib/practical/test/helpers/passkey/system/rack_test.rb +45 -0
  56. data/app/lib/practical/test/helpers/passkey/system/selenium.rb +107 -0
  57. data/app/lib/practical/test/helpers/passkey/test_helper.rb +128 -0
  58. data/app/lib/practical/test/helpers/postmark.rb +11 -0
  59. data/app/lib/practical/test/helpers/relation_builder_assertions.rb +18 -0
  60. data/app/lib/practical/test/helpers/setup/debug.rb +8 -0
  61. data/app/lib/practical/test/helpers/setup/faker_seed_pinning.rb +8 -0
  62. data/app/lib/practical/test/helpers/setup/simplecov.rb +17 -0
  63. data/app/lib/practical/test/helpers/shrine/test_data.rb +101 -0
  64. data/app/lib/practical/test/helpers/spy_assertions.rb +7 -0
  65. data/app/lib/practical/test/helpers/system/assertions.rb +33 -0
  66. data/app/lib/practical/test/helpers/system/capybara_prep.rb +10 -0
  67. data/app/lib/practical/test/shared/auth/passkeys/controllers/emergency_registration/base.rb +372 -0
  68. data/app/lib/practical/test/shared/auth/passkeys/controllers/emergency_registration/self_service.rb +66 -0
  69. data/app/lib/practical/test/shared/auth/passkeys/controllers/reauthentication/base.rb +119 -0
  70. data/app/lib/practical/test/shared/auth/passkeys/controllers/registrations/no_self_destroy.rb +13 -0
  71. data/app/lib/practical/test/shared/auth/passkeys/controllers/registrations/no_self_signup.rb +22 -0
  72. data/app/lib/practical/test/shared/auth/passkeys/controllers/registrations/self_destroy.rb +134 -0
  73. data/app/lib/practical/test/shared/auth/passkeys/controllers/registrations/self_signup.rb +221 -0
  74. data/app/lib/practical/test/shared/auth/passkeys/controllers/registrations/update.rb +220 -0
  75. data/app/lib/practical/test/shared/auth/passkeys/controllers/sessions/base.rb +108 -0
  76. data/app/lib/practical/test/shared/auth/passkeys/forms/emergency_registration.rb +82 -0
  77. data/app/lib/practical/test/shared/auth/passkeys/models/emergency_registration/base.rb +89 -0
  78. data/app/lib/practical/test/shared/auth/passkeys/models/emergency_registration/use_for_and_notify.rb +48 -0
  79. data/app/lib/practical/test/shared/auth/passkeys/models/passkey.rb +101 -0
  80. data/app/lib/practical/test/shared/auth/passkeys/models/resource_with_passkeys.rb +57 -0
  81. data/app/lib/practical/test/shared/auth/passkeys/policies/passkey.rb +18 -0
  82. data/app/lib/practical/test/shared/auth/passkeys/services/send_emergency_registration.rb +41 -0
  83. data/app/lib/practical/test/shared/models/normalized_email.rb +23 -0
  84. data/app/lib/practical/test/shared/models/user.rb +27 -0
  85. data/app/lib/practical/test/shared/models/utility/ip_address.rb +42 -0
  86. data/app/lib/practical/test/shared/models/utility/user_agent.rb +43 -0
  87. data/app/lib/practical/views/button/styling.rb +23 -0
  88. data/app/lib/practical/views/error_handling.rb +33 -0
  89. data/app/lib/practical/views/form_builders/base.rb +152 -0
  90. data/app/lib/practical/views/icon_set.rb +156 -0
  91. data/app/lib/practical/views/web_awesome/style_utility/appearance_variant.rb +19 -0
  92. data/app/lib/practical/views/web_awesome/style_utility/base.rb +21 -0
  93. data/app/lib/practical/views/web_awesome/style_utility/color_variant.rb +17 -0
  94. data/app/lib/practical/views/web_awesome/style_utility/size.rb +31 -0
  95. data/config/locales/auth.en.yml +38 -0
  96. data/config/locales/devise.passkeys.en.yml +18 -0
  97. data/config/locales/practical_framework.en.yml +9 -0
  98. data/config/routes.rb +4 -0
  99. data/db/seeds/setup.rb +13 -0
  100. data/db/seeds/users/default.rb +34 -0
  101. data/lib/generators/practical/test/helper/USAGE +8 -0
  102. data/lib/generators/practical/test/helper/helper_generator.rb +9 -0
  103. data/lib/generators/practical/test/helper/templates/helper.rb.tt +4 -0
  104. data/lib/generators/practical/test/shared_test/USAGE +9 -0
  105. data/lib/generators/practical/test/shared_test/shared_test_generator.rb +7 -0
  106. data/lib/generators/practical/test/shared_test/templates/shared_test.rb.tt +9 -0
  107. data/lib/generators/practical/views/component/USAGE +9 -0
  108. data/lib/generators/practical/views/component/component_generator.rb +20 -0
  109. data/lib/practical/framework/engine.rb +35 -0
  110. data/lib/practical/helpers/form_with_helper.rb +10 -0
  111. data/lib/practical/helpers/icon_helper.rb +18 -0
  112. data/lib/practical/helpers/text_helper.rb +20 -0
  113. data/lib/practical/helpers/translation_helper.rb +25 -0
  114. data/lib/practical/version.rb +5 -0
  115. data/lib/practical/views/element_helper.rb +48 -0
  116. data/lib/practical.rb +21 -0
  117. data/lib/tasks/practical/coverage.rake +19 -0
  118. data/lib/tasks/practical/framework_tasks.rake +6 -0
  119. metadata +303 -0
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Practical::Helpers::IconHelper
4
+ include Practical::Views::ElementHelper
5
+
6
+ def icon_set
7
+ ApplicationIconSet
8
+ end
9
+
10
+ def icon_text(icon:, text:, options: {})
11
+ tag.span(**mix({class: "wa-flank wa-gap-xs icon-text"}, options)) {
12
+ safe_join([
13
+ (render icon),
14
+ tag.span(text)
15
+ ])
16
+ }
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Practical::Helpers::TextHelper
4
+ def double_quoted_text(text)
5
+ "“#{text}”"
6
+ end
7
+
8
+ def single_quoted_text(text)
9
+ "‘#{text}’"
10
+ end
11
+
12
+ def initials(name:)
13
+ space_split = name.split(" ")
14
+ if space_split.size >= 2
15
+ return space_split.first(2).map{|x| x[0]&.upcase }.join("")
16
+ end
17
+
18
+ return name.first(2).upcase
19
+ end
20
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Practical::Helpers::TranslationHelper
4
+ def guided_translate(key, **options)
5
+ new_options = options.reverse_merge(
6
+ default: []
7
+ )
8
+
9
+ if key.start_with?(".")
10
+ path_parts = controller_path.split("/")
11
+ namespaced_versions = path_parts.each_with_index
12
+ .map{|part, i| path_parts[0..i]}
13
+ .map{|x| :"#{x.join(".")}#{key}"}
14
+
15
+ guided_defaults = [
16
+ namespaced_versions,
17
+ key[1..].to_sym
18
+ ].flatten
19
+
20
+ new_options[:default] += guided_defaults
21
+ end
22
+
23
+ t(key, **new_options)
24
+ end
25
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Practical
4
+ VERSION = "0.1.0"
5
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Practical::Views::ElementHelper
4
+ extend ActiveSupport::Concern
5
+
6
+ def mix(*args)
7
+ args.each_with_object({}) do |object, result|
8
+ result.merge!(object) do |_key, old, new|
9
+ case [old, new].freeze
10
+ in [Array, Array] | [Set, Set]
11
+ old + new
12
+ in [Array, Set]
13
+ old + new.to_a
14
+ in [Array, String]
15
+ old + [new]
16
+ in [Hash, Hash]
17
+ mix(old, new)
18
+ in [Set, Array]
19
+ old.to_a + new
20
+ in [Set, String]
21
+ old.to_a + [new]
22
+ in [String, Array]
23
+ [old] + new
24
+ in [String, Set]
25
+ [old] + new.to_a
26
+ in [String, String]
27
+ "#{old} #{new}"
28
+ in [_, nil]
29
+ old
30
+ else
31
+ new
32
+ end
33
+ end
34
+
35
+ result.transform_keys! do |key|
36
+ key.end_with?("!") ? key.name.chop.to_sym : key
37
+ end
38
+ end
39
+ end
40
+
41
+ def grab(**bindings)
42
+ if bindings.size > 1
43
+ bindings.values
44
+ else
45
+ bindings.values.first
46
+ end
47
+ end
48
+ end
data/lib/practical.rb ADDED
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "practical/version"
4
+ require "practical/framework/engine"
5
+
6
+ module Practical
7
+ module Framework
8
+ end
9
+
10
+ module Helpers
11
+ end
12
+
13
+ module Views
14
+ end
15
+ end
16
+
17
+ require "practical/views/element_helper"
18
+ require "practical/helpers/form_with_helper"
19
+ require "practical/helpers/icon_helper"
20
+ require "practical/helpers/text_helper"
21
+ require "practical/helpers/translation_helper"
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :coverage do
4
+ desc "Collates all result sets generated by the different test runners"
5
+ task :report do
6
+ require 'simplecov'
7
+ require "simplecov_json_formatter"
8
+
9
+ SimpleCov.collate Dir["coverage_results/.resultset-*.json"] do
10
+ formatter SimpleCov::Formatter::MultiFormatter.new(
11
+ [
12
+ SimpleCov::Formatter::SimpleFormatter,
13
+ SimpleCov::Formatter::HTMLFormatter,
14
+ SimpleCov.formatter = SimpleCov::Formatter::JSONFormatter
15
+ ]
16
+ )
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ # desc "Explaining what the task does"
4
+ # task :practical_framework do
5
+ # # Task goes here
6
+ # end
metadata ADDED
@@ -0,0 +1,303 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: practical
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Thomas Cannon
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2025-05-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 8.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 8.0.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: view_component
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: loaf
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pagy
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: honeybadger
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: semantic_logger
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: devise-passkeys
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: shrine
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: oaken
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: action_policy
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: The Ruby code for the Practical Framework
154
+ email:
155
+ - tcannon00@gmail.com
156
+ executables: []
157
+ extensions: []
158
+ extra_rdoc_files: []
159
+ files:
160
+ - README.md
161
+ - Rakefile
162
+ - app/components/practical/views/base_component.rb
163
+ - app/components/practical/views/button_component.rb
164
+ - app/components/practical/views/datatable.rb
165
+ - app/components/practical/views/datatable/filter_applied.rb
166
+ - app/components/practical/views/datatable/filter_section_component.html.erb
167
+ - app/components/practical/views/datatable/filter_section_component.rb
168
+ - app/components/practical/views/datatable/sort_link_component.rb
169
+ - app/components/practical/views/flash_messages_component.rb
170
+ - app/components/practical/views/form/error_list_component.rb
171
+ - app/components/practical/views/form/error_list_item_component.rb
172
+ - app/components/practical/views/form/error_list_item_template_component.rb
173
+ - app/components/practical/views/form/fallback_errors_section_component.html.erb
174
+ - app/components/practical/views/form/fallback_errors_section_component.rb
175
+ - app/components/practical/views/form/field_errors_component.rb
176
+ - app/components/practical/views/form/field_title_component.rb
177
+ - app/components/practical/views/form/fieldset_title_component.rb
178
+ - app/components/practical/views/form/input_component.html.erb
179
+ - app/components/practical/views/form/input_component.rb
180
+ - app/components/practical/views/form/option_label_component.rb
181
+ - app/components/practical/views/form/practical_editor_component.rb
182
+ - app/components/practical/views/form/required_radio_collection_wrapper_component.rb
183
+ - app/components/practical/views/form_wrapper.rb
184
+ - app/components/practical/views/icon_component.rb
185
+ - app/components/practical/views/icon_for_file_extension_component.rb
186
+ - app/components/practical/views/modal_dialog_component.html.erb
187
+ - app/components/practical/views/modal_dialog_component.rb
188
+ - app/components/practical/views/navigation/breadcrumb_item_component.rb
189
+ - app/components/practical/views/navigation/breadcrumbs_component.html.erb
190
+ - app/components/practical/views/navigation/breadcrumbs_component.rb
191
+ - app/components/practical/views/navigation/navigation_link_component.rb
192
+ - app/components/practical/views/navigation/pagination/goto_form_component.html.erb
193
+ - app/components/practical/views/navigation/pagination/goto_form_component.rb
194
+ - app/components/practical/views/navigation/pagination_component.html.erb
195
+ - app/components/practical/views/navigation/pagination_component.rb
196
+ - app/components/practical/views/open_dialog_button_component.rb
197
+ - app/components/practical/views/page_component.html.erb
198
+ - app/components/practical/views/page_component.rb
199
+ - app/components/practical/views/relative_time_component.rb
200
+ - app/components/practical/views/tiptap_document_component.rb
201
+ - app/components/practical/views/toast_component.html.erb
202
+ - app/components/practical/views/toast_component.rb
203
+ - app/controllers/concerns/practical/auth/passkeys/emergency_registrations.rb
204
+ - app/controllers/concerns/practical/auth/passkeys/web_authn_debug_context.rb
205
+ - app/controllers/concerns/practical/views/flash_helpers.rb
206
+ - app/controllers/concerns/practical/views/json_redirection.rb
207
+ - app/lib/practical/defaults/shrine.rb
208
+ - app/lib/practical/test/helpers/administrator/test_helpers.rb
209
+ - app/lib/practical/test/helpers/extra_assertions.rb
210
+ - app/lib/practical/test/helpers/flash_assertions.rb
211
+ - app/lib/practical/test/helpers/integration/assertions.rb
212
+ - app/lib/practical/test/helpers/passkey/system/base.rb
213
+ - app/lib/practical/test/helpers/passkey/system/rack_test.rb
214
+ - app/lib/practical/test/helpers/passkey/system/selenium.rb
215
+ - app/lib/practical/test/helpers/passkey/test_helper.rb
216
+ - app/lib/practical/test/helpers/postmark.rb
217
+ - app/lib/practical/test/helpers/relation_builder_assertions.rb
218
+ - app/lib/practical/test/helpers/setup/debug.rb
219
+ - app/lib/practical/test/helpers/setup/faker_seed_pinning.rb
220
+ - app/lib/practical/test/helpers/setup/simplecov.rb
221
+ - app/lib/practical/test/helpers/shrine/test_data.rb
222
+ - app/lib/practical/test/helpers/spy_assertions.rb
223
+ - app/lib/practical/test/helpers/system/assertions.rb
224
+ - app/lib/practical/test/helpers/system/capybara_prep.rb
225
+ - app/lib/practical/test/shared/auth/passkeys/controllers/emergency_registration/base.rb
226
+ - app/lib/practical/test/shared/auth/passkeys/controllers/emergency_registration/self_service.rb
227
+ - app/lib/practical/test/shared/auth/passkeys/controllers/reauthentication/base.rb
228
+ - app/lib/practical/test/shared/auth/passkeys/controllers/registrations/no_self_destroy.rb
229
+ - app/lib/practical/test/shared/auth/passkeys/controllers/registrations/no_self_signup.rb
230
+ - app/lib/practical/test/shared/auth/passkeys/controllers/registrations/self_destroy.rb
231
+ - app/lib/practical/test/shared/auth/passkeys/controllers/registrations/self_signup.rb
232
+ - app/lib/practical/test/shared/auth/passkeys/controllers/registrations/update.rb
233
+ - app/lib/practical/test/shared/auth/passkeys/controllers/sessions/base.rb
234
+ - app/lib/practical/test/shared/auth/passkeys/forms/emergency_registration.rb
235
+ - app/lib/practical/test/shared/auth/passkeys/models/emergency_registration/base.rb
236
+ - app/lib/practical/test/shared/auth/passkeys/models/emergency_registration/use_for_and_notify.rb
237
+ - app/lib/practical/test/shared/auth/passkeys/models/passkey.rb
238
+ - app/lib/practical/test/shared/auth/passkeys/models/resource_with_passkeys.rb
239
+ - app/lib/practical/test/shared/auth/passkeys/policies/passkey.rb
240
+ - app/lib/practical/test/shared/auth/passkeys/services/send_emergency_registration.rb
241
+ - app/lib/practical/test/shared/models/normalized_email.rb
242
+ - app/lib/practical/test/shared/models/user.rb
243
+ - app/lib/practical/test/shared/models/utility/ip_address.rb
244
+ - app/lib/practical/test/shared/models/utility/user_agent.rb
245
+ - app/lib/practical/views/button/styling.rb
246
+ - app/lib/practical/views/error_handling.rb
247
+ - app/lib/practical/views/form_builders/base.rb
248
+ - app/lib/practical/views/icon_set.rb
249
+ - app/lib/practical/views/web_awesome/style_utility/appearance_variant.rb
250
+ - app/lib/practical/views/web_awesome/style_utility/base.rb
251
+ - app/lib/practical/views/web_awesome/style_utility/color_variant.rb
252
+ - app/lib/practical/views/web_awesome/style_utility/size.rb
253
+ - config/locales/auth.en.yml
254
+ - config/locales/devise.passkeys.en.yml
255
+ - config/locales/practical_framework.en.yml
256
+ - config/routes.rb
257
+ - db/seeds/setup.rb
258
+ - db/seeds/users/default.rb
259
+ - lib/generators/practical/test/helper/USAGE
260
+ - lib/generators/practical/test/helper/helper_generator.rb
261
+ - lib/generators/practical/test/helper/templates/helper.rb.tt
262
+ - lib/generators/practical/test/shared_test/USAGE
263
+ - lib/generators/practical/test/shared_test/shared_test_generator.rb
264
+ - lib/generators/practical/test/shared_test/templates/shared_test.rb.tt
265
+ - lib/generators/practical/views/component/USAGE
266
+ - lib/generators/practical/views/component/component_generator.rb
267
+ - lib/practical.rb
268
+ - lib/practical/framework/engine.rb
269
+ - lib/practical/helpers/form_with_helper.rb
270
+ - lib/practical/helpers/icon_helper.rb
271
+ - lib/practical/helpers/text_helper.rb
272
+ - lib/practical/helpers/translation_helper.rb
273
+ - lib/practical/version.rb
274
+ - lib/practical/views/element_helper.rb
275
+ - lib/tasks/practical/coverage.rake
276
+ - lib/tasks/practical/framework_tasks.rake
277
+ homepage: https://github.com/practical-computer/practical
278
+ licenses:
279
+ - MIT
280
+ metadata:
281
+ homepage_uri: https://github.com/practical-computer/practical
282
+ source_code_uri: https://github.com/practical-computer/practical
283
+ changelog_uri: https://github.com/practical-computer/practical/CHANGELOG.md
284
+ post_install_message:
285
+ rdoc_options: []
286
+ require_paths:
287
+ - lib
288
+ required_ruby_version: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - ">="
291
+ - !ruby/object:Gem::Version
292
+ version: 3.0.0
293
+ required_rubygems_version: !ruby/object:Gem::Requirement
294
+ requirements:
295
+ - - ">="
296
+ - !ruby/object:Gem::Version
297
+ version: '0'
298
+ requirements: []
299
+ rubygems_version: 3.5.11
300
+ signing_key:
301
+ specification_version: 4
302
+ summary: The Practical Framework
303
+ test_files: []