Sha256: e7d352ba2d065ffef4cc3fd63ff85f313a985bc339377c7a6c7f2e4191620ef3

Contents?: true

Size: 1.62 KB

Versions: 1

Compression:

Stored size: 1.62 KB

Contents

# coding: utf-8

begin
  require 'json'
rescue LoadError
  puts 'ThinReports requires json >= 1.4.6. ' +
       'Please `gem install json` and try again.'
end

module ThinReports
  module Core::Format
    
    # @private
    module Builder
      def build(*args)
        build_internal(*args)
      rescue ThinReports::Errors::Basic => e
        raise
      rescue => e
        raise ThinReports::Errors::InvalidLayoutFormat
      end
      
    private
      
      # @abstract
      def build_internal(*args)
        raise NotImplementedError
      end

      # @param [ThinReports::Core::Format::Base] format
      # @param [Hash] options
      def build_layout(format, options = {}, &block)
        level = '-' * ((options[:level] || 1 ) - 1)
        pattern = /<!--#{level}SHAPE(.*?)SHAPE#{level}-->/

        format.layout.scan(pattern) do |m|
          shape_format = block.call(*parsed_format_and_shape_type(m.first))
          format.shapes[shape_format.id.to_sym] = shape_format
        end
        format.layout.gsub!(pattern, '')
      end
      
      # @param [String] svg
      def clean(svg)
        svg.gsub!(/<!--.*?-->/, '')
      end
      
      # @param [String] svg
      def clean_with_attributes(svg)
        clean(svg)
        svg.gsub!(/ x\-[a-z\d\-]+?=".*?"/, '')
        svg.gsub!(/ class=".*?"/, '')        
      end
      
      def shape_tag(format)
        %{<%= r(:"#{format.id}")%>}
      end
      
      def parsed_format_and_shape_type(json_string)
        f = parse_json(json_string)
        [ f['type'], f ]
      end

      def parse_json(json_string)
        JSON.parse(json_string)
      end
    end
    
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
thinreports-0.7.7 lib/thinreports/core/format/builder.rb