Awesome
Blockhead
Easy marshalling of object attributes.
Installation
Add this line to your application's Gemfile:
gem 'blockhead'
And then execute:
$ bundle
Or install it yourself as:
$ gem install blockhead
Usage
Say you have the following object with some 1:1 and 1:M set of relational attributes:
object = OpenStruct.new(
title: 'Fancy pants',
order_number: 'STORE-1234'
items: [
OpenStruct.new(name: 'ACD', sku: '1234', ...),
]
customer: OpenStruct.new(name: 'Bill Murray', score: 10, ...)
)
And you want to send a different structure to your data warehouse in the format of:
{
name: 'Bill Murray',
order: 'STORE-1234',
items: [
{ name: 'ACD', sku: '1234' }
],
customer: {
score: 10
}
}
To marshal you would just:
schema = Blockhead::Schema.define object do
name -> { object.customer.name } # Accepts procs with object in scope
order_number as: :order # Aliases
items do
name # Simple definitions on collection attributes
sku
end
customer do
score
end
end
schema.marshal #=> { name: 'Bill Murray', order: 'STORE-1234', items: [{ name: 'ACD', sku: '1234' }], customer: { score: 10 } }
Contributing
- Fork it ( https://github.com/vinniefranco/blockhead/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request