lib/locabulary.rb in locabulary-0.1.4 vs lib/locabulary.rb in locabulary-0.1.5

- old
+ new

@@ -1,11 +1,11 @@ require 'date' require 'json' # @since 0.1.0 module Locabulary - VERSION='0.1.4'.freeze + VERSION='0.1.5'.freeze DATA_DIRECTORY = File.expand_path("../../data/", __FILE__).freeze class RuntimeError < ::RuntimeError end @@ -83,10 +83,16 @@ def active_labels_for(options = {}) predicate_name = options.fetch(:predicate_name) active_items_for(predicate_name: predicate_name).map(&:term_label) end + + # @api public + def active_nested_labels_for(options = {}) + format_active_items_for(active_labels_for(options)) + end + # @api private def filename_for_predicate_name(options = {}) predicate_name = options.fetch(:predicate_name) filename = File.join(DATA_DIRECTORY, "#{File.basename(predicate_name)}.json") return filename if File.exist?(filename) @@ -99,7 +105,31 @@ end # @api private def reset_active_cache! @active_cache = nil + end + + # @api private + def format_active_items_for(items) + root = {} + items.each do |item| + key, value = build_key_and_value(item) + root[key] ||= [] + root[key] << value + end + root + end + + # @api private + def build_key_and_value(text) + text_array = text.split(/(::)/) + return text, text if text_array.size == 1 + return text, text_array.last if text_array.size == 3 + key = "" + (0..(text_array.size-3)).each do |index| + key << text_array[index] + end + value = text_array.last + return key, value end end