Sha256: 157534a97cda5ca9a7ea7cfd0c1b61868c9668be4104f923d4b3bd4988fde258

Contents?: true

Size: 757 Bytes

Versions: 9

Compression:

Stored size: 757 Bytes

Contents

require "apple-news/components/base"
require "apple-news/components/text"
require "apple-news/components/audio"
require "apple-news/components/image"
require "apple-news/components/scalable_image"
Dir["#{File.dirname(__FILE__)}/components/*.rb"].each { |path| require path }

module AppleNews
  module Component
    extend self

    def factory(data)
      return if data.nil?
      
      components.each do |component|
        if component.role == data[:role]
          return component.new(data)
        end
      end

      nil
    end

    private

    def components
      @components ||= self.constants.
        map { |const| self.const_get(const) }.
        select { |const| const.name.demodulize != "Base" && const.is_a?(Class) }
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
apple-news-0.4.0 lib/apple-news/component.rb
apple-news-0.3.1 lib/apple-news/component.rb
apple-news-0.3.0 lib/apple-news/component.rb
apple-news-0.2.5 lib/apple-news/component.rb
apple-news-0.2.4 lib/apple-news/component.rb
apple-news-0.2.3 lib/apple-news/component.rb
apple-news-0.2.2 lib/apple-news/component.rb
apple-news-0.2.1 lib/apple-news/component.rb
apple-news-0.2.0 lib/apple-news/component.rb