Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## in my controller's namespace
- module Responder
- def respond_to
- yield response = Response.new(env)
- response.body
- end
- class Response
- attr_reader :body, :env
- def initialize(env) @env = env end
- TYPES = {
- :yaml => %w[application/yaml text/yaml],
- :text => %w[text/plain],
- :html => %w[*/* text/html application/html]
- }
- def method_missing(method, *args)
- if TYPES[method] && env.HTTP_ACCEPT =~ Regexp.union(*TYPES[method])
- @body = yield if block_given?
- end
- end
- end
- end
- ## now my actual class
- class Diff < R '/d/(\w+)/(\d+)', '/d/(\w+)/(\d+)/(\d+)'
- include Responder
- def get(title, old_version, new_version = nil)
- @sheet = Sheet.find_by_title(title)
- old_sheet = @sheet.find_version(old_version)
- new_sheet = (new_version ? @sheet.find_version(new_version) : @sheet)
- @diffed = Diffr.diff(old_sheet, new_sheet) rescue nil
- respond_to do |wants|
- wants.html { render :diff }
- wants.yaml { @diffed.to_yaml }
- end
- end
- end
Add Comment
Please, Sign In to add comment