モジュール: Mongoid::Criteria::Queryable::Storable Private

次のドキュメントに含まれます。
Mongoid::Criteria::Queryable
定義:
lib/mongoid/criteria/queryable/storable.rb

Overview

このモジュールはプライベート API の一部です。 このモジュールは将来削除または変更される可能性があるため、可能な限り使用しないでください。

このモジュールは、クエリ式を Criteria のセレクターに書き込むメソッドをカプセル化します。

クエリ式は、必要に応じてすでに展開されている必要があります。 このモジュールのメソッドは、式値の処理を実行しません。

このモジュールのメソッドは否定を処理しません。否定が必要な場合は、これらのメソッドの前段階ですでに処理されている必要があります。

インスタンス メソッドの概要を折りたたむ

インスタンス メソッドの詳細

# add_field_ Expression (field, value) = 保存可能

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

クエリにフィールド式を追加します。

field はフィールド名で、string である必要があります。 このメソッドが呼び出されるまでに、上流のコードは他のフィールドまたはキーの型を単純なstringに変換している必要があります。

value は任意のタイプにすることができ、変更されずにセレクターに書き込まれます。

このメソッドは、指定されたフィールド値に対して処理を実行しません。

レシーバーをミューテーションします。

パラメーター:

  • フィールド ( string )

    フィールド名。

  • 価値 オブジェクト

    フィールドの値。

次の値を返します。



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# ファイル 'lib/mongoid/criteria/queryable/storable.rb' は、 36行

デフォルト add_field_式(フィールド, 価値)
  ただし、 フィールド.is_a?(文字列)
    発生 ArgumentError, "フィールドは string である必要があります: #{ field } "
  end

  場合 フィールド.start_with?('$')
    発生 ArgumentError, "フィールドは演算子にできません($ で始まる): #{ field } "
  end

  場合 セレクター[フィールド]
    # 試みているフィールドによる制限はすでにあります
    制限する場合は、制限を組み合わせます。
    場合 価値.is_a?(ハッシュ) & & セレクター[フィールド].is_a?(ハッシュ) & &
      価値.キー.すべて? { |キー|
        key_s = キー.to_s
        key_s.start_with?('$') & & !セレクター[フィールド].キー.map(&:to_s).include?(key_s)
      }
    次に
      複数の演算子を同じフィールドで結合できます。
      既存のハッシュにそれらを追加する 。
      new_value = セレクター[フィールド].merge(価値)
      セレクター.store(フィールド, new_value)
    elsif セレクター[フィールド] != 価値
      add_operator_式(' $and ', [{フィールド => 価値}])
    end
  else
    セレクター.store(フィールド, 価値)
  end

  自己
end

