newshound 0.2.2 → 0.2.3
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.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +4 -37
 - data/README.md +1 -1
 - data/checksums/newshound-0.2.3.gem.sha512 +1 -0
 - data/lib/newshound/exceptions/exception_track.rb +23 -44
 - data/lib/newshound/exceptions/solid_errors.rb +29 -48
 - data/lib/newshound/middleware/banner_injector.rb +1 -1
 - data/lib/newshound/version.rb +1 -1
 - metadata +2 -1
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 17482571ea8f7d999aa1325c6263939d19d2028f8b1ee493dbf937db079ca7cb
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 60fb33436b5c573feae6c5fbbf85c4e5c0b5e7a402f4ebb4af0a6d9627aaee27
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: b1d0e8d16a32eec46f8053cd86b2d0bcef597724eef9075e227b054ef3b41fe562bc821c70cad5360b7151ead08599a226a4591c485811d90ebca7d7599261ee
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: bceefac2030c25e5a833f6b0e4debdc69cc30412b2af500f7cd3e0164b46300eb301f3fbf54aad3c277452f3ea8ae3e7856f105c9040a38cedad0f3d70399380
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -5,45 +5,12 @@ All notable changes to this project will be documented in this file. 
     | 
|
| 
       5 
5 
     | 
    
         
             
            The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
         
     | 
| 
       6 
6 
     | 
    
         
             
            and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
            ## [0.2. 
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
            ### Added
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
            - CI workflow to run tests on Ruby 3.0-3.4 (b3ebc7a)
         
     | 
| 
       13 
     | 
    
         
            -
            - Separate linter job for RuboCop (b3ebc7a)
         
     | 
| 
       14 
     | 
    
         
            -
            - Coverage reporting with SimpleCov (b3ebc7a)
         
     | 
| 
       15 
     | 
    
         
            -
            - CI workflow to run tests on Ruby 3.0-3.4 (782cc57)
         
     | 
| 
       16 
     | 
    
         
            -
            - Separate linter job for RuboCop (782cc57)
         
     | 
| 
       17 
     | 
    
         
            -
            - Coverage reporting with SimpleCov (782cc57)
         
     | 
| 
       18 
     | 
    
         
            -
            - .claude/settings.local.json to .gitignore (701d802)
         
     | 
| 
       19 
     | 
    
         
            -
            - Reissue gem dependency for automated versioning (feac98a)
         
     | 
| 
       20 
     | 
    
         
            -
            - Git trailer support for changelog management (feac98a)
         
     | 
| 
       21 
     | 
    
         
            -
            - Initial CHANGELOG.md with Keep a Changelog format (feac98a)
         
     | 
| 
       22 
     | 
    
         
            -
            - CODEOWNERS file for SOFware/engineers (1a0a1f5)
         
     | 
| 
       23 
     | 
    
         
            -
            - Newshound::Exceptions::Base for standard API to interact with exception data (9dce846)
         
     | 
| 
       24 
     | 
    
         
            -
            - Configuration exception_source to allow for future alternative exception backends (9dce846)
         
     | 
| 
       25 
     | 
    
         
            -
            - SolidErrors support (8b5b48a)
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
            ### Changed
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
            - Replaced RuboCop with StandardRB for simpler linting (09292ed)
         
     | 
| 
       30 
     | 
    
         
            -
            - Updated GitHub Actions workflow to use standardrb (09292ed)
         
     | 
| 
       31 
     | 
    
         
            -
            - Auto-corrected all StandardRB violations (09292ed)
         
     | 
| 
       32 
     | 
    
         
            -
            - Simplified test setup by removing unused mocks (701d802)
         
     | 
| 
       33 
     | 
    
         
            -
            - Rakefile to use reissue tasks instead of manual versioning (feac98a)
         
     | 
| 
       34 
     | 
    
         
            -
            - Removed Ruby 3.0 from test matrix (now testing 3.1-3.4) (4beafd2)
         
     | 
