Module | Condition
In: | lib/condition.rb

モデルのクラスに include される。 インスタンスに対する respond_to? で正しいことが仮定されるメッセージ:

- table_name
- column_name
- condition_pattern
- condition_value
- input_type
- input_parameter
- reference
- option_category
- checkbox?

### Methods

extract inline_values

### Public Instance methods

extract()

条件を文字列として返す。 指定されていない場合には false を返す。

[Source]

        # File lib/condition.rb, line 15
    15:   def extract
    16:     return false unless condition_pattern
    17:     return false if condition_pattern == "none"
    18:     case condition_pattern
    19:     when "eq"
    20:       return "#{table_name}.#{column_name} IN (#{inline_values.join(',')})" if reference
    21:       if c = option_category
    22:         x = inline_values.map do |v|
    23:           "EXISTS (SELECT 1 FROM input_options WHERE category = '#{c}' AND name_po = #{v} AND value = #{table_name}.#{column_name})"
    24:         end
    25:       else
    26:         x = inline_values.map {|v| "#{table_name}.#{column_name} = #{v}"}
    27:       end
    28:       y = x.join(" OR ")
    29:       "(#{y})"
    30:     when "neq"
    31:       return "#{table_name}.#{column_name} NOT IN (#{inline_values.join(',')})" if reference
    32:       if c = option_category
    33:         x = inline_values.map do |v|
    34:           "EXISTS (SELECT 1 FROM input_options WHERE category = '#{c}' AND name_po <> #{v} AND value = #{table_name}.#{column_name})"
    35:         end
    36:       else
    37:         x = inline_values.map {|v| "#{table_name}.#{column_name} <> #{v}"}
    38:       end
    39:       y = x.join(" AND ")
    40:       "(#{y})"
    41:     when "head", "tail", "include"
    42:       return "#{table_name}.#{column_name} IN (#{inline_values.join(',')})" if reference
    43:       if c = option_category
    44:         x = inline_values.map do |v|
    45:           "EXISTS (SELECT 1 FROM input_options WHERE category = '#{c}' AND name_po = #{v} AND value = #{table_name}.#{column_name})"
    46:         end
    47:         y = x.join(" OR ")
    48:         return "(#{y})"
    49:       end
    50:       "(#{table_name}.#{column_name} LIKE #{inline_values.first})"
    51:     when "exclude"
    52:       return "#{table_name}.#{column_name} NOT IN (#{inline_values.join(',')})" if reference
    53:       if c = option_category
    54:         x = inline_values.map do |v|
    55:           "EXISTS (SELECT 1 FROM input_options WHERE category = '#{c}' AND name_po <> #{v} AND value = #{table_name}.#{column_name})"
    56:         end
    57:         y = x.join(" AND ")
    58:         return "(#{y})"
    59:       end
    60:       "(#{table_name}.#{column_name} IS NULL OR #{table_name}.#{column_name} NOT LIKE #{inline_values.first})"
    61:     when "ge"
    62:       "(#{table_name}.#{column_name} >= #{inline_values.first})"
    63:     when "le"
    64:       "(#{table_name}.#{column_name} <= #{inline_values.first})"
    65:     when "gt"
    66:       "(#{table_name}.#{column_name} > #{inline_values.first})"
    67:     when "lt"
    68:       "(#{table_name}.#{column_name} < #{inline_values.first})"
    69:     when "null"
    70:       "(#{table_name}.#{column_name} IS NULL)"
    71:     when "not-null"
    72:       "(#{table_name}.#{column_name} IS NOT NULL)"
    73:     else
    74:       raise ArgumentError, "unknown condition_pattern: #{condition_pattern}"
    75:     end
    76:   end

inline_values()

[Source]

         # File lib/condition.rb, line 78
     78:   def inline_values
     79:     case condition_pattern
     80:     when "eq", "neq"
     81:       raw = (condition_value.empty?) ? [""] : condition_value.split(" ")
     82:       if r = reference
     83:         return raw.map {|name| r.find(:all).select {|x| x.name == name}.map(&:id)}.flatten
     84:       elsif c = option_category
     85:         return raw.map {|name| InputOption.name_po_with_category_and_name(c, name)}
     86:       elsif checkbox?
     87:         ons  = %w|ON On on|
     88:         offs = %w|OFF Off off|
     89:         on, off = input_parameter.split(",")
     90:         ons.unshift(on) if on
     91:         offs.unshift(off) if off
     92:         return raw.map do |x|
     93:           if ons.include?(x)
     94:             self.class.connection.quoted_true
     95:           elsif offs.include?(x)
     96:             self.class.connection.quoted_false
     97:           else
     98:             quote_value x
     99:           end
    100:         end
    101:       end
    102:     when "head"
    103:       if r = reference
    104:         return r.find(:all).select {|x| x.name.index(condition_value) == 0}.map(&:id)
    105:       elsif c = option_category
    106:         return InputOption.name_pos_with_category_and_head(c, condition_value)
    107:       end
    108:       raw = [condition_value + "%"]
    109:     when "tail"
    110:       if r = reference
    111:         return r.find(:all).select {|x| x.name.rindex(condition_value) == x.name.length - condition_value.length}.map(&:id)
    112:       elsif c = option_category
    113:         return InputOption.name_pos_with_category_and_tail(c, condition_value)
    114:       end
    115:       raw = ["%" + condition_value]
    116:     when "include", "exclude"
    117:       if r = reference
    118:         return r.find(:all).select {|x| x.name.include?(condition_value)}.map(&:id)
    119:       elsif c = option_category
    120:         return InputOption.name_pos_with_category_and_include(c, condition_value)
    121:       end
    122:       raw = ["%" + condition_value + "%"]
    123:     when "ge", "le", "gt", "lt"
    124:       raw = [condition_value]
    125:     when "null", "not-null"
    126:       raw = []
    127:     end
    128:     return raw.map {|v| quote_value v}
    129:   end

[Validate]