-
-
Notifications
You must be signed in to change notification settings - Fork 638
Add centralized help and support messaging system #1803
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 4 commits
55b820a
2c67f41
8e1875d
e7a3b6a
8976d09
f769676
882b43c
6c21f69
0e0f18b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -140,16 +140,23 @@ _Requires creating a free account._ | |
| - Node.js >= 20 (CI tested: 20 - 22) | ||
| - A JavaScript package manager (npm, yarn, pnpm, or bun) | ||
|
|
||
| # Support | ||
|
|
||
| - [Click to join **React + Rails Slack**](https://join.slack.com/t/reactrails/shared_invite/zt-38oicm9d0-OO0V~bdg4aYNuZuUbRFSXg). | ||
|
|
||
| - [**Subscribe**](https://app.mailerlite.com/webforms/landing/l1d9x5) for announcements of new releases of React on Rails and of our latest [blog articles](https://blog.shakacode.com) and tutorials. | ||
| - [Discussions](https://github.com/shakacode/react_on_rails/discussions): Post your questions regarding React on Rails | ||
| - **[forum.shakacode.com](https://forum.shakacode.com)**: Other discussions | ||
| - **[@railsonmaui on Twitter](https://twitter.com/railsonmaui)** | ||
| - _See [NEWS.md](https://github.com/shakacode/react_on_rails/tree/master/NEWS.md) for more notes over time._ | ||
| - See [Projects](https://github.com/shakacode/react_on_rails/tree/master/PROJECTS.md) using and [KUDOS](https://github.com/shakacode/react_on_rails/tree/master/KUDOS.md) for React on Rails. Please submit yours! Please edit either page or [email us](mailto:[email protected]) and we'll add your info. We also **love stars** as it helps us attract new users and contributors. | ||
| <!-- TROUBLESHOOTING_LINKS_START --> | ||
| <!-- NOTE: Content between TROUBLESHOOTING_LINKS markers is dynamically extracted and displayed in error messages --> | ||
| # 🆘 Get Help & Support | ||
|
|
||
| **Need immediate help?** Here are your options, ordered by response time: | ||
|
|
||
| - 🚀 **Professional Support**: [[email protected]](mailto:[email protected]) - Fastest resolution for bugs, upgrades, and consulting | ||
| - 💬 **React + Rails Slack**: [Join our community](https://invite.reactrails.com) - Chat with other developers | ||
| - 🆓 **GitHub Issues**: [Report bugs](https://github.com/shakacode/react_on_rails/issues) - Community support | ||
| - 📖 **Discussions**: [Ask questions](https://github.com/shakacode/react_on_rails/discussions) - General help | ||
|
|
||
| **Additional Resources:** | ||
| - [**Subscribe**](https://app.mailerlite.com/webforms/landing/l1d9x5) for announcements of new releases and tutorials | ||
| - **[forum.shakacode.com](https://forum.shakacode.com)** - Development discussions | ||
| - **[@railsonmaui on Twitter](https://twitter.com/railsonmaui)** - Updates and tips | ||
| - [Projects using React on Rails](https://github.com/shakacode/react_on_rails/tree/master/PROJECTS.md) - Submit yours! | ||
| <!-- TROUBLESHOOTING_LINKS_END --> | ||
|
|
||
| ## Contributing | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -57,6 +57,8 @@ def self.invoke_and_exit_if_failed(cmd, failure_message) | |
| MSG | ||
|
|
||
| puts wrap_message(msg) | ||
| puts "" | ||
| puts extract_troubleshooting_section | ||
|
|
||
| # Rspec catches exit without! in the exit callbacks | ||
| exit!(1) | ||
|
|
@@ -278,5 +280,52 @@ def self.prepend_to_file_if_text_not_present(file:, text_to_prepend:, regex:) | |
|
|
||
| puts "Prepended\n#{text_to_prepend}to #{file}." | ||
| end | ||
|
|
||
| # Extract troubleshooting section from README.md for error messages | ||
| def self.extract_troubleshooting_section | ||
| readme_path = File.join(gem_root, "README.md") | ||
| return default_troubleshooting_section unless File.exist?(readme_path) | ||
|
|
||
| readme_content = File.read(readme_path) | ||
|
|
||
| # Extract content between the markers | ||
| start_marker = "<!-- TROUBLESHOOTING_LINKS_START -->" | ||
| end_marker = "<!-- TROUBLESHOOTING_LINKS_END -->" | ||
|
|
||
| if readme_content.include?(start_marker) && readme_content.include?(end_marker) | ||
| start_pos = readme_content.index(start_marker) + start_marker.length | ||
| end_pos = readme_content.index(end_marker) | ||
|
|
||
| extracted = readme_content[start_pos...end_pos].strip | ||
| # Convert markdown to terminal-friendly text | ||
| convert_markdown_to_terminal(extracted) | ||
| else | ||
| default_troubleshooting_section | ||
| end | ||
| rescue StandardError | ||
| default_troubleshooting_section | ||
| end | ||
|
|
||
| private_class_method def self.convert_markdown_to_terminal(markdown_text) | ||
| markdown_text | ||
| .gsub(/^#+\s+(.+)$/, "\n📞 \\1") # Convert H1-H6 headers | ||
|
||
| .gsub(/\*\*(.+?)\*\*/, "\\1") # Remove bold markdown | ||
| .gsub(/\[([^\]]+)\]\(([^)]+)\)/, "\\1: \\2") # Convert links to "text: url" | ||
| .gsub(/^-\s+/, " • ") # Convert bullets | ||
| end | ||
|
|
||
| private_class_method def self.default_troubleshooting_section | ||
| <<~DEFAULT | ||
| 📞 Get Help & Support: | ||
| • 🚀 Professional Support: [email protected] (fastest resolution) | ||
| • 💬 React + Rails Slack: https://invite.reactrails.com | ||
| • 🆓 GitHub Issues: https://github.com/shakacode/react_on_rails/issues | ||
| • 📖 Discussions: https://github.com/shakacode/react_on_rails/discussions | ||
| DEFAULT | ||
| end | ||
|
|
||
| private_class_method def self.gem_root | ||
| File.expand_path("../..", __dir__) | ||
| end | ||
| end | ||
| end | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -123,6 +123,24 @@ namespace :react_on_rails do | |
| puts Rainbow("=" * 80).red | ||
| end | ||
|
|
||
| def show_help_and_support | ||
| puts "" | ||
| troubleshooting_content = ReactOnRails::Utils.extract_troubleshooting_section | ||
| # Display the troubleshooting content with color formatting | ||
| troubleshooting_content.split("\n").each do |line| | ||
| case line | ||
| when /^📞/ | ||
| puts Rainbow(line).magenta.bold | ||
| when /^\s*•\s*🚀/ | ||
| puts Rainbow(line).yellow | ||
| when /^\s*•/ | ||
| puts Rainbow(line).cyan | ||
| else | ||
| puts Rainbow(line).white unless line.strip.empty? | ||
| end | ||
| end | ||
| end | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Terminal output loses actual URLs (link text only). Because Utils.convert_markdown_to_terminal strips links to plain text, this colored printer will show “Join our community” without the invite URL. Fix the conversion in Utils to preserve “text: URL”. See my comment in utils.rb Lines 309-316. 🤖 Prompt for AI Agents |
||
|
|
||
| # rubocop:disable Metrics/AbcSize | ||
| def handle_standard_error(error) | ||
| puts "" | ||
|
|
@@ -142,11 +160,7 @@ namespace :react_on_rails do | |
| puts Rainbow(" 2. Check Rails logs: tail -f log/development.log").white | ||
| puts Rainbow(" 3. Verify all dependencies are installed: bundle install && npm install").white | ||
| puts Rainbow(" 4. Clear cache: rm -rf tmp/cache").white | ||
| puts "" | ||
| puts Rainbow("📞 GET HELP:").magenta.bold | ||
| puts Rainbow(" • Create an issue: https://github.com/shakacode/react_on_rails/issues").cyan | ||
| puts Rainbow(" • Community discussions: https://github.com/shakacode/react_on_rails/discussions").cyan | ||
| puts Rainbow(" • Professional support: https://www.shakacode.com/react-on-rails-pro").cyan | ||
| show_help_and_support | ||
| puts Rainbow("=" * 80).red | ||
| end | ||
| # rubocop:enable Metrics/AbcSize | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Make sure to cache it, we don't want to do all this on every exception!