burek 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/config.rb +20 -0
- data/lib/core.rb +122 -0
- data/lib/parser.rb +33 -0
- data/lib/view_helpers.rb +9 -0
- data/tasks/tasks.rb +14 -0
- metadata +6 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 4653799d775ca0a0ae0945f48b5a282e526d5120
         | 
| 4 | 
            +
              data.tar.gz: 5f7e5d7b68e8ca25f7157e510bec70e106d46252
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: f471eb47e0b74b6080ff164604dfab4bd3a39931fa12911046d02dd0c2ec1c4bdbbd861af1944640ed87a0e6fa0652e81a5fc0f9cb8c6f836617cc85a73d4a45
         | 
| 7 | 
            +
              data.tar.gz: 0112684fb1d79e5dbeb9028ab97db82dc2d25dca3fbe05df68451865e21ece05fc8d9ae613f511035f1d569226cf749e7f79d856f1933b093590d1df8eceb432
         | 
    
        data/lib/config.rb
    ADDED
    
    | @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            module Burek
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              @@config_hash = {
         | 
| 4 | 
            +
                search_folders: ['./app/views/**/*'],
         | 
| 5 | 
            +
                translations_path: './config/locales/burek/',
         | 
| 6 | 
            +
                translation_placeholder: 'TODO',
         | 
| 7 | 
            +
                ignore_folders_for_key: ['.','app'],
         | 
| 8 | 
            +
                subfolder_depth: 2,
         | 
| 9 | 
            +
                locales: ['en','fi']
         | 
| 10 | 
            +
              }
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              def self.set_config(key, value)
         | 
| 13 | 
            +
                @@config_hash[key] = value
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
              
         | 
| 16 | 
            +
              def self.config(key)
         | 
| 17 | 
            +
                raise 'Unknown config key!' unless @@config_hash.has_key? key
         | 
| 18 | 
            +
                @@config_hash[key]
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
    
        data/lib/core.rb
    ADDED
    
    | @@ -0,0 +1,122 @@ | |
| 1 | 
            +
            require 'config'
         | 
| 2 | 
            +
            require 'yaml'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Burek
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              module Core
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                def self.key_to_file_path(key, locale)
         | 
| 9 | 
            +
                  path_parts = key.split("/")
         | 
| 10 | 
            +
                  path_parts.pop
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  translation_file = Burek.config(:translations_path) 
         | 
| 13 | 
            +
                  path_parts.each_with_index do |item, index|
         | 
| 14 | 
            +
                    if index == Burek.config(:subfolder_depth) || item == path_parts.last
         | 
| 15 | 
            +
                      translation_file += "#{item}.#{locale}.yml"
         | 
| 16 | 
            +
                      break
         | 
| 17 | 
            +
                    else
         | 
| 18 | 
            +
                      translation_file += "/#{item}/"
         | 
| 19 | 
            +
                      unless File.directory?(translation_file)
         | 
| 20 | 
            +
                        Dir.mkdir(translation_file)
         | 
| 21 | 
            +
                      end
         | 
| 22 | 
            +
                    end
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
                  return translation_file
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                def self.filter_path(file_name)
         | 
| 28 | 
            +
                  path = file_name.split('/')
         | 
| 29 | 
            +
                  path.delete_if do |item|
         | 
| 30 | 
            +
                    Burek.config(:ignore_folders_for_key).include? item
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
                  path.last.gsub!(/\.(.*?)$/,'').gsub!(/^_/,'') #strip extenison from file name
         | 
| 33 | 
            +
                  return path.join('/')
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                def self.run_burek
         | 
| 37 | 
            +
                  # Create translations folder if missing
         | 
| 38 | 
            +
                  unless File.directory?(Burek.config(:translations_path))
         | 
| 39 | 
            +
                    Dir.mkdir(Burek.config(:translations_path))
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  new_translations = {}
         | 
| 43 | 
            +
                  # Iterate all defined subfolders subfolders
         | 
| 44 | 
            +
                  for_each_file do |file_name|      
         | 
| 45 | 
            +
                    File.open(file_name, "rb") do |file|
         | 
| 46 | 
            +
                      contents = file.read
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                      filtered_path = Burek::Core.filter_path(file_name)
         | 
| 49 | 
            +
                      matches = Burek::Parser.find_burek_calls(contents)
         | 
| 50 | 
            +
                      matches.each do |value|
         | 
| 51 | 
            +
                        key = filtered_path + "/" + value.downcase.gsub(' ','_')
         | 
| 52 | 
            +
                        new_translations[key] = value
         | 
| 53 | 
            +
                      end
         | 
| 54 | 
            +
                    end
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  to_replace = {}
         | 
| 58 | 
            +
                  # Create files for each locale
         | 
| 59 | 
            +
                  Burek.config(:locales).each do |locale|    
         | 
| 60 | 
            +
                    new_translations.each do |key,value|
         | 
| 61 | 
            +
                      path_parts = key.split("/")
         | 
| 62 | 
            +
                      item_name = path_parts.pop
         | 
| 63 | 
            +
                      path_parts_no_filename = path_parts[0..-2]
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                      # Figure out file path
         | 
| 66 | 
            +
                      translation_file = Burek::Core.key_to_file_path(key, locale)
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                      # Initialize translations hash
         | 
| 69 | 
            +
                      if File.exists?(translation_file)
         | 
| 70 | 
            +
                        translations_hash = YAML::load_file(translation_file) #Load
         | 
