Class: SiteSetting
- Inherits:
-
Object
- Object
- SiteSetting
- Defined in:
- lib/sitesetting.rb
Class Method Summary collapse
Instance Method Summary collapse
- #[](key) ⇒ Object
- #[]=(key, value) ⇒ Object
- #clear ⇒ Object
-
#initialize(path) ⇒ SiteSetting
constructor
A new instance of SiteSetting.
- #is_container?(value) ⇒ Boolean
- #matched?(key) ⇒ Boolean
- #multi_match(source, *keys) ⇒ Object
- #replace_group_values(key, option_values = {}) ⇒ Object
- #update_match_values(match_data) ⇒ Object
Constructor Details
#initialize(path) ⇒ SiteSetting
Returns a new instance of SiteSetting.
25 26 27 28 |
# File 'lib/sitesetting.rb', line 25 def initialize(path) @match_values = {} @yaml_setting = YAML.load_file(path) end |
Class Method Details
.load_file(path) ⇒ Object
9 10 11 |
# File 'lib/sitesetting.rb', line 9 def self.load_file(path) new(path) end |
Instance Method Details
#[](key) ⇒ Object
13 14 15 |
# File 'lib/sitesetting.rb', line 13 def [](key) replace_group_values(key) end |
#[]=(key, value) ⇒ Object
17 18 19 |
# File 'lib/sitesetting.rb', line 17 def []=(key, value) @match_values[key] = value end |
#clear ⇒ Object
21 22 23 |
# File 'lib/sitesetting.rb', line 21 def clear @match_values.clear end |
#is_container?(value) ⇒ Boolean
58 59 60 |
# File 'lib/sitesetting.rb', line 58 def is_container?(value) value.kind_of?(Hash) || value.kind_of?(Array) end |
#matched?(key) ⇒ Boolean
30 31 32 |
# File 'lib/sitesetting.rb', line 30 def matched?(key) @match_values[key] end |
#multi_match(source, *keys) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/sitesetting.rb', line 34 def multi_match(source, *keys) match_data = nil keys.each do |key| setting_value = self[key] or next [*setting_value].each do |value| match_data = source.match(/#{value}/m) if match_data @match_values[key] = value # yamlのキーでもmatch_valuesに設定しておくが、 update_match_values(match_data) # ←ここで同名のグループ名が定義されていたら上書きされるので注意 # 例えば、title: <title>(?<title>.+?)</title> と定義されていた場合、 # @match_values["title"] には (?<title>.+?) 部分の要素が反映される break end end end match_data end |
#replace_group_values(key, option_values = {}) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/sitesetting.rb', line 62 def replace_group_values(key, option_values = {}) dest = option_values[key] || @match_values[key] || @yaml_setting[key] return dest if is_container?(dest) begin result = dest.dup rescue TypeError return dest end values = @yaml_setting.merge(@match_values).merge(option_values) result.gsub!(/\\\\k<(.+?)>/) do |match| value = values[$1] if value value.gsub(/\\\\k<(.+?)>/) do replace_group_values($1, option_values) end else match end end result end |
#update_match_values(match_data) ⇒ Object
52 53 54 55 56 |
# File 'lib/sitesetting.rb', line 52 def update_match_values(match_data) match_data.names.each do |name| @match_values[name] = match_data[name] || "" end end |