support_desk 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 (84) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +32 -0
  3. data/.simplecov +53 -0
  4. data/Appraisals +18 -0
  5. data/CHANGELOG.md +135 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +469 -0
  8. data/Rakefile +55 -0
  9. data/app/assets/stylesheets/support_desk.css +242 -0
  10. data/app/controllers/support_desk/application_controller.rb +92 -0
  11. data/app/controllers/support_desk/console/application_controller.rb +18 -0
  12. data/app/controllers/support_desk/console/tickets_controller.rb +26 -0
  13. data/app/controllers/support_desk/tickets_controller.rb +119 -0
  14. data/app/helpers/support_desk/engine_helper.rb +196 -0
  15. data/app/views/chats/slots/_inbox_top.html.erb +31 -0
  16. data/app/views/chats/slots/_locked_composer.html.erb +18 -0
  17. data/app/views/support_desk/console/tickets/_actions.html.erb +29 -0
  18. data/app/views/support_desk/console/tickets/_assignment.html.erb +60 -0
  19. data/app/views/support_desk/console/tickets/_composer.html.erb +71 -0
  20. data/app/views/support_desk/console/tickets/_context_card.html.erb +53 -0
  21. data/app/views/support_desk/console/tickets/_message.html.erb +48 -0
  22. data/app/views/support_desk/console/tickets/_nav_badge.html.erb +19 -0
  23. data/app/views/support_desk/console/tickets/_tabs.html.erb +15 -0
  24. data/app/views/support_desk/console/tickets/_ticket_row.html.erb +56 -0
  25. data/app/views/support_desk/console/tickets/_timeline.html.erb +37 -0
  26. data/app/views/support_desk/console/tickets/_transcript.html.erb +26 -0
  27. data/app/views/support_desk/console/tickets/index.html.erb +37 -0
  28. data/app/views/support_desk/console/tickets/show.html.erb +45 -0
  29. data/app/views/support_desk/tickets/_context_card.html.erb +14 -0
  30. data/app/views/support_desk/tickets/_door.html.erb +12 -0
  31. data/app/views/support_desk/tickets/_pick_thing.html.erb +55 -0
  32. data/app/views/support_desk/tickets/_pick_topic.html.erb +30 -0
  33. data/app/views/support_desk/tickets/_ticket_row.html.erb +31 -0
  34. data/app/views/support_desk/tickets/_wizard_header.html.erb +23 -0
  35. data/app/views/support_desk/tickets/_write.html.erb +56 -0
  36. data/app/views/support_desk/tickets/index.html.erb +53 -0
  37. data/app/views/support_desk/tickets/new.html.erb +14 -0
  38. data/app/views/support_desk/tickets/rate_limited.html.erb +40 -0
  39. data/config/console_routes.rb +16 -0
  40. data/config/locales/support_desk.console.en.yml +93 -0
  41. data/config/locales/support_desk.console.es.yml +93 -0
  42. data/config/locales/support_desk.en.yml +79 -0
  43. data/config/locales/support_desk.es.yml +84 -0
  44. data/config/routes.rb +24 -0
  45. data/context7.json +4 -0
  46. data/gemfiles/rails_7.2.gemfile +34 -0
  47. data/gemfiles/rails_8.0.gemfile +34 -0
  48. data/gemfiles/rails_8.1.gemfile +34 -0
  49. data/lib/generators/support_desk/console_generator.rb +94 -0
  50. data/lib/generators/support_desk/install_generator.rb +86 -0
  51. data/lib/generators/support_desk/templates/console/controller.rb.erb +43 -0
  52. data/lib/generators/support_desk/templates/console/resource.rb.erb +44 -0
  53. data/lib/generators/support_desk/templates/create_support_desk_tables.rb.erb +224 -0
  54. data/lib/generators/support_desk/templates/initializer.rb +186 -0
  55. data/lib/generators/support_desk/views_generator.rb +50 -0
  56. data/lib/support_desk/configuration.rb +675 -0
  57. data/lib/support_desk/console.rb +487 -0
  58. data/lib/support_desk/console_engine.rb +63 -0
  59. data/lib/support_desk/console_routes.rb +107 -0
  60. data/lib/support_desk/context_card.rb +90 -0
  61. data/lib/support_desk/current.rb +26 -0
  62. data/lib/support_desk/doctor.rb +220 -0
  63. data/lib/support_desk/engine.rb +141 -0
  64. data/lib/support_desk/errors.rb +49 -0
  65. data/lib/support_desk/events.rb +122 -0
  66. data/lib/support_desk/macros.rb +73 -0
  67. data/lib/support_desk/models/application_record.rb +11 -0
  68. data/lib/support_desk/models/assignment.rb +83 -0
  69. data/lib/support_desk/models/concerns/agent.rb +79 -0
  70. data/lib/support_desk/models/concerns/requester.rb +71 -0
  71. data/lib/support_desk/models/concerns/supportable.rb +88 -0
  72. data/lib/support_desk/models/desk.rb +101 -0
  73. data/lib/support_desk/models/event.rb +72 -0
  74. data/lib/support_desk/models/ticket.rb +1124 -0
  75. data/lib/support_desk/queue.rb +171 -0
  76. data/lib/support_desk/summary.rb +70 -0
  77. data/lib/support_desk/test_helpers.rb +137 -0
  78. data/lib/support_desk/timeline.rb +104 -0
  79. data/lib/support_desk/topic.rb +290 -0
  80. data/lib/support_desk/topic_tree.rb +214 -0
  81. data/lib/support_desk/version.rb +5 -0
  82. data/lib/support_desk/wizard.rb +392 -0
  83. data/lib/support_desk.rb +288 -0
  84. metadata +229 -0
metadata ADDED
@@ -0,0 +1,229 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: support_desk
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - rameerez
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 2026-09-16 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: activerecord
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: 7.2.0
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '9.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: 7.2.0
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '9.0'
32
+ - !ruby/object:Gem::Dependency
33
+ name: activesupport
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: 7.2.0
39
+ - - "<"
40
+ - !ruby/object:Gem::Version
41
+ version: '9.0'
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: 7.2.0
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: '9.0'
52
+ - !ruby/object:Gem::Dependency
53
+ name: chats
54
+ requirement: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - "~>"
57
+ - !ruby/object:Gem::Version
58
+ version: '0.2'
59
+ type: :runtime
60
+ prerelease: false
61
+ version_requirements: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - "~>"
64
+ - !ruby/object:Gem::Version
65
+ version: '0.2'
66
+ - !ruby/object:Gem::Dependency
67
+ name: globalid
68
+ requirement: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - "~>"
71
+ - !ruby/object:Gem::Version
72
+ version: '1.0'
73
+ type: :runtime
74
+ prerelease: false
75
+ version_requirements: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '1.0'
80
+ - !ruby/object:Gem::Dependency
81
+ name: railties
82
+ requirement: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 7.2.0
87
+ - - "<"
88
+ - !ruby/object:Gem::Version
89
+ version: '9.0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 7.2.0
97
+ - - "<"
98
+ - !ruby/object:Gem::Version
99
+ version: '9.0'
100
+ description: 'support_desk adds a customer support desk to any Rails app: tickets
101
+ that are conversations. A requester asks for help about something in your app (a
102
+ ride, an order, a withdrawal) or about nothing in particular, your desk answers,
103
+ humans or bots sign the answers, and your team works a queue. It is a product gem
104
+ on the `chats` kernel: chats owns the transcript, realtime, attachments, read state
105
+ and moderation; support_desk owns cases, topics, assignment, routing and the console
106
+ API. One macro makes a model ask for help (`has_support_tickets`), one makes a domain
107
+ record something to ask about (`supportable`), one makes a person answer (`acts_as_support_agent`).
108
+ Topics are a tree defined in code that drives the wizard, the picker, routing and
109
+ metrics; assignment is a history, not a column; every transition writes an append-only
110
+ event row and emits an error-isolated event your app can subscribe to. Batteries
111
+ included on the user side (a mountable engine with ejectable views), bring-your-own-UI
112
+ on the agent side (query objects, presenters, a controller concern and a console
113
+ generator), with no runtime dependency on any admin framework.'
114
+ email:
115
+ - rubygems@rameerez.com
116
+ executables: []
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - ".rubocop.yml"
121
+ - ".simplecov"
122
+ - Appraisals
123
+ - CHANGELOG.md
124
+ - LICENSE.txt
125
+ - README.md
126
+ - Rakefile
127
+ - app/assets/stylesheets/support_desk.css
128
+ - app/controllers/support_desk/application_controller.rb
129
+ - app/controllers/support_desk/console/application_controller.rb
130
+ - app/controllers/support_desk/console/tickets_controller.rb
131
+ - app/controllers/support_desk/tickets_controller.rb
132
+ - app/helpers/support_desk/engine_helper.rb
133
+ - app/views/chats/slots/_inbox_top.html.erb
134
+ - app/views/chats/slots/_locked_composer.html.erb
135
+ - app/views/support_desk/console/tickets/_actions.html.erb
136
+ - app/views/support_desk/console/tickets/_assignment.html.erb
137
+ - app/views/support_desk/console/tickets/_composer.html.erb
138
+ - app/views/support_desk/console/tickets/_context_card.html.erb
139
+ - app/views/support_desk/console/tickets/_message.html.erb
140
+ - app/views/support_desk/console/tickets/_nav_badge.html.erb
141
+ - app/views/support_desk/console/tickets/_tabs.html.erb
142
+ - app/views/support_desk/console/tickets/_ticket_row.html.erb
143
+ - app/views/support_desk/console/tickets/_timeline.html.erb
144
+ - app/views/support_desk/console/tickets/_transcript.html.erb
145
+ - app/views/support_desk/console/tickets/index.html.erb
146
+ - app/views/support_desk/console/tickets/show.html.erb
147
+ - app/views/support_desk/tickets/_context_card.html.erb
148
+ - app/views/support_desk/tickets/_door.html.erb
149
+ - app/views/support_desk/tickets/_pick_thing.html.erb
150
+ - app/views/support_desk/tickets/_pick_topic.html.erb
151
+ - app/views/support_desk/tickets/_ticket_row.html.erb
152
+ - app/views/support_desk/tickets/_wizard_header.html.erb
153
+ - app/views/support_desk/tickets/_write.html.erb
154
+ - app/views/support_desk/tickets/index.html.erb
155
+ - app/views/support_desk/tickets/new.html.erb
156
+ - app/views/support_desk/tickets/rate_limited.html.erb
157
+ - config/console_routes.rb
158
+ - config/locales/support_desk.console.en.yml
159
+ - config/locales/support_desk.console.es.yml
160
+ - config/locales/support_desk.en.yml
161
+ - config/locales/support_desk.es.yml
162
+ - config/routes.rb
163
+ - context7.json
164
+ - gemfiles/rails_7.2.gemfile
165
+ - gemfiles/rails_8.0.gemfile
166
+ - gemfiles/rails_8.1.gemfile
167
+ - lib/generators/support_desk/console_generator.rb
168
+ - lib/generators/support_desk/install_generator.rb
169
+ - lib/generators/support_desk/templates/console/controller.rb.erb
170
+ - lib/generators/support_desk/templates/console/resource.rb.erb
171
+ - lib/generators/support_desk/templates/create_support_desk_tables.rb.erb
172
+ - lib/generators/support_desk/templates/initializer.rb
173
+ - lib/generators/support_desk/views_generator.rb
174
+ - lib/support_desk.rb
175
+ - lib/support_desk/configuration.rb
176
+ - lib/support_desk/console.rb
177
+ - lib/support_desk/console_engine.rb
178
+ - lib/support_desk/console_routes.rb
179
+ - lib/support_desk/context_card.rb
180
+ - lib/support_desk/current.rb
181
+ - lib/support_desk/doctor.rb
182
+ - lib/support_desk/engine.rb
183
+ - lib/support_desk/errors.rb
184
+ - lib/support_desk/events.rb
185
+ - lib/support_desk/macros.rb
186
+ - lib/support_desk/models/application_record.rb
187
+ - lib/support_desk/models/assignment.rb
188
+ - lib/support_desk/models/concerns/agent.rb
189
+ - lib/support_desk/models/concerns/requester.rb
190
+ - lib/support_desk/models/concerns/supportable.rb
191
+ - lib/support_desk/models/desk.rb
192
+ - lib/support_desk/models/event.rb
193
+ - lib/support_desk/models/ticket.rb
194
+ - lib/support_desk/queue.rb
195
+ - lib/support_desk/summary.rb
196
+ - lib/support_desk/test_helpers.rb
197
+ - lib/support_desk/timeline.rb
198
+ - lib/support_desk/topic.rb
199
+ - lib/support_desk/topic_tree.rb
200
+ - lib/support_desk/version.rb
201
+ - lib/support_desk/wizard.rb
202
+ homepage: https://github.com/rameerez/support_desk
203
+ licenses:
204
+ - MIT
205
+ metadata:
206
+ allowed_push_host: https://rubygems.org
207
+ source_code_uri: https://github.com/rameerez/support_desk
208
+ changelog_uri: https://github.com/rameerez/support_desk/blob/main/CHANGELOG.md
209
+ bug_tracker_uri: https://github.com/rameerez/support_desk/issues
210
+ documentation_uri: https://github.com/rameerez/support_desk#readme
211
+ rubygems_mfa_required: 'true'
212
+ rdoc_options: []
213
+ require_paths:
214
+ - lib
215
+ required_ruby_version: !ruby/object:Gem::Requirement
216
+ requirements:
217
+ - - ">="
218
+ - !ruby/object:Gem::Version
219
+ version: 3.2.0
220
+ required_rubygems_version: !ruby/object:Gem::Requirement
221
+ requirements:
222
+ - - ">="
223
+ - !ruby/object:Gem::Version
224
+ version: '0'
225
+ requirements: []
226
+ rubygems_version: 3.6.2
227
+ specification_version: 4
228
+ summary: Add customer support (tickets that are conversations) to your Rails app
229
+ test_files: []