class Nard::Appi::Client

Attributes

top_namespace[R]

Public Class Methods

client_for( namespace ) click to toggle source

@!group Methods for DSL

# File lib/nard/appi/client.rb, line 14
def self.client_for( namespace )
  set_top_namespace( namespace )
end
concerns( *namespaces, under: nil ) click to toggle source
# File lib/nard/appi/client.rb, line 18
def self.concerns( *namespaces, under: nil )
  raise ArgumentError unless under.present?
  namespaces.each do | namespace |
    include_concerned_module( namespace, under )
  end
end
new( options = {} ) click to toggle source
# File lib/nard/appi/client.rb, line 64
def initialize( options = {} )
  set_attr_accessors
  set_option_values( options )
end

Private Class Methods

include_concerned_module( namespace, under ) click to toggle source
# File lib/nard/appi/client.rb, line 41
def include_concerned_module( namespace, under )
  require "#{ under }/#{ namespace.to_s.downcase }"

  module_name = under.classify
                     .constantize
                     .const_get( namespace.to_s.capitalize )

  # puts "#{ module_name } is included."
  include module_name
end
set_attr_accessor( option_key ) click to toggle source

@!endgroup

# File lib/nard/appi/client.rb, line 54
def set_attr_accessor( option_key )
  getter_method = option_key.to_sym
  setter_method = "#{ option_key }=".to_sym
  writer = option_key.to_sym
  attr_reader getter_method unless getter_method.in?( instance_methods )
  attr_writer writer unless setter_method.in?( instance_methods )
end
set_top_namespace( top_namespace ) click to toggle source

@!group Private methods for DSL

# File lib/nard/appi/client.rb, line 37
def set_top_namespace( top_namespace )
  @top_namespace = top_namespace
end

Private Instance Methods

set_attr_accessors() click to toggle source
# File lib/nard/appi/client.rb, line 71
def set_attr_accessors
  top_namespace = self.class.top_namespace
  options_keys = top_namespace::OPTIONS_KEYS

  self.class.instance_eval do
    return if @_attr_accessors_defined

    options_keys.each do | option_key |
      set_attr_accessor( option_key )
    end

    @_attr_accessors_defined = true
  end
end
set_option_values( options ) click to toggle source
# File lib/nard/appi/client.rb, line 86
def set_option_values( options )
  options_keys = self.class.top_namespace::OPTIONS_KEYS

  options = self.class
                .top_namespace
                .options
                .merge( options )
                .with_indifferent_access

  options_keys.each do | key |
    send( "#{ key }=", options[ key ] )
  end
end