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