md_data
An easy notation for describing multidimensional data.
For example:
1994
BuenosAires
Coal
19t
Potassium
5t
1995
BuenosAires
Coal
8t
Potassium
6t
Can be written down as:
class MaterialConsumption
include MdData
dimension :year, [:year_1994, :year_1995]
dimension :city, [:buenos_aires, :zagreb]
dimension :material, [:coal, :potassium]
table_data do
context 'year_1994 && buenos_aires' do
add '8t', 'coal'
add '5t', 'potassium'
end
context 'year_1995 && buenos_aires' do
add '8t', 'coal'
add '5t', 'potassium'
end
end
end
MaterialConsumption.select(:year => :year_1994, :city => :buenos_aires, :material => :coal) #=> '8t'
Usage
By defining dimensions you get helper methods that can be used in 'context' and 'add' conditionals.
context 'year_1994 && buenos_aires' do
add '8t', 'coal'
end
Equals
context 'year == :year_1994 && city == :buenos_aires' do
add '8t', 'material == :coal'
end
Important thing here is that this is still just Ruby in quotes. You can add any conditionals that you need while you still have basic scenario covered and simplified.
Usage
For any type of ruled based querying, when you want to pull out specific data based on attributes and rules.
Installation
Add this line to your application's Gemfile:
gem 'md_data'
And then execute:
$ bundle
Or install it yourself as:
$ gem install md_data
Limitations
- No nested context allowed(yet)
- Tests for mis formed data definition
- Support for same dimension instance value and resolving of ambiguity
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Added some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request