ContractedValue
contracts.ruby
ContractedValue | contracts.ruby | |
---|---|---|
1 | 5 | |
6 | 1,441 | |
- | - | |
5.3 | 1.4 | |
7 months ago | about 1 year ago | |
Ruby | Ruby | |
MIT License | BSD 2-clause "Simplified" License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
ContractedValue
-
Cells - Introduction
Above implemented via my own gem contracted_value and feel free to swap it with any other value object implementation which can be gems or your own code.
contracts.ruby
-
A few words on Ruby's type annotations state
I had written a code contracts library for Ruby about 10 years ago [1]. I stopped working on it, mainly because it only provided runtime type checking, and I wanted static type checking. Nowadays my main language is typescript. I miss ruby, but can't give up the static typing that typescript provides. I really wish Ruby had a type system with the same level of support. VSCode has phenomenal TS support, and there's a community adding types to projects [2]. This is something I'd like for Ruby also.
> An integral part of this informality is relying on Matz’s taste and intuition for everything that affects the language’s core.
I think a more defined process would mean a better future for Ruby and Ruby developers.
- [1] https://github.com/egonschiele/contracts.ruby
- [2] https://github.com/DefinitelyTyped/DefinitelyTyped
-
Why I Stopped Using Sorbet in All My Ruby Projects
Contracts gem can be a nice middle-ground. It has a fairly readably syntax and only checks method inputs and outputs at runtime. We use it to annotate important core methods, while leaving the rest type-free.
-
Should gems support old Ruby versions like 2.4?
For example contracts gem needs to have a separate version/branch for ruby 3.x due to the breaking change above
-
Cells - Introduction
This gives me access to input values as long as I defined them via attr_reader. Oh what's the Contract XXX above attr_reader? They are from contracts.ruby and completely optional and won't be explained in this post. You can safely ignore those and maybe study that gem later.
What are some alternatives?
dry-struct - Typed struct and value objects
Fundamental Ruby - :books: Fundamental programming with ruby examples and references. It covers threads, SOLID principles, design patterns, data structures, algorithms. Books for reading. Repo for website https://github.com/khusnetdinov/betterdocs
ActiveAttr - What ActiveModel left out
fast-ruby - :dash: Writing Fast Ruby :heart_eyes: -- Collect Common Ruby idioms.
Ruby style guide - A community-driven Ruby coding style guide
Rails style guide - A community-driven Ruby on Rails style guide
Best-Ruby - Ruby Tricks, Idiomatic Ruby, Refactoring and Best Practices
RSpec style guide - RSpec Best Practices
Functional Ruby
rbs_rails
Cells - View components for Ruby and Rails.
dd-trace-rb - Datadog Tracing Ruby Client