Module: ReaperMan::Generator::Rubygems

Defined in:
lib/reaper-man/generator/rubygems.rb

Overview

Generator methods for rubygems

Instance Method Summary collapse

Instance Method Details

#build_spec_file(name, gems) ⇒ Object



44
45
46
47
48
49
50
# File 'lib/reaper-man/generator/rubygems.rb', line 44

def build_spec_file(name, gems)
  index = create_index(gems)
  create_file("#{name}.#{marshal_version}") do |file|
    file.write(Marshal.dump(index))
  end
  compress_file("#{name}.#{marshal_version}")
end

#create_index(gems) ⇒ Object



26
27
28
29
30
31
32
33
34
# File 'lib/reaper-man/generator/rubygems.rb', line 26

def create_index(gems)
  [].tap do |list|
    gems.each do |name, all|
      all.each do |version, info|
        list << [name, Gem::Version.new(version.dup), info[:platform]]
      end
    end
  end
end

#generate!Object

Generate the rubygems repository



10
11
12
# File 'lib/reaper-man/generator/rubygems.rb', line 10

def generate!
  generate_gemstore(package_config[:rubygem])
end

#generate_gemstore(gems) ⇒ Object



14
15
16
17
18
# File 'lib/reaper-man/generator/rubygems.rb', line 14

def generate_gemstore(gems)
  generate_indexing(gems)
  write_quick_specs(gems.fetch(:release, {}))
  write_quick_specs(gems.fetch(:prerelease, {}))
end

#generate_indexing(gems) ⇒ Object



20
21
22
23
24
# File 'lib/reaper-man/generator/rubygems.rb', line 20

def generate_indexing(gems)
  build_spec_file("specs", gems.fetch(:release, {}))
  build_spec_file("latest_specs", gems.fetch(:release, {}))
  build_spec_file("prerelease", gems.fetch(:prerelease, {}))
end

#marshal_pathObject



36
37
38
# File 'lib/reaper-man/generator/rubygems.rb', line 36

def marshal_path
  ["Marshal", marshal_version].join(".")
end

#marshal_versionObject



40
41
42
# File 'lib/reaper-man/generator/rubygems.rb', line 40

def marshal_version
  [Marshal::MAJOR_VERSION, Marshal::MINOR_VERSION].join(".")
end

#sign_file_if_setup { ... } ⇒ String

Sign file if configured for signing

Yields:

  • block returning file path

Returns:

  • (String)

    file path



85
86
87
88
89
90
91
# File 'lib/reaper-man/generator/rubygems.rb', line 85

def sign_file_if_setup
  path = yield
  if signer && options[:sign]
    signer.file(path)
  end
  path
end

#write_quick_specs(gems) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/reaper-man/generator/rubygems.rb', line 52

def write_quick_specs(gems)
  gems.each do |name, list|
    list.each do |version, info|
      spec = Gem::Specification.new(name)
      info.each do |var, value|
        if value && spec.respond_to?("#{var}=")
          begin
            # Ensure we convert Smash instances
            value = value.to_hash if value.is_a?(Hash)
            spec.send("#{var}=", value)
          rescue Gem::InvalidSpecificationException => e
            # TODO: Do we have a logger in this project?
          end
        end
      end
      spec.version = Gem::Version.new(info[:version])
      spec.date = Time.parse(info[:date])
      info[:dependencies].each do |dep|
        spec.add_dependency(*dep)
      end
      deflator = Zlib::Deflate.new
      create_file("quick", marshal_path, "#{name}-#{version}.gemspec.rz") do |file|
        file.write(deflator.deflate(Marshal.dump(spec), Zlib::SYNC_FLUSH))
        file.write(deflator.finish)
      end
    end
  end
end