Sha256: 393f9d0570fa8e39a00f3d80f4204d6b371089bba3eb5f8b69aa3a30c3e00b1a

Contents?: true

Size: 1.98 KB

Versions: 4

Compression:

Stored size: 1.98 KB

Contents

require_relative 'base'
require_relative 'tag_group'

class WCC::Media::Message < WCC::Media::Base
  active_record_shim do
    endpoint 'messages'
    filters %w[
      on_or_after_date
      on_or_before_date
      tag_id
      playlist_id
      speaker_id
      scripture_book_id
      series_id
      title_like
      legacy_id
    ].freeze
  end

  %w[
    date
    duration
    title
    subtitle
    description
    series_position
    slug
    campus_names
    topic
    topics
  ].each do |att|
    define_method att do
      raw[att]
    end
  end

  def speakers
    (raw['speakers'] || []).map { |val| WCC::Media::Speaker.new(val) }
  end

  def playlists
    (raw['playlists'] || []).map { |val| WCC::Media::Playlist.new(val) }
  end

  def tags
    (raw['tags'] || []).map { |val| WCC::Media::Tag.new(val) }
  end

  %w[
    scripture_references
    downloads
  ].each do |att|
    define_method att do
      (raw[att] || []).map { |val| OpenStruct.new(val) }
    end
  end

  def series
    WCC::Media::Series.new(raw['series']) if raw['series']
  end

  %w[
    meta
    embeds
    assets
    images
    external_urls
    transcript
    sermon_guide
    _clips
    _formatted
    _stats
  ].each do |att|
    define_method att do
      OpenStruct.new(raw[att]) if raw[att]
    end
  end

  def has_video? # rubocop:disable Naming/PredicateName
    assets.each_pair
      .any? { |k, v| /video/.match(k) && v && !v.empty? }
  end

  def has_audio? # rubocop:disable Naming/PredicateName
    assets.each_pair
      .any? { |k, v| /^audio/.match(k) && v && !v.empty? }
  end

  def to_param
    "#{id}-#{slug}"
  end

  WCC::Media::TagGroup.all.each do |tag_group|
    method_name = tag_group.name.downcase.to_sym
    # except :meta (different definition above)
    next if instance_methods.include?(method_name)

    define_method(method_name) do
      tags.select { |t| t.tag_group == tag_group }
    end
  end
  # pluralize "campus" specifically
  alias_method :campuses, :campus
  remove_method :campus
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
wcc-media-client-0.4.14 lib/wcc/media/message.rb
wcc-media-client-0.4.13 lib/wcc/media/message.rb
wcc-media-client-0.4.12 lib/wcc/media/message.rb
wcc-media-client-0.4.11 lib/wcc/media/message.rb