| 71 | 
            +
                      else
         | 
| 72 | 
            +
                        translations_hash = {}
         | 
| 73 | 
            +
                        translations_hash[locale.dup.force_encoding("UTF-8")] = {} 
         | 
| 74 | 
            +
                      end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                      # Save info for replacing burek calls with translation calls
         | 
| 77 | 
            +
                      regular_translation_key = path_parts_no_filename.join('.') + ".#{item_name}"
         | 
| 78 | 
            +
                      to_replace[value] = regular_translation_key
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                      # Nest in hashes
         | 
| 81 | 
            +
                      cur_hash = translations_hash[locale.dup.force_encoding("UTF-8")]
         | 
| 82 | 
            +
                      path_parts_no_filename.each do |item|
         | 
| 83 | 
            +
                        cur_hash[item] = {} unless cur_hash.has_key?(item)
         | 
| 84 | 
            +
                        cur_hash = cur_hash[item]
         | 
| 85 | 
            +
                      end
         | 
| 86 | 
            +
                      cur_hash[item_name] = ( locale == Burek.config(:locales).first ? value.dup.force_encoding("UTF-8") : Burek.config(:translation_placeholder) )
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                      # Save to file
         | 
| 89 | 
            +
                      clean_yaml = Burek::Parser.yaml_to_i18n_file(translations_hash.to_yaml) 
         | 
| 90 | 
            +
                      translation_file.gsub!("//","/")
         | 
| 91 | 
            +
                      File.write(translation_file, clean_yaml) #Store
         | 
| 92 | 
            +
                    end
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                    
         | 
| 95 | 
            +
                  end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                  # Replace all burek calls with regular translation calls
         | 
| 98 | 
            +
                  for_each_file do |file_name|      
         | 
| 99 | 
            +
                    File.open(file_name, 'r') do |file|
         | 
| 100 | 
            +
                      content = file.read
         | 
| 101 | 
            +
                      processed_content = Burek::Parser.replace_burek_calls(content, to_replace)
         | 
| 102 | 
            +
                      unless processed_content.nil?
         | 
| 103 | 
            +
                        File.open(file_name, 'w') do |output_file|
         | 
| 104 | 
            +
                          output_file.print processed_content
         | 
| 105 | 
            +
                        end
         | 
| 106 | 
            +
                      end
         | 
| 107 | 
            +
                    end
         | 
| 108 | 
            +
                  end
         | 
| 109 | 
            +
                end
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                def self.for_each_file
         | 
| 112 | 
            +
                  Burek.config(:search_folders).each do |folder|
         | 
| 113 | 
            +
                    Dir.glob(folder) do |file_name|
         | 
| 114 | 
            +
                      unless File.directory?(file_name)
         | 
| 115 | 
            +
                         yield file_name
         | 
| 116 | 
            +
                      end
         | 
| 117 | 
            +
                    end
         | 
| 118 | 
            +
                  end
         | 
| 119 | 
            +
                end
         | 
| 120 | 
            +
             | 
| 121 | 
            +
              end
         | 
| 122 | 
            +
            end
         | 
    
        data/lib/parser.rb
    ADDED
    
    | @@ -0,0 +1,33 @@ | |
| 1 | 
            +
            module Burek
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              module Parser
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                def self.find_burek_calls(string)
         | 
| 6 | 
            +
                  string.scan(burek_call_regex).flatten 
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                def self.replace_burek_calls(contents, to_replace)
         | 
| 10 | 
            +
                  matches = find_burek_calls(contents)
         | 
| 11 | 
            +
                  changes_made = false
         | 
| 12 | 
            +
                  matches.each do |value|
         | 
| 13 | 
            +
                    if to_replace.has_key?(value)
         | 
| 14 | 
            +
                      contents.gsub!(burek_call_regex(value)," t('#{to_replace[value]}')") 
         | 
| 15 | 
            +
                      changes_made = true
         | 
| 16 | 
            +
                    end
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  return contents if changes_made
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                def self.yaml_to_i18n_file(yaml)
         | 
| 23 | 
            +
                  yaml.lines.to_a[1..-1].join
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                private 
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                def self.burek_call_regex(caption="(?<key>[^\\)]*)")
         | 
| 29 | 
            +
                  Regexp.new("[^a-zA-Z0-9_]burek[ \\t]*\\([ \\t]*('|\")#{caption}\('|\")[^\\)]*\\)")
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
            end
         | 
    
        data/lib/view_helpers.rb
    ADDED
    
    
    
        data/tasks/tasks.rb
    ADDED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: burek
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.5. | 
| 4 | 
            +
              version: 0.5.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Filip Defar
         | 
| @@ -17,6 +17,11 @@ extensions: [] | |
| 17 17 | 
             
            extra_rdoc_files: []
         | 
| 18 18 | 
             
            files:
         | 
| 19 19 | 
             
            - lib/burek.rb
         | 
| 20 | 
            +
            - lib/config.rb
         | 
| 21 | 
            +
            - lib/core.rb
         | 
| 22 | 
            +
            - lib/parser.rb
         | 
| 23 | 
            +
            - lib/view_helpers.rb
         | 
| 24 | 
            +
            - tasks/tasks.rb
         | 
| 20 25 | 
             
            homepage: https://github.com/dabrorius/burek
         | 
| 21 26 | 
             
            licenses:
         | 
| 22 27 | 
             
            - MIT
         |