No commit activity in last 3 years
No release in over 3 years
Agnostic collector and generator of async content for Rails apps.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

= 2.2.0
= 9.0.6
= 0.7.0
= 3.6.0

Runtime

>= 3.2
< 6, >= 4.2
 Project Readme

Nexaas::Async::Collector

Build Status Test Coverage Code Climate

Agnostic collector and generator of async content for Rails apps. Used in production in a few Nexaas systems.

This gems is compatible with Ruby 2.3+ (we do not ensure it works in previous versions) and Rails 3.2+.

Prerequisites

The prerequisites of this project are:

  • Sidekiq 4+
  • Redis
  • JQuery 1.0+

Installation

Add this line to your application's Gemfile:

gem 'nexaas-async-collector'

And then run:

$ bundle install

Or install it yourself as:

$ gem install nexaas-async-collector

Usage

  1. Create the file config/initializers/nexaas-async-collector.rb with the following content (edit as you need):
  Nexaas::Async::Collector.configure do |config|
    # Your redis URL. The default value will be the value of yout REDIS_URL env var
    config.redis_url = "redis://test.local"

    # The namespace where you want to store you data within Redis
    config.redis_namespace = 'nexaas_async'

    # The name of the sidekiq queue to be used
    config.queue_name = :high_fast

    # The method that returns the user object (or any other object you want. It must respond to id method)
    config.scope = :current_user

    # The parent class of all nexaas-async-collector controller
    config.parent_controller = "::ActionController::Base"

    # The expiration of the data in seconds
    config.expiration = 600
  end
  1. Add this to your config/routes.rb file:
Rails.application.routes.draw do
  # ...
  mount Nexaas::Async::Collector::Engine => '/nexaas_async_collect'
  # ...
end
  1. Use the view helper to do all the process:
<%= nexaas_async_collect({
  scope_id: scope.id, # (required) the ID of the scope. It ensures only the scope who requested the data will be able to fetch it
  class_name: ModelService, # (required) name of the class
  class_method: :model_method, # (required) name of the class method responsible to generate data
  args: [arg1, arg2], # (optional) arguments to be passed to class method
  instrumentation_context: 'my.custom.instrumentation', # (optional) context of the instrumentation name. It will generate two instrumentation: 'my.custom.instrumentation.start' and 'my.custom.instrumentation.finish'
  expiration: 180 # (optional) this local expiration will overwrite global expiration for this particular data generation
}) %>

Download file

Instead of rendering text or HTML, you can use nexaas-async-collect to generate files, so the user can download it.

If you want to export something to xls file, for example:

<%= nexaas_async_collect({
  scope_id: scope.id, # (required)
  class_name: ModelService, # (required)
  class_method: :model_method, # (required)
  args: [arg1, arg2], # (optional)
  file: {
    content_type: 'application/vnd.ms-excel', # (required) content type of the file
    name: 'reports', # (required) name of the file
    extension: 'xls' # (require) extension of the file
  }
}) %>

This will generate the spinner and it will redirect the user to download the file when it is ready.

Redis configuration

If you are sharing your Redis server between important information (e.g., Sidekiq data) and temporary information (e.g., nexaas-async-collector data), we suggest you to set the maxmemory-policy eviction policy in Redis to volatile-lru or volatile-ttl.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/myfreecomm/nexaas-async-collector. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

After downloading the project and install all gems (through bundler) don't forget to install appraisal gems dependencies:

$ appraisal install

This is necessary to test the code in different versions of Ruby and Rails. To run the full suite of tests:

$ appraisal rake spec

License

The gem is available as open source under the terms of the MIT License.