class SublimeDSL::TextMate::Snippet::DSLWriter

DSL writer for a collection of snippets.

Attributes

snippets[R]

Public Class Methods

new(snippets) click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 368
def initialize(snippets)
  @snippets = snippets
end

Public Instance Methods

write(file) click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 372
def write(file)
  return if snippets.empty?
  tm, st = snippets.partition { |s| s.file_format == :textmate }
  File.open(file, 'wb:utf-8') do |f|
    f.write dsl_header
    f.write dsl_block(tm)
    f.write dsl_block(st)
    f.write dsl_footer
  end
end

Private Instance Methods

default_scope() click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 410
def default_scope
  @default_scope ||= most_frequent_scope
end
dsl_block(snippets) click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 395
def dsl_block(snippets)
  return '' if snippets.empty?
  dsl = ''
  dsl << "  file_format :textmate\n" if snippets.first.file_format == :textmate
  sort(snippets).each do |s|
    dsl << "\n#{s.to_dsl(default_scope)}"
  end

  dsl
end
dsl_header() click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 385
      def dsl_header
        <<-HEADER.dedent
          # encoding: utf-8

          snippets do

            default_scope #{default_scope.to_source}
        HEADER
      end
most_frequent_scope() click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 414
def most_frequent_scope
  scope = nil
  max_count = 0
  sort(self.snippets).group_by(&:scope).each_pair do |s,v|
    if s && v.length > max_count
      scope = s
      max_count = v.length
    end
  end

  scope
end
sort(snippets) click to toggle source

Returns snippets sorted by tab_trigger and name.

# File lib/sublime_dsl/textmate/snippet.rb, line 428
def sort(snippets)
  snippets.sort_by { |s| [s.tab_trigger.to_s.downcase, s.name.to_s.downcase] }
end