lib/translate/keys.rb in refinerycms-i18n-0.9.8.12 vs lib/translate/keys.rb in refinerycms-i18n-0.9.9

- old
+ new

@@ -1,123 +1,125 @@ require 'pathname' -class Translate::Keys - # Allows keys extracted from lookups in files to be cached - def self.files - @@files ||= Translate::Keys.new.files - end +module Translate + class KeysKeys + # Allows keys extracted from lookups in files to be cached + def self.files + @@files ||= Translate::Keys.new.files + end - # Allows flushing of the files cache - def self.files=(files) - @@files = files - end + # Allows flushing of the files cache + def self.files=(files) + @@files = files + end - def files - @files ||= extract_files - end - alias_method :to_hash, :files + def files + @files ||= extract_files + end + alias_method :to_hash, :files - def keys - files.keys - end - alias_method :to_a, :keys + def keys + files.keys + end + alias_method :to_a, :keys - def i18n_keys(locale) - I18n.backend.send(:init_translations) unless I18n.backend.initialized? - extract_i18n_keys(I18n.backend.send(:translations)[locale.to_sym]).sort - end + def i18n_keys(locale) + I18n.backend.send(:init_translations) unless I18n.backend.initialized? + extract_i18n_keys(I18n.backend.send(:translations)[locale.to_sym]).sort + end - # Convert something like: - # - # { - # :pressrelease => { - # :label => { - # :one => "Pressmeddelande" - # } - # } - # } - # - # to: - # - # {'pressrelease.label.one' => "Pressmeddelande"} - # - def self.to_shallow_hash(hash) - hash.inject({}) do |shallow_hash, (key, value)| - if value.is_a?(Hash) - to_shallow_hash(value).each do |sub_key, sub_value| - shallow_hash[[key, sub_key].join(".")] = sub_value + # Convert something like: + # + # { + # :pressrelease => { + # :label => { + # :one => "Pressmeddelande" + # } + # } + # } + # + # to: + # + # {'pressrelease.label.one' => "Pressmeddelande"} + # + def self.to_shallow_hash(hash) + hash.inject({}) do |shallow_hash, (key, value)| + if value.is_a?(Hash) + to_shallow_hash(value).each do |sub_key, sub_value| + shallow_hash[[key, sub_key].join(".")] = sub_value + end + else + shallow_hash[key.to_s] = value end - else - shallow_hash[key.to_s] = value + shallow_hash end - shallow_hash end - end - # Convert something like: - # - # {'pressrelease.label.one' => "Pressmeddelande"} - # - # to: - # - # { - # :pressrelease => { - # :label => { - # :one => "Pressmeddelande" - # } - # } - # } - def self.to_deep_hash(hash) - hash.inject({}) do |deep_hash, (key, value)| - keys = key.to_s.split('.').reverse - leaf_key = keys.shift - key_hash = keys.inject({leaf_key.to_sym => value}) { |hash, key| {key.to_sym => hash} } - deep_merge!(deep_hash, key_hash) - deep_hash + # Convert something like: + # + # {'pressrelease.label.one' => "Pressmeddelande"} + # + # to: + # + # { + # :pressrelease => { + # :label => { + # :one => "Pressmeddelande" + # } + # } + # } + def self.to_deep_hash(hash) + hash.inject({}) do |deep_hash, (key, value)| + keys = key.to_s.split('.').reverse + leaf_key = keys.shift + key_hash = keys.inject({leaf_key.to_sym => value}) { |hash, key| {key.to_sym => hash} } + deep_merge!(deep_hash, key_hash) + deep_hash + end end - end - # deep_merge by Stefan Rusterholz, see http://www.ruby-forum.com/topic/142809 - def self.deep_merge!(hash1, hash2) - merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 } - hash1.merge!(hash2, &merger) - end + # deep_merge by Stefan Rusterholz, see http://www.ruby-forum.com/topic/142809 + def self.deep_merge!(hash1, hash2) + merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 } + hash1.merge!(hash2, &merger) + end - private - def extract_i18n_keys(hash, parent_keys = []) - hash.inject([]) do |keys, (key, value)| - full_key = parent_keys + [key] - if value.is_a?(Hash) - # Nested hash - keys += extract_i18n_keys(value, full_key) - elsif value.present? - # String leaf node - keys << full_key.join(".") + private + def extract_i18n_keys(hash, parent_keys = []) + hash.inject([]) do |keys, (key, value)| + full_key = parent_keys + [key] + if value.is_a?(Hash) + # Nested hash + keys += extract_i18n_keys(value, full_key) + elsif value.present? + # String leaf node + keys << full_key.join(".") + end + keys end - keys end - end - def extract_files - files_to_scan.inject(HashWithIndifferentAccess.new) do |files, file| - IO.read(file).scan(i18n_lookup_pattern).flatten.map(&:to_sym).each do |key| - files[key] ||= [] - path = Pathname.new(File.expand_path(file)).relative_path_from(Pathname.new(Rails.root)).to_s - files[key] << path unless files[key].include?(path) + def extract_files + files_to_scan.inject(HashWithIndifferentAccess.new) do |files, file| + IO.read(file).scan(i18n_lookup_pattern).flatten.map(&:to_sym).each do |key| + files[key] ||= [] + path = Pathname.new(File.expand_path(file)).relative_path_from(Pathname.new(Rails.root)).to_s + files[key] << path unless files[key].include?(path) + end + files end - files end - end - def i18n_lookup_pattern - /\b(?:I18n\.t|I18n\.translate|t)(?:\s|\():?'([a-z0-9_]+.[a-z0-9_.]+)'\)?/ - end + def i18n_lookup_pattern + /\b(?:I18n\.t|I18n\.translate|t)(?:\s|\():?'([a-z0-9_]+.[a-z0-9_.]+)'\)?/ + end - def files_to_scan - Dir.glob(File.join(files_root_dir, "{app,config,lib}", "**","*.{rb,erb,rhtml}")) + - Dir.glob(File.join(files_root_dir, "public", "javascripts", "**","*.js")) - end + def files_to_scan + Dir.glob(File.join(files_root_dir, "{app,config,lib}", "**","*.{rb,erb,rhtml}")) + + Dir.glob(File.join(files_root_dir, "public", "javascripts", "**","*.js")) + end - def files_root_dir - Rails.root + def files_root_dir + Rails.root + end end -end +end \ No newline at end of file