class Daru::IO::Base

Base IO Class that contains generic helper methods, to be used by other {Importers::Base} and {Exporters::Base} via inheritence

Public Instance Methods

optional_gem(dependency, version=nil, requires: nil, callback: self.class.name) click to toggle source

Specifies and requires a gem, if the gem is present in the application environment. Else, raises `LoadError` with meaningful message of which dependency to install for which Daru-IO module.

@param dependency [String] A dependency to specify with `gem` command @param version [String] A version range to specify with `gem` command @param requires [String] The gem name to be required, in case it's

different from the dependency name. For example, activerecord
dependency has to be required as `require 'active_record'`

@param callback [Class] The Daru-IO module which is being used currently.

Useful for throwing meaningful `LoadError` message.

@example Requires with dependency

optional_gem 'avro'
#=> true

@example Requires with version and requires

optional_gem 'activerecord', '~> 4.0', requires: 'active_record'
#=> true

@example Raises error with meaningful message

df = Daru::DataFrame.from_json('path/to/file.json')
#=> LoadError: Please install the jsonpath gem, or add it to the
#   Gemfile to use the Daru::IO::Importers::JSON module.
# File lib/daru/io/base.rb, line 33
def optional_gem(dependency, version=nil, requires: nil,
  callback: self.class.name)
  gem dependency, version
  require requires || dependency
rescue LoadError
  version = version.nil? ? '' : " #{version} version"
  raise LoadError,
    "Please install the #{dependency} gem#{version}, "\
    "or add it to the Gemfile to use the #{callback} module."
end