Class: Shrinker::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/shrinker/config.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.config_setting(name) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/shrinker/config.rb', line 13

def self.config_setting(name)
  settings << name

  class_eval <<-EV, __FILE__, __LINE__ + 1
    attr_reader :#{name}

    def #{name}(value = nil)
      return @#{name} if value.nil?
      @#{name} = value
      value
    end
  EV
end

.settingsObject

provides a getter and a setter with the same method config_setting :dog

--> dog 'Husky' :=> 'Husky' (setter)
--> dog :=> 'Husky' (getter)


9
10
11
# File 'lib/shrinker/config.rb', line 9

def self.settings
  @settings ||= []
end

Instance Method Details

#==(config) ⇒ Object



54
55
56
57
58
# File 'lib/shrinker/config.rb', line 54

def ==(config)
  self.class.settings.each { |setting| return false unless send(setting) == config.send(setting) }

  true
end

#backend_instanceObject



84
85
86
87
88
89
# File 'lib/shrinker/config.rb', line 84

def backend_instance
  @backend_instance ||= begin
    class_name = (backend || 'Abstract').to_s
    ::Shrinker::Backend.const_get(class_name).new(backend_options || {})
  end
end

#merge(config) ⇒ Object



66
67
68
69
70
71
# File 'lib/shrinker/config.rb', line 66

def merge(config)
  new_config = Config.new
  new_config.merge!(config)

  new_config
end

#merge!(config) ⇒ Object



73
74
75
76
77
78
79
80
81
82
# File 'lib/shrinker/config.rb', line 73

def merge!(config)
  case config
  when self.class
    self.class.settings.each { |setting| send(setting, config.send(setting)) }
  when Hash
    config.each_pair do |setting, value|
      send(setting, value)
    end
  end
end

#reset!Object



60
61
62
63
64
# File 'lib/shrinker/config.rb', line 60

def reset!
  self.instance_variables.each do |var|
    self.instance_variable_set(var, nil)
  end
end