Class: DataFiles::Autocompletion
- Inherits:
-
Object
- Object
- DataFiles::Autocompletion
- Defined in:
- lib/data_files/autocompletion.rb
Overview
Provides attribute value autocompletion for the ActiveData methods where and find_by.
Defined Under Namespace
Classes: ParsedInput
Constant Summary collapse
- ALLOWED_METHODS =
%w[where find_by'].freeze
- REGEX_OPENING_PARENTHESIS_OR_WHITESPACE =
/\(|\s/.freeze
Instance Method Summary collapse
-
#initialize ⇒ Autocompletion
constructor
A new instance of Autocompletion.
- #parse_input(input) ⇒ Object
- #suggestions(klass_name, method_name, attribute_name, attribute_value) ⇒ Object
Constructor Details
#initialize ⇒ Autocompletion
Returns a new instance of Autocompletion.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# 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 |
Instance Method Details
#parse_input(input) ⇒ Object
33 34 35 36 37 38 39 40 |
# 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) 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) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/data_files/autocompletion.rb', line 42 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 |