Sha256: 7e0e77734bd89f1b875f3d5da2fbd5d9419844e29b2922897eeb2c4ae3132c48

Contents?: true

Size: 1.57 KB

Versions: 5

Compression:

Stored size: 1.57 KB

Contents

require 'set_builder/constraint'
require 'set_builder/modifier'


module SetBuilder
  class Trait
    
    
    
    def initialize(name, part_of_speech, *args, &block)
      case name
      when Hash
        @name, @direct_object_type = name.first[0].to_s, name.first[1]
      else
        @name = name.to_s
      end
      @part_of_speech, @block = part_of_speech, block
      @modifiers = (args||[]).collect {|modifier| Modifier[modifier]}
    end
    
    
    
    attr_reader :name, :part_of_speech, :modifiers, :direct_object_type
    
    
    
    def requires_direct_object?
      !@direct_object_type.nil?
    end
    alias :direct_object_required? :requires_direct_object?
    
    
    
    def noun?
      (self.part_of_speech == :noun)
    end
    
    
    
    def to_s(negative=false)
      case part_of_speech
      when :active
        negative ? "who have not #{name}" : "who #{name}"
      when :perfect
        negative ? "who have not #{name}" : "who have #{name}"
      when :passive
        negative ? "who were not #{name}" : "who were #{name}"
      when :reflexive
        negative ? "who are not #{name}" : "who are #{name}"
      when :noun
        "whose #{name}"
      end
    end
    
    
    
    def to_json
      array = []
      array << (requires_direct_object? ? [name, @direct_object_type] : name)
      array << part_of_speech
      array << modifiers.collect{|klass| Modifier.name(klass)} unless modifiers.empty?
      array.to_json
    end
    
    
    
    def apply(*args)
      SetBuilder::Constraint.new(self, *args, &@block)
    end
    
    
    
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
set_builder-1.2.0.beta3 lib/set_builder/trait.rb
set_builder-1.2.0.beta2 lib/set_builder/trait.rb
set_builder-1.2.0.beta1 lib/set_builder/trait.rb
set_builder-1.1.0 lib/set_builder/trait.rb
set_builder-1.0.2 lib/set_builder/trait.rb