Class: ImageOptim::Config
- Inherits:
-
Object
- Object
- ImageOptim::Config
- Includes:
- OptionHelpers
- Defined in:
- lib/image_optim/config.rb
Overview
Read, merge and parse configuration
Constant Summary collapse
- GLOBAL_PATH =
Global config path at ‘$XDG_CONFIG_HOME/image_optim.yml` (by default `~/.config/image_optim.yml`)
begin File.join(ENV['XDG_CONFIG_HOME'] || '~/.config', 'image_optim.yml') end
- LOCAL_PATH =
Local config path at
./.image_optim.yml './.image_optim.yml'
Class Method Summary collapse
-
.read_options(path) ⇒ Object
Read options at path: expand path (warn on failure), return {} if file does not exist or is empty, read yaml, check if it is a Hash, deep symbolise keys.
Instance Method Summary collapse
-
#allow_lossy ⇒ Object
Allow lossy workers and optimizations, converted to boolean.
-
#assert_no_unused_options! ⇒ Object
Fail unless all options were marked as used (directly or indirectly accessed using
get!). - #cache_dir ⇒ Object
- #cache_worker_digests ⇒ Object
-
#for_worker(klass) ⇒ Object
Options for worker class by its
bin_sym: *Hashpassed as is * ‘{}` fortrueornil*falseforfalse* otherwise fail withConfigurationError. -
#get!(key) ⇒ Object
Gets value for key converted to symbol and mark option as used.
-
#initialize(options) ⇒ Config
constructor
Merge config from files with passed options Config files are checked at
GLOBAL_PATHandLOCAL_PATHunless overriden using:config_paths. -
#key?(key) ⇒ Boolean
Check if key is present.
-
#nice ⇒ Object
Nice level: *
10by default and fornilortrue*0forfalse* otherwise convert to integer. -
#pack ⇒ Object
Using image_optim_pack: *
falseto disable *nilto use if available * everything else to require. -
#skip_missing_workers ⇒ Object
Skip missing workers, converted to boolean.
-
#threads ⇒ Object
Number of parallel threads: *
processor_countby default and fornilortrue*1forfalse* otherwise convert to integer. -
#to_s ⇒ Object
yaml dump without document beginning prefix
---. -
#verbose ⇒ Object
Verbose mode, converted to boolean.
Methods included from OptionHelpers
Constructor Details
#initialize(options) ⇒ Config
Merge config from files with passed options Config files are checked at GLOBAL_PATH and LOCAL_PATH unless overriden using :config_paths
53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/image_optim/config.rb', line 53 def initialize() config_paths = .delete(:config_paths) || [GLOBAL_PATH, LOCAL_PATH] config_paths = Array(config_paths) to_merge = config_paths.map{ |path| self.class.(path) } to_merge << HashHelpers.deep_symbolise_keys() = to_merge.reduce do |memo, hash| HashHelpers.deep_merge(memo, hash) end @used = Set.new end |
Class Method Details
.read_options(path) ⇒ Object
Read options at path: expand path (warn on failure), return {} if file does not exist or is empty, read yaml, check if it is a Hash, deep symbolise keys
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/image_optim/config.rb', line 29 def (path) begin full_path = File.(path) rescue ArgumentError => e warn "Can't expand path #{path}: #{e}" return {} end return {} unless File.size?(full_path) config = YAML.load_file(full_path) unless config.is_a?(Hash) fail "expected hash, got #{config.inspect}" end HashHelpers.deep_symbolise_keys(config) rescue => e warn "exception when reading #{full_path}: #{e}" {} end |
Instance Method Details
#allow_lossy ⇒ Object
Allow lossy workers and optimizations, converted to boolean
153 154 155 |
# File 'lib/image_optim/config.rb', line 153 def allow_lossy !!get!(:allow_lossy) end |
#assert_no_unused_options! ⇒ Object
Fail unless all options were marked as used (directly or indirectly accessed using get!)
81 82 83 84 85 86 |
# File 'lib/image_optim/config.rb', line 81 def = .reject{ |key, _value| @used.include?(key) } return if .empty? fail ConfigurationError, "unknown options #{unknown_options.inspect}" end |
#cache_dir ⇒ Object
157 158 159 160 |
# File 'lib/image_optim/config.rb', line 157 def cache_dir dir = get!(:cache_dir) dir unless dir.nil? || dir.empty? end |
#cache_worker_digests ⇒ Object
162 163 164 |
# File 'lib/image_optim/config.rb', line 162 def cache_worker_digests !!get!(:cache_worker_digests) end |
#for_worker(klass) ⇒ Object
Options for worker class by its bin_sym:
-
Hashpassed as is -
‘{}` for
trueornil -
falseforfalse -
otherwise fail with
ConfigurationError
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
# File 'lib/image_optim/config.rb', line 171 def for_worker(klass) = get!(klass.bin_sym) case when Hash when true, nil {} when false {:disable => true} else fail ConfigurationError, "Got #{worker_options.inspect} for "\ "#{klass.name} options" end end |
#get!(key) ⇒ Object
Gets value for key converted to symbol and mark option as used
67 68 69 70 71 |
# File 'lib/image_optim/config.rb', line 67 def get!(key) key = key.to_sym @used << key [key] end |
#key?(key) ⇒ Boolean
Check if key is present
74 75 76 77 |
# File 'lib/image_optim/config.rb', line 74 def key?(key) key = key.to_sym .key?(key) end |
#nice ⇒ Object
Nice level:
-
10by default and fornilortrue -
0forfalse -
otherwise convert to integer
92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/image_optim/config.rb', line 92 def nice nice = get!(:nice) case nice when true, nil 10 when false 0 else nice.to_i end end |
#pack ⇒ Object
Using image_optim_pack:
-
falseto disable -
nilto use if available -
everything else to require
131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/image_optim/config.rb', line 131 def pack pack = get!(:pack) return false if pack == false require 'image_optim/pack' true rescue LoadError => e raise "Cannot load image_optim_pack: #{e}" if pack false end |
#skip_missing_workers ⇒ Object
Skip missing workers, converted to boolean
144 145 146 147 148 149 150 |
# File 'lib/image_optim/config.rb', line 144 def skip_missing_workers if key?(:skip_missing_workers) !!get!(:skip_missing_workers) else pack end end |
#threads ⇒ Object
Number of parallel threads:
-
processor_countby default and fornilortrue -
1forfalse -
otherwise convert to integer
109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/image_optim/config.rb', line 109 def threads threads = get!(:threads) case threads when true, nil processor_count when false 1 else threads.to_i end end |
#to_s ⇒ Object
yaml dump without document beginning prefix ---
188 189 190 |
# File 'lib/image_optim/config.rb', line 188 def to_s YAML.dump(HashHelpers.deep_stringify_keys()).sub(/\A---\n/, '') end |
#verbose ⇒ Object
Verbose mode, converted to boolean
123 124 125 |
# File 'lib/image_optim/config.rb', line 123 def verbose !!get!(:verbose) end |