Sha256: 0a81104e55c08b8c12338124ba3fcc1df160a3af9eb13c1d16716b539ff45091

Contents?: true

Size: 1.49 KB

Versions: 4

Compression:

Stored size: 1.49 KB

Contents

module RestPack::Activity::Service::Models
  class Activity < Base
    self.restpack_table_name :activities

    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

4 entries across 4 versions & 1 rubygems

Version Path
restpack_activity_service-0.0.9 lib/restpack_activity_service/models/activity.rb
restpack_activity_service-0.0.8 lib/restpack_activity_service/models/activity.rb
restpack_activity_service-0.0.7 lib/restpack_activity_service/models/activity.rb
restpack_activity_service-0.0.5 lib/restpack_activity_service/models/activity.rb