Sha256: 7af85ecd39b3ab8b9c10d81249e8bd53052e646e51b07c5c8d87816b83eff96c

Contents?: true

Size: 1.35 KB

Versions: 13

Compression:

Stored size: 1.35 KB

Contents

# frozen_string_literal: true

require "rexml/document"

module SublimeTextKit
  module Snippets
    class Snippet
      ELEMENT_TRANSLATIONS = {
        "content" => :content,
        "tabTrigger" => :trigger,
        "description" => :description,
        "scope" => :scope
      }.freeze

      ALLOWED_METHODS = ELEMENT_TRANSLATIONS.values.freeze

      def initialize document
        @document = document
        assign_elements
      end

      private

      attr_reader :document,
                  :content_element,
                  :trigger_element,
                  :description_element,
                  :scope_element

      def assign_elements
        root_element.elements.each do |element|
          name = element.name

          fail StandardError, "Unknown element: #{element}." unless ELEMENT_TRANSLATIONS.key? name

          instance_variable_set "@#{ELEMENT_TRANSLATIONS[name]}_element", element
        end
      end

      def root_element
        document.root || REXML::Element.new
      end

      def method_missing name, *arguments, &block
        return super unless respond_to_missing? name

        String((__send__("#{name}_element") || REXML::Element.new).text)
      end

      # :reek:BooleanParameter
      def respond_to_missing? name, include_private = false
        ALLOWED_METHODS.include?(name) || super
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
sublime_text_kit-10.0.2 lib/sublime_text_kit/snippets/snippet.rb
sublime_text_kit-10.0.1 lib/sublime_text_kit/snippets/snippet.rb
sublime_text_kit-10.0.0 lib/sublime_text_kit/snippets/snippet.rb
sublime_text_kit-9.6.0 lib/sublime_text_kit/snippets/snippet.rb
sublime_text_kit-9.5.0 lib/sublime_text_kit/snippets/snippet.rb
sublime_text_kit-9.4.0 lib/sublime_text_kit/snippets/snippet.rb
sublime_text_kit-9.3.0 lib/sublime_text_kit/snippets/snippet.rb
sublime_text_kit-9.2.0 lib/sublime_text_kit/snippets/snippet.rb
sublime_text_kit-9.1.0 lib/sublime_text_kit/snippets/snippet.rb
sublime_text_kit-9.0.0 lib/sublime_text_kit/snippets/snippet.rb
sublime_text_kit-8.5.2 lib/sublime_text_kit/snippets/snippet.rb
sublime_text_kit-8.5.1 lib/sublime_text_kit/snippets/snippet.rb
sublime_text_kit-8.5.0 lib/sublime_text_kit/snippets/snippet.rb