Comments (3)
hey, you can achieve that using just plain Ruby, no need for special constructs:
class User < Shale::Mapper
attribute :gender, Shale::Type::String
def gender
if super == 'f'
'female'
else
'male'
end
end
end
although this behavior is confusing, the JSON doc you generate will be different then the one you're consuming (unless that's what you specifically need):
puts User.from_json('{"gender":"m"}').to_json
# => {"gender":"male"}
The proper way to solve this imo is to use custom type:
class Gender < Shale::Type::Value
def self.of_json(value, **)
value == 'm' ? 'male' : 'female'
end
def self.as_json(value, **)
value == 'male' ? 'm' : 'f'
end
end
class User < Shale::Mapper
attribute :gender, Gender
end
This works as you would expect:
user = User.from_json('{"gender":"m"}')
puts user.gender
# => male
puts user.to_json
# => {"gender":"m"}
from shale.
Since I'm only parsing a json and not to converting to it back, I am gonna override the method like you showed:
class User < Shale::Mapper
attribute :gender, Shale::Type::String
def gender
if super == 'f'
'female'
else
'male'
end
end
end
Would you accept a PR describing this behaviour with its caveat on README?
from shale.
having that in README would be a great addition, PR is welcome
from shale.
Related Issues (20)
- XML tag without content HOT 2
- CSV support on a released version HOT 5
- Nested data in CSV HOT 11
- Mixin over inheritance HOT 1
- render_nil as a global setting HOT 5
- shalerb.org is crashing chrome HOT 2
- command line for converting between types HOT 2
- Cutting new release? HOT 3
- Polymorphic Types HOT 2
- Compiling a JSON schema -> Ruby fails when there are relative path $refs in the schema HOT 1
- Selecting columns while importing CSV HOT 1
- Idea for better rails/ActiveRecord integration HOT 2
- Allow more JSON Schema keywords HOT 1
- Ox adapter XML to object mapper not working with xml header specified HOT 2
- csv was loaded from standard library warning HOT 1
- Ability to pass options to YAML options HOT 1
- Allow customization of JSON schema $defs key and $ref HOT 4
- JSON map attributes are ignored when calling `as_json` HOT 2
- Add RBS type signature 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 shale.