Module: CommandSearch::Memory
- Defined in:
- lib/command_search/backends/memory.rb
Class Method Summary collapse
- .check(item, ast, fields, cmd_types) ⇒ Object
- .command_check(item, val) ⇒ Object
- .compare_check(item, node, cmd_types) ⇒ Object
Class Method Details
.check(item, ast, fields, cmd_types) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/command_search/backends/memory.rb', line 47 def check(item, ast, fields, cmd_types) ast.all? do |node| val = node[:value] case node[:nest_type] when nil fields.any? do |x| item_val = item[x.to_sym] || item[x.to_s] item_val.to_s[val] if item_val end when :colon command_check(item, val) when :compare compare_check(item, node, cmd_types) when :minus !val.all? { |v| check(item, [v], fields, cmd_types) } when :pipe val.any? { |v| check(item, [v], fields, cmd_types) } when :paren val.all? { |v| check(item, [v], fields, cmd_types) } end end end |
.command_check(item, val) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/command_search/backends/memory.rb', line 5 def command_check(item, val) cmd = val[0][:value] cmd_search = val[1][:value] item_val = item[cmd.to_sym] || item[cmd] val_type = val[1][:type] val_type = Boolean if val_type == :existence && cmd_search == true if val_type == Boolean !!item_val == cmd_search elsif val_type == :existence item_val == nil elsif !item_val return false elsif val_type == Time item_time = item_val.to_time cmd_search.first <= item_time && item_time < cmd_search.last elsif cmd_search.is_a?(Regexp) item_val[cmd_search] elsif cmd_search == '' item_val == cmd_search else item_val.to_s[/#{Regexp.escape(cmd_search)}/i] end end |
.compare_check(item, node, cmd_types) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/command_search/backends/memory.rb', line 29 def compare_check(item, node, cmd_types) cmd = node[:value].first cmd_val = cmd[:value] cmd_type = cmd_types[cmd[:value].to_sym] item_val = item[cmd_val.to_sym] || item[cmd_val.to_s] search = node[:value].last val = search[:value] if val.is_a?(Time) item_val = item_val.to_time if item_val elsif search[:type] == :str && cmd_types[val.to_sym] val = item[val.to_sym] || item[val.to_s] end args = [item_val, val] return unless args.all? fn = node[:nest_op].to_sym.to_proc fn.call(*args.map(&:to_f)) end |