Guest User

Untitled

a guest
Feb 21st, 2018
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.88 KB | None | 0 0
  1. ## in my controller's namespace
  2. module Responder
  3. def respond_to
  4. yield response = Response.new(env)
  5. response.body
  6. end
  7.  
  8. class Response
  9. attr_reader :body, :env
  10. def initialize(env) @env = env end
  11.  
  12. TYPES = {
  13. :yaml => %w[application/yaml text/yaml],
  14. :text => %w[text/plain],
  15. :html => %w[*/* text/html application/html]
  16. }
  17.  
  18. def method_missing(method, *args)
  19. if TYPES[method] && env.HTTP_ACCEPT =~ Regexp.union(*TYPES[method])
  20. @body = yield if block_given?
  21. end
  22. end
  23. end
  24. end
  25.  
  26.  
  27. ## now my actual class
  28. class Diff < R '/d/(\w+)/(\d+)', '/d/(\w+)/(\d+)/(\d+)'
  29. include Responder
  30.  
  31. def get(title, old_version, new_version = nil)
  32. @sheet = Sheet.find_by_title(title)
  33. old_sheet = @sheet.find_version(old_version)
  34. new_sheet = (new_version ? @sheet.find_version(new_version) : @sheet)
  35.  
  36. @diffed = Diffr.diff(old_sheet, new_sheet) rescue nil
  37.  
  38. respond_to do |wants|
  39. wants.html { render :diff }
  40. wants.yaml { @diffed.to_yaml }
  41. end
  42. end
  43. end
Add Comment
Please, Sign In to add comment