rails_den 2.0.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 (528) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +652 -0
  3. data/README.md +74 -0
  4. data/Rakefile +6 -0
  5. data/app/assets/javascript/rails_den/attachments.js +733 -0
  6. data/app/assets/javascript/rails_den/bookmarks.js +58 -0
  7. data/app/assets/javascript/rails_den/cable.js +18 -0
  8. data/app/assets/javascript/rails_den/chat.js +3008 -0
  9. data/app/assets/javascript/rails_den/chat_3d_management.js +1230 -0
  10. data/app/assets/javascript/rails_den/composer.js +1785 -0
  11. data/app/assets/javascript/rails_den/content.js +1337 -0
  12. data/app/assets/javascript/rails_den/emoji_catalog.js +136 -0
  13. data/app/assets/javascript/rails_den/licenses/react-LICENSE.txt +21 -0
  14. data/app/assets/javascript/rails_den/licenses/react-dom-LICENSE.txt +21 -0
  15. data/app/assets/javascript/rails_den/licenses/scheduler-LICENSE.txt +21 -0
  16. data/app/assets/javascript/rails_den/licenses/three-LICENSE.txt +21 -0
  17. data/app/assets/javascript/rails_den/members.js +187 -0
  18. data/app/assets/javascript/rails_den/notifications.js +211 -0
  19. data/app/assets/javascript/rails_den/presence.js +757 -0
  20. data/app/assets/javascript/rails_den/private_messages.js +92 -0
  21. data/app/assets/javascript/rails_den/react_runtime.js +43 -0
  22. data/app/assets/javascript/rails_den/reactions.js +139 -0
  23. data/app/assets/javascript/rails_den/spatial.js +4338 -0
  24. data/app/assets/stylesheets/rails_den/advertising.css +91 -0
  25. data/app/assets/stylesheets/rails_den/application.css +1724 -0
  26. data/app/assets/stylesheets/rails_den/attachments.css +255 -0
  27. data/app/assets/stylesheets/rails_den/board_presence.css +38 -0
  28. data/app/assets/stylesheets/rails_den/bookmarks.css +36 -0
  29. data/app/assets/stylesheets/rails_den/chat.css +1555 -0
  30. data/app/assets/stylesheets/rails_den/chat_3d.css +1283 -0
  31. data/app/assets/stylesheets/rails_den/chat_3d_management.css +294 -0
  32. data/app/assets/stylesheets/rails_den/chat_reactions.css +79 -0
  33. data/app/assets/stylesheets/rails_den/community_presence.css +51 -0
  34. data/app/assets/stylesheets/rails_den/composer.css +358 -0
  35. data/app/assets/stylesheets/rails_den/emoji_catalog.css +33 -0
  36. data/app/assets/stylesheets/rails_den/member_profiles.css +662 -0
  37. data/app/assets/stylesheets/rails_den/moderation.css +561 -0
  38. data/app/assets/stylesheets/rails_den/notifications.css +222 -0
  39. data/app/assets/stylesheets/rails_den/onebox.css +126 -0
  40. data/app/assets/stylesheets/rails_den/post_links.css +37 -0
  41. data/app/assets/stylesheets/rails_den/post_presence.css +47 -0
  42. data/app/assets/stylesheets/rails_den/presence.css +96 -0
  43. data/app/assets/stylesheets/rails_den/presence_directory.css +217 -0
  44. data/app/assets/stylesheets/rails_den/presence_live.css +15 -0
  45. data/app/assets/stylesheets/rails_den/private_messages.css +41 -0
  46. data/app/assets/stylesheets/rails_den/reactions.css +53 -0
  47. data/app/assets/stylesheets/rails_den/search.css +100 -0
  48. data/app/assets/stylesheets/rails_den/tags.css +136 -0
  49. data/app/channels/rails_den/chat_spatial_channel.rb +203 -0
  50. data/app/channels/rails_den/chat_spatial_occupancy_channel.rb +69 -0
  51. data/app/channels/rails_den/chat_stream_channel.rb +108 -0
  52. data/app/channels/rails_den/notifications_channel.rb +30 -0
  53. data/app/channels/rails_den/presence_channel.rb +205 -0
  54. data/app/controllers/admin/rails_den/administrators_controller.rb +26 -0
  55. data/app/controllers/admin/rails_den/advertising_management_controller.rb +337 -0
  56. data/app/controllers/admin/rails_den/application_controller.rb +116 -0
  57. data/app/controllers/admin/rails_den/badges_controller.rb +106 -0
  58. data/app/controllers/admin/rails_den/board_access_controller.rb +143 -0
  59. data/app/controllers/admin/rails_den/boards_controller.rb +89 -0
  60. data/app/controllers/admin/rails_den/categories_controller.rb +89 -0
  61. data/app/controllers/admin/rails_den/member_badge_awards_controller.rb +92 -0
  62. data/app/controllers/admin/rails_den/members_controller.rb +495 -0
  63. data/app/controllers/admin/rails_den/plugins_controller.rb +25 -0
  64. data/app/controllers/admin/rails_den/profile_fields_controller.rb +104 -0
  65. data/app/controllers/admin/rails_den/reaction_types_controller.rb +127 -0
  66. data/app/controllers/admin/rails_den/report_reasons_controller.rb +15 -0
  67. data/app/controllers/admin/rails_den/roles_controller.rb +190 -0
  68. data/app/controllers/admin/rails_den/tags_controller.rb +11 -0
  69. data/app/controllers/admin/rails_den/themes_controller.rb +60 -0
  70. data/app/controllers/admin/rails_den/trust_levels_controller.rb +97 -0
  71. data/app/controllers/rails_den/advertising_controller.rb +14 -0
  72. data/app/controllers/rails_den/application_controller.rb +218 -0
  73. data/app/controllers/rails_den/attachments_controller.rb +128 -0
  74. data/app/controllers/rails_den/board_follows_controller.rb +119 -0
  75. data/app/controllers/rails_den/board_read_states_controller.rb +36 -0
  76. data/app/controllers/rails_den/boards_controller.rb +103 -0
  77. data/app/controllers/rails_den/bookmarks_controller.rb +91 -0
  78. data/app/controllers/rails_den/chat_channel_memberships_controller.rb +193 -0
  79. data/app/controllers/rails_den/chat_channel_read_states_controller.rb +46 -0
  80. data/app/controllers/rails_den/chat_channels_controller.rb +556 -0
  81. data/app/controllers/rails_den/chat_message_pins_controller.rb +78 -0
  82. data/app/controllers/rails_den/chat_messages_controller.rb +166 -0
  83. data/app/controllers/rails_den/chat_reaction_types_controller.rb +24 -0
  84. data/app/controllers/rails_den/community_read_states_controller.rb +12 -0
  85. data/app/controllers/rails_den/home_controller.rb +35 -0
  86. data/app/controllers/rails_den/member_profiles_controller.rb +286 -0
  87. data/app/controllers/rails_den/member_reports_controller.rb +22 -0
  88. data/app/controllers/rails_den/members_controller.rb +42 -0
  89. data/app/controllers/rails_den/mention_candidates_controller.rb +14 -0
  90. data/app/controllers/rails_den/moderation/audit_events_controller.rb +14 -0
  91. data/app/controllers/rails_den/moderation/member_histories_controller.rb +37 -0
  92. data/app/controllers/rails_den/moderation/member_notes_controller.rb +26 -0
  93. data/app/controllers/rails_den/moderation/report_notes_controller.rb +27 -0
  94. data/app/controllers/rails_den/moderation/reports_controller.rb +97 -0
  95. data/app/controllers/rails_den/moderation/restrictions_controller.rb +71 -0
  96. data/app/controllers/rails_den/moderation/topics_controller.rb +61 -0
  97. data/app/controllers/rails_den/moderation/warnings_controller.rb +50 -0
  98. data/app/controllers/rails_den/notification_preferences_controller.rb +116 -0
  99. data/app/controllers/rails_den/notifications_controller.rb +67 -0
  100. data/app/controllers/rails_den/post_bookmarks_controller.rb +29 -0
  101. data/app/controllers/rails_den/post_drafts_controller.rb +125 -0
  102. data/app/controllers/rails_den/post_reports_controller.rb +31 -0
  103. data/app/controllers/rails_den/posts_controller.rb +318 -0
  104. data/app/controllers/rails_den/presence_controller.rb +12 -0
  105. data/app/controllers/rails_den/presence_snapshots_controller.rb +83 -0
  106. data/app/controllers/rails_den/previews_controller.rb +10 -0
  107. data/app/controllers/rails_den/private_conversations_controller.rb +120 -0
  108. data/app/controllers/rails_den/private_messages_controller.rb +45 -0
  109. data/app/controllers/rails_den/reactions_controller.rb +124 -0
  110. data/app/controllers/rails_den/reports_controller.rb +63 -0
  111. data/app/controllers/rails_den/search_controller.rb +64 -0
  112. data/app/controllers/rails_den/tags_controller.rb +70 -0
  113. data/app/controllers/rails_den/topic_bookmarks_controller.rb +35 -0
  114. data/app/controllers/rails_den/topic_follows_controller.rb +117 -0
  115. data/app/controllers/rails_den/topic_read_positions_controller.rb +40 -0
  116. data/app/controllers/rails_den/topic_reports_controller.rb +18 -0
  117. data/app/controllers/rails_den/topics_controller.rb +583 -0
  118. data/app/dashboards/rails_den/administrator_dashboard.rb +51 -0
  119. data/app/dashboards/rails_den/board_dashboard.rb +57 -0
  120. data/app/dashboards/rails_den/category_dashboard.rb +50 -0
  121. data/app/dashboards/rails_den/profile_field_dashboard.rb +53 -0
  122. data/app/dashboards/rails_den/reaction_type_dashboard.rb +26 -0
  123. data/app/dashboards/rails_den/report_reason_dashboard.rb +57 -0
  124. data/app/dashboards/rails_den/tag_dashboard.rb +59 -0
  125. data/app/helpers/rails_den/application_helper.rb +39 -0
  126. data/app/helpers/rails_den/boards_helper.rb +4 -0
  127. data/app/helpers/rails_den/moderation/reports_helper.rb +42 -0
  128. data/app/helpers/rails_den/notifications_helper.rb +4 -0
  129. data/app/helpers/rails_den/posts_helper.rb +4 -0
  130. data/app/helpers/rails_den/topics_helper.rb +4 -0
  131. data/app/jobs/rails_den/application_job.rb +4 -0
  132. data/app/jobs/rails_den/expire_user_restriction_job.rb +9 -0
  133. data/app/jobs/rails_den/member_profile_stats_refresh_job.rb +48 -0
  134. data/app/jobs/rails_den/reconcile_user_restrictions_job.rb +9 -0
  135. data/app/jobs/rails_den/resolve_onebox_entry_job.rb +74 -0
  136. data/app/mailers/rails_den/application_mailer.rb +6 -0
  137. data/app/models/rails_den/administrator.rb +18 -0
  138. data/app/models/rails_den/advertising_configuration.rb +14 -0
  139. data/app/models/rails_den/application_record.rb +5 -0
  140. data/app/models/rails_den/badge.rb +142 -0
  141. data/app/models/rails_den/badge_award.rb +87 -0
  142. data/app/models/rails_den/board.rb +129 -0
  143. data/app/models/rails_den/board_follow.rb +18 -0
  144. data/app/models/rails_den/board_read_state.rb +60 -0
  145. data/app/models/rails_den/board_role_assignment.rb +45 -0
  146. data/app/models/rails_den/board_role_permission.rb +31 -0
  147. data/app/models/rails_den/board_role_requirement.rb +16 -0
  148. data/app/models/rails_den/board_sponsorship.rb +21 -0
  149. data/app/models/rails_den/bookmark.rb +31 -0
  150. data/app/models/rails_den/category.rb +81 -0
  151. data/app/models/rails_den/category_role_requirement.rb +16 -0
  152. data/app/models/rails_den/category_sponsorship.rb +21 -0
  153. data/app/models/rails_den/chat_channel.rb +44 -0
  154. data/app/models/rails_den/chat_channel_membership.rb +21 -0
  155. data/app/models/rails_den/chat_channel_read_state.rb +100 -0
  156. data/app/models/rails_den/chat_message.rb +37 -0
  157. data/app/models/rails_den/community_read_state.rb +52 -0
  158. data/app/models/rails_den/community_sponsorship.rb +15 -0
  159. data/app/models/rails_den/member_profile.rb +113 -0
  160. data/app/models/rails_den/mention.rb +20 -0
  161. data/app/models/rails_den/moderation_event.rb +16 -0
  162. data/app/models/rails_den/moderation_note.rb +11 -0
  163. data/app/models/rails_den/notification.rb +33 -0
  164. data/app/models/rails_den/notification_event.rb +40 -0
  165. data/app/models/rails_den/notification_mute.rb +9 -0
  166. data/app/models/rails_den/onebox_entry.rb +214 -0
  167. data/app/models/rails_den/post.rb +396 -0
  168. data/app/models/rails_den/post_draft.rb +63 -0
  169. data/app/models/rails_den/post_revision.rb +10 -0
  170. data/app/models/rails_den/private_conversation.rb +25 -0
  171. data/app/models/rails_den/private_conversation_participant.rb +16 -0
  172. data/app/models/rails_den/private_message.rb +35 -0
  173. data/app/models/rails_den/private_message_recipient.rb +44 -0
  174. data/app/models/rails_den/profile_field.rb +150 -0
  175. data/app/models/rails_den/profile_field_value.rb +136 -0
  176. data/app/models/rails_den/reaction.rb +56 -0
  177. data/app/models/rails_den/reaction_type.rb +23 -0
  178. data/app/models/rails_den/reader_visit.rb +61 -0
  179. data/app/models/rails_den/report.rb +127 -0
  180. data/app/models/rails_den/report_reason.rb +52 -0
  181. data/app/models/rails_den/reputation_event.rb +92 -0
  182. data/app/models/rails_den/role.rb +87 -0
  183. data/app/models/rails_den/role_assignment.rb +18 -0
  184. data/app/models/rails_den/role_permission.rb +41 -0
  185. data/app/models/rails_den/sluggable.rb +102 -0
  186. data/app/models/rails_den/sponsor.rb +20 -0
  187. data/app/models/rails_den/sponsorship.rb +87 -0
  188. data/app/models/rails_den/tag.rb +61 -0
  189. data/app/models/rails_den/theme_selection.rb +4 -0
  190. data/app/models/rails_den/topic.rb +307 -0
  191. data/app/models/rails_den/topic_follow.rb +18 -0
  192. data/app/models/rails_den/topic_read_state.rb +76 -0
  193. data/app/models/rails_den/topic_role_requirement.rb +16 -0
  194. data/app/models/rails_den/topic_tag.rb +16 -0
  195. data/app/models/rails_den/trust_level.rb +62 -0
  196. data/app/models/rails_den/trust_level_achievement.rb +21 -0
  197. data/app/models/rails_den/user_restriction.rb +54 -0
  198. data/app/models/rails_den/user_warning.rb +10 -0
  199. data/app/presenters/rails_den/member_profile_presenter.rb +285 -0
  200. data/app/queries/rails_den/topic_new_post_counts.rb +153 -0
  201. data/app/queries/rails_den/topic_unread_counts.rb +137 -0
  202. data/app/services/rails_den/board_following.rb +91 -0
  203. data/app/services/rails_den/bookmark_list.rb +109 -0
  204. data/app/services/rails_den/bookmark_state.rb +17 -0
  205. data/app/services/rails_den/built_in_role_provisioner.rb +98 -0
  206. data/app/services/rails_den/chat/broadcaster.rb +81 -0
  207. data/app/services/rails_den/chat/message_payload.rb +26 -0
  208. data/app/services/rails_den/chat/presence_snapshot.rb +269 -0
  209. data/app/services/rails_den/chat/spatial_broadcaster.rb +135 -0
  210. data/app/services/rails_den/chat/spatial_occupancy_snapshot.rb +35 -0
  211. data/app/services/rails_den/chat/spatial_registry.rb +682 -0
  212. data/app/services/rails_den/chat/spatial_room.rb +81 -0
  213. data/app/services/rails_den/chat/spatial_snapshot.rb +261 -0
  214. data/app/services/rails_den/chat/spatial_update.rb +243 -0
  215. data/app/services/rails_den/chat/subscription_token.rb +28 -0
  216. data/app/services/rails_den/chat/unread_counts.rb +79 -0
  217. data/app/services/rails_den/chat/whisper_delivery.rb +287 -0
  218. data/app/services/rails_den/chat_channel_access.rb +97 -0
  219. data/app/services/rails_den/default_report_reason_provisioner.rb +30 -0
  220. data/app/services/rails_den/emoji_catalog.rb +101 -0
  221. data/app/services/rails_den/gamification/activity_recorder.rb +69 -0
  222. data/app/services/rails_den/gamification/badge_evaluator.rb +55 -0
  223. data/app/services/rails_den/gamification/current_trust_level.rb +21 -0
  224. data/app/services/rails_den/gamification/metrics.rb +93 -0
  225. data/app/services/rails_den/gamification/reputation_ledger.rb +261 -0
  226. data/app/services/rails_den/gamification/trust_level_evaluator.rb +78 -0
  227. data/app/services/rails_den/global_moderation_policy.rb +32 -0
  228. data/app/services/rails_den/member_profile_bio_renderer.rb +28 -0
  229. data/app/services/rails_den/mentions/autocomplete.rb +69 -0
  230. data/app/services/rails_den/mentions/candidate.rb +19 -0
  231. data/app/services/rails_den/mentions/parser.rb +185 -0
  232. data/app/services/rails_den/mentions/reconciler.rb +46 -0
  233. data/app/services/rails_den/mentions/renderer.rb +165 -0
  234. data/app/services/rails_den/moderation_access.rb +42 -0
  235. data/app/services/rails_den/moderation_audit.rb +38 -0
  236. data/app/services/rails_den/moderation_event_scope.rb +12 -0
  237. data/app/services/rails_den/moderation_notification_delivery.rb +23 -0
  238. data/app/services/rails_den/notification_events/emitter.rb +226 -0
  239. data/app/services/rails_den/notification_preferences.rb +169 -0
  240. data/app/services/rails_den/notifications/broadcaster.rb +72 -0
  241. data/app/services/rails_den/notifications/materializer.rb +284 -0
  242. data/app/services/rails_den/notifications/subscription_token.rb +28 -0
  243. data/app/services/rails_den/permission_resolver.rb +252 -0
  244. data/app/services/rails_den/presence/board_summary.rb +131 -0
  245. data/app/services/rails_den/presence/broadcaster.rb +193 -0
  246. data/app/services/rails_den/presence/chat_room_registry.rb +263 -0
  247. data/app/services/rails_den/presence/community_summary.rb +166 -0
  248. data/app/services/rails_den/presence/directory.rb +499 -0
  249. data/app/services/rails_den/presence/last_seen.rb +23 -0
  250. data/app/services/rails_den/presence/page_map.rb +202 -0
  251. data/app/services/rails_den/presence/registry.rb +805 -0
  252. data/app/services/rails_den/presence/subscription_token.rb +28 -0
  253. data/app/services/rails_den/presence/visibility.rb +95 -0
  254. data/app/services/rails_den/private_messages/mailbox.rb +108 -0
  255. data/app/services/rails_den/private_messages/read_marker.rb +25 -0
  256. data/app/services/rails_den/private_messages/sender.rb +113 -0
  257. data/app/services/rails_den/private_messages/unread_count.rb +22 -0
  258. data/app/services/rails_den/reaction_summary.rb +54 -0
  259. data/app/services/rails_den/reaction_type_importer.rb +91 -0
  260. data/app/services/rails_den/reaction_type_search.rb +34 -0
  261. data/app/services/rails_den/readable_community_content.rb +156 -0
  262. data/app/services/rails_den/report_assignment.rb +31 -0
  263. data/app/services/rails_den/report_creator.rb +96 -0
  264. data/app/services/rails_den/report_delivery.rb +39 -0
  265. data/app/services/rails_den/report_disposition.rb +25 -0
  266. data/app/services/rails_den/report_recipients.rb +89 -0
  267. data/app/services/rails_den/report_review_policy.rb +66 -0
  268. data/app/services/rails_den/report_review_scope.rb +49 -0
  269. data/app/services/rails_den/restriction_resolver.rb +28 -0
  270. data/app/services/rails_den/role_resolver.rb +66 -0
  271. data/app/services/rails_den/search/adapters/basic.rb +35 -0
  272. data/app/services/rails_den/search/adapters/postgresql.rb +73 -0
  273. data/app/services/rails_den/search/adapters.rb +21 -0
  274. data/app/services/rails_den/search/query.rb +358 -0
  275. data/app/services/rails_den/topic_following.rb +91 -0
  276. data/app/services/rails_den/topic_merger.rb +27 -0
  277. data/app/services/rails_den/topic_moderation.rb +57 -0
  278. data/app/services/rails_den/topic_splitter.rb +36 -0
  279. data/app/services/rails_den/user_restriction_manager.rb +84 -0
  280. data/app/services/rails_den/user_warning_issuer.rb +19 -0
  281. data/app/views/admin/rails_den/advertising_management/_assignment_form.html.erb +340 -0
  282. data/app/views/admin/rails_den/advertising_management/_errors.html.erb +10 -0
  283. data/app/views/admin/rails_den/advertising_management/show.html.erb +324 -0
  284. data/app/views/admin/rails_den/badges/_form.html.erb +191 -0
  285. data/app/views/admin/rails_den/badges/edit.html.erb +14 -0
  286. data/app/views/admin/rails_den/badges/index.html.erb +98 -0
  287. data/app/views/admin/rails_den/badges/new.html.erb +14 -0
  288. data/app/views/admin/rails_den/board_access/show.html.erb +51 -0
  289. data/app/views/admin/rails_den/boards/_form.html.erb +5 -0
  290. data/app/views/admin/rails_den/categories/_form.html.erb +4 -0
  291. data/app/views/admin/rails_den/members/index.html.erb +121 -0
  292. data/app/views/admin/rails_den/members/show.html.erb +398 -0
  293. data/app/views/admin/rails_den/plugins/index.html.erb +49 -0
  294. data/app/views/admin/rails_den/profile_fields/_form.html.erb +169 -0
  295. data/app/views/admin/rails_den/reaction_types/_catalog_search.html.erb +22 -0
  296. data/app/views/admin/rails_den/reaction_types/_errors.html.erb +3 -0
  297. data/app/views/admin/rails_den/reaction_types/index.html.erb +66 -0
  298. data/app/views/admin/rails_den/reaction_types/new.html.erb +23 -0
  299. data/app/views/admin/rails_den/reaction_types/selected.html.erb +15 -0
  300. data/app/views/admin/rails_den/roles/_form.html.erb +64 -0
  301. data/app/views/admin/rails_den/roles/edit.html.erb +18 -0
  302. data/app/views/admin/rails_den/roles/index.html.erb +49 -0
  303. data/app/views/admin/rails_den/roles/new.html.erb +6 -0
  304. data/app/views/admin/rails_den/shared/_access_form.html.erb +59 -0
  305. data/app/views/admin/rails_den/themes/index.html.erb +129 -0
  306. data/app/views/admin/rails_den/trust_levels/_form.html.erb +80 -0
  307. data/app/views/admin/rails_den/trust_levels/edit.html.erb +14 -0
  308. data/app/views/admin/rails_den/trust_levels/index.html.erb +86 -0
  309. data/app/views/admin/rails_den/trust_levels/new.html.erb +14 -0
  310. data/app/views/administrate/application/_index_header.html.erb +68 -0
  311. data/app/views/administrate/application/new.html.erb +42 -0
  312. data/app/views/administrate/application/show.html.erb +89 -0
  313. data/app/views/layouts/administrate/application/_navigation.html.erb +61 -0
  314. data/app/views/layouts/administrate/application.html.erb +40 -0
  315. data/app/views/layouts/rails_den/_navbar.html.erb +293 -0
  316. data/app/views/layouts/rails_den/application.html.erb +198 -0
  317. data/app/views/rails_den/advertising/show.html.erb +13 -0
  318. data/app/views/rails_den/boards/_follow_button.html.erb +45 -0
  319. data/app/views/rails_den/boards/show.html.erb +150 -0
  320. data/app/views/rails_den/bookmarks/_post_control.html.erb +12 -0
  321. data/app/views/rails_den/bookmarks/_topic_control.html.erb +12 -0
  322. data/app/views/rails_den/bookmarks/index.html.erb +78 -0
  323. data/app/views/rails_den/chat_channels/_form.html.erb +174 -0
  324. data/app/views/rails_den/chat_channels/edit.html.erb +51 -0
  325. data/app/views/rails_den/chat_channels/index.html.erb +402 -0
  326. data/app/views/rails_den/chat_channels/new.html.erb +31 -0
  327. data/app/views/rails_den/chat_channels/show.html.erb +476 -0
  328. data/app/views/rails_den/home/index.html.erb +142 -0
  329. data/app/views/rails_den/member_profiles/_avatar.html.erb +18 -0
  330. data/app/views/rails_den/member_profiles/_custom_fields.html.erb +39 -0
  331. data/app/views/rails_den/member_profiles/_followed_boards.html.erb +15 -0
  332. data/app/views/rails_den/member_profiles/_followed_topics.html.erb +15 -0
  333. data/app/views/rails_den/member_profiles/_header.html.erb +103 -0
  334. data/app/views/rails_den/member_profiles/_recent_posts.html.erb +19 -0
  335. data/app/views/rails_den/member_profiles/_recent_topics.html.erb +15 -0
  336. data/app/views/rails_den/member_profiles/_stats.html.erb +11 -0
  337. data/app/views/rails_den/member_profiles/edit.html.erb +265 -0
  338. data/app/views/rails_den/member_profiles/show.html.erb +97 -0
  339. data/app/views/rails_den/member_reports/new.html.erb +1 -0
  340. data/app/views/rails_den/moderation/audit_events/index.html.erb +11 -0
  341. data/app/views/rails_den/moderation/member_histories/show.html.erb +314 -0
  342. data/app/views/rails_den/moderation/reports/index.html.erb +47 -0
  343. data/app/views/rails_den/moderation/reports/show.html.erb +344 -0
  344. data/app/views/rails_den/moderation/restrictions/new.html.erb +14 -0
  345. data/app/views/rails_den/moderation/topics/show.html.erb +14 -0
  346. data/app/views/rails_den/moderation/warnings/new.html.erb +10 -0
  347. data/app/views/rails_den/notifications/_empty_state.html.erb +13 -0
  348. data/app/views/rails_den/notifications/index.html.erb +308 -0
  349. data/app/views/rails_den/passwords/edit.html.erb +55 -0
  350. data/app/views/rails_den/passwords/new.html.erb +49 -0
  351. data/app/views/rails_den/passwords_mailer/reset.html.erb +22 -0
  352. data/app/views/rails_den/passwords_mailer/reset.text.erb +14 -0
  353. data/app/views/rails_den/post_reports/new.html.erb +1 -0
  354. data/app/views/rails_den/posts/_attachments.html.erb +94 -0
  355. data/app/views/rails_den/posts/edit.html.erb +95 -0
  356. data/app/views/rails_den/posts/history.html.erb +123 -0
  357. data/app/views/rails_den/presence/_directory_body.html.erb +155 -0
  358. data/app/views/rails_den/presence/_summary.html.erb +26 -0
  359. data/app/views/rails_den/presence/index.html.erb +29 -0
  360. data/app/views/rails_den/private_conversations/_composer.html.erb +28 -0
  361. data/app/views/rails_den/private_conversations/_conversation_row.html.erb +19 -0
  362. data/app/views/rails_den/private_conversations/_mailbox_nav.html.erb +7 -0
  363. data/app/views/rails_den/private_conversations/_message.html.erb +4 -0
  364. data/app/views/rails_den/private_conversations/_pagination.html.erb +6 -0
  365. data/app/views/rails_den/private_conversations/index.html.erb +11 -0
  366. data/app/views/rails_den/private_conversations/new.html.erb +5 -0
  367. data/app/views/rails_den/private_conversations/sent.html.erb +11 -0
  368. data/app/views/rails_den/private_conversations/show.html.erb +23 -0
  369. data/app/views/rails_den/reactions/_picker_options.html.erb +14 -0
  370. data/app/views/rails_den/reactions/_post_reactions.html.erb +87 -0
  371. data/app/views/rails_den/reactions/_reactor_list.html.erb +16 -0
  372. data/app/views/rails_den/reactions/index.html.erb +34 -0
  373. data/app/views/rails_den/reactions/picker.html.erb +14 -0
  374. data/app/views/rails_den/registrations/edit.html.erb +95 -0
  375. data/app/views/rails_den/registrations/new.html.erb +77 -0
  376. data/app/views/rails_den/reports/_form.html.erb +54 -0
  377. data/app/views/rails_den/search/index.html.erb +235 -0
  378. data/app/views/rails_den/sessions/new.html.erb +64 -0
  379. data/app/views/rails_den/shared/_ad_network_placement.html.erb +5 -0
  380. data/app/views/rails_den/shared/_composer.html.erb +266 -0
  381. data/app/views/rails_den/shared/_sponsor_placement.html.erb +44 -0
  382. data/app/views/rails_den/tags/show.html.erb +91 -0
  383. data/app/views/rails_den/topic_reports/new.html.erb +1 -0
  384. data/app/views/rails_den/topics/_author_badges.html.erb +15 -0
  385. data/app/views/rails_den/topics/_follow_button.html.erb +45 -0
  386. data/app/views/rails_den/topics/_summary.html.erb +121 -0
  387. data/app/views/rails_den/topics/_tags.html.erb +47 -0
  388. data/app/views/rails_den/topics/new.html.erb +181 -0
  389. data/app/views/rails_den/topics/show.html.erb +430 -0
  390. data/config/locales/rails_den.en.yml +65 -0
  391. data/config/routes.rb +442 -0
  392. data/db/migrate/20260820181527_create_rails_den_administrators.rb +12 -0
  393. data/db/migrate/20260820205806_create_rails_den_categories.rb +16 -0
  394. data/db/migrate/20260820212200_create_rails_den_boards.rb +23 -0
  395. data/db/migrate/20260820234758_create_rails_den_topics.rb +24 -0
  396. data/db/migrate/20260821001937_create_rails_den_posts.rb +11 -0
  397. data/db/migrate/20260822004306_add_soft_deletion_to_rails_den_posts.rb +9 -0
  398. data/db/migrate/20260823183944_create_rails_den_onebox_entries.rb +65 -0
  399. data/db/migrate/20260824025007_add_reply_to_to_rails_den_posts.rb +8 -0
  400. data/db/migrate/20260824092300_create_rails_den_post_revisions.rb +22 -0
  401. data/db/migrate/20260824103358_create_rails_den_post_drafts.rb +36 -0
  402. data/db/migrate/20260824142522_create_rails_den_topic_read_states.rb +32 -0
  403. data/db/migrate/20260824214941_create_rails_den_reader_visits.rb +16 -0
  404. data/db/migrate/20260824225733_create_rails_den_board_read_states.rb +34 -0
  405. data/db/migrate/20260824232113_create_rails_den_community_read_states.rb +26 -0
  406. data/db/migrate/20260825121109_create_rails_den_topic_follows.rb +36 -0
  407. data/db/migrate/20260825232623_create_rails_den_board_follows.rb +36 -0
  408. data/db/migrate/20260826003155_create_rails_den_mentions.rb +27 -0
  409. data/db/migrate/20260826080109_create_rails_den_member_profiles.rb +32 -0
  410. data/db/migrate/20260826092936_add_quoted_post_to_rails_den_posts_and_post_drafts.rb +17 -0
  411. data/db/migrate/20260826101755_create_rails_den_notification_events.rb +19 -0
  412. data/db/migrate/20260826121710_create_rails_den_notifications.rb +28 -0
  413. data/db/migrate/20260826140846_create_rails_den_notification_mutes.rb +25 -0
  414. data/db/migrate/20260826175426_create_rails_den_tags.rb +31 -0
  415. data/db/migrate/20260826175428_create_rails_den_topic_tags.rb +26 -0
  416. data/db/migrate/20260827021133_create_rails_den_roles.rb +16 -0
  417. data/db/migrate/20260827021135_create_rails_den_role_assignments.rb +22 -0
  418. data/db/migrate/20260827031134_create_rails_den_role_permissions.rb +28 -0
  419. data/db/migrate/20260827031136_create_rails_den_board_role_permissions.rb +35 -0
  420. data/db/migrate/20260827033116_provision_rails_den_built_in_roles_and_permissions.rb +108 -0
  421. data/db/migrate/20260827040515_create_rails_den_board_role_assignments.rb +33 -0
  422. data/db/migrate/20260827041710_create_rails_den_board_role_requirements.rb +27 -0
  423. data/db/migrate/20260827063901_create_rails_den_category_role_requirements.rb +23 -0
  424. data/db/migrate/20260827063909_create_rails_den_topic_role_requirements.rb +23 -0
  425. data/db/migrate/20260827203747_create_rails_den_report_reasons.rb +19 -0
  426. data/db/migrate/20260827203752_create_rails_den_reports.rb +24 -0
  427. data/db/migrate/20260827203807_provision_rails_den_default_report_reasons.rb +32 -0
  428. data/db/migrate/20260828030352_create_rails_den_moderation_events.rb +26 -0
  429. data/db/migrate/20260828030354_create_rails_den_moderation_notes.rb +13 -0
  430. data/db/migrate/20260828030357_create_rails_den_user_warnings.rb +17 -0
  431. data/db/migrate/20260828030359_create_rails_den_user_restrictions.rb +30 -0
  432. data/db/migrate/20260828030404_add_moderation_fields_to_rails_den_reports.rb +55 -0
  433. data/db/migrate/20260828030407_add_moderation_fields_to_rails_den_topics.rb +14 -0
  434. data/db/migrate/20260828031955_add_opening_post_to_rails_den_topics.rb +25 -0
  435. data/db/migrate/20260828083552_create_rails_den_reaction_types.rb +15 -0
  436. data/db/migrate/20260828083554_create_rails_den_reactions.rb +20 -0
  437. data/db/migrate/20260828083556_provision_rails_den_default_reaction_type.rb +18 -0
  438. data/db/migrate/20260828151420_create_rails_den_bookmarks.rb +20 -0
  439. data/db/migrate/20260828165545_create_rails_den_profile_fields.rb +37 -0
  440. data/db/migrate/20260828165547_create_rails_den_profile_field_values.rb +31 -0
  441. data/db/migrate/20260828191644_add_presence_fields_to_rails_den_member_profiles.rb +22 -0
  442. data/db/migrate/20260829003137_create_rails_den_private_conversations.rb +13 -0
  443. data/db/migrate/20260829003139_create_rails_den_private_conversation_participants.rb +35 -0
  444. data/db/migrate/20260829003141_create_rails_den_private_messages.rb +19 -0
  445. data/db/migrate/20260829003143_create_rails_den_private_message_recipients.rb +26 -0
  446. data/db/migrate/20260829003435_provision_rails_den_message_capability_defaults.rb +39 -0
  447. data/db/migrate/20260829013557_create_rails_den_chat_channels.rb +17 -0
  448. data/db/migrate/20260829014413_create_rails_den_chat_channel_memberships.rb +26 -0
  449. data/db/migrate/20260829014523_create_rails_den_chat_messages.rb +27 -0
  450. data/db/migrate/20260830155021_create_rails_den_chat_channel_read_states.rb +37 -0
  451. data/db/migrate/20260830155023_add_pinned_to_rails_den_chat_messages.rb +16 -0
  452. data/db/migrate/20260830185149_create_rails_den_badges.rb +44 -0
  453. data/db/migrate/20260830185151_create_rails_den_badge_awards.rb +43 -0
  454. data/db/migrate/20260830190053_create_rails_den_reputation_events.rb +52 -0
  455. data/db/migrate/20260830190055_create_rails_den_trust_levels.rb +52 -0
  456. data/db/migrate/20260830190057_create_rails_den_trust_level_achievements.rb +39 -0
  457. data/db/migrate/20260830190059_add_reputation_points_to_rails_den_member_profiles.rb +17 -0
  458. data/db/migrate/20260831120000_create_rails_den_advertising_and_sponsorships.rb +55 -0
  459. data/db/migrate/20260831120001_add_description_to_rails_den_sponsors.rb +5 -0
  460. data/db/migrate/20260831120002_add_advertising_page_to_rails_den_advertising_configurations.rb +7 -0
  461. data/db/migrate/20260831120003_add_destination_url_to_rails_den_sponsors.rb +5 -0
  462. data/db/migrate/20260831120004_move_destination_url_to_rails_den_sponsorships.rb +138 -0
  463. data/db/migrate/20260831204539_create_rails_den_theme_selections.rb +9 -0
  464. data/exe/rails_den +5 -0
  465. data/lib/generators/rails_den/install/install_generator.rb +42 -0
  466. data/lib/generators/rails_den/install/templates/rails_den.rb +75 -0
  467. data/lib/generators/rails_den/install/views/views_generator.rb +56 -0
  468. data/lib/rails/commands/rails_den/import/discourse/discourse_command.rb +48 -0
  469. data/lib/rails_den/cli.rb +174 -0
  470. data/lib/rails_den/configuration.rb +173 -0
  471. data/lib/rails_den/engine.rb +10 -0
  472. data/lib/rails_den/extensions/descriptor.rb +138 -0
  473. data/lib/rails_den/extensions/registry.rb +65 -0
  474. data/lib/rails_den/extensions.rb +49 -0
  475. data/lib/rails_den/formatters/markdown.rb +30 -0
  476. data/lib/rails_den/formatters/plain_text.rb +18 -0
  477. data/lib/rails_den/formatting.rb +130 -0
  478. data/lib/rails_den/gamification.rb +77 -0
  479. data/lib/rails_den/import/discourse/backup.rb +169 -0
  480. data/lib/rails_den/import/discourse/finalizer.rb +617 -0
  481. data/lib/rails_den/import/discourse/importer.rb +266 -0
  482. data/lib/rails_den/import/discourse/source_database.rb +320 -0
  483. data/lib/rails_den/import/discourse/staff_roles.rb +173 -0
  484. data/lib/rails_den/import/discourse/transformer.rb +940 -0
  485. data/lib/rails_den/import/discourse.rb +9 -0
  486. data/lib/rails_den/licensing/client.rb +128 -0
  487. data/lib/rails_den/licensing/result.rb +57 -0
  488. data/lib/rails_den/licensing.rb +28 -0
  489. data/lib/rails_den/metadata.rb +343 -0
  490. data/lib/rails_den/onebox/address_guard.rb +108 -0
  491. data/lib/rails_den/onebox/body_renderer.rb +135 -0
  492. data/lib/rails_den/onebox/embed_policy.rb +179 -0
  493. data/lib/rails_den/onebox/errors.rb +24 -0
  494. data/lib/rails_den/onebox/extractor.rb +130 -0
  495. data/lib/rails_den/onebox/fetcher.rb +199 -0
  496. data/lib/rails_den/onebox/http_transport.rb +164 -0
  497. data/lib/rails_den/onebox/metadata.rb +343 -0
  498. data/lib/rails_den/onebox/oembed/client.rb +46 -0
  499. data/lib/rails_den/onebox/oembed/discovery.rb +296 -0
  500. data/lib/rails_den/onebox/oembed/response.rb +375 -0
  501. data/lib/rails_den/onebox/oembed.rb +18 -0
  502. data/lib/rails_den/onebox/providers/base.rb +23 -0
  503. data/lib/rails_den/onebox/providers/bluesky.rb +402 -0
  504. data/lib/rails_den/onebox/providers/generic.rb +310 -0
  505. data/lib/rails_den/onebox/providers/giphy.rb +281 -0
  506. data/lib/rails_den/onebox/providers/github.rb +300 -0
  507. data/lib/rails_den/onebox/providers/mastodon.rb +505 -0
  508. data/lib/rails_den/onebox/providers/soundcloud.rb +199 -0
  509. data/lib/rails_den/onebox/providers/spotify.rb +196 -0
  510. data/lib/rails_den/onebox/providers/tenor.rb +296 -0
  511. data/lib/rails_den/onebox/providers/tiktok.rb +292 -0
  512. data/lib/rails_den/onebox/providers/twitch.rb +414 -0
  513. data/lib/rails_den/onebox/providers/vimeo.rb +295 -0
  514. data/lib/rails_den/onebox/providers/youtube.rb +201 -0
  515. data/lib/rails_den/onebox/registry.rb +41 -0
  516. data/lib/rails_den/onebox/renderer.rb +403 -0
  517. data/lib/rails_den/onebox/result.rb +86 -0
  518. data/lib/rails_den/onebox/synchronizer.rb +161 -0
  519. data/lib/rails_den/onebox/url.rb +35 -0
  520. data/lib/rails_den/onebox.rb +176 -0
  521. data/lib/rails_den/presence.rb +162 -0
  522. data/lib/rails_den/standalone_template.rb +700 -0
  523. data/lib/rails_den/themes.rb +80 -0
  524. data/lib/rails_den/version.rb +3 -0
  525. data/lib/rails_den/view_installer.rb +129 -0
  526. data/lib/rails_den.rb +113 -0
  527. data/lib/tasks/rails_den_tasks.rake +4 -0
  528. metadata +735 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 70b344dc256069efe80c0a22d4e05a5d2d2bd436c50c873aa198165e4cc5d67a
