Class: Buff::Config::Ruby

Inherits:
Base
  • Object
show all
Defined in:
lib/buff/config/ruby.rb

Defined Under Namespace

Classes: Evaluator

Instance Attribute Summary

Attributes inherited from Base

#path

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#to_hash

Constructor Details

#initialize(path = nil, options = {}) ⇒ Ruby

Returns a new instance of Ruby.



104
105
106
107
# File 'lib/buff/config/ruby.rb', line 104

def initialize(path = nil, options = {})
  super
  from_ruby(File.read(path), path) if path && File.exists?(path)
end

Class Method Details

.from_file(path) ⇒ Buff::Config::Ruby

Parameters:

  • path (String)

Returns:

Raises:



67
68
69
70
71
72
73
# File 'lib/buff/config/ruby.rb', line 67

def from_file(path)
  path = File.expand_path(path)
  contents = File.read(path)
  new(path).from_ruby(contents, path)
rescue TypeError, Errno::ENOENT, Errno::EISDIR
  raise Errors::ConfigNotFound, "No configuration found at: '#{path}'"
end

.from_ruby(contents, path = nil) ⇒ Buff::Config::Ruby

Parameters:

  • contents (String)
  • path (String) (defaults to: nil)

Returns:



58
59
60
# File 'lib/buff/config/ruby.rb', line 58

def from_ruby(contents, path=nil)
  new.from_ruby(contents, path)
end

.platform_specific_path(path) ⇒ String

Converts a path to a path usable for your current platform

Parameters:

  • path (String)

Returns:

  • (String)


80
81
82
83
84
85
86
87
# File 'lib/buff/config/ruby.rb', line 80

def platform_specific_path(path)
  if RUBY_PLATFORM =~ /mswin|mingw|windows/
    system_drive = ENV['SYSTEMDRIVE'] ? ENV['SYSTEMDRIVE'] : ""
    path         = win_slashify File.join(system_drive, path.split('/')[2..-1])
  end

  path
end

Instance Method Details

#from_ruby(contents, path = nil) ⇒ Buff::Config::Ruby



112
113
114
115
116
# File 'lib/buff/config/ruby.rb', line 112

def from_ruby(contents, path=nil)
  hash = Buff::Config::Ruby::Evaluator.parse(contents, path, self)
  mass_assign(hash)
  self
end

#reloadBuff::Config::Ruby

Reload the current configuration file from disk

Returns:



149
150
151
152
# File 'lib/buff/config/ruby.rb', line 149

def reload
  mass_assign(self.class.from_file(path).to_hash)
  self
end

#save(destination = self.path) ⇒ Object



134
135
136
137
138
139
140
141
142
143
144
# File 'lib/buff/config/ruby.rb', line 134

def save(destination = self.path)
  if destination.nil?
    raise Errors::ConfigSaveError, "Cannot save configuration without a destination. " +
      "Provide one to save or set one on the object."
  end

  FileUtils.mkdir_p(File.dirname(destination))
  File.open(destination, 'w+') do |f|
    f.write(to_ruby)
  end
end

#to_rubyString Also known as: to_rb

Convert the result to Ruby.

Returns:

  • (String)


121
122
123
124
125
126
127
128
129
130
131
# File 'lib/buff/config/ruby.rb', line 121

def to_ruby
  self.to_hash.map do |k,v|
    value = if const = find_constant(v)
      const
    else
      v.inspect
    end

    "#{k.to_s}(#{value})"
  end.join("\n")
end