Rails engine to generate instant reports from adhoc SQL query.
- Export ad-hoc SQL reports in some formats:
- .csv
- .json
- .xlsx
- Persist generated report as local file or in AWS S3
- over Rails 5.1.X
- Nice administration console with rails engine
- Label data substitution
Add this line to your application's Gemfile:
gem 'adhoq'
And then execute:
$ bundle
Or install it yourself as:
$ gem install adhoq
Install migrations
$ bundle exec rake adhoq:install:migrations
$ bundle exec rake db:migrate
Mount it in config/routes.rb
Rails.application.routes.draw do
root to: 'hi#show'
mount Adhoq::Engine => "/adhoq"
end
Edit initialization file in config/initializers/adhoq.rb
Adhoq.configure do |config|
# if not set, use :on_the_fly.(default)
config.storage = [:local_file, Rails.root + './path/to/store/report/files']
config.authorization = ->(controller) { controller.signed_in? }
end
See configuration example in dummy app.
Then restart server and try it out.
Adhoq also provides report generation from SQL string, not from mounted rails engine.
execution = Adhoq::AdhocExecution.new(
'xlsx',
'SELECT "hello" AS name ,"English greeting message" AS description'
)
Adhoq::Reporter.generate(execution) #=> report data
Persistence is also available without engine via Adhoq::Storage::SomeClass#store
.
Below is example that generating report and persist to in Rails application report method.
execution = Adhoq::AdhocExecution.new(
'xlsx',
'SELECT "hello" AS name ,"English greeting message" AS description'
)
storage = Storage::S3.new(
'my-adhoq-bucket',
aws_access_key_id: 'key_id',
aws_secret_access_key: 'access_key'
)
# generate report and store it to S3, returns `key` to get report data
key = storage.store('.xlsx') { Adhoq::Reporter.generate(execution) }
...
storage.get(key) #=> report data
- Fork it ( https://github.com/esminc/adhoq/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