| 
       35 
     | 
    
         
            -
            - Updated gemspec required_ruby_version to >= 3.1.0 (4beafd2)
         
     | 
| 
      
 8 
     | 
    
         
            +
            ## [0.2.3] - 2025-10-29
         
     | 
| 
       36 
9 
     | 
    
         | 
| 
       37 
10 
     | 
    
         
             
            ### Fixed
         
     | 
| 
       38 
11 
     | 
    
         | 
| 
       39 
     | 
    
         
            -
            -  
     | 
| 
       40 
     | 
    
         
            -
            - Mock ActiveRecord::Base.connection and its methods (701d802)
         
     | 
| 
       41 
     | 
    
         
            -
            - Mock connection.execute to return database-like results (701d802)
         
     | 
| 
       42 
     | 
    
         
            -
            - Mock connection.quote and connection.select_value properly (701d802)
         
     | 
| 
       43 
     | 
    
         
            -
            - Name and email in gemspec authors (ab44f30)
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
            ### Removed
         
     | 
| 
      
 12 
     | 
    
         
            +
            - Updated styling in banner injector to attempt to keep newshound banner above other application's menus, instead of hovering over them.
         
     | 
| 
       46 
13 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
      
 14 
     | 
    
         
            +
            ### Changed
         
     | 
| 
       48 
15 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
      
 16 
     | 
    
         
            +
            - Consolidated exception data extraction in ExceptionTrack and SolidErrors (55cffd3)
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -207,7 +207,7 @@ This gem uses [Reissue](https://github.com/rails/reissue) for release management 
     | 
|
| 
       207 
207 
     | 
    
         
             
            the following steps as you would with any other ruby gem:
         
     | 
| 
       208 
208 
     | 
    
         | 
| 
       209 
209 
     | 
    
         
             
            ```bash
         
     | 
| 
       210 
     | 
    
         
            -
            bundle exec rake  
     | 
| 
      
 210 
     | 
    
         
            +
            bundle exec rake build:checksum
         
     | 
| 
       211 
211 
     | 
    
         
             
            ```
         
     | 
| 
       212 
212 
     | 
    
         
             
            And then create a new release:
         
     | 
| 
       213 
213 
     | 
    
         
             
            ```bash
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            4b38b6628a214ff2cf66a400e184a5659a2ba82ccf46efde37293d93dd77534ffe87d3dd41220e0cac43aabaed66318cbdb70b8cbf66988f744f04ead452bbc5
         
     | 
| 
         @@ -12,53 +12,41 @@ module Newshound 
     | 
|
| 
       12 
12 
     | 
    
         
             
                    details = parse_exception_details(exception)
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
                    <<~TEXT
         
     | 
| 
       15 
     | 
    
         
            -
                      *#{number}. #{ 
     | 
| 
      
 15 
     | 
    
         
            +
                      *#{number}. #{details[:title]}*
         
     | 
| 
       16 
16 
     | 
    
         
             
                      • *Time:* #{exception.created_at.strftime("%I:%M %p")}
         
     | 
| 
       17 
17 
     | 
    
         
             
                      #{format_controller(details)}
         
     | 
| 
       18 
     | 
    
         
            -
                      #{format_message( 
     | 
| 
      
 18 
     | 
    
         
            +
                      #{format_message(details)}
         
     | 
| 
       19 
19 
     | 
    
         
             
                    TEXT
         
     | 
| 
       20 
20 
     | 
    
         
             
                  end
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
                  def format_for_banner(exception)
         
     | 
| 
       23 
23 
     | 
    
         
             
                    details = parse_exception_details(exception)
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
                    # Extract message
         
     | 
| 
       26 
     | 
    
         
            -
                    message = if details["message"].present?
         
     | 
| 
       27 
     | 
    
         
            -
                      details["message"].to_s
         
     | 
| 
       28 
     | 
    
         
            -
                    elsif exception.respond_to?(:message) && exception.message.present?
         
     | 
| 
       29 
     | 
    
         
            -
                      exception.message.to_s
         
     | 
| 
       30 
     | 
    
         
            -
                    else
         
     | 
| 
       31 
     | 
    
         
            -
                      +""
         
     | 
| 
       32 
     | 
    
         
            -
                    end
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
                    # Extract location
         
     | 
| 
       35 
     | 
    
         
            -
                    location = if details["controller_name"] && details["action_name"]
         
     | 
| 
       36 
     | 
    
         
            -
                      "#{details["controller_name"]}##{details["action_name"]}"
         
     | 
| 
       37 
     | 
    
         
            -
                    else
         
     | 
| 
       38 
     | 
    
         
            -
                      +""
         
     | 
| 
       39 
     | 
    
         
            -
                    end
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
25 
     | 
    
         
             
                    {
         
     | 
| 
       42 
     | 
    
         
            -
                      title:  
     | 
| 
       43 
     | 
    
         
            -
                      message: message.truncate(100),
         
     | 
| 
       44 
     | 
    
         
            -
                      location: location,
         
     | 
| 
      
 26 
     | 
    
         
            +
                      title: details[:title],
         
     | 
| 
      
 27 
     | 
    
         
            +
                      message: details[:message].truncate(100),
         
     | 
| 
      
 28 
     | 
    
         
            +
                      location: details[:location],
         
     | 
| 
       45 
29 
     | 
    
         
             
                      time: exception.created_at.strftime("%I:%M %p")
         
     | 
| 
       46 
30 
     | 
    
         
             
                    }
         
     | 
| 
       47 
31 
     | 
    
         
             
                  end
         
     | 
| 
       48 
32 
     | 
    
         | 
| 
       49 
33 
     | 
    
         
             
                  private
         
     | 
| 
       50 
34 
     | 
    
         | 
| 
       51 
     | 
    
         
            -
                  def  
     | 
| 
       52 
     | 
    
         
            -
                     
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
                     
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                     
     | 
| 
       57 
     | 
    
         
            -
                      "Unknown Exception"
         
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
      
 35 
     | 
    
         
            +
                  def parse_exception_details(exception)
         
     | 
| 
      
 36 
     | 
    
         
            +
                    body_data = parse_body(exception)
         
     | 
| 
      
 37 
     | 
    
         
            +
                    controller_name = body_data["controller_name"]
         
     | 
| 
      
 38 
     | 
    
         
            +
                    action_name = body_data["action_name"]
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                    {
         
     | 
| 
      
 41 
     | 
    
         
            +
                      title: exception.try(:title).presence || exception.try(:exception_class).presence || "Unknown Exception",
         
     | 
| 
      
 42 
     | 
    
         
            +
                      message: body_data["message"].presence&.to_s || exception.try(:message).presence&.to_s || +"",
         
     | 
| 
      
 43 
     | 
    
         
            +
                      location: (controller_name && action_name) ? "#{controller_name}##{action_name}" : +"",
         
     | 
| 
      
 44 
     | 
    
         
            +
                      controller_name: controller_name,
         
     | 
| 
      
 45 
     | 
    
         
            +
                      action_name: action_name
         
     | 
| 
      
 46 
     | 
    
         
            +
                    }
         
     | 
| 
       59 
47 
     | 
    
         
             
                  end
         
     | 
| 
       60 
48 
     | 
    
         | 
| 
       61 
     | 
    
         
            -
                  def  
     | 
| 
      
 49 
     | 
    
         
            +
                  def parse_body(exception)
         
     | 
| 
       62 
50 
     | 
    
         
             
                    return {} unless exception.respond_to?(:body) && exception.body.present?
         
     | 
| 
       63 
51 
     | 
    
         | 
| 
       64 
52 
     | 
    
         
             
                    JSON.parse(exception.body)
         
     | 
| 
         @@ -67,24 +55,15 @@ module Newshound 
     | 
|
| 
       67 
55 
     | 
    
         
             
                  end
         
     | 
| 
       68 
56 
     | 
    
         | 
| 
       69 
57 
     | 
    
         
             
                  def format_controller(details)
         
     | 
| 
       70 
     | 
    
         
            -
                    return +"" unless details 
     | 
| 
      
 58 
     | 
    
         
            +
                    return +"" unless details in {controller_name: String, action_name: String}
         
     | 
| 
       71 
59 
     | 
    
         | 
| 
       72 
     | 
    
         
            -
                    "• *Controller:* #{details[ 
     | 
| 
      
 60 
     | 
    
         
            +
                    "• *Controller:* #{details[:location]}\n"
         
     | 
| 
       73 
61 
     | 
    
         
             
                  end
         
     | 
| 
       74 
62 
     | 
    
         | 
| 
       75 
     | 
    
         
            -
                  def format_message( 
     | 
| 
       76 
     | 
    
         
            -
                    details  
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
                    # Try to get message from different sources
         
     | 
| 
       79 
     | 
    
         
            -
                    message = if details["message"].present?
         
     | 
| 
       80 
     | 
    
         
            -
                      details["message"]
         
     | 
| 
       81 
     | 
    
         
            -
                    elsif exception.respond_to?(:message) && exception.message.present?
         
     | 
| 
       82 
     | 
    
         
            -
                      exception.message
         
     | 
| 
       83 
     | 
    
         
            -
                    end
         
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
                    return +"" unless message.present?
         
     | 
| 
      
 63 
     | 
    
         
            +
                  def format_message(details)
         
     | 
| 
      
 64 
     | 
    
         
            +
                    return +"" unless details in {message: String}
         
     | 
| 
       86 
65 
     | 
    
         | 
| 
       87 
     | 
    
         
            -
                    message = message.to_s.truncate(100)
         
     | 
| 
      
 66 
     | 
    
         
            +
                    message = details[:message].to_s.truncate(100)
         
     | 
| 
       88 
67 
     | 
    
         
             
                    "• *Message:* `#{message}`"
         
     | 
| 
       89 
68 
     | 
    
         
             
                  end
         
     | 
| 
       90 
69 
     | 
    
         
             
                end
         
     | 
| 
         @@ -9,60 +9,50 @@ module Newshound 
     | 
|
| 
       9 
9 
     | 
    
         
             
                  end
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
                  def format_for_report(exception, number)
         
     | 
| 
       12 
     | 
    
         
            -
                     
     | 
| 
      
 12 
     | 
    
         
            +
                    details = parse_exception_details(exception)
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
                    <<~TEXT
         
     | 
| 
       15 
     | 
    
         
            -
                      *#{number}. #{ 
     | 
| 
      
 15 
     | 
    
         
            +
                      *#{number}. #{details[:title]}*
         
     | 
| 
       16 
16 
     | 
    
         
             
                      • *Time:* #{exception.created_at.strftime("%I:%M %p")}
         
     | 
| 
       17 
     | 
    
         
            -
                      #{format_controller( 
     | 
| 
       18 
     | 
    
         
            -
                      #{format_message( 
     | 
| 
      
 17 
     | 
    
         
            +
                      #{format_controller(details)}
         
     | 
| 
      
 18 
     | 
    
         
            +
                      #{format_message(details)}
         
     | 
| 
       19 
19 
     | 
    
         
             
                    TEXT
         
     | 
| 
       20 
20 
     | 
    
         
             
                  end
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
                  def format_for_banner(exception)
         
     | 
| 
       23 
     | 
    
         
            -
                     
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                    # Extract message
         
     | 
| 
       26 
     | 
    
         
            -
                    message = if exception.respond_to?(:message) && exception.message.present?
         
     | 
| 
       27 
     | 
    
         
            -
                      exception.message.to_s
         
     | 
| 
       28 
     | 
    
         
            -
                    elsif context["message"].present?
         
     | 
| 
       29 
     | 
    
         
            -
                      context["message"].to_s
         
     | 
| 
       30 
     | 
    
         
            -
                    else
         
     | 
| 
       31 
     | 
    
         
            -
                      +""
         
     | 
| 
       32 
     | 
    
         
            -
                    end
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
                    # Extract location from context
         
     | 
| 
       35 
     | 
    
         
            -
                    location = if context["controller"] && context["action"]
         
     | 
| 
       36 
     | 
    
         
            -
                      "#{context["controller"]}##{context["action"]}"
         
     | 
| 
       37 
     | 
    
         
            -
                    else
         
     | 
| 
       38 
     | 
    
         
            -
                      +""
         
     | 
| 
       39 
     | 
    
         
            -
                    end
         
     | 
| 
      
 23 
     | 
    
         
            +
                    details = parse_exception_details(exception)
         
     | 
| 
       40 
24 
     | 
    
         | 
| 
       41 
25 
     | 
    
         
             
                    {
         
     | 
| 
       42 
     | 
    
         
            -
                      title:  
     | 
| 
       43 
     | 
    
         
            -
                      message: message.truncate(100),
         
     | 
| 
       44 
     | 
    
         
            -
                      location: location,
         
     | 
| 
      
 26 
     | 
    
         
            +
                      title: details[:title],
         
     | 
| 
      
 27 
     | 
    
         
            +
                      message: details[:message].truncate(100),
         
     | 
| 
      
 28 
     | 
    
         
            +
                      location: details[:location],
         
     | 
| 
       45 
29 
     | 
    
         
             
                      time: exception.created_at.strftime("%I:%M %p")
         
     | 
| 
       46 
30 
     | 
    
         
             
                    }
         
     | 
| 
       47 
31 
     | 
    
         
             
                  end
         
     | 
| 
       48 
32 
     | 
    
         | 
| 
       49 
33 
     | 
    
         
             
                  private
         
     | 
| 
       50 
34 
     | 
    
         | 
| 
       51 
     | 
    
         
            -
                  def  
     | 
| 
       52 
     | 
    
         
            -
                     
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
                     
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                     
     | 
| 
      
 35 
     | 
    
         
            +
                  def parse_exception_details(exception)
         
     | 
| 
      
 36 
     | 
    
         
            +
                    context_data = parse_context(exception)
         
     | 
| 
      
 37 
     | 
    
         
            +
                    controller = context_data["controller"]
         
     | 
| 
      
 38 
     | 
    
         
            +
                    action = context_data["action"]
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                    {
         
     | 
| 
      
 41 
     | 
    
         
            +
                      title: exception.try(:error_class).presence || "Unknown Exception",
         
     | 
| 
      
 42 
     | 
    
         
            +
                      message: exception.try(:message).presence&.to_s || context_data["message"].presence&.to_s || +"",
         
     | 
| 
      
 43 
     | 
    
         
            +
                      location: (controller && action) ? "#{controller}##{action}" : +"",
         
     | 
| 
      
 44 
     | 
    
         
            +
                      controller: controller,
         
     | 
| 
      
 45 
     | 
    
         
            +
                      action: action
         
     | 
| 
      
 46 
     | 
    
         
            +
                    }
         
     | 
| 
       57 
47 
     | 
    
         
             
                  end
         
     | 
| 
       58 
48 
     | 
    
         | 
| 
       59 
49 
     | 
    
         
             
                  def parse_context(exception)
         
     | 
| 
       60 
50 
     | 
    
         
             
                    return {} unless exception.respond_to?(:context) && exception.context.present?
         
     | 
| 
       61 
51 
     | 
    
         | 
| 
       62 
     | 
    
         
            -
                     
     | 
| 
       63 
     | 
    
         
            -
                     
     | 
| 
      
 52 
     | 
    
         
            +
                    case exception.context
         
     | 
| 
      
 53 
     | 
    
         
            +
                    when Hash
         
     | 
| 
       64 
54 
     | 
    
         
             
                      exception.context
         
     | 
| 
       65 
     | 
    
         
            -
                     
     | 
| 
      
 55 
     | 
    
         
            +
                    when String
         
     | 
| 
       66 
56 
     | 
    
         
             
                      JSON.parse(exception.context)
         
     | 
| 
       67 
57 
     | 
    
         
             
                    else
         
     | 
| 
       68 
58 
     | 
    
         
             
                      {}
         
     | 
| 
         @@ -71,25 +61,16 @@ module Newshound 
     | 
|
| 
       71 
61 
     | 
    
         
             
                    {}
         
     | 
| 
       72 
62 
     | 
    
         
             
                  end
         
     | 
| 
       73 
63 
     | 
    
         | 
| 
       74 
     | 
    
         
            -
                  def format_controller( 
     | 
| 
       75 
     | 
    
         
            -
                    return +"" unless  
     | 
| 
      
 64 
     | 
    
         
            +
                  def format_controller(details)
         
     | 
| 
      
 65 
     | 
    
         
            +
                    return +"" unless details in {controller: String, action: String}
         
     | 
| 
       76 
66 
     | 
    
         | 
| 
       77 
     | 
    
         
            -
                    "• *Controller:* #{ 
     | 
| 
      
 67 
     | 
    
         
            +
                    "• *Controller:* #{details[:location]}\n"
         
     | 
| 
       78 
68 
     | 
    
         
             
                  end
         
     | 
| 
       79 
69 
     | 
    
         | 
| 
       80 
     | 
    
         
            -
                  def format_message( 
     | 
| 
       81 
     | 
    
         
            -
                     
     | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
       83 
     | 
    
         
            -
                    # Try to get message from different sources
         
     | 
| 
       84 
     | 
    
         
            -
                    message = if exception.respond_to?(:message) && exception.message.present?
         
     | 
| 
       85 
     | 
    
         
            -
                      exception.message
         
     | 
| 
       86 
     | 
    
         
            -
                    elsif context["message"].present?
         
     | 
| 
       87 
     | 
    
         
            -
                      context["message"]
         
     | 
| 
       88 
     | 
    
         
            -
                    end
         
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
     | 
    
         
            -
                    return +"" unless message.present?
         
     | 
| 
      
 70 
     | 
    
         
            +
                  def format_message(details)
         
     | 
| 
      
 71 
     | 
    
         
            +
                    return +"" unless details in {message: String}
         
     | 
| 
       91 
72 
     | 
    
         | 
| 
       92 
     | 
    
         
            -
                    message = message.to_s.truncate(100)
         
     | 
| 
      
 73 
     | 
    
         
            +
                    message = details[:message].to_s.truncate(100)
         
     | 
| 
       93 
74 
     | 
    
         
             
                    "• *Message:* `#{message}`"
         
     | 
| 
       94 
75 
     | 
    
         
             
                  end
         
     | 
| 
       95 
76 
     | 
    
         
             
                end
         
     | 
    
        data/lib/newshound/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: newshound
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.2. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.2.3
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Savannah Moore
         
     | 
| 
         @@ -52,6 +52,7 @@ files: 
     | 
|
| 
       52 
52 
     | 
    
         
             
            - README.md
         
     | 
| 
       53 
53 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       54 
54 
     | 
    
         
             
            - TRANSPORT_USAGE.md
         
     | 
| 
      
 55 
     | 
    
         
            +
            - checksums/newshound-0.2.3.gem.sha512
         
     | 
| 
       55 
56 
     | 
    
         
             
            - lib/generators/newshound/install/install_generator.rb
         
     | 
| 
       56 
57 
     | 
    
         
             
            - lib/generators/newshound/install/templates/newshound.rb
         
     | 
| 
       57 
58 
     | 
    
         
             
            - lib/newshound.rb
         
     |