module Embeddable::ClassMethods

Attributes

embeddables[R]

Public Instance Methods

embeddable(name, options = {}) click to toggle source
# File lib/embeddable.rb, line 41
def embeddable(name, options = {})
  source = options.fetch :from

  define_method "#{name}_type" do
    url = send(source)
    return if url.blank?

    SERVICES.map do |service, patterns|
      service if patterns.any? { |pattern| url[pattern] }
    end.compact.first
  end

  define_method "#{name}_id" do
    url = send(source)
    return if url.blank?

    SERVICES.map do |service, patterns|
      patterns.map { |pattern| url[pattern, 1] }
    end.flatten.compact.first
  end

  define_method "#{name}?" do
    send("#{name}_id") ? true : false
  end

  SERVICES.each do |service, pattern|

    define_method "#{name}_on_#{service}?" do
      send("#{name}_type") == service
    end

  end

  define_method "#{name}_source" do
    source
  end

  @embeddables << name
end