次の_論理_演算子_式(演算子、 op_expr==保存可能

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

論理演算子式を セレクター に追加します。

このメソッドは論理演算子のみを取り扱います($and、$nor、$or)。 別の演算子で呼び出された場合は、ArgumentError が発生します。 MQL では、$not はフィールドレベルの演算子であり、クエリレベルの演算子ではないため、$not はこのメソッドによって処理されないことに注意してください。

このメソッドは、呼び出し元の便宜上、演算子と演算子値式を個別に受け取ります。 ハッシュ{operator => op_expr}の保存を取り扱うことができます。

セレクターが、指定された演算子(最上位)である単一の条件で構成されている場合、 op_expr で指定された新しい条件が、指定された演算子の既存の条件に追加されます。 たとえば、セレクターが現在次の場合。

{'$or' => [{'hello' => 'world'}]}

... および 演算子が '$or' で、 op_expr が[{'rest' => 123 '}]であれば、結果のセレクターは次のようになります。

{'$or' => [{'hello' => 'world'}, {'test' => 123}]}

このメソッドでは、常に新しい条件が追加の要件として追加されます。つまり、レシーバーがオペランドの 1 つになる ActiveRecord や の動作は実装されていません。 このメソッドの前のコードでは、このような動作が実装されることが予想されています。

このメソッドは 値を簡素化しません(つまり、セレクターが現在空で、 演算子が $and の場合、$and が原則として省略できる場合でも、op_expr は $and を使用してセレクターに書き込まれます)。 このような簡素化は、上流のコードによってすでに実行されていることが予想されます。

このメソッドはレシーバーをミューテーションします。

パラメーター:

  • 演算子 ( string )

    追加する 演算子 。

  • op_expr <Hash>配列 )

    追加する演算子値。

次の値を返します。



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# ファイル 'lib/mongoid/criteria/queryable/storable.rb' は、 108行

デフォルト add_ logical_operator_ Expression(演算子, op_expr)
  ただし、 演算子.is_a?(文字列)
    発生 ArgumentError, "演算子は string である必要があります: #{ Operator } "
  end

  ただし、 %w($and $nor $or).include?(演算子)
    発生 ArgumentError, "このメソッドは論理演算子のみを取り扱います ($and、$nor、$or)。指定された演算子: #{演算子} "
  end

  ただし、 op_expr.is_a?(配列)
    発生 Errors::InvalidQuery, " #{ オペレーター } } の 引数は配列である必要があり ます : # { { Errors :: InvalidQuery ]
  end

  場合 セレクター.Length == 1 & & セレクター.キー.最初に == 演算子
    new_value = セレクター.values.最初に + op_expr
    セレクター.store(演算子, new_value)
  elsif 演算子 == ' $and ' || セレクター.空の場合
    # $and は常に最上位レベルに追加でき、結合されます
    他の条件が存在する場合には、 # を使用します。
    場合 current_value = セレクター[演算子]
      new_value = current_value + op_expr
      セレクター.store(演算子, new_value)
    else
      セレクター.store(演算子, op_expr)
    end
  else
    他の演算子は個別に追加する必要があります
    場合 セレクター[演算子]
      add_ logical_operator_ Expression(' $and ', [演算子 => op_expr])
    else
      セレクター.store(演算子, op_expr)
    end
  end

  自己
end

#add_one_ Expression (フィールド,値) = 保存可能

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

クエリに任意の式を追加します。

フィールドは、フィールド名または演算子のいずれかになります。

レシーバーをミューテーションします。

パラメーター:

  • フィールド ( string )

    フィールド名または演算子名。

  • 価値 オブジェクト

    フィールド値または演算子式。

次の値を返します。



223
224
225
226
227
228
229
230
231
232
233
# ファイル 'lib/mongoid/criteria/queryable/storable.rb' は、 223行

デフォルト add_one_式(フィールド, 価値)
  ただし、 フィールド.is_a?(文字列)
    発生 ArgumentError, "フィールドは string である必要があります: #{ field } "
  end

  場合 フィールド.start_with?('$')
    add_operator_式(フィールド, 価値)
  else
    add_field_式(フィールド, 価値)
  end
end

# add_operator_expr (operator, op_expr) = 保存可能

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

セレクターに演算子式を追加します。

このメソッドは、呼び出し元の便宜上、演算子と演算子値式を個別に受け取ります。 ハッシュ{operator => op_expr}の保存を取り扱うことができます。

演算子の値は任意のタイプにすることができます。

セレクターの中にすでに指定された演算子がある場合(最上位レベル)、 op_expr で指定された新しい条件が、指定された演算子の既存の条件に追加されます。 $and では簡単です。他の論理演算子の場合、このメソッドの動作は既存の演算子に新しい条件を追加することです。 たとえば、セレクターが現在次の場合。

{'foo' => 'bar', '$or' => [{'hello' => 'world'}]}

... および 演算子が '$or' であり、 op_expr が{'tools' => 123 '}であれば、結果のセレクターは次のようになります。

{'foo' => 'bar', '$or' => [{'hello' => 'world'}, {'test' => 123}]}

これは、既存のセレクターと新しい演算子式の間で OR を実装しません。これを処理するのはアップストリーム メソッドのジョブです。 このメソッドは、既存のセレクターがすでに操作の正しい左側であることを前提として、op_expr をセレクターに保存するだけです。

$where や $text のような非論理クエリレベルの演算子の場合、同じ名前の最上位の演算子がすでに存在する場合は、最上位の $and 演算子を介してセレクターに op_expr が追加され、次を含むセレクターが生成されます:両方の演算子値。

このメソッドは 値を簡素化しません(つまり、セレクターが現在空で、 演算子が $and の場合、$and が原則として省略できる場合でも、op_expr は $and を使用してセレクターに書き込まれます)。

このメソッドはレシーバーをミューテーションします。

パラメーター:

  • 演算子 ( string )

    追加する 演算子 。

  • op_expr オブジェクト

    追加する演算子値。

次の値を返します。



188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
# ファイル 'lib/mongoid/criteria/queryable/storable.rb' は、 188行

デフォルト add_operator_式(演算子, op_expr)
  ただし、 演算子.is_a?(文字列)
    発生 ArgumentError, "演算子は string である必要があります: #{ Operator } "
  end

  ただし、 演算子.start_with?('$')
    発生 ArgumentError, " 演算子は $: #{ オペレーター } で始まる必要があります "
  end

  場合 %w($and $nor $or).include?(演算子)
    return add_ logical_operator_ Expression(演算子, op_expr)
  end

  他の演算子の場合、演算子が に既に存在する場合、
  $and で新しい条件を追加し、それ以外の場合は を追加します
  # 新しい条件を最上位レベルに。
  場合 セレクター[演算子]
    add_ logical_operator_ Expression(' $and ', [{演算子 => op_expr}])
  else
    セレクター.store(演算子, op_expr)
  end

  自己
end