Class: Gemfile2opml::Converter

Inherits:
Object
  • Object
show all
Defined in:
lib/gemfile2opml/converter.rb

Instance Method Summary collapse

Instance Method Details

#convert(file) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/gemfile2opml/converter.rb', line 5

def convert(file)

  gemfile = Gemnasium::Parser.gemfile(open(file).read)

  gemspec = Gemnasium::Parser.gemspec(open(file).read)

  dependencies = [*gemfile.dependencies, *gemspec.dependencies]

  targets = generate_targets(dependencies)

  opml = Nokogiri::XML::Builder.new {|xml|
    xml.opml(:version => '2.0') {
      xml.head {|head|
        head.title generate_title(file)
      }
      xml.body {|body|
        targets.keys.map {|target|#string
          body.outline(title: target) {|outline|
            targets[target].uniq.sort.map {|name|#string
              outline.outline(
                title: name,
                type: 'rss',
                htmlUrl: "https://rubygems.org/gems/#{name}",
                xmlUrl: "https://rubygems.org/gems/#{name}/versions.atom",
              )
            }
          }
        }
      }
    }
  }

  opml.to_xml
end

#generate_targets(dependencies) ⇒ Object



46
47
48
49
50
51
52
53
54
55
# File 'lib/gemfile2opml/converter.rb', line 46

def generate_targets(dependencies)
  targets = {}

  dependencies.each{|dependency|
    targets[dependency.type] ||= []
    targets[dependency.type] << dependency.name
  }

  targets
end

#generate_title(file) ⇒ Object



40
41
42
43
44
# File 'lib/gemfile2opml/converter.rb', line 40

def generate_title(file)
  application = File.basename File.dirname File.expand_path file
  filename = File.basename file
  "#{application}/#{filename}"
end