Class: HDOC::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/1hdoc/core/configuration.rb

Overview

Provides methods for read configuration options by a file. By default, it uses YAML as configuration file’s parser.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(file_path, file_parser = YAML) ⇒ Configuration

Returns a new instance of Configuration.



25
26
27
28
29
# File 'lib/1hdoc/core/configuration.rb', line 25

def initialize(file_path, file_parser = YAML)
  @file_path = File.expand_path(file_path)
  @file_parser = file_parser
  @options = load_options
end

Instance Attribute Details

#file_pathObject (readonly)

Returns the value of attribute file_path.



6
7
8
# File 'lib/1hdoc/core/configuration.rb', line 6

def file_path
  @file_path
end

#optionsObject (readonly)

Returns the value of attribute options.



6
7
8
# File 'lib/1hdoc/core/configuration.rb', line 6

def options
  @options
end

Class Method Details

.init(file_path, file_parser = YAML, **options) ⇒ Object

Initializes a new configuration file with a set of defaults options:

“‘ # Using a custom format Configuration.init(’~/package.json’, JSON, name: ‘howsweather’, version: ‘0.1.4’)

# Using default format Configuration.init(‘~/.1hdoc.yml’, day: 0, last_commit_on: Time.now) “‘



18
19
20
21
22
23
# File 'lib/1hdoc/core/configuration.rb', line 18

def self.init(file_path, file_parser = YAML, **options)
  file_path = File.expand_path(file_path)
  dumped_options = file_parser.dump(options)

  File.open(file_path, 'w') { |config| config.puts(dumped_options) }
end

Instance Method Details

#load_optionsObject



31
32
33
34
# File 'lib/1hdoc/core/configuration.rb', line 31

def load_options
  raise "Unable to find #{file_path}" unless File.exist? file_path
  @file_parser.load(File.read(file_path))
end

#set(option, value) ⇒ Object

Sets a new option or a edit an existing one.

It’s used in pair with Configuration#update in order to update an existing configuration file.



50
51
52
# File 'lib/1hdoc/core/configuration.rb', line 50

def set(option, value)
  @options[option] = value
end

#updateObject

Updates configuration file by rewriting the whole file using init’s singleton method.

You should avoid this method for big files and use it for small ones.



41
42
43
# File 'lib/1hdoc/core/configuration.rb', line 41

def update
  self.class.init(@file_path, @file_parser, options)
end