Sha256: 56b82342b4f201ffba66f623a9cbb3c92c95742387c864a7ec0144272cb7a865

Contents?: true

Size: 1.98 KB

Versions: 1

Compression:

Stored size: 1.98 KB

Contents

require 'flayyer/version'
require 'uri'

module Flayyer
  class Error < StandardError; end

  class FlayyerURL
    attr_accessor :version, :tenant, :deck, :template, :extension, :variables

    def self.create(&block)
      self.new(&block)
    end

    def initialize(tenant = nil, deck = nil, template = nil, version = nil, extension = 'jpeg', variables = {})
      @tenant = tenant
      @deck = deck
      @template = template
      @version = version
      @extension = extension
      @variables = variables
      yield(self) if block_given?
    end

    def querystring
      defaults = {
        __v: Time.now.to_i, # This forces crawlers to refresh the image
      }
      result = FlayyerHash.new(@variables.nil? ? defaults : defaults.merge(@variables))
      result.to_query
    end

    # Create a https://FLAYYER.com string.
    # If you are on Ruby on Rails please use .html_safe when rendering this string into the HTML
    def href
      raise Error.new('Missing "tenant" property') if @tenant.nil?
      raise Error.new('Missing "deck" property') if @deck.nil?
      raise Error.new('Missing "template" property') if @template.nil?

      if @version.nil?
        "https://flayyer.io/v2/#{@tenant}/#{@deck}/#{@template}.#{@extension}?#{self.querystring}"
      else
        "https://flayyer.io/v2/#{@tenant}/#{@deck}/#{@template}.#{@version}.#{@extension}?#{self.querystring}"
      end
    end
  end

  # A compatible qs stringify/parse (https://github.com/ljharb/qs)
  class FlayyerHash
    @hash = {}
    def initialize(hash)
      @hash = hash
    end

    def to_query_hash(key)
      @hash.reduce({}) do |h, (k, v)|
        new_key = key.nil? ? k : "#{key}[#{k}]"
        v = Hash[v.each_with_index.to_a.map(&:reverse)] if v.is_a?(Array)
        if v.is_a?(Hash)
          h.merge!(FlayyerHash.new(v).to_query_hash(new_key))
        else
          h[new_key] = v
        end
        h
      end
    end

    def to_query(key = nil)
      URI.encode_www_form(self.to_query_hash(key))
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
flayyer-1.1.0 lib/flayyer.rb