#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.
Add this line to your application's Gemfile:
gem 'md_data'
And then execute:
$ bundle
Or install it yourself as:
$ gem install md_data
- No nested context allowed(yet)
- Tests for mis formed data definition
- Support for same dimension instance value and resolving of ambiguity
- 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