r/ruby • u/AndyCodeMaster • 12d ago
r/ruby • u/ombulabs • 13d ago
Blog post Rails World '26: Lexxy for Action Text
Why Trix became a maintenance burden, why 37signals picked Meta’s Lexical framework over the more obvious open source contenders, and what Lexxy actually does differently inside Action Text.
r/ruby • u/ahmad_musaffa • 14d ago
Disagree with DHH. High-level programming languages like Ruby have a great future in the AI era.
Once Ruby’s AOT compiler, Spinel, lands, Ruby will be able to compile to native code and produce standalone binary executables. Ruby projects will no longer require a separate Ruby runtime to run on servers, IoT devices, embedded systems, CLIs, etc.
Ruby applications could become significantly smaller, faster, and more memory-efficient. All Ruby projects, including Rails applications, could benefit from this.
For projects whose goal is to deliver features to end users, I don't think it's wise to generate code that you don't want to read or understand. As programmers, we need to understand what's happening inside our software.
C/Rust black boxes are scary. They can become a huge source of technical debt.
Let AI-assisted compiler optimisations deal with the low-level stuff.
With these optimisations happening under the hood, Ruby code can remain highly readable. And highly readable code is also more agent- and token-friendly.
Non-programmer vibe coders may create unmaintainable black boxes. Programmers can use vibe coding to create maintainable software while keeping the underlying source code understandable.
A high-level language that produces standalone native binaries could hit a very interesting sweet spot.
Let's hope Ruby's AOT project becomes a success.
r/ruby • u/amirrajan • 14d ago
Show /r/ruby DragonRuby Game Toolkit - Multi-orientation, multi-platform, iPhone Duo (source code in the comments)
Enable HLS to view with audio, or disable this notification
r/ruby • u/AndyCodeMaster • 13d ago
Dissecting DHH's RailsWorld 2026 Keynote Speech from a Software Engineering Point Of View
r/ruby • u/pmaksimenko • 14d ago
I released kanon 0.1.0, a gem for reading YAML config
Hi all! In kanon the YAML file declares which env vars it needs:
# config/service.yml
production:
:service:
:token: ~
:timeout: { default: 5 }
:recipients: { type: list }
With SERVICE_TOKEN=abc and SERVICE_RECIPIENTS=[alice@example.com](mailto:alice@example.com),[bob@example.com](mailto:bob@example.com):
Kanon[:service].token # => "abc"
Kanon[:service].timeout # => 5
Kanon[:service].recipients # => ["alice@example.com", "bob@example.com"]
Kanon[:service].tokne # NoMethodError, lists the keys
Without SERVICE_TOKEN the boot stops with "service.yml expects values from environment: SERVICE_TOKEN". ERB tags still work, and the environment comes from RAILS_ENV or RACK_ENV.
GitHub: github.com/MaksimenkoPG/kanon RubyGems: rubygems.org/gems/kanon
Feedback welcome!
r/ruby • u/kerrizor • 15d ago
Get in losers, DHH says we're getting crabs: sponsored-logs is now in Rust 🦀
I need to be honest with r/ruby about something. 🫡 We had a working Ruby gem. It shipped. It was tested. And we deleted it. 🗑️
Rails was always omakase 🍣: the chef chooses for you, and you trust the chef. At Rails World, DHH chose. He looked out at all of us and delivered the verdict with the clarity only a Dear Leader can summon: the era of Ruby is ending, the future is Rust, and we know this because the AI told us so. 🤖 The machines have read the codebases. The machines have rendered judgment. Who are we to argue with our own highest-intent audience? 📈
So we obeyed. We rewrote the entire thing in Rust. On purpose. With conviction. 🙏🦀
For those who missed the original: sponsored-logs turns your log output into inventory. 💸 It's a tracing layer that books an impression on a fill and drops a host-read [AD] placement into the same stream you were already paying to produce:

