Class: Pokan::Cluster::Configuration

Inherits:
Yagni::Hash
  • Object
show all
Defined in:
lib/pokan-cluster/configuration.rb

Overview

Class used to hold configuration options for anything. It inherits from Yell::Hash, so that the options are can be passed in a usual Ruby hash. Optionally, you can pass it a string containing your data and an object which responds to the method parse, which will take the data string and build the corresponding hash.

The options passed can be accessed later via the get method, used in the example above (see further details in Pokan::Cluster::Configuration#get)

Usage

# If we wanted to use a YAML configuration file...
# and our file was the following:
# pokan:
#   cluster: "configuration"

class YAMLParser
  def self.parse(data)
    YAML.load(data)
  end
end

c = Pokan::Cluster::Configuration.new(File.read('config.yaml'), YAMLParser)
c.get('pokan.cluster') #=> "configuration"

Instance Method Summary collapse

Constructor Details

#initialize(data, parser = nil) ⇒ Configuration

Creates a new Pokan::Cluster::Configuration object, containing the data passed. It can be either a usual Ruby hash or a String with your data, as long as you provide a parser which responds to the method parse taking the string as parameter and returning the corresponding hash.



37
38
39
40
41
42
43
44
45
46
# File 'lib/pokan-cluster/configuration.rb', line 37

def initialize(data, parser=nil)
  case data
  when Object::Hash
    @data = data
  when String
    @data = load_data(data, parser)
  end

  super(@data)
end

Instance Method Details

#get(query) ⇒ Object

Main method, used to query values from your configuration. It accepts as a parameter a string containing the “path” to reach the data you want.

h = { :max_connections => "10", :proto => { :tcp => true } }
c = Pokan::Cluster::Configuration.new(h)
c.get('max_connections') #=> "10"
c.get('proto.tcp')       #=> "true"


62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/pokan-cluster/configuration.rb', line 62

def get(query)
  step = nil  # contains consequent results of our query
  path = query.split '.'

  path.each { |param| step = send(param.to_sym) }

  step
rescue NoMethodError
  nil
ensure
  reload
end

#load_data(data, parser) ⇒ Object

Loads the data in case a string was passed in the initialization. It actually just calls the method parse on the parser object



50
51
52
# File 'lib/pokan-cluster/configuration.rb', line 50

def load_data(data, parser)
  parser.parse(data)
end