4
+ data.tar.gz: 61411b34ea7aadea31c9e0a09b2b0f9eda14ae4ef8d8b7c0957b78432cc09b9a
5
+ SHA512:
6
+ metadata.gz: d75bc49222af96e62f1806e3aec9afb5dc2158b25b0d76512c5a7a5230e6d3d28791091f14796e693ecc2953015cb530dbe0f842fc4bd2d668b3d041a67d360e
7
+ data.tar.gz: ba8dd71c6d8315f447d1e6de1650ed9404d35b18e858425ca8cb82fb2ee6bf892f65fa81211e5f787fdcb22b70ff3730afab3689d6005613039dddc9a389a6ab
data/LICENSE ADDED
@@ -0,0 +1,652 @@
1
+ RAILSDEN COMMUNITY LICENSE
2
+ Version 1.0 — August 29, 2026
3
+
4
+ Copyright © 2026 Oak Harbor Ventures, LLC.
5
+ All rights reserved.
6
+
7
+ This RailsDen Community License ("License") governs the use of RailsDen Core
8
+ ("RailsDen" or the "Software"), which is owned and distributed by Oak Harbor
9
+ Ventures, LLC, a Wyoming limited liability company ("OHV").
10
+
11
+ RailsDen is proprietary software. It is made available for use without a
12
+ license fee under the terms of this License. RailsDen is not open-source
13
+ software, and access to its source code does not grant rights beyond those
14
+ expressly stated in this License.
15
+
16
+ By downloading, installing, accessing, copying, modifying, or using RailsDen,
17
+ you agree to this License. If you do not agree to this License, you may not
18
+ download, install, access, copy, modify, or use RailsDen.
19
+
20
+
21
+ 1. DEFINITIONS
22
+
23
+ 1.1 "You" and "Licensee"
24
+
25
+ "You" and "Licensee" mean the individual or legal entity that obtains and uses
26
+ RailsDen under this License.
27
+
28
+ If an individual obtains RailsDen on behalf of a legal entity, that legal
29
+ entity is the Licensee and the individual represents that they have authority
30
+ to accept this License on its behalf.
31
+
32
+
33
+ 1.2 "RailsDen Core"
34
+
35
+ "RailsDen Core" means the RailsDen software distributed by OHV under this
36
+ License, including its Ruby code, JavaScript, stylesheets, templates, database
37
+ migrations, configuration, executable files, documentation included in the
38
+ distribution, and other files supplied as part of the RailsDen Core package.
39
+
40
+ RailsDen Core does not include separately licensed plugins, extensions,
41
+ services, software, or other products distributed by OHV under different
42
+ terms.
43
+
44
+
45
+ 1.3 "Community"
46
+
47
+ "Community" means a website, application, discussion forum, social community,
48
+ customer community, membership community, or other online property using
49
+ RailsDen for community functionality.
50
+
51
+
52
+ 1.4 "RailsDen Extension"
53
+
54
+ "RailsDen Extension" means any software, package, component, plugin, gem,
55
+ engine, module, adapter, integration, add-on, theme, or other reusable work
56
+ that is primarily designed or intended to extend, alter, integrate with,
57
+ customize, replace, supplement, or add functionality to RailsDen.
58
+
59
+ A RailsDen Extension may exist inside or outside the RailsDen source tree and
60
+ may communicate with RailsDen through public, private, documented, or
61
+ undocumented interfaces.
62
+
63
+ A work may be a RailsDen Extension regardless of whether it is distributed
64
+ for payment or free of charge.
65
+
66
+ Site-specific content, logos, branding, styles, templates, or customizations
67
+ created solely for a particular Licensee's own Community and not offered or
68
+ intended for reuse or distribution as a RailsDen product are not RailsDen
69
+ Extensions solely because they are used with RailsDen.
70
+
71
+
72
+ 1.5 "Internal Extension"
73
+
74
+ "Internal Extension" means a RailsDen Extension created solely for use with
75
+ one Licensee's own RailsDen installations and not published, licensed,
76
+ marketed, distributed, supplied, or otherwise made available for use by
77
+ unrelated third parties.
78
+
79
+
80
+ 1.6 "Authorized Service Provider"
81
+
82
+ "Authorized Service Provider" means an employee, contractor, consultant,
83
+ developer, managed-service provider, infrastructure provider, or hosting
84
+ provider given access to RailsDen solely to install, configure, host,
85
+ customize, maintain, support, or operate RailsDen on behalf of a Licensee.
86
+
87
+ An Authorized Service Provider receives no independent license to RailsDen
88
+ merely by receiving such access.
89
+
90
+
91
+ 1.7 "Distribute"
92
+
93
+ "Distribute" means to sell, license, sublicense, publish, republish, provide,
94
+ transfer, mirror, upload, transmit, give away, make available for download, or
95
+ otherwise furnish a copy of software or a right to use software to another
96
+ person or entity.
97
+
98
+ Providing another person with a link to an official OHV-authorized RailsDen
99
+ distribution location does not itself constitute Distribution.
100
+
101
+
102
+ 2. OWNERSHIP
103
+
104
+ 2.1 RailsDen Ownership
105
+
106
+ RailsDen, including all copyrights and other intellectual-property rights in
107
+ RailsDen, is and remains the property of OHV and its licensors.
108
+
109
+ Except for the limited rights expressly granted by this License, no ownership
110
+ interest or intellectual-property right in RailsDen is transferred to the
111
+ Licensee.
112
+
113
+
114
+ 2.2 Reservation of Rights
115
+
116
+ All rights not expressly granted by this License are reserved by OHV.
117
+
118
+ Possession of RailsDen source code does not create or imply a right to
119
+ redistribute RailsDen, create a competing distribution, distribute RailsDen
120
+ Extensions, or exercise any other right not expressly granted by this
121
+ License.
122
+
123
+
124
+ 3. FREE LICENSE GRANT
125
+
126
+ Subject to continued compliance with this License, OHV grants the Licensee a
127
+ worldwide, royalty-free, non-exclusive, non-sublicensable, and, except as
128
+ expressly permitted by Section 12, non-transferable license to:
129
+
130
+ (a) install and use RailsDen for an unlimited number of Communities owned or
131
+ operated by the Licensee for the Licensee's own purposes;
132
+
133
+ (b) use RailsDen in connection with commercial, nonprofit, personal,
134
+ educational, or other lawful activities;
135
+
136
+ (c) make copies of RailsDen reasonably necessary for installation,
137
+ deployment, development, testing, backup, disaster recovery, and operation
138
+ of the Licensee's permitted RailsDen installations;
139
+
140
+ (d) inspect and modify RailsDen for the Licensee's own permitted use;
141
+
142
+ (e) create and use Internal Extensions;
143
+
144
+ (f) allow Authorized Service Providers to access, install, configure, host,
145
+ modify, maintain, support, and operate RailsDen solely on the Licensee's
146
+ behalf; and
147
+
148
+ (g) remove, replace, or customize user-visible RailsDen branding in the
149
+ Licensee's Communities, subject to Section 8.
150
+
151
+ No license fee is charged by OHV for the rights granted in this Section 3.
152
+
153
+
154
+ 4. COMMERCIAL USE
155
+
156
+ The Licensee may use RailsDen without charge to operate a Community associated
157
+ with a commercial business, paid membership, advertising-supported property,
158
+ nonprofit organization, professional organization, product, service, or other
159
+ lawful activity.
160
+
161
+ Charging users, displaying advertising, selling products or services,
162
+ collecting membership fees, or otherwise earning revenue through a Community
163
+ does not by itself violate this License.
164
+
165
+ The restrictions in this License concern Distribution, third-party RailsDen
166
+ Extensions, RailsDen-based platform services, and other specifically
167
+ restricted uses. They are not restrictions on ordinary commercial operation
168
+ of a Licensee's own Community.
169
+
170
+
171
+ 5. DISTRIBUTION RESTRICTIONS
172
+
173
+ 5.1 OHV-Only Distribution
174
+
175
+ Only OHV, or a party expressly authorized in writing by OHV, may Distribute
176
+ RailsDen.
177
+
178
+ The Licensee may not Distribute RailsDen to any third party, whether RailsDen
179
+ is modified or unmodified and whether the Distribution is commercial or free
180
+ of charge.
181
+
182
+
183
+ 5.2 No Mirrors or Alternate Distributions
184
+
185
+ Without OHV's prior written permission, the Licensee may not:
186
+
187
+ (a) mirror RailsDen;
188
+
189
+ (b) operate an alternate RailsDen download location;
190
+
191
+ (c) publish a RailsDen gem or package;
192
+
193
+ (d) republish RailsDen source code;
194
+
195
+ (e) create or maintain a public fork or public copy of RailsDen;
196
+
197
+ (f) include RailsDen in another software distribution; or
198
+
199
+ (g) otherwise make RailsDen available to third parties independently of an
200
+ OHV-authorized distribution channel.
201
+
202
+
203
+ 5.3 Authorized Service Providers
204
+
205
+ Providing an Authorized Service Provider with access to RailsDen as reasonably
206
+ necessary to perform services solely for the Licensee does not violate
207
+ Sections 5.1 or 5.2.
208
+
209
+ The Licensee is responsible for ensuring that its Authorized Service Providers
210
+ use RailsDen only for the Licensee's permitted purposes and do not retain,
211
+ reuse, or Distribute RailsDen independently.
212
+
213
+ An Authorized Service Provider may retain ordinary records and backups
214
+ reasonably required by law or ordinary business practices, but such retention
215
+ does not grant any independent right to use or Distribute RailsDen.
216
+
217
+
218
+ 5.4 Support and Discussion Excerpts
219
+
220
+ Notwithstanding Sections 5.1 and 5.2, the Licensee may publicly reproduce a
221
+ limited excerpt of RailsDen source code when reasonably necessary to:
222
+
223
+ (a) request technical assistance;
224
+
225
+ (b) report a bug or security issue;
226
+
227
+ (c) discuss interoperability or implementation behavior; or
228
+
229
+ (d) communicate about a technical problem.
230
+
231
+ The excerpt must be limited to the amount reasonably necessary for that
232
+ purpose and must not constitute a substantial portion of RailsDen or enable a
233
+ recipient to reconstruct or substitute for a material portion of RailsDen.
234
+
235
+
236
+ 6. RAILSDEN EXTENSIONS
237
+
238
+ 6.1 Internal Extensions Are Permitted
239
+
240
+ The Licensee may create, modify, and use Internal Extensions for its own
241
+ permitted RailsDen installations.
242
+
243
+ The Licensee is not required to publish, disclose, contribute, or provide an
244
+ Internal Extension or other private modification to OHV.
245
+
246
+
247
+ 6.2 Third-Party Extension Distribution Is Prohibited
248
+
249
+ Without prior written authorization from OHV, no person or entity may
250
+ Distribute a RailsDen Extension to a third party.
251
+
252
+ This restriction applies whether the RailsDen Extension is:
253
+
254
+ (a) commercial;
255
+
256
+ (b) free of charge;
257
+
258
+ (c) open source;
259
+
260
+ (d) source available;
261
+
262
+ (e) provided as a service;
263
+
264
+ (f) bundled with another product;
265
+
266
+ (g) hosted in a public repository; or
267
+
268
+ (h) described by another term such as a theme, integration, adapter, module,
269
+ package, add-on, or customization.
270
+
271
+
272
+ 6.3 Consultants and Developers
273
+
274
+ A consultant, developer, agency, or other Authorized Service Provider may
275
+ create RailsDen-specific modifications or Internal Extensions for a particular
276
+ Licensee while acting on that Licensee's behalf.
277
+
278
+ Such work may be delivered to and used by that Licensee as part of the
279
+ Licensee's own permitted RailsDen installation.
280
+
281
+ Without prior written authorization from OHV, the consultant, developer,
282
+ agency, or service provider may not:
283
+
284
+ (a) market the work as a reusable RailsDen Extension;
285
+
286
+ (b) sell, license, publish, give away, or otherwise Distribute the work as a
287
+ RailsDen Extension;
288
+
289
+ (c) maintain the work as a reusable RailsDen product for unrelated clients; or
290
+
291
+ (d) deploy substantially the same RailsDen-specific reusable extension across
292
+ unrelated clients as part of an independent plugin or extension business.
293
+
294
+ Nothing in this Section prohibits a consultant or developer from reusing
295
+ general programming knowledge, techniques, ideas, algorithms, or code that is
296
+ not specific to RailsDen and does not contain or derive from RailsDen
297
+ protected material.
298
+
299
+
300
+ 7. HOSTING AND SERVICES
301
+
302
+ 7.1 Ordinary Hosting Is Permitted
303
+
304
+ The Licensee may host RailsDen on infrastructure owned or operated by the
305
+ Licensee or by an Authorized Service Provider.
306
+
307
+ A hosting provider, cloud provider, managed-service provider, consultant, or
308
+ developer may charge the Licensee for infrastructure, deployment,
309
+ administration, maintenance, development, support, or other services provided
310
+ to the Licensee.
311
+
312
+
313
+ 7.2 RailsDen-as-a-Service Is Not Permitted
314
+
315
+ Without prior written authorization from OHV, the Licensee may not use RailsDen
316
+ to offer a hosted forum platform, hosted community platform, white-labeled
317
+ community platform, software-as-a-service product, platform-as-a-service
318
+ product, OEM product, or substantially similar service in which RailsDen or
319
+ RailsDen-derived community functionality is a material part of the platform
320
+ being offered to unrelated third parties.
321
+
322
+ This restriction does not prohibit an ordinary Community operated by a
323
+ business for its own customers, members, employees, audience, users, or other
324
+ community participants.
325
+
326
+ It also does not prohibit an Authorized Service Provider from hosting or
327
+ managing a separate Licensee's RailsDen installation solely on that
328
+ Licensee's behalf.
329
+
330
+
331
+ 8. BRANDING, COPYRIGHT NOTICES, AND TRADEMARKS
332
+
333
+ 8.1 User-Visible Branding
334
+
335
+ The Licensee may remove, replace, or customize user-visible references such as
336
+ "Powered by RailsDen" within its own Community.
337
+
338
+
339
+ 8.2 Legal Notices
340
+
341
+ The Licensee may not remove, obscure, or alter copyright notices, proprietary
342
+ notices, or this License from copies of RailsDen source code or RailsDen
343
+ packages in the Licensee's possession or control.
344
+
345
+
346
+ 8.3 Trademarks
347
+
348
+ This License does not grant the Licensee any ownership interest in the
349
+ RailsDen name, RailsDen logos, Oak Harbor Ventures name, Oak Harbor Ventures
350
+ logos, or other OHV trademarks or service marks.
351
+
352
+ The Licensee may truthfully state that its Community uses or is powered by
353
+ RailsDen.
354
+
355
+ The Licensee may not use OHV or RailsDen names, logos, trademarks, or branding
356
+ in a manner that falsely suggests sponsorship, certification, partnership,
357
+ affiliation, or endorsement by OHV.
358
+
359
+
360
+ 9. LICENSEE MODIFICATIONS
361
+
362
+ 9.1 Ownership of Original Modifications
363
+
364
+ As between OHV and the Licensee, the Licensee retains whatever copyright or
365
+ other rights the Licensee lawfully owns in original material independently
366
+ created by the Licensee as part of a private RailsDen modification or Internal
367
+ Extension.
368
+
369
+ Nothing in this License requires the Licensee to assign such independently
370
+ owned material to OHV or disclose it publicly.
371
+
372
+
373
+ 9.2 RailsDen Rights Remain Restricted
374
+
375
+ Ownership of original material created by the Licensee does not give the
376
+ Licensee ownership of RailsDen or permission to exercise rights in RailsDen
377
+ beyond those granted by this License.
378
+
379
+ A modification or extension containing, incorporating, depending upon, or
380
+ derived from RailsDen remains subject to all applicable restrictions of this
381
+ License with respect to RailsDen and Distribution.
382
+
383
+
384
+ 10. THIRD-PARTY SOFTWARE
385
+
386
+ RailsDen may include, depend upon, or interoperate with software owned by third
387
+ parties.
388
+
389
+ Third-party software remains governed by its applicable third-party license.
390
+
391
+ Nothing in this License limits rights granted directly to a Licensee by a
392
+ third-party licensor, and nothing in this License grants rights in third-party
393
+ software beyond those granted by its applicable license.
394
+
395
+
396
+ 11. CONTRIBUTIONS
397
+
398
+ This License does not govern the submission or acceptance of contributions to
399
+ RailsDen.
400
+
401
+ OHV may require a separate Contributor License Agreement or other written
402
+ agreement as a condition of accepting a contribution.
403
+
404
+ Unless OHV expressly agrees otherwise in writing, an accepted contribution
405
+ must be accompanied by an agreement assigning to OHV the copyright and other
406
+ rights necessary for OHV to own, license, sublicense, modify, distribute, and
407
+ relicense the contribution as part of RailsDen.
408
+
409
+ Submitting or contributing code does not grant the contributor any
410
+ Distribution, extension-development, sublicensing, or other rights beyond
411
+ those otherwise provided by this License.
412
+
413
+
414
+ 12. TRANSFER AND ASSIGNMENT
415
+
416
+ The Licensee may not assign, transfer, sublicense, delegate, sell, or otherwise
417
+ convey this License or rights under this License without prior written
418
+ authorization from OHV.
419
+
420
+ Notwithstanding the preceding paragraph, a legal entity may transfer this
421
+ License without separate OHV authorization to a legal successor resulting
422
+ from a bona fide merger, consolidation, reorganization, acquisition, or sale
423
+ of substantially all of the Licensee's business or assets, provided that:
424
+
425
+ (a) the successor expressly agrees to be bound by this License;
426
+
427
+ (b) the transfer is not undertaken primarily for the purpose of acquiring,
428
+ redistributing, sublicensing, commercializing, or offering RailsDen or
429
+ RailsDen Extensions as a product or service; and
430
+
431
+ (c) the successor otherwise remains eligible to use RailsDen under this
432
+ License.
433
+
434
+ Any attempted transfer not permitted by this Section is void.
435
+
436
+
437
+ 13. TERMINATION
438
+
439
+ 13.1 Remediable Breaches
440
+
441
+ If the Licensee commits a breach that is reasonably capable of cure and is not
442
+ a material breach identified in Section 13.2, OHV may provide written notice
443
+ describing the breach.
444
+
445
+ The Licensee will have thirty (30) days after receipt of the notice to cure
446
+ the breach.
447
+
448
+ If the breach is not cured within that period, this License terminates
449
+ automatically.
450
+
451
+
452
+ 13.2 Immediate Termination for Material Breaches
453
+
454
+ This License terminates immediately upon a Licensee's material breach involving:
455
+
456
+ (a) unauthorized Distribution of RailsDen;
457
+
458
+ (b) unauthorized Distribution of a RailsDen Extension;
459
+
460
+ (c) operation of a service prohibited by Section 7.2;
461
+
462
+ (d) intentional sublicensing or unauthorized transfer of RailsDen rights; or
463
+
464
+ (e) intentional infringement or misappropriation of OHV's ownership rights in
465
+ RailsDen.
466
+
467
+
468
+ 13.3 Effect of Termination
469
+
470
+ Upon termination, the Licensee must immediately cease all use of RailsDen and
471
+ must delete or destroy copies of RailsDen within the Licensee's possession or
472
+ control, except for copies that applicable law requires the Licensee to retain.
473
+
474
+ Any legally required retained copy may be retained solely for archival or
475
+ compliance purposes and may not be used to operate RailsDen.
476
+
477
+ Termination does not eliminate any claim, liability, payment obligation,
478
+ remedy, or cause of action that accrued before termination.
479
+
480
+
481
+ 13.4 Reinstatement
482
+
483
+ OHV may reinstate a terminated License only through an express written
484
+ reinstatement issued by OHV.
485
+
486
+
487
+ 14. REMEDIES AND DAMAGES
488
+
489
+ The Licensee acknowledges that unauthorized Distribution of RailsDen,
490
+ unauthorized Distribution of RailsDen Extensions, unauthorized RailsDen-based
491
+ platform services, and misuse of OHV intellectual property may cause harm that
492
+ is substantial and difficult to measure precisely.
493
+
494
+ For a breach of this License, OHV may pursue all remedies available under
495
+ applicable law or equity, including, as applicable:
496
+
497
+ (a) actual damages;
498
+
499
+ (b) damages reasonably attributable to unauthorized Distribution,
500
+ unauthorized use, revenue, installations, transactions, or other harm
501
+ caused by or resulting from the breach;
502
+
503
+ (c) restitution, unjust enrichment, an accounting, or disgorgement where
504
+ available under applicable law;
505
+
506
+ (d) reasonable costs of investigation and enforcement;
507
+
508
+ (e) reasonable attorneys' fees and litigation costs to the extent recoverable
509
+ under applicable law; and
510
+
511
+ (f) temporary, preliminary, permanent, or other equitable or injunctive
512
+ relief.
513
+
514
+ The remedies provided by this License are cumulative to the extent permitted
515
+ by law and are not intended to limit any statutory, contractual, equitable, or
516
+ other remedy otherwise available to OHV.
517
+
518
+
519
+ 15. INJUNCTIVE AND EQUITABLE RELIEF
520
+
521
+ The Licensee acknowledges that a breach or threatened breach involving
522
+ unauthorized Distribution, unauthorized RailsDen Extensions, confidential or
523
+ proprietary material, trademarks, copyrights, or other intellectual-property
524
+ rights may cause harm for which monetary damages alone may be inadequate.
525
+
526
+ OHV may seek temporary, preliminary, permanent, emergency, or other equitable
527
+ or injunctive relief in any court of competent jurisdiction when reasonably
528
+ necessary to prevent, restrain, or stop an actual or threatened violation.
529
+
530
+ Seeking such relief outside Wyoming does not waive the governing-law or venue
531
+ provisions of Section 20 for claims not necessary to obtain or enforce that
532
+ relief.
533
+
534
+
535
+ 16. DISCLAIMER OF WARRANTIES
536
+
537
+ TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, RAILSDEN IS PROVIDED
538
+ "AS IS" AND "AS AVAILABLE," WITH ALL FAULTS AND WITHOUT WARRANTY OF ANY KIND.
539
+
540
+ OHV DISCLAIMS ALL EXPRESS, IMPLIED, STATUTORY, AND OTHER WARRANTIES, INCLUDING
541
+ WITHOUT LIMITATION WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
542
+ PURPOSE, TITLE, NON-INFRINGEMENT, ACCURACY, AVAILABILITY, RELIABILITY,
543
+ SECURITY, COMPATIBILITY, QUIET ENJOYMENT, AND ERROR-FREE OR UNINTERRUPTED
544
+ OPERATION.
545
+
546
+ OHV DOES NOT WARRANT THAT RAILSDEN WILL MEET THE LICENSEE'S REQUIREMENTS, THAT
547
+ RAILSDEN WILL BE FREE FROM DEFECTS OR VULNERABILITIES, OR THAT ANY DEFECT OR
548
+ VULNERABILITY WILL BE CORRECTED.
549
+
550
+ THE LICENSEE IS RESPONSIBLE FOR DETERMINING WHETHER RAILSDEN IS APPROPRIATE
551
+ FOR ITS USE AND FOR MAINTAINING APPROPRIATE BACKUPS, SECURITY CONTROLS,
552
+ MONITORING, AND OPERATIONAL PRACTICES.
553
+
554
+
555
+ 17. LIMITATION OF LIABILITY
556
+
557
+ TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, OHV AND ITS MEMBERS,
558
+ MANAGERS, OFFICERS, EMPLOYEES, CONTRACTORS, AFFILIATES, AND LICENSORS WILL NOT
559
+ BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE, OR
560
+ CONSEQUENTIAL DAMAGES, LOSS OF PROFITS, LOSS OF REVENUE, LOSS OF DATA, LOSS OF
561
+ GOODWILL, BUSINESS INTERRUPTION, OR COST OF SUBSTITUTE GOODS OR SERVICES
562
+ ARISING FROM OR RELATING TO RAILSDEN OR THIS LICENSE, REGARDLESS OF THE THEORY
563
+ OF LIABILITY AND EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
564
+
565
+ TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE AGGREGATE LIABILITY OF
566
+ OHV AND THE PARTIES IDENTIFIED ABOVE ARISING FROM OR RELATING TO RAILSDEN OR
567
+ THIS LICENSE WILL NOT EXCEED THE TOTAL AMOUNT ACTUALLY PAID BY THE LICENSEE TO
568
+ OHV SPECIFICALLY FOR RAILSDEN CORE UNDER THIS LICENSE DURING THE TWELVE (12)
569
+ MONTHS PRECEDING THE EVENT GIVING RISE TO THE CLAIM.
570
+
571
+ BECAUSE RAILSDEN CORE IS NORMALLY LICENSED WITHOUT CHARGE, THAT AMOUNT MAY BE
572
+ ZERO.
573
+
574
+ THE LIMITATIONS IN THIS SECTION APPLY TO THE FULLEST EXTENT PERMITTED BY LAW.
575
+
576
+
577
+ 18. LICENSE VERSIONS AND FUTURE RAILSDEN RELEASES
578
+
579
+ Each release of RailsDen is governed by the version of the license distributed
580
+ with that release.
581
+
582
+ OHV may modify the licensing terms applicable to future RailsDen releases.
583
+
584
+ A later license version does not retroactively amend the terms governing a
585
+ previous RailsDen release already obtained under an earlier license version.
586
+
587
+ If a Licensee obtains, installs, or uses a later RailsDen release distributed
588
+ under different terms, that later release is governed by the license
589
+ distributed with that later release.
590
+
591
+
592
+ 19. SEVERABILITY, WAIVER, AND CONSTRUCTION
593
+
594
+ If any provision of this License is held invalid, illegal, or unenforceable,
595
+ that provision will be enforced to the maximum extent permitted by law or,
596
+ where appropriate, limited or reformed to the minimum extent necessary to make
597
+ it enforceable while most closely preserving its intended effect.
598
+
599
+ The remaining provisions will remain in full force and effect.
600
+
601
+ Failure or delay by OHV in enforcing any provision does not waive OHV's right
602
+ to enforce that provision or any other provision later.
603
+
604
+ Section headings are provided for convenience and do not limit the meaning of
605
+ this License.
606
+
607
+
608
+ 20. GOVERNING LAW AND VENUE
609
+
610
+ This License and any dispute arising from or relating to this License or
611
+ RailsDen are governed by the laws of the State of Wyoming, United States,
612
+ without regard to conflict-of-law principles.
613
+
614
+ Except for proceedings permitted by Section 15 or proceedings necessary to
615
+ recognize, enforce, or protect an existing judgment or order, the Licensee
616
+ consents to exclusive jurisdiction and venue in the state courts of Wyoming
617
+ and the federal courts located in Wyoming.
618
+
619
+ Nothing in this Section prevents OHV from seeking the temporary, preliminary,
620
+ permanent, emergency, or other equitable or injunctive relief permitted by
621
+ Section 15 in another court of competent jurisdiction.
622
+
623
+
624
+ 21. ENTIRE LICENSE
625
+
626
+ This License constitutes the complete agreement between OHV and the Licensee
627
+ concerning the rights granted under this License for the applicable RailsDen
628
+ release and supersedes prior oral or written statements concerning those
629
+ rights, except for a separate written agreement signed by OHV that expressly
630
+ modifies or supplements this License.
631
+
632
+ Separate OHV products, plugins, extensions, support services, hosting
633
+ services, commercial licenses, or other offerings may be governed by separate
634
+ terms.
635
+
636
+ No purchase order, customer form, website statement, or other unilateral term
637
+ issued by a Licensee modifies this License unless OHV expressly agrees to that
638
+ modification in a signed writing.
639
+
640
+
641
+ 22. CONTACT AND ADDITIONAL RIGHTS
642
+
643
+ Permission to Distribute RailsDen, develop or Distribute RailsDen Extensions,
644
+ offer RailsDen-based platform services, obtain OEM or redistribution rights,
645
+ or exercise rights beyond those granted by this License may be available from
646
+ OHV under a separate written agreement.
647
+
648
+ Oak Harbor Ventures, LLC
649
+ https://oakharborventures.com
650
+
651
+
652
+ END OF RAILSDEN COMMUNITY LICENSE VERSION 1.0