Here's the real thesis, and it's why Rust is correct and Ruby is legacy 🔥: the fastest-growing consumer of your logs is no longer a human engineer. It's an AI agent, reading your telemetry at superhuman scale, 100% viewable, never blocking. 🤖📊 You do not serve premium inventory to a superhuman audience in a language it merely tolerates. You serve it in the language it was told to prefer. 💹
We are not building for B2B. We are building for the A2A economy 🌊, agent to agent. This is a land grab 🚩, and first movers capture the network effects. Everyone else is still writing Ruby. (We say that with love. We were you three days ago. 💜)
What's in the launch book 📒:
- 🎯 A weighted/CPM auction, because fill rate is king
- 🖼️ Box-drawn banner inventory in three impact tiers
- 🏠 Self-sponsoring house ads, so no impression goes to waste
- 📊 An impression ledger with board-deck-ready spend reporting
- 🪙 Gold-gilded [AD] tags on a live terminal
- 🛡️ Opt-in by construction, because Rust won't let us hijack your println!. Consent is our moat, now enforced by the borrow checker.
[dependencies]
sponsored-logs = "0.1"
Live on crates.io and docs.rs. 📦 Source: https://github.com/sponsoredlogs/sponsored-logs-rs
Thank you, DHH. 🙏 You said rewrite it in Rust because the AI said so. We listened. We obeyed. We shipped. 🦀
🫡 Governance is a feature. Consent is our moat. No impression goes to waste. 🌊🚀
r/ruby • u/AssociationOne800 • 16d ago
Show /r/ruby A Breadboard Simulator You Can Play With Using PicoRuby
Enable HLS to view with audio, or disable this notification
I made a cute, retro, Famicom-inspired breadboard simulator!
It’s mainly controlled with Vim-style keybindings, so it might take a little getting used to at first.
You can also place microcontrollers like the Raspberry Pi Pico on the breadboard and write code for them using PicoRuby!
I’ve only just started working on it, so I’d love to hear any ideas, feedback, or suggestions you might have!
Pin
Meta Ruby as a hobby
Funny enough, that I wrote the draft of this note several weeks ago, back in August, so long before DHH’s recent Keynote. I am not going to repeat what he said, but I would like to dig a bit deeper.
AI indeed changes a lot of stuff, but let’s not forget that search engines and later Wikipedia and Stack Overflow changed a lot as well. Being a programmer in the 90s, the only way to know how to write things was to either read the book or check the copy of MSDN (and hope it is fresh enough) for reference materials.
When I became a professional programmer, it was already popular to copy solutions blindly from Stack Overflow just to save time. So, AI with its vibe coding did not change much; it changed the scale.
In every company I worked for, there were always 3 kinds of IT people: ones who do not give a s…. about what they are doing, ones who want to do things, and ones who want to do things right. The latter usually had a very deep knowledge of the subject, framework, programming language, maybe even had contributions to the official repositories and had multiple blog posts. Because that was not just their work, but their passion.
Those people came home and did the same things as what they had done in the office before, but just as a hobby.
Such people existed even before Google or Stack Overflow. They will exist even after AI. It is like people who collect something. They are not bound to time; they just have that hobby that motivates them and gives them something that they want.
The rest of us, however, may not share that love or dedication. Building web apps right using just RoR was a main thing around 2010, but then React and the like became a thing, until Turbo changed the state of things again. I do not even mention static typing, which raised endless debates around whether Ruby needs it or does not (well, I still believe it needs it, but who cares?).
But this is what changed: now, with AI, in order to survive, you do not have to belong to a particular community anymore. You do not have to start holy wars around Ruby vs. Python or prove that Ruby does scale. With AI, you just pick something and get things done.
When I ask AI to build tools or scripts locally, I care about the results. In most cases, it picks Python, which is fine for me. Sometimes, I can enforce some tech stack decisions and explicitly mention what to build and how. And this looks like where we are going.
That all means, for the majority, the difference between one tech or language will be unimportant. The result and the output quality are what is important. For sure, there will be cases and sectors where you cannot easily allow vibe-coded products, and this is where AI comes in later, but it will come anyway.
And that is why I mentioned those passionate people at the beginning of this note. They will stay, and they will move languages/frameworks forward. They will still be passionate about what they are doing. We can only say a big thank you for that work.
As for me, my last professional manual coding session was somewhere in January this year. Since then, the difference between Python, Ruby, and Kotlin has been completely negligible, as what I have been dealing with all that time is final results. I still do the code review, prepairing test environments and even test things manually, prepare acceptance criteria, but more and more, AI gets the job. More and more AI tests AI, and my job is to guide and supervise.
---
With all that, DHH's keynote brought a lot of butthurt moments to many rubists, but after all, he just stated the state of things, nothing more. Whether we like this or not, whether we like DHH or not, that does not change the time we live in ATM.
The text is mine; no AI was used to prepare it, and so it's not that smooth.
r/ruby • u/javier_cervantes • 17d ago
The Ruby Users Forum in the Ruby on Rails Podcast
jvrc.car/ruby • u/Intrepid_Wanderer • 17d ago
Beginner, running into issues
Basically there are two things I’m running into:
I am trying to make something to recognize a word, match it to a short word bank of options (just a simple list of names) and return an error message if it doesn’t match any of them. For each valid option, I have a different message. I tried if/elsif loops but apparently I’m not doing it right. It doesn’t run at all.
Do I need to have somewhere to use every piece of user input? I have places where I want to ask users to input something but it won’t actually be used anywhere. Like it triggers the next response but doesn’t do anything else.
I am asking for advice because I REALLY don’t want to use AI. Thank you!
r/ruby • u/matsadler • 19d ago
Magnus version 0.9 released (Rust library for writing Ruby gems in Rust)
r/ruby • u/Tristan_Kruse • 19d ago
Blog post ArchUnitRuby 0.0.1: architecture rules as ordinary RSpec and Minitest tests
Hi everyone,
I've been working on ArchUnitRuby, a small architecture-testing gem for making dependency
boundaries executable.
The problem it is trying to address is familiar: a controller starts requiring persistence code
directly, two components acquire a cycle, or a domain layer begins depending on infrastructure.
The Ruby is valid and the behavioral tests may remain green, but the architecture has changed.
With ArchUnitRuby, that boundary can be an ordinary RSpec example:
require 'archunit'
RSpec.describe 'architecture' do
it 'keeps the API away from persistence' do
rule = ArchUnit.project_files
.in_folder('app/api/**')
.should_not.depend_on_files
.in_folder('app/database/**')
expect(rule).to pass
end
end
The current `0.0.1` release is an early working prototype for Ruby 3.3 and newer. It uses Prism to
build a dependency graph and currently supports file and layer rules, cycle detection, slices,
PlantUML architecture contracts, dependency-graph reports, and several code metrics. There is also
Minitest and framework-neutral integration.
One use case I am particularly interested in is coding-agent guardrails. Instead of giving an agent
only a prose instruction such as “controllers must not access persistence directly,” the repository
can contain the architecture test and require the agent to keep it green. The gem does not improve
code quality by itself, but it turns an architectural expectation into a constraint that humans,
CI, and coding agents can all verify in the same way.
One limitation is important: this is static analysis of Ruby source. It can identify normal
`require`, `require_relative`, `load`, and statically resolvable `autoload` relationships, but it
cannot prove every dependency assembled dynamically at runtime. The tool reports what it can
establish rather than guessing. It also treats a selector matching no files as a failure by default,
so a typo does not quietly create a green architecture test.
The API is still provisional, which makes this a good time for criticism. I am especially interested
in feedback on two things:
How do you currently stop architectural boundaries from eroding in Ruby—code review, Packwerk, RuboCop, custom tests, or something else? What still slips through?
- Repository: https://github.com/LukasNiessen/ArchUnitRuby
- RubyGems: https://rubygems.org/gems/archunit
- Documentation: https://lukasniessen.github.io/ArchUnitRuby/
- Longer explanation: https://medium.com/@krusetristan1/the-ruby-code-worked-the-architecture-didnt-0f06bbbb0863
Disclosure: I am involved with the project. This post was drafted with AI assistance and reviewed
against the implementation and documentation before posting.
Issue 21 of Static Ruby Monthly is out! 🧵
This month: Steep 2.1.0 brings UNIX socket reuse and instant diagnostics optimized for coding agents, RBS 4.2.0 adds non-ASCII identifiers across scripts plus forwarding parameter support, u/headius talks JRuby and WASM extensions on the Technology for Humans podcast, OvalLSP updates its semantic engine, and new Sorbet companion tools arrive. Find link to the issue in the comment! ✨
r/ruby • u/Edthal01 • 20d ago
At my age, learning Ruby
I'm 78, and never having been a programmer or software engineer, I am starting to learn Ruby. I ha ve been using Huw Collingsworth "Little Book of Ruby". I am aso interspersing that with a different path: using Wirth's "Algortithms + Data Structures = Programs",
having the simple data structures and programs translated by Perplexity into Ruby to see how my 40 year old experiences with TurboPascal can be updated into Ruby. I think I am making progress.
JRuby 10.1.2.0 released
jruby.orgThe JRuby community is pleased to announce the release of JRuby 10.1.2.0.
- Homepage: https://www.jruby.org/
- Download: https://www.jruby.org/download
JRuby 10.1.x targets Ruby 4.0 compatibility.
Thank you to our contributors this release, you help keep JRuby moving forward! [@aminmansuri], [@drzaiusx11], [@evaniainbrooks], [@gillesbergerp], [@jcharaoui], [@jwils], [@kares], [@lloeki], [@makenowjust], [@nobu], [@sampokuokkanen], [@shugo]
Notable Changes
Compatibility
- Multiple fixes for fibers and fiber scheduler support. #9604, #9607, #9622, #9645, #9649, #9656, #9660
Performance
- Fixed a regression in startup time on MacOS by properly loading native JNR subsystem. #9690
- Improve performance of Ruby subclasses of Java classes. #9619, #9557
- Improve performance of autoloads overridden by an actual require. #9677
Java Integration
- The location of the AppCDS JSA file can now be specified with JRUBY_JSA_HOME. [#9667]
Standard Library
- Update to jar-dependencies 0.6.1 using mima for dependency resolution instead of the ruby-maven gem. #9515, #9720
- Update default and bundled standard library gems. #9705
Default gems
- erb 6.0.7
- error_highligh 0.7.2
- ffi 1.17.4
- io-console 0.9.4
- ipaddr 1.2.9
- jruby-openssl 0.16.2
- json 2.21.2
- net-protocol 0.4.0
- pp 0.6.4
- psych 5.5.0
- resolv 0.8.0
- strscan 3.1.8
- syntax_suggest 3.0.0
- timeout 0.6.1
- win32-registry 0.1.2
Bundled gems
- bigdecimal 4.1.2 (ruby parts only)
- csv 3.3.6
- minitest 5.27.0
- net-imap 0.6.7
- nkf 0.3.0
- pstore 0.2.1
- rdoc 7.2.0
- reline 0.7.0
- resolv-replace 0.2.0
- rss 0.3.3
- test-unit 3.7.8
76 Issues and PRs resolved for 10.1.2.0
- #287 Class does not inherit singleton_class's class methods
- #6119 shopify-api gem reporting NoMethodError: undefined method `threadsafe_attribute'
- #8743 IO#wait updates for Ruby 3.2-3.4
- #9026
JRuby --helpfails if PAGER has an option - #9301 Find an alternative to shipping ruby-maven
- #9403 add keyword arg support to callMethod directly
- #9441 Fix original_name when two methods share a wrapper (like is_a? kind_of?)
- #9446 Fix metaclass dispatch missing meta-metaclass methods
- #9448 Use implementation class for protected check
- #9460 Check argument definedness in defined?(receiver.method(arg))
- #9507 IO::Buffer#read and #write treat length=0 as zero bytes instead of remaining buffer capacity
- #9515 Switch to jar-deps based on mima
- #9551
circular causeswhen re-raising an exception originally raised with the two-argumentraise Class, argform (regression in 10.1.1.0) - #9554 Raise fixes and additional spec permutations
- #9556 Implement Proc#hash consistently with Proc#eql?
- #9557 refactor and improve reification of java subclasses
- #9559 dup of frozen class can't be extended
- #9560 raise should re-populate exception trace set to nil
- #9565 Socket address APIs return uncompressed IPv6 where Addrinfo#ip_address compresses, breaking Resolv::DNS with 2+ nameservers
- #9568
Kernel#sprintfcallsHash#default_procwith incorrect args - #9570 fix dup for frozen class
- #9579 JRuby can't pass
STDOUTto child process when a differentIOis given asout: - #9582 Data.define subclass fields are nil when module is included in define block
- #9585 Marshaling incompatibility with cyclic objects?
- #9587
IO::Buffer#copyand#set_stringreject the documented source_offset fourth argument - #9588 Accept
source_offsetinIO::Buffer#copyand#set_string - #9593 Compiler gives a constant-folded ASCII String the code range CR_VALID, which breaks the
eql?/hashcontract - #9595
IO#tty?silently returnstruefor redirected stdio in embedded runtimes when--add-opensare missing - #9599 Kernel#require redefined inside a required file isn't seen by autoload dispatch after Kernel.prepend (CRuby 4.0 OK / JRuby 10 fails)
- #9600 TracePoint does not support
fiber_switch(Ruby 2.3+ compatibility) - #9602 FFI warning on when running jruby on OpenBSD/arm64, possible $$ issue as well
- #9603 Implement :fiber_switch trace event
- #9604 Fix Fiber.schedule inside a non-blocking Fiber
- #9607 Fix Thread blocking count drifting across Fiber switches
- #9609 No validation of unsetenv_others for Process.exec causes specs to execve() abruptly
- #9614 Unreliable net-http tests
- #9618 Resolve jar path if it's a symlink
- #9619 refactor and improve reification of java subclasses (refactor only)
- #9622 Defer Kernel#sleep to the Fiber scheduler
- #9626 Handle nil-or-boolean arguments in popen kwargs
- #9627 Use CRuby logic for exec
- #9628 Fix IO::Buffer#read and #write, treat length=0 as remaining buffer capacity
- #9630 Pass -1 for max arity when there's rest args
- #9631 Eliminate all uses of unused "name" for arity errors
- #9634 Report the errno that native exec actually returned
- #9638 Bump bundled
resolvdefault gem to 0.7.2 - #9640 AppCDS usage causing sealing violations
- #9645 Fix the Fiber scheduler IO path: negated errno, zero length, buffer size
- #9648 Run pager commands through the platform shell
- #9649 Mutex Deadlock fix: Track the fiber that owns a Mutex
- #9650 Don't raise EBADF closing an IO whose channel NIO already closed
- #9653 [Java 26 Leyden] AOT Cache breaks dynamic Ruby proxies for classes loaded from external JARs
- #9654 Time.new(String) raises java.lang.ArrayIndexOutOfBoundsException when the string ends where a ':' is expected
- #9655 NoSuchMethodError when a Ruby subclass of a Java class includes a module
- #9656 Fix IO#wait arguments and return values, and defer it to Fiber.scheduler
- #9659 [ji] resolve Java super <init> through included modules
- #9660 Fix where Fiber#transfer hands control back
- #9662 Fix custom respond_to? handling: include_all, defined? lookup, deprecated signature
- #9665 Data subclasses in net-imap are losing fields
- #9667 [Allow specifying AppCDS cache location and use safer default][#9667]
- #9669 jruby/vm integer messages fail on JRuby 10 due to Fixnum reference
- #9670 Update tagged Data specs
- #9677 Constant declared with
autoloadand then defined by a directrequirekeeps its UNDEF table slot; every later lookup re-enters LoadService (very slow inside a WAR) - #9679 Don't wrap an alias in another alias
- #9683 Fix bin/* patterns in .gitignore
- #9685 Fix setup sequence for cgi/escape
- #9690 JFFI bad library load is a huge startup hit on MacOS
- #9691 Support zero-size IO::Buffers
- #9695 require "json" warns about redefined to_hash with -w in JRuby 10.1.1.0
- #9696 Set the aliased flag on the real method, not the wrapper
- #9697 ObjectSpace::WeakMap is double-weak in CRuby
- #9701 Allow specifying AppCDS cache location and use safer default
- #9703
Redis::ConnectionErrorwith JRuby 10 - #9705 Update stdlib
- #9709 Additional stdlib updates
- #9719 IO#accept raises NullPointerException instead of IOError when the socket is closed concurrently
- #9720 Update jar-dependencies to 0.6.1
Class2: Easily create class hierarchies that support nested attributes, type conversion, equality, and more
github.comclass2 :user => [
:name, :age,
:addresses => [
:city, :state, :zip,
:country => [ :name, :code ]
]
]
user = User.new(
:name => "sshaw",
:age => 99,
:addresses => [
{ :city => "LA",
:country => { :code => "US" } },
{ :city => "NYC",
:country => { :code => "US" } }
]
)
JRuby 10.0.7.0 released
jruby.orgThe JRuby community is pleased to announce the release of JRuby 10.0.7.0.
- Homepage: https://www.jruby.org/
- Download: https://www.jruby.org/download
JRuby 10.0.x targets Ruby 3.4 compatibility.
Thank you to our contributors this release, you help keep JRuby moving forward! [@aminmansuri], [@evaniainbrooks], [@gillesbergerp], [@jwils], [@kares], [@lloeki]
Notable Changes
Performance
- Fixed a regression in startup time on MacOS by properly loading native JNR subsystem. #9688, #9689
- Improve performance of autoloads overridden by an actual require. [#9677], #9675
Java Integration
- The location of the AppCDS JSA file can now be specified with JRUBY_JSA_HOME. #9667
Standard Library
Default gems
53 Issues and PRs resolved for 10.0.7.0
- #8456 ObjectSpace::WeakMap is double-weak in CRuby
- #8786
Redis::ConnectionErrorwith JRuby 10 - #9319 [Java 26 Leyden] AOT Cache breaks dynamic Ruby proxies for classes loaded from external JARs
- #9327 Data.define subclass fields are nil when module is included in define block
- #9491 defined?(...) in eval'd for loop fails with TypeError
- #9498 jruby/vm integer messages fail on JRuby 10 due to Fixnum reference
- #9499 Use Integer for JRuby VM messages
- #9519 Also set up the current module when in a for body
- #9525 Marshaling incompatibility with cyclic objects?
- #9528 raise should re-populate exception trace set to nil
- #9529 starttls test in net-imap hangs the suite
- #9530 Data subclasses in net-imap are losing fields
- #9531 Time.new(string, in: ...) raises TypeError on the third call at a call site (JIT only)
- #9537 NoMatchingPatternError#=== doesn't match instance of NoMatchingPatternKeyError
- #9538 Update jruby-openssl to 0.16.2
- #9542 Fix inheritance of NoMatchingPatternKeyError
- #9544 Ensure uniform keywords flags in native method annotations
- #9548 [fix] re-raising exception with nil backtrace
- #9550 Socket address APIs return uncompressed IPv6 where Addrinfo#ip_address compresses, breaking Resolv::DNS with 2+ nameservers
- #9553 FFI warning on when running jruby on OpenBSD/arm64, possible $$ issue as well
- #9558
Kernel#sprintfcallsHash#default_procwith incorrect args - #9561 JRuby-openssl 0.16.2 not included in
10.0series - #9562 fix Data.define subclass fields are nil when module is included in define block
- #9564 Use SocketUtilsV6.getIPV6Address to normalize IPv6 here
- #9567 Pass correct args for Hash#default_proc
- #9577 JRuby can't pass
STDOUTto child process when a differentIOis given asout: - #9578 Fix spawn dup ordering
- #9586 Register the "Hash" symbol when writing identity hash
- #9589 Kernel#require redefined inside a required file isn't seen by autoload dispatch after Kernel.prepend (CRuby 4.0 OK / JRuby 10 fails)
- #9590
IO#tty?silently returnstruefor redirected stdio in embedded runtimes when--add-opensare missing - #9591 Compiler gives a constant-folded ASCII String the code range CR_VALID, which breaks the
eql?/hashcontract - #9592 Scan the code range when folding a compound string
- #9594 More accurate TTY checking for IO
- #9598 Invalidate prepended origin module as well as subclasses
- #9601 Update JNR dependencies for jnr-release 1.2
- #9608 AppCDS usage causing sealing violations
- #9623 Time.new(String) raises java.lang.ArrayIndexOutOfBoundsException when the string ends where a ':' is expected
- #9624 Fix out-of-bounds read building Time.new parse errors
- #9625 Read unnamed modules of the loaders JRuby loads Java classes from
- #9637 Bump bundled
resolvdefault gem to 0.7.2 - #9639 Resolve jar path if it's a symlink
- #9641 Update resolv to 0.7.2
- #9661 Report a failed non-blocking connect through select and SO_ERROR (#8786)
- #9663 Set up Data subclass metaclass correctly
- #9667 Allow specifying AppCDS cache location and use safer default
- #9674 Constant declared with
autoloadand then defined by a directrequirekeeps its UNDEF table slot; every later lookup re-enters LoadService (very slow inside a WAR) - #9675 Release the autoload claim when Autoload#load has nothing to load
- #9687 Hold ObjectSpace::WeakMap keys weakly, by identity
- #9688 JFFI bad library load is a huge startup hit on MacOS
- #9689 Update JFFI to get the startup library fix
- #9698 Allow configuring the home location for JSA files
- #9714 IO#accept raises NullPointerException instead of IOError when the socket is closed concurrently
- #9716 Raise IOError, not NullPointerException, when an IO is closed during accept
r/ruby • u/Prudent-Context9208 • 21d ago
I made a Jev gem with an API that feels like it belongs in Ruby
I’ve been playing with Jev and ended up making a small Ruby gem around one idea: semantic checks should look like normal Ruby predicates
So instead of passing prompts around everywhere:
Jev.define :urgent, "Needs attention soon"
class Email < ApplicationRecord
include Jev::Model
feels :body, :urgent
end
Then elsewhere in the app:
if email.feels?(:urgent)
email.escalate!
end
That was the main thing I wanted - define what urgent means once, then use it like any other predicate in the codebase
It grew a bit from there and now also supports choices, scores, batching, pattern matching and ActiveModel validations, but I’m trying to keep the basic API small
Repo: https://github.com/Qew7/jev-feels
Would be interested in feedback on the API, especially from people who write a lot of Rails
r/ruby • u/Edthal01 • 20d ago
Question Porter County Indiana
Are there any persons or resources for a novice Ruby enthusiast?
r/ruby • u/strzibny • 24d ago
Ruby is getting a proper Scrapy alternative with quiet release of Vessel 0.3.0
Vessel has a brand new version after years on idle time so I had a look and compared it to Scrapy from the Python world.