Sha256: a268f65f7d50949a8c81fbed56b8ca2572288e927e9884c1d3dc570c4f6adaec

Contents?: true

Size: 1.95 KB

Versions: 2

Compression:

Stored size: 1.95 KB

Contents

module ProperProperties
  module Generating
    # This module allows generating the content of a properties file
    # base on a {Properties} object (or any other hash like structure)
    # 
    # @example
    #    Generator.generate({:item => "something ה"}) => "item=something \u05d4"
    #
    module Generator
      # Character used for key-value separation
      # @return [String]
      KEY_VALUE_SEPARATOR = '='

      # Default options
      # @return [Hash]
      DEFAULT_OPTIONS = {
        :skip_encode_unicode       => false,
        :skip_encode_separators    => false,
        :skip_encode_special_chars => false
      }.freeze

      # Generates a properties file content based on a hash
      # @param properties [Properties] or simple hash
      # @param options    [Hash]
      # @option options skip_encode_unicode [Boolean] Skip unicode encoding
      # @option options skip_encode_separators [Boolean] Skip seperators encoding
      # @option options skip_encode_special_chars [Boolean] Skip special char encoding
      # @return [String]
      def self.generate(properties, options = {})
        options = DEFAULT_OPTIONS.merge(options)
        lines = []
        properties.each do |key, value|
          lines << build_line(key, value, options)
        end
        lines.join("\n")
      end

      private

      def self.build_line(key, value, options)
        encoded_key   = Encoding.encode!(key.to_s.dup,   *encoding_skips(false, options))
        encoded_value = Encoding.encode!(value.to_s.dup, *encoding_skips(true,  options))

        encoded_key + KEY_VALUE_SEPARATOR + encoded_value
      end

      def self.encoding_skips(is_value, options)
        skips = []
        skips << Encoding::SKIP_SEPARATORS    if is_value || options[:skip_encode_separators]
        skips << Encoding::SKIP_UNICODE       if options[:skip_encode_unicode]
        skips << Encoding::SKIP_SPECIAL_CHARS if options[:skip_encode_special_chars]
        skips
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
proper_properties-0.0.2 lib/proper_properties/generating/generator.rb
proper_properties-0.0.1 lib/proper_properties/generating/generator.rb