Sha256: db7f6452a31e745e6cbf4a7e04955e23b7288647b3dc07a14f4d7fd94b003455
Contents?: true
Size: 1.66 KB
Versions: 1
Compression:
Stored size: 1.66 KB
Contents
module EagleLabels class Specification def initialize(spec=nil) if spec.is_a? Hash @spec = spec elsif spec.is_a?(String) && File.exist?(spec) @spec = YAML.load_file(spec) else @spec = YAML.load_file("#{File.dirname(__FILE__)}/../../config/default_categories.yml") end end def categories @spec.map { |k, v| Category.new(k, v) } end def all_labels categories.map(&:all_labels).flatten end def starts_with(prefix) if prefix.size == 0 labels = all_labels else category = categories.detect { |c| c.code == prefix[0] } labels = category.all_labels end labels.select { |l| l.match("^#{prefix}") } end def tails(prefix) starts_with(prefix).map { |l| l.sub prefix, '' } end def next_codes(prefix) if prefix.size == 0 categories.map(&:code) else category = categories.detect { |c| c.code == prefix[0] } category.features.size > prefix.size-1 ? category.features[prefix.size-1].codes : [] end end def valid_label?(label) all_labels.include? label end def names_of(label) return [] unless valid_label? label codes = label.chars.to_a category_code = codes.shift category = categories.detect { |c| c.code == category_code } names = [category.name] category.features.each do |feature| feature_code = codes.shift if value = feature.values.detect { |v| v.code == feature_code } names << value.name end end names end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
eagle_labels-0.0.1 | lib/eagle_labels/specification.rb |