Class: SmqlToAR::ConditionTypes::Condition
- Inherits:
-
Object
- Object
- SmqlToAR::ConditionTypes::Condition
- Extended by:
- Assertion
- Includes:
- Assertion
- Defined in:
- lib/smql_to_ar/condition_types.rb
Direct Known Subclasses
EqualJoin, Functions, NotIn, NotInRange, Overlaps, Select, StringTimeGreaterThanOrEqual
Constant Summary collapse
- Operator =
nil
- Expected =
[]
- Where =
nil
Instance Attribute Summary collapse
-
#cols ⇒ Object
readonly
Returns the value of attribute cols.
-
#value ⇒ Object
readonly
Returns the value of attribute value.
Class Method Summary collapse
- .inspect ⇒ Object
-
.try_parse(model, cols, op, val) ⇒ Object
Versuche das Objekt zu erkennen.
Instance Method Summary collapse
-
#condition_build(builder, table) ⇒ Object
(also: #build)
Erstelle alle noetigen Klauseln.
-
#initialize(model, cols, val) ⇒ Condition
constructor
A new instance of Condition.
- #inspect ⇒ Object
- #verify ⇒ Object
-
#verify_allowed(col) ⇒ Object
Modelle koennen Spalten/Relationen verbieten mit Model#smql_protected.
-
#verify_column(col) ⇒ Object
Gibt es eine Spalte diesen Namens? Oder: Gibt es eine Relation diesen Namens? (Hier nicht der Fall).
Methods included from Assertion
Constructor Details
#initialize(model, cols, val) ⇒ Condition
Returns a new instance of Condition.
114 115 116 117 118 119 120 121 122 |
# File 'lib/smql_to_ar/condition_types.rb', line 114 def initialize model, cols, val #p init: self, caller: caller @model, @cols = model, cols @value = case val when Hash, Range then val else Array.wrap val end verify end |
Instance Attribute Details
#cols ⇒ Object (readonly)
Returns the value of attribute cols.
96 97 98 |
# File 'lib/smql_to_ar/condition_types.rb', line 96 def cols @cols end |
#value ⇒ Object (readonly)
Returns the value of attribute value.
96 97 98 |
# File 'lib/smql_to_ar/condition_types.rb', line 96 def value @value end |
Class Method Details
.inspect ⇒ Object
109 110 111 |
# File 'lib/smql_to_ar/condition_types.rb', line 109 def inspect "#{self.name}( :operator=>#{self::Operator.inspect}, :expected=>#{self::Expected.inspect}, :where=>#{self::Where.inspect})" end |
.try_parse(model, cols, op, val) ⇒ Object
Versuche das Objekt zu erkennen. Operator und Expected muessen passen. Passt das Object, die Klasse instanzieren.
104 105 106 107 |
# File 'lib/smql_to_ar/condition_types.rb', line 104 def try_parse model, cols, op, val #p :class => self, :self => name, :try_parse => op, :cols => cols, :with => self::Operator, :value => val, :expected => self::Expected, :model => model.name new model, cols, val if self::Operator === op and self::Expected.any? {|x| x === val} end |
Instance Method Details
#condition_build(builder, table) ⇒ Object Also known as: build
Erstelle alle noetigen Klauseln. builder nimmt diese entgegen, wobei builder.joins, builder.select, builder.where und builder.wobs von interesse sind. mehrere Schluessel bedeuten, dass die Values alle zutreffen muessen, wobei die Schluessel geODERt werden. Ex: 1) “Peter” #=> givenname = ‘Peter’ 2) [“Peter”, “Hans”] #=> ( givenname = ‘Peter’ OR givenname = ‘Hans’ ) 3) [“Peter”, “Mueller”]
#=> ( givenname = 'Peter' OR surname = 'Peter' ) AND ( givenname = 'Mueller' OR surname = 'Mueller' )
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/smql_to_ar/condition_types.rb', line 156 def condition_build builder, table values = Hash[ @value.collect {|value| [ builder.vid, value ] } ] values.each {|k, v| builder.wobs k.to_sym => v } if 1 == @cols.length @cols.each do |col| col.joins builder, table col = builder.column table+col.path, col.col builder.where values.keys.collect {|vid| self.class::Where % [ col, vid.to_s ] } end else b2 = SmqlToAR::And.new builder values.keys.each do |vid| b2.where SmqlToAR::Or[ *@cols.collect {|col| col.joins builder, table col = builder.column table+col.path, col.col self.class::Where % [ col, vid.to_s ] }] end end self end |
#inspect ⇒ Object
124 125 126 |
# File 'lib/smql_to_ar/condition_types.rb', line 124 def inspect "#<#{self.class.name}:0x#{(self.object_id<<1).to_s 16} model: #{self.class.name}, cols: #{@cols.inspect}, value: #{@value.inspect}>" end |
#verify ⇒ Object
128 129 130 131 132 133 |
# File 'lib/smql_to_ar/condition_types.rb', line 128 def verify @cols.each do |col| verify_column col verify_allowed col end end |
#verify_allowed(col) ⇒ Object
Modelle koennen Spalten/Relationen verbieten mit Model#smql_protected. Dieses muss ein Object mit #include?( name_als_string) zurueckliefern, welches true fuer verboten und false fuer, erlaubt steht.
144 145 146 |
# File 'lib/smql_to_ar/condition_types.rb', line 144 def verify_allowed col raise_if col.protected?, ProtectedColumnError.new( col) end |
#verify_column(col) ⇒ Object
Gibt es eine Spalte diesen Namens? Oder: Gibt es eine Relation diesen Namens? (Hier nicht der Fall)
137 138 139 |
# File 'lib/smql_to_ar/condition_types.rb', line 137 def verify_column col raise_unless col.exist_in?, NonExistingColumnError.new( %w[Column], col) end |