class TwelvedataRuby::Endpoint

Constants

DEFAULT_FORMAT
DEFINITIONS
VALID_FORMATS

Attributes

name[R]
query_params[R]

Public Class Methods

default_apikey_params() click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 172
def default_apikey_params
  {apikey: Client.instance.apikey}
end
definitions() click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 157
def definitions
  @definitions ||= DEFINITIONS.transform_values {|v|
    v.merge(
      parameters: {
        keys: v[:parameters][:keys].push(:apikey),
        required: (v[:parameters][:required] || []).push(:apikey)
      }
    )
  }.to_h
end
names() click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 168
def names
  @names ||= definitions.keys
end
new(name, **query_params) click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 188
def initialize(name, **query_params)
  self.name = name
  self.query_params = query_params
end
valid?(name, **params)
Alias for: valid_params?
valid_name?(name) click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 176
def valid_name?(name)
  names.include?(name.to_sym)
end
valid_params?(name, **params) click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 180
def valid_params?(name, **params)
  new(name, **params).valid?
end
Also aliased as: valid?

Public Instance Methods

definition() click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 193
def definition
  @definition ||= self.class.definitions[name]
end
errors() click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 197
def errors
  (@errors || {}).compact
end
name=(name) click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 201
def name=(name)
  assign_attribute(:name, name.to_s.downcase.to_sym)
end
parameters() click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 205
def parameters
  return @parameters if definition.nil? || @parameters

  params = definition[:parameters]
  params.push(:filename) if params.include?(:format) && query_parameters[:format] == :csv
  params
end
parameters_keys() click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 213
def parameters_keys
  keys = parameters&.send(:[], :keys)
  keys.push(:filename) if keys && query_params && query_params[:format] == :csv
  keys
end
query_params=(query_params) click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 223
def query_params=(query_params)
  if (parameters_keys || []).include?(:format) &&
      !VALID_FORMATS.include?(query_params[:format])
    query_params[:format] = DEFAULT_FORMAT
  end
  query_params.delete(:filename) if query_params[:filename] && query_params[:format] != :csv
  assign_attribute(:query_params, self.class.default_apikey_params.merge(query_params.compact))
end
query_params_keys() click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 219
def query_params_keys
  query_params.keys
end
required_parameters() click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 232
def required_parameters
  parameters&.send(:[], :required)
end
valid?() click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 236
def valid?
  valid_name? && valid_query_params?
end
valid_at_attributes?(*attrs) click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 240
def valid_at_attributes?(*attrs)
  errors.values_at(*attrs).compact.empty?
end
valid_name?() click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 244
def valid_name?
  valid_at_attributes?(:name)
end
valid_query_params?() click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 248
def valid_query_params?
  valid_at_attributes?(:parameters_keys, :required_parameters)
end

Private Instance Methods

assign_attribute(attr_name, value) click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 254
def assign_attribute(attr_name, value)
  @parameters = nil
  @definition = nil
  instance_variable_set(:"@#{attr_name}", value)
  send(:"validate_#{attr_name}")
  send(attr_name)
end
init_error(attr_name, invalid_values, error_klass=nil) click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 262
def init_error(attr_name, invalid_values, error_klass=nil)
  error_klass ||= Kernel.const_get("#{self.class.name}#{Utils.camelize(attr_name)}Error")
  error_klass.new(endpoint: self, invalid: invalid_values)
end
update_errors(attrib, invalids, klass=nil) click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 267
def update_errors(attrib, invalids, klass=nil)
  @errors = errors.merge(attrib => !invalids.nil? && !invalids.empty? ? init_error(attrib, invalids, klass) : nil)
end
validate_name() click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 271
def validate_name
  is_valid = self.class.valid_name?(name)
  invalid_name = name.nil? || name.empty? ? "a blank name" : name
  update_errors(:name, is_valid ? nil : invalid_name)
  validate_query_params if is_valid && query_params && !valid_query_params?
end
validate_query_params() click to toggle source
# File lib/twelvedata_ruby/endpoint.rb, line 278
def validate_query_params
  return update_errors(:required_parameters, "Invalid name", EndpointError) unless parameters_keys

  update_errors(:required_parameters, required_parameters.difference(query_params_keys))
  update_errors(:parameters_keys, query_params_keys.difference(parameters_keys))
end