Sha256: d19144bd532c24cce2615563e8f12518bb8852ce5c9557a380149340c514e93a

Contents?: true

Size: 1.4 KB

Versions: 1

Compression:

Stored size: 1.4 KB

Contents

# coding: utf-8

require 'json'

module Thinreports::Core
  module Format

    module Builder
      def build(*args)
        build_internal(*args)
      rescue Thinreports::Errors::Basic
        raise
      rescue
        raise Thinreports::Errors::InvalidLayoutFormat
      end

      # @abstract
      def build_internal
        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.8.2 lib/thinreports/core/format/builder.rb