Class: Linkage::Expectations::Simple

Inherits:
Linkage::Expectation show all
Defined in:
lib/linkage/expectations/simple.rb

Direct Known Subclasses

Filter, Match

Constant Summary collapse

VALID_OPERATORS =
[:==, :'!=', :>, :<, :>=, :<=]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Linkage::Expectation

#apply_to, #kind

Constructor Details

#initialize(meta_object_1, meta_object_2, operator) ⇒ Simple

Creates a new Simple.

Parameters:



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/linkage/expectations/simple.rb', line 45

def initialize(meta_object_1, meta_object_2, operator)
  @meta_object_1 = meta_object_1
  @meta_object_2 = meta_object_2
  @operator = operator

  if !VALID_OPERATORS.include?(operator)
    raise ArgumentError, "Invalid operator: #{operator.inspect}"
  end

  after_initialize
end

Instance Attribute Details

#meta_object_1Object (readonly)

Returns the value of attribute meta_object_1.



9
10
11
# File 'lib/linkage/expectations/simple.rb', line 9

def meta_object_1
  @meta_object_1
end

#meta_object_2Object (readonly)

Returns the value of attribute meta_object_2.



9
10
11
# File 'lib/linkage/expectations/simple.rb', line 9

def meta_object_2
  @meta_object_2
end

#operatorObject (readonly)

Returns the value of attribute operator.



9
10
11
# File 'lib/linkage/expectations/simple.rb', line 9

def operator
  @operator
end

#sideSymbol (readonly)

The dataset this expectation applies to: ‘:lhs` or `:rhs`. This only applies to filter expectations.

Returns:

  • (Symbol)


7
8
9
# File 'lib/linkage/expectations/simple.rb', line 7

def side
  @side
end

Class Method Details

.create(meta_object_1, meta_object_2, operator) ⇒ Object

Automatically create an expectation type depending on the arguments.

Parameters:



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/linkage/expectations/simple.rb', line 18

def self.create(meta_object_1, meta_object_2, operator)
  klass =
    if meta_object_1.static? && meta_object_2.static?
      raise ArgumentError, "An expectation with two static objects is invalid"
    elsif meta_object_1.static? || meta_object_2.static?
      Filter
    elsif meta_object_1.side == meta_object_2.side
      if !meta_object_1.datasets_equal?(meta_object_2)
        raise ArgumentError, "An expectation with two dynamic objects with the same side but different datasets is invalid"
      end
      Filter
    elsif meta_object_1.objects_equal?(meta_object_2)
      Self
    elsif meta_object_1.datasets_equal?(meta_object_2)
      Cross
    else
      Dual
    end

  klass.new(meta_object_1, meta_object_2, operator)
end

Instance Method Details

#decollation_needed?Boolean

Returns:

  • (Boolean)


75
76
77
78
79
80
# File 'lib/linkage/expectations/simple.rb', line 75

def decollation_needed?
  merged_field.ruby_type[:type] == String && (
    @meta_object_1.collation != @meta_object_2.collation ||
    @meta_object_1.database_type != @meta_object_2.database_type
  )
end

#display_warningsObject

Display any warnings about this expectation.



72
73
# File 'lib/linkage/expectations/simple.rb', line 72

def display_warnings
end

#exactly!Object



64
65
66
67
68
69
# File 'lib/linkage/expectations/simple.rb', line 64

def exactly!
  function_1 = Function['binary'].new(@meta_object_1.object, :dataset => @meta_object_1.dataset)
  function_2 = Function['binary'].new(@meta_object_2.object, :dataset => @meta_object_2.dataset)
  @meta_object_1 = MetaObject.new(function_1, @meta_object_1.side)
  @meta_object_2 = MetaObject.new(function_2, @meta_object_2.side)
end

#same_except_side?(other) ⇒ Boolean

Returns:

  • (Boolean)


57
58
59
60
61
62
# File 'lib/linkage/expectations/simple.rb', line 57

def same_except_side?(other)
  other.is_a?(Simple) &&
    operator == other.operator &&
    meta_object_1.objects_equal?(other.meta_object_1) &&
    meta_object_2.objects_equal?(other.meta_object_2)
end