class Flyyer::Flyyer
Attributes
meta[RW]
path[RW]
project[RW]
secret[RW]
strategy[RW]
variables[RW]
Public Class Methods
create(&block)
click to toggle source
# File lib/flyyer.rb, line 12 def self.create(&block) self.new(&block) end
new(project = nil, path = nil, variables = {}, meta = {}, secret = nil, strategy = nil) { |self| ... }
click to toggle source
# File lib/flyyer.rb, line 16 def initialize(project = nil, path = nil, variables = {}, meta = {}, secret = nil, strategy = nil) @project = project @path = path || "/" @variables = variables @meta = meta @secret = secret @strategy = strategy yield(self) if block_given? end
Public Instance Methods
href()
click to toggle source
Create a FLYYER.io string. If you are on Ruby on Rails please use .html_safe when rendering this string into the HTML
# File lib/flyyer.rb, line 77 def href raise Error.new('Missing "project" property') if @project.nil? signature = self.sign params = self.querystring if strategy.nil? || strategy != "JWT" then "https://cdn.flyyer.io/v2/#{@project}/#{signature}/#{params}#{self.path_safe}" else "https://cdn.flyyer.io/v2/#{@project}/jwt-#{signature}?__v=#{@meta[:v] || Time.now.to_i}" end end
params_hash(ignoreV)
click to toggle source
# File lib/flyyer.rb, line 30 def params_hash(ignoreV) defaults = { __v: @meta[:v] || Time.now.to_i, # This forces crawlers to refresh the image __id: @meta[:id] || nil, _w: @meta[:width] || nil, _h: @meta[:height] || nil, _res: @meta[:resolution] || nil, _ua: @meta[:agent] || nil } defaults.delete(:__v) if ignoreV @variables.nil? ? defaults : defaults.merge(@variables) end
path_safe()
click to toggle source
# File lib/flyyer.rb, line 26 def path_safe @path.start_with?("/") ? @path : "/#{@path}" end
querystring(ignoreV = false)
click to toggle source
# File lib/flyyer.rb, line 43 def querystring(ignoreV = false) # Allow accesing the keys of @meta with symbols and strings # https://stackoverflow.com/a/10786575 @meta.default_proc = proc do |h, k| case k when String then sym = k.to_sym; h[sym] if h.key?(sym) when Symbol then str = k.to_s; h[str] if h.key?(str) end end defaults = self.params_hash(ignoreV) result = FlyyerHash.new(defaults) result.to_query.split("&").sort().join("&") end
sign()
click to toggle source
# File lib/flyyer.rb, line 58 def sign return '_' if @strategy.nil? and @secret.nil? raise Error.new('Got `strategy` but missing `secret`. You can find it in your project in Advanced settings.') if @secret.nil? raise Error.new('Got `secret` but missing `strategy`. Valid options are `HMAC` or `JWT`.') if @strategy.nil? key = @secret data = "#{@project}#{self.path_safe}#{self.querystring(true)}" if strategy.downcase == "hmac" then mac = OpenSSL::HMAC.hexdigest('SHA256', key, data) mac[0..15] elsif strategy.downcase == "jwt" payload = { "params": self.params_hash(true).compact, "path": self.path_safe} JWT.encode(payload, key, 'HS256') else raise Error.new('Invalid `strategy`. Valid options are `HMAC` or `JWT`.') end end