Sha256: a05caa6d34103c7344fd9e160bbe98c608e503168fc11600175aa3198f4f4e2a

Contents?: true

Size: 1.41 KB

Versions: 3

Compression:

Stored size: 1.41 KB

Contents

module HasMachineTags
  # Provides named_scopes and class methods to the Tag model, useful in machine tag analysis from the console.
  # To use:
  #   class Tag
  #     include HasMachineTags::TagConsole
  #   end
  module TagConsole
    def self.included(base) #:nodoc:
      scope = ActiveRecord::VERSION::STRING >= '3.0' ? 'scope' : 'named_scope'
      base.class_eval %[
        self.#{scope} :namespace_counts, :select=>'*, namespace as counter, count(namespace) as count', :group=>"namespace HAVING count(namespace)>=1"
        self.#{scope} :predicate_counts, :select=>'*, predicate as counter, count(predicate) as count', :group=>"predicate HAVING count(predicate)>=1"
        self.#{scope} :value_counts, :select=>'*, value as counter, count(value) as count', :group=>"value HAVING count(value)>=1"
        self.#{scope} :distinct_namespaces, :select=>"distinct namespace"
        self.#{scope} :distinct_predicates, :select=>"distinct predicate"
        self.#{scope} :distinct_values, :select=>"distinct value"
      ]
      base.extend ClassMethods
    end
    
    module ClassMethods
      # Array of words in namespace field
      def namespaces; distinct_namespaces.map(&:namespace).compact; end
      # Array of words in predicate field
      def predicates; distinct_predicates.map(&:predicate).compact; end
      # Array of words in value field
      def values; distinct_values.map(&:value).compact; end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
has_machine_tags-0.2.2 lib/has_machine_tags/tag_console.rb
has_machine_tags-0.2.1 lib/has_machine_tags/tag_console.rb
has_machine_tags-0.2.0 lib/has_machine_tags/tag_console.rb