Merge branch 'master' into config
[amazing.git] / lib / amazing / config.rb
blob2287685c1f7c8187e7b118eb7329a995d54a514a
1 require 'amazing/string'
2 require 'amazing/config/dsl'
3 require 'amazing/config/yaml'
5 module Amazing
6   class Config < Hash
7     def initialize(config)
8       @config = config
9       case File.extname(@config)[1..-1].to_sym
10       when :rb
11         from_dsl
12       when :yml, :yaml
13         from_yaml
14       end
15     end
17     private
19     def from_dsl
20       dsl = Dsl.new(@config)
21       self[:awesome] = []
22       dsl.awesome_statusbars.each do |awesome|
23         self[:awesome] << {}
24         self[:awesome][-1][:screen] = awesome.options[:screen] || 0
25         self[:awesome][-1][:statusbar] = awesome.options[:statusbar] || "mystatusbar"
26         self[:awesome][-1][:widgets] = []
27         awesome.widgets.each do |widget|
28           self[:awesome][-1][:widgets] << {}
29           self[:awesome][-1][:widgets][-1][:identifier] = widget.identifier
30           self[:awesome][-1][:widgets][-1][:properties] = widget.properties
31           self[:awesome][-1][:widgets][-1].merge!(widget.options)
32           self[:awesome][-1][:widgets][-1][:module] ||= widget.identifier
33           self[:awesome][-1][:widgets][-1][:property] ||= "text"
34           self[:awesome][-1][:widgets][-1][:module] = self[:awesome][-1][:widgets][-1][:module].to_s.camel_case
35         end
36       end
37     end
39     def from_yaml
40       yaml = Yaml.new(@config)
41       self[:awesome] = []
42       yaml["awesome"].each do |awesome|
43         self[:awesome] << {}
44         self[:awesome][-1][:screen] = awesome["screen"] || 0
45         self[:awesome][-1][:statusbar] = awesome["statusbar"] || "mystatusbar"
46         self[:awesome][-1][:widgets] = []
47         awesome["widgets"].each do |widget|
48           self[:awesome][-1][:widgets] << {}
49           case widget
50           when Hash
51             self[:awesome][-1][:widgets][-1][:identifier] = widget.keys[0]
52             widget.values[0].each do |key, value|
53               self[:awesome][-1][:widgets][-1][key.to_sym] = value
54             end
55             self[:awesome][-1][:widgets][-1][:module] ||= widget.keys[0]
56           when String
57             self[:awesome][-1][:widgets][-1][:identifier] = widget
58             self[:awesome][-1][:widgets][-1][:module] = widget
59           end
60           self[:awesome][-1][:widgets][-1][:property] ||= "text"
61           self[:awesome][-1][:widgets][-1][:module] = self[:awesome][-1][:widgets][-1][:module].to_s.camel_case
62         end
63       end
64     end
65   end
66 end