Sha256: aae8c3f579893f3856a6b6b971e5607a3d12c8b544e205d82d5d806fd543a125

Contents?: true

Size: 1.66 KB

Versions: 3

Compression:

Stored size: 1.66 KB

Contents

require_dependency 'solidus_seo/jsonld/base'
require_dependency 'solidus_seo/jsonld/breadcrumbs'
require_dependency 'solidus_seo/jsonld/list'

module SolidusSeo
  module Jsonld
    module TagHelper
      # @param item [Object] A jsonld hash or any object that implements `to_jsonld` method
      # @param opts[:exclude] [Array] Blacklist of attributes from jsonld
      # @param opts[:only] [Array] Whitelist of attributes from jsonld
      # @param opts[:force] [Boolean] Force cache miss
      #
      # @return [String] Retrieves jsonld tag markup.
      def jsonld(item, opts = {})
        jsonld_fetch(:base, item, opts.symbolize_keys)
      end

      def jsonld_list(collection)
        capture_jsonld(:list, jsonld_fetch(:list, collection))
      end

      def jsonld_breadcrumbs(breadcrumbs)
        jsonld_fetch(:breadcrumbs, breadcrumbs)
      end

      def captured_jsonld
        @captured_jsonld ||= {}
        @captured_jsonld.values.join("\n").html_safe
      end

      def dump_jsonld
        captured_jsonld + jsonld(current_store)
      end

      private

      def capture_jsonld(key, value)
        @captured_jsonld ||= {}

        return unless value
        @captured_jsonld[key.to_sym] = value
        nil # Ensure no output is returned
      end

      def jsonld_fetch(type = :base, items = nil, opts = {})
        force = opts.extract!(:force) || false

        jsonld_cache_key = [:jsonld, items, *opts.values].compact

        Rails.cache.fetch(jsonld_cache_key, force: force) do
          jsonld_builder_class = "::SolidusSeo::Jsonld::#{type.to_s.titleize}".constantize
          jsonld_builder_class.new(items).print(opts)
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
solidus_seo-1.0.10 lib/solidus_seo/jsonld/tag_helper.rb
solidus_seo-1.0.8 lib/solidus_seo/jsonld/tag_helper.rb
solidus_seo-1.0.7 lib/solidus_seo/jsonld/tag_helper.rb