Class: Bibliothecary::Parsers::Hackage
- Inherits:
-
Object
- Object
- Bibliothecary::Parsers::Hackage
- Includes:
- Analyser
- Defined in:
- lib/bibliothecary/parsers/hackage.rb
Class Method Summary collapse
Methods included from Analyser
Class Method Details
.mapping ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/bibliothecary/parsers/hackage.rb', line 9 def self.mapping { /.*\.cabal$/ => { kind: 'manifest', parser: :parse_cabal }, /cabal\.config$/ => { kind: 'lockfile', parser: :parse_cabal_config }, } end |
.parse_cabal(file_contents) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/bibliothecary/parsers/hackage.rb', line 22 def self.parse_cabal(file_contents) headers = { 'Content-Type' => "text/plain;charset=utf-8" } response = Typhoeus.post("#{Bibliothecary.configuration.cabal_parser_host}/parse", headers: headers, body: file_contents) if response.response_code == 200 then JSON.parse(response.body, symbolize_names: true) else [] end end |
.parse_cabal_config(file_contents) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/bibliothecary/parsers/hackage.rb', line 36 def self.parse_cabal_config(file_contents) manifest = DebControl::ControlFileBase.parse(file_contents) deps = manifest.first['constraints'].delete("\n").split(',').map(&:strip) deps.map do |dependency| dep = dependency.delete("==").split(' ') { name: dep[0], requirement: dep[1] || '*', type: 'runtime' } end end |