Module: Embeddable::ClassMethods

Defined in:
lib/embeddable.rb

Instance Method Summary collapse

Instance Method Details

#embeddable(name, options = {}) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/embeddable.rb', line 35

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

  SERVICES.each do |service, pattern|

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

  end
end