Skip to content

Instantly share code, notes, and snippets.

@Genki-S
Created March 14, 2014 21:45
Show Gist options
  • Save Genki-S/9557643 to your computer and use it in GitHub Desktop.
Save Genki-S/9557643 to your computer and use it in GitHub Desktop.
require 'set'
class SnippetGenerator
def initialize
@done = Set.new
end
def snippet_from_trigger_and_expansion(trigger, expansion, options = {})
return nil if @done.include?(trigger)
@done.add(trigger)
prefix = options[:prefix] || ''
suffix = options[:suffix] || ''
snippet = <<EOS
snippet #{prefix}#{trigger}#{suffix}
abbr #{expansion}
options word
#{expansion}
EOS
end
def snippets_from_camel(name, options = {})
snippets = []
trigger = name.scan(/[[:upper:]]/).join('').downcase
expansion = name
snippets << snippet_from_trigger_and_expansion(trigger, expansion, options)
trigger += '_'
expansion = name.underscore
snippets << snippet_from_trigger_and_expansion(trigger, expansion, options)
snippets
end
def snippets_from_model(name, options = {})
snippets = []
names = name.split('::')
names.each do |name|
snippets << snippets_from_camel(name, options)
end
trigger = name.gsub('::', ':').scan(/([[:upper:]]|:)/).join('').downcase
expansion = name
snippets << snippet_from_trigger_and_expansion(trigger, expansion, options)
trigger += '_'
expansion = name.underscore.gsub('/', '_')
snippets << snippet_from_trigger_and_expansion(trigger, expansion, options)
snippets
end
def run(options = {})
Dir.glob('app/models/**/*.rb').each do |path|
model_path = path.sub(/.*app\/models\//, '').sub(/\.rb$/, '')
model_name = model_path.gsub('/', '::_').camelize
snippets = snippets_from_model(model_name, options)
puts snippets.compact
end
end
end
SnippetGenerator.new.run(suffix: ';')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment