class DataFiles::Autocompletion
Provides attribute value autocompletion for the ActiveData
methods where and find_by.
Constants
- ALLOWED_METHODS
- ParsedInput
- REGEX_OPENING_PARENTHESIS_OR_WHITESPACE
Public Class Methods
new()
click to toggle source
# File lib/data_files/autocompletion.rb, line 15 def initialize Readline.completion_append_character = '' Readline.completion_proc = proc do parsed = parse_input(Readline.line_buffer) if parsed.valid? suggestions( parsed.klass_name, parsed.method_name, parsed.attribute_name, parsed.attribute_value ) else [] end end end
Public Instance Methods
parse_input(input)
click to toggle source
# File lib/data_files/autocompletion.rb, line 33 def parse_input(input) klass_name, remainder = input.split('.') method_name, attribute_name, attribute_value = remainder&.split(REGEX_OPENING_PARENTHESIS_OR_WHITESPACE) klass_name = klass_name&.split('=')&.last&.strip attribute_name = attribute_name&.sub(':', '')&.strip attribute_value = attribute_value&.sub('"', '')&.sub('\'', '') ParsedInput.new(klass_name, method_name, attribute_name, attribute_value) end
suggestions(klass_name, method_name, attribute_name, attribute_value)
click to toggle source
# File lib/data_files/autocompletion.rb, line 44 def suggestions(klass_name, method_name, attribute_name, attribute_value) return [] unless Object.const_defined?(klass_name) return [] unless ALLOWED_METHODS.include?(method_name) values = Object.const_get(klass_name).data.collect do |item| item[attribute_name] end if attribute_value values.select { |value| value.to_s.start_with?(attribute_value) } else values end end