Class: CodelessCode::Catalog

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/codeless_code/catalog.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root_dir: DEFAULT_DATA) ⇒ Catalog

Returns a new instance of Catalog.



23
24
25
# File 'lib/codeless_code/catalog.rb', line 23

def initialize(root_dir: DEFAULT_DATA)
  self.root_dir = root_dir
end

Instance Attribute Details

#root_dirObject

Returns the value of attribute root_dir.



21
22
23
# File 'lib/codeless_code/catalog.rb', line 21

def root_dir
  @root_dir
end

Instance Method Details

#fable_setsObject



50
51
52
# File 'lib/codeless_code/catalog.rb', line 50

def fable_sets
  language_sets.flat_map(&:fable_sets)
end

#fablesObject



54
55
56
# File 'lib/codeless_code/catalog.rb', line 54

def fables
  fable_sets.flat_map(&:fables)
end

#fetch(lang) ⇒ LanguageSet

Returns:



37
38
39
40
41
42
43
44
# File 'lib/codeless_code/catalog.rb', line 37

def fetch(lang)
  if languages.include?(lang)
    LanguageSet.new(lang)
  else
    raise LanguageSet::NotFoundError,
          format("No fables for language %p", lang)
  end
end

#language_setsObject



46
47
48
# File 'lib/codeless_code/catalog.rb', line 46

def language_sets
  languages.map { |lang| LanguageSet.new(lang) }
end

#languagesObject



27
28
29
30
31
32
33
34
# File 'lib/codeless_code/catalog.rb', line 27

def languages
  @languages ||= root_dir.glob('*-*')
                         .select(&:directory?)
                         .map { |dir| dir.basename.to_s.split('-').first }
                         .uniq
                         .map(&:to_sym)
                         .sort
end

#select(filter) ⇒ Object



58
59
60
# File 'lib/codeless_code/catalog.rb', line 58

def select(filter)
  fables.select { |fable| filter.call(fable) }.sort_by(&:number)
end