Class: Purdie::SourceList

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/purdie/source_list.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sources) ⇒ SourceList

Returns a new instance of SourceList.



8
9
10
11
12
13
# File 'lib/purdie/source_list.rb', line 8

def initialize sources
  @sources = Resolver.resolve(sources).map { |item| Item.new item }
  @items = []
  @bad_creds = []
  @bad_licenses = {}
end

Instance Attribute Details

#itemsObject (readonly)

Returns the value of attribute items.



5
6
7
# File 'lib/purdie/source_list.rb', line 5

def items
  @items
end

#parent_fileObject

Returns the value of attribute parent_file.



6
7
8
# File 'lib/purdie/source_list.rb', line 6

def parent_file
  @parent_file
end

#verboseObject

Returns the value of attribute verbose.



6
7
8
# File 'lib/purdie/source_list.rb', line 6

def verbose
  @verbose
end

Class Method Details

.from_file(source_file, verbose = nil) ⇒ Object



79
80
81
82
83
84
# File 'lib/purdie/source_list.rb', line 79

def self.from_file source_file, verbose = nil
  sl = SourceList.new File.readlines(source_file).map { |l| l.strip }.select { |i| i !~ /^#/ }
  sl.parent_file = source_file
  sl.verbose = verbose
  sl
end

Instance Method Details

#[](key) ⇒ Object



15
16
17
# File 'lib/purdie/source_list.rb', line 15

def [] key
  @sources[key]
end

#bad_credentials?Boolean

Returns:

  • (Boolean)


45
46
47
48
49
# File 'lib/purdie/source_list.rb', line 45

def bad_credentials?
  if @bad_creds.any?
    raise Purdie::CredentialsException.new self, "Missing or duff credentials for: #{@bad_creds.uniq.join ', '}"
  end
end

#bad_licenses?Boolean

Returns:

  • (Boolean)


51
52
53
54
55
56
57
58
59
# File 'lib/purdie/source_list.rb', line 51

def bad_licenses?
  if @bad_licenses.any?
    bad = @bad_licenses.map { |k,v| "#{k}: #{v.uniq.join ', '}" }.join '; '
    message = "Unknown licenses: #{bad}"
    message += "\n"
    message += 'Please consider adding the details for these licenses at https://github.com/rawfunkmaharishi/purdie/blob/master/_config/licenses.yaml'
    raise Purdie::PurdieException.new message
  end
end

#eachObject



19
20
21
22
23
# File 'lib/purdie/source_list.rb', line 19

def each
  @sources.each do |source|
    yield source
  end
end

#output_fileObject



71
72
73
74
75
76
77
# File 'lib/purdie/source_list.rb', line 71

def output_file
  base = File.basename(parent_file).split '.'
  base.push nil if base.count == 1
  base[-1] = 'yaml'

  File.join ['_data', base.join('.')]
end

#processObject



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/purdie/source_list.rb', line 25

def process
  @sources.each do |source|
    begin
      print "Processing #{source.url}... " if @verbose
      source.distill
      puts 'done' if @verbose
    rescue Purdie::CredentialsException => ce
      @bad_creds.push Purdie.basename(ce.service)
      puts 'fail' if @verbose
    rescue Purdie::LicenseException => le
      @bad_licenses[Purdie.basename le.service].push le.name rescue @bad_licenses[Purdie.basename le.service] = [le.name]
      puts 'fail' if @verbose
    end
    @items.push source

    bad_credentials?
    bad_licenses?
  end
end

#writeObject



61
62
63
64
65
66
67
68
69
# File 'lib/purdie/source_list.rb', line 61

def write
  process

  FileUtils.mkdir_p File.dirname output_file
  File.open output_file, 'w' do |f|
    dump = @items.map { |item| item.datas }
    f.write dump.to_yaml
  end
end