lib/xray-rails.rb in xray-rails-0.1.23 vs lib/xray-rails.rb in xray-rails-0.2.0

- old
+ new

@@ -15,55 +15,9 @@ # the Xray bar. def self.request_info Thread.current[:request_info] ||= {} end - # Patterns for the kind of JS constructors Xray is interested in knowing the - # filepath of. Unforunately, these patterns will result in a lot of false - # positives, because we can't only match direct Backbone.View subclasses - - # the app's JS may have a more complex class hierarchy than that. - CONSTRUCTOR_PATTERNS = [ - '(?!jQuery|_)[\w\.]+\.extend\({', # Match uses of extend(), excluding jQuery and underscore - '\(function\(_super\) {' # Coffeescript-generated constructors - ] - - # Example matches: - # MyView = Backbone.View.extend({ ... - # Foo.MyView = Backbone.View.extend({ ... - # MyView = (function(_super) { ... - # - # Captures: - # $1 = space before the constructor - # $2 = the constructor's name - # $3 = the beginning of the constructor function - CONSTRUCTOR_REGEX = /^( *)([\w\.]+) *= *(#{CONSTRUCTOR_PATTERNS.join('|')})/ - - # Returns augmented JS source where constructors Xray wants to know the - # filepath of are captured in such a way that at runtime, xray.js can look - # up a view constructor's filepath and name. - # - # This: - # MyView = Backbone.View.extend({ ... - # - # Becomes: - # MyView = (window.XrayPaths||(window.XrayPaths={}))['{"name":"MyView","path":"/path/to/file.js"}'] = Backbone.View.extend({ ... - # - # A goal here was to not add any new lines to the source so as not to throw - # off line numbers if an exception is thrown, hence the odd pattern of - # abusing an object set operation in a multiple assignment. - # - # TODO: This is simple and gets the job done, but is a bit ridiculous. - # I've also seen this appear in stack traces :( Would love to find a - # way to do this without actually writing to the files. - def self.augment_js(source, path) - source.gsub(CONSTRUCTOR_REGEX) do - space, class_name, func = $1, $2, $3 - info = {name: class_name, path: path.to_s} - xray = "(window.XrayPaths||(window.XrayPaths={}))['#{info.to_json}']" - "#{space}#{class_name} = #{xray} = #{func}" - end - end - # Returns augmented HTML where the source is simply wrapped in an HTML # comment with filepath info. Xray.js uses these comments to associate # elements with the templates that rendered them. # # This: