Skip to content

Instantly share code, notes, and snippets.

@itsbth
Created December 22, 2011 15:43
Show Gist options
  • Select an option

  • Save itsbth/1510728 to your computer and use it in GitHub Desktop.

Select an option

Save itsbth/1510728 to your computer and use it in GitHub Desktop.
Uploaded by UploadToGist for Sublime Text 2
import re
import sublime_plugin
from os import path
IS_RAILS = re.compile(r'(/app/(controllers|helpers|mailers|models)/|/config/routes|/db/migrate/).+\.rb$')
class GuessRubyTypeListener(sublime_plugin.EventListener):
def on_load(self, view):
name = view.file_name()
if IS_RAILS.search(name):
view.set_syntax_file('Packages/Rails/Ruby on Rails.tmLanguage')
class ExtractPartialCommand(sublime_plugin.TextCommand):
def run(self, edit, name=None):
if name:
self.apply(name)
else:
self.view.window().show_input_panel(
"Partial name (without underscore)",
"shared/spam",
self.apply,
None,
None
)
def apply(self, name):
edit = self.view.begin_edit()
try:
region = self.view.sel()[0]
region = self.view.line(region)
text = self.view.substr(region)
text, indent = self.clean_ws(text)
filename = path.dirname(self.view.file_name())
if '/' in name:
folder, fn = path.split(name)
filename = path.dirname(filename)
filename += "/{0}/_{1}.html.haml".format(folder, fn)
else:
filename += "/_{0}.html.haml".format(name)
with open(filename, 'w+') as f:
f.write(text)
self.view.replace(edit, region, "{0}= render partial: '{1}'".format(self.indent() * indent, name))
self.view.window().open_file(filename)
finally:
self.view.end_edit(edit)
def is_visible(self):
return self.view.settings().get('syntax') == 'Packages/Rails/Ruby Haml.tmLanguage'
def clean_ws(self, text):
lines = text.split('\n')
indent = re.search('^{0}*'.format(self.indent()), lines[0]).end()
return '\n'.join(map(lambda l: l[indent:], lines)), indent / len(self.indent())
def indent(self):
return ' ' * self.view.settings().get('tab_size') \
if self.view.settings().get('translate_tabs_to_spaces') else '\t'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment