Close Menu
    DevStackTipsDevStackTips
    • Home
    • News & Updates
      1. Tech & Work
      2. View All

      Sunshine And March Vibes (2025 Wallpapers Edition)

      May 17, 2025

      The Case For Minimal WordPress Setups: A Contrarian View On Theme Frameworks

      May 17, 2025

      How To Fix Largest Contentful Paint Issues With Subpart Analysis

      May 17, 2025

      How To Prevent WordPress SQL Injection Attacks

      May 17, 2025

      Microsoft’s allegiance isn’t to OpenAI’s pricey models — Satya Nadella’s focus is selling any AI customers want for maximum profits

      May 17, 2025

      If you think you can do better than Xbox or PlayStation in the Console Wars, you may just want to try out this card game

      May 17, 2025

      Surviving a 10 year stint in dev hell, this retro-styled hack n’ slash has finally arrived on Xbox

      May 17, 2025

      Save $400 on the best Samsung TVs, laptops, tablets, and more when you sign up for Verizon 5G Home or Home Internet

      May 17, 2025
    • Development
      1. Algorithms & Data Structures
      2. Artificial Intelligence
      3. Back-End Development
      4. Databases
      5. Front-End Development
      6. Libraries & Frameworks
      7. Machine Learning
      8. Security
      9. Software Engineering
      10. Tools & IDEs
      11. Web Design
      12. Web Development
      13. Web Security
      14. Programming Languages
        • PHP
        • JavaScript
      Featured

      NodeSource N|Solid Runtime Release – May 2025: Performance, Stability & the Final Update for v18

      May 17, 2025
      Recent

      NodeSource N|Solid Runtime Release – May 2025: Performance, Stability & the Final Update for v18

      May 17, 2025

      Big Changes at Meteor Software: Our Next Chapter

      May 17, 2025

      Apps in Generative AI – Transforming the Digital Experience

      May 17, 2025
    • Operating Systems
      1. Windows
      2. Linux
      3. macOS
      Featured

      Microsoft’s allegiance isn’t to OpenAI’s pricey models — Satya Nadella’s focus is selling any AI customers want for maximum profits

      May 17, 2025
      Recent

      Microsoft’s allegiance isn’t to OpenAI’s pricey models — Satya Nadella’s focus is selling any AI customers want for maximum profits

      May 17, 2025

      If you think you can do better than Xbox or PlayStation in the Console Wars, you may just want to try out this card game

      May 17, 2025

      Surviving a 10 year stint in dev hell, this retro-styled hack n’ slash has finally arrived on Xbox

      May 17, 2025
    • Learning Resources
      • Books
      • Cheatsheets
      • Tutorials & Guides
    Home»News & Updates»CodeSOD: A Ruby Encrusted Footgun

    CodeSOD: A Ruby Encrusted Footgun

    April 1, 2025

    Many years ago, JP joined a Ruby project. This was in the heyday of Ruby, when every startup on Earth was using it, and if you weren’t building your app on Rails, were you even building an app?

    Now, Ruby offers a lot of flexibility. One might argue that it offers too much flexibility, especially insofar as it permits “monkey patching”: you can always add new methods to an existing class, if you want. Regardless of the technical details, JP and the team saw that massive flexibility and said, “Yes, we should use that. All of it!”

    As these stories usually go, that was fine- for awhile. Then one day, a test started failing because a class name wasn’t defined. That was already odd, but what was even odder is that when they searched through the code, that class name wasn’t actually used anywhere. So yes, there was definitely no class with that name, but also, there was no line of code that was trying to instantiate that class. So where was the problem?

    def controller_class(name)
      "#{settings.app_name.camelize}::Controllers".constantize.const_get("#{name.to_s.camelize}")
    end
    
    def model_class(name)
      "#{settings.app_name.camelize}".constantize.const_get("#{name.to_s.camelize}")
    end
    
    def resource_class(name)
      "#{settings.app_name.camelize}Client".constantize.const_get("#{name.to_s.camelize}")
    end
    

    It happened because they were dynamically constructing the class names from a settings field. And not just in this handful of lines- this pattern occurred all over the codebase. There were other places where it referenced a different settings field, and they just hadn’t encountered the bug yet, but knew that it was only a matter of time before changing a settings file was going to break more functionality in the application.

    They wisely rewrote these sections to not reference the settings, and dubbed the pattern the “Caramelize Pattern”. They added that to their coding standards as a thing to avoid, and learned a valuable lesson about how languages provide footguns.

    Since today’s April Fool’s Day, consider the prank the fact that everyone learned their lesson and corrected their mistakes. I suppose that has to happen at least sometimes.

    [Advertisement]
    Keep the plebs out of prod. Restrict NuGet feed privileges with ProGet. Learn more.

    Source: Read More 

    Hostinger
    Facebook Twitter Reddit Email Copy Link
    Previous ArticleHow to Create Ghibli-Inspired Art Videos Using Snapchat?
    Next Article ArchiveKeep keeps your files archived in multiple places

    Related Posts

    News & Updates

    Microsoft’s allegiance isn’t to OpenAI’s pricey models — Satya Nadella’s focus is selling any AI customers want for maximum profits

    May 17, 2025
    News & Updates

    If you think you can do better than Xbox or PlayStation in the Console Wars, you may just want to try out this card game

    May 17, 2025
    Leave A Reply Cancel Reply

    Continue Reading

    Apple Intelligence for iPhone users in China will be heavily censored

    Operating Systems

    Embracing Neurodiversity During Autism Awareness Month

    Databases

    An easy way to experiment with signals

    Development

    Apple and Google Launch Cross-Platform Feature to Detect Unwanted Bluetooth Tracking Devices

    Development

    Highlights

    Development

    MeetKai Releases Functionary-V2.4: An Alternative to OpenAI Function Calling Models

    April 9, 2024

    In the ever-evolving field of artificial intelligence, there is an ongoing effort to develop more…

    Jeremy’s Larabits: Everything You Need to Know About Laravel in 30 Minutes

    May 15, 2024

    Chi-Town’s AI Revolution: Join Perficient at Agentforce World Tour Chicago

    November 11, 2024

    Ransomhub’s Latest Attack Raises Alarms for Industrial Control Systems (ICS) Security

    May 26, 2024
    © DevStackTips 2025. All rights reserved.
    • Contact
    • Privacy Policy

    Type above and press Enter to search. Press Esc to cancel.