app/models/filter_set.rb

Summary

Maintainability
A
2 hrs
Test Coverage
# -*- encoding : utf-8 -*-
class FilterSet < MediaResourceCollection
  store :settings

  def media_type
    self.type.gsub(/Media/, '')
  end

  def get_filter
    settings[:filter] || {} 
  end

  def filtered_resources(user)
    settings[:filter] ||= {}
    MediaResource.filter(user, settings[:filter])
  end

  def included_resources_accessible_by_user user, action
    filtered_resources user
  end

  def get_media_file(user = nil)
    # we just provide the first public media_entry's image
    # we provide random image for filter sets
    resources = filtered_resources(user).media_entries.where(view: true)
    c = resources.count
    resources.reorder(:created_at,:id).offset(rand(c)).first.try(:media_file)
  end

  def sections possible_filters
    sections = []
    filter = self.get_filter[:meta_data]
    if filter
      filter.each_pair do |k,v|
        next unless v[:ids].include? "any"
        next unless existing_filter = possible_filters.detect{|x| x[:keys].detect{|y| y[:key_name] == "#{k}"} }
        existing_filter[:keys].detect{|y| y[:key_name] == "#{k}" }[:terms].each do |term|
          sections << { :id => term[:id],
                        :key => k,
                        :name => term[:value],
                        :count => term[:count],
                        :image => begin
                          resources = MediaEntry.filter(nil, {:meta_data => {k => {:ids => [term[:id]]}}}).where(view: true)
                          c = resources.count
                          media_file = resources.ordered_by(:updated_at).offset(rand(c)).first.try(:media_file)
                          # TODO consider provide url images instead of base64
                          media_file.thumb_base64(:medium) unless media_file.nil?
                        end
                      }
        end
      end
      sections
    else
      []
    end
  end

end