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