--- /dev/null
+module I18nData
+ module FileDataProvider
+ DATA_SEPERATOR = ";;"
+ extend self
+
+ def codes(type,language_code)
+ unless data = read_from_file(type,language_code)
+ raise NoTranslationAvailable.new("#{type}-#{language_code}")
+ end
+ data
+ end
+
+ def write_cache(provider)
+ languages = provider.codes(:languages,'EN').keys
+ languages.each{|language_code|
+ [:languages,:countries].each {|type|
+ begin
+ data = provider.send(:codes,type,language_code)
+ write_to_file(data,type,language_code)
+ rescue NoTranslationAvailable
+ end
+ }
+ }
+ end
+
+ private
+
+ def read_from_file(type,language_code)
+ file = cache_for(type,language_code)
+ return nil unless File.exist?(file)
+ data = {}
+ IO.read(file).split("\n").each{|line|
+ code, translation = line.split(DATA_SEPERATOR)
+ data[code] = translation
+ }
+ data
+ end
+
+ def write_to_file(data,type,language_code)
+ return if data.empty?
+ file = cache_for(type,language_code)
+ FileUtils.mkdir_p(File.dirname(file))
+ File.open(file,'w') do |f|
+ f.puts data.map{|code,translation|"#{code}#{DATA_SEPERATOR}#{translation}"} * "\n"
+ end
+ end
+
+ def cache_for(type,language_code)
+ cache("#{type}-#{language_code}")
+ end
+
+ def cache(file)
+ File.join(File.dirname(__FILE__),'..','..','cache','file_data_provider',"#{file}.txt")
+ end
+ end
+end
\ No newline at end of file