Class: Magickly::App

Inherits:
Sinatra::Base
  • Object
show all
Defined in:
lib/magickly/app.rb

Direct Known Subclasses

MagicklyApp

Constant Summary collapse

RESERVED_PARAMS =
['src']
DEMO_IMAGE =
'http://farm4.static.flickr.com/3351/3450592233_c29fde01ef_z.jpg'

Instance Method Summary collapse

Instance Method Details

#ordered_optionsObject



102
103
104
105
106
107
108
109
# File 'lib/magickly/app.rb', line 102

def ordered_options
  options = ActiveSupport::OrderedHash.new
  request.query_string.split('&').each do |e|
    k,v = e.split('=')
    options[k] = URI.unescape(v) unless RESERVED_PARAMS.include?(k)
  end
  options
end

#process_path(splat) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/magickly/app.rb', line 66

def process_path splat
  src = nil
  opts = []

  splat.split('/').each_slice(2) do |k, v|
    if RESERVED_PARAMS.include? k
      if k == 'src'
        src = URI.unescape(v)
        # slashes come in double-escaped by Apache so we
        # need to unescape again
        src = URI.unescape(src) if src =~ /%2F/
      end
    else
      opts << [k, URI.unescape(v)]
    end
  end

  process_src_or_display_demo src, opts
end

#process_src_or_display_demo(src, options) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/magickly/app.rb', line 86

def process_src_or_display_demo src, options
  if src
    # process image
    url = uri_to_url src
    image = Magickly.process_src(url, options)
    image.to_response(env)
  else
    # display demo page

    # get combined list of jobs and processor methods
    @methods = ( Magickly.dragonfly.job_methods | Magickly.dragonfly.processor_methods )
    @methods.sort!{|m1, m2| m1.to_s <=> m2.to_s }
    erb :index
  end
end

#uri_to_url(uri) ⇒ Object



111
112
113
114
115
# File 'lib/magickly/app.rb', line 111

def uri_to_url(uri)
  url = Addressable::URI.parse(uri)
  url.site ||= Addressable::URI.parse(request.url).site
  url.to_s
end