Comments (7)
Starting with values
sounds like a good idea. I'm not sure how large is the need for a type validation compared to predefined values.
I think a PR for the above would be super valuable and solve 99% of the scenarios.
💯
from hashie.
That sounds like a good custom subclass. Would you be interested in trying to implement it and submit a pull request?
from hashie.
I'll take a peek into it.
from hashie.
Bump.
from hashie.
I think this can be a new feature for Dash
property :gender, values: [:male, :female, :meat_popsicle]
from hashie.
Should this be implemented as a validation instead? It would serve the 2 examples above, but also open to other validations in the future.
property :gender, validate: { within: [:male, :female, :meat_popsicle] }
property :age, validate: { within: age_range }
property :hair_color, validate: { with: ->(colour) { hex_color? } }
from hashie.
Feel like an overkill because validate
serves no other purpose than wrap with
vs. within
vs. something else and creates unnecessary mental overhead. For the first two we can make it equally predictable with a single keyword, values:
.
property :gender, values: [:male, :female, :meat_popsicle]
property :age, values: 1..150 # a Range
I think a PR for the above would be super valuable and solve 99% of the scenarios.
The other half of this problem is that you don't always want values, but types. So I'd want
property :possible, type: Boolean
property :offset, type: Integer
The third, color
, gets is a bit tricky, I think I'd want something more OO, which lets me define higher level classes, and would borrow from Grape, which is battle tested on this type of checks, extensibility, etc. It could look like this:
class Color
attr_reader :value
def initialize(color)
@value = color
end
def self.parse(value)
fail 'Invalid color' unless hex_color?(value)
new(value)
end
def hex_color?(value)
# ...
end
end
property :hair_color, type: Color
Thinking out loud we would really want the entire coercion, types, checks system that is implemented in Grape using dry-types. Maybe as a separate gem even.
Thoughts?
from hashie.
Related Issues (20)
- Problem flattening multiple nested properties via Trash HOT 3
- Release v. next HOT 2
- Integer key upsets Hashie::Mash with SymbolizeKeys extension HOT 16
- Slice doesn't work using symbols HOT 5
- I got in dev a failing test from master, how to properly setup? HOT 5
- RFC: Switch to Github Actions for CI HOT 3
- Multiple Trash properties that use the same key from a source hash HOT 3
- Undefined quiet method HOT 4
- New Release? HOT 3
- Behavior change in accessing Mash values in 5.0 release HOT 5
- [Informative] `deep_symbolize_keys` broken in Rails 7 with `Mash` HOT 7
- [Question] Why use :to_sym in Hashie::Mash#convert_key HOT 1
- Release version 5 HOT 1
- Memory leak possible HOT 5
- DeepMerge changes ActiveRecord instance HOT 2
- Trash warning when translating string to symbol
- Mash.load is insecure HOT 5
- Including MethodAccessWithOverride in Hashie::Mash breaks dup method
- PredefinedValues is undefined ... :( HOT 1
- Can't call to_hash with nested `Sequel::Postgres::JSONBHash` HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from hashie.