Module: ReaperMan::Generator::Rubygems
- Defined in:
- lib/reaper-man/generator/rubygems.rb
Overview
Generator methods for rubygems
Instance Method Summary collapse
- #build_spec_file(name, gems) ⇒ Object
- #create_index(gems) ⇒ Object
-
#generate! ⇒ Object
Generate the rubygems repository.
- #generate_gemstore(gems) ⇒ Object
- #generate_indexing(gems) ⇒ Object
- #marshal_path ⇒ Object
- #marshal_version ⇒ Object
-
#sign_file_if_setup { ... } ⇒ String
Sign file if configured for signing.
- #write_quick_specs(gems) ⇒ Object
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_path ⇒ Object
36 37 38 |
# File 'lib/reaper-man/generator/rubygems.rb', line 36 def marshal_path ["Marshal", marshal_version].join(".") end |
#marshal_version ⇒ Object
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
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 && [: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 |