Sha256: bc7fa1374f05192fd8a2d92d23a0a5fc1bfdb6b26570455549165057305c3827

Contents?: true

Size: 1.63 KB

Versions: 1

Compression:

Stored size: 1.63 KB

Contents

module Models::Activities
  class Activity < ActiveRecord::Base
    self.table_name = :restpack_activity_activities

    attr_accessible :application_id, :user_id, :title, :content,
                    :latitude, :longitude, :data, :tags, :access

    def self.search(query)
      conditions = <<-EOS
        search_vector @@ plainto_tsquery('english', ?)
      EOS

      where(conditions, query)
    end

    scope :any_tags, -> (tags) { where('tag_list && ARRAY[?]', tags) }
    scope :all_tags, -> (tags) { where('tag_list @> ARRAY[?]', tags) }

    scope :any_tags_csv, -> (tags_csv, namespace = '') do
      any_tags(parse_tags_csv(tags_csv, namespace))
    end
    scope :all_tags_csv, -> (tags_csv, namespace = '') do
      all_tags(parse_tags_csv(tags_csv, namespace))
    end

    def tags=(tags_csv)
      set_tags(tags_csv)
    end

    def tags
      get_tags
    end

    def access=(access_csv)
      set_tags(access_csv, :access)
    end

    def access
      get_tags(:access)
    end

    private

    def set_tags(tags_csv, namespace = '')
      tags_csv = tags_csv.delete('|')
      clear_tags(namespace)

      self.tag_list += self.class.parse_tags_csv(tags_csv, namespace)
      self.tag_list.uniq!
    end

    def clear_tags(namespace = '')
      self.tag_list = self.tag_list.reject {|tag| tag.start_with?("#{namespace}|")}
    end

    def get_tags(namespace = '')
      tags = self.tag_list.select {|tag| tag.start_with?("#{namespace}|")}
      tags.map {|tag| tag.gsub("#{namespace}|", '') }
    end

    def self.parse_tags_csv(tags_csv, namespace='')
      tags_csv.split(',').map {|tag| "#{namespace}|#{tag.strip}"}
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
restpack_activity_service-0.0.13 lib/restpack_activity_service/models/activity.rb