gem2arch 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/gem2arch.gemspec +2 -2
  3. data/lib/gem2arch.rb +115 -0
  4. metadata +3 -17
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a39f6f5d891d908db774340068e59d9e77d95032
4
- data.tar.gz: 34a3002ccb8a3195be7d641d8badf48de02e537b
3
+ metadata.gz: e32dd8f2bac8f19b6227864c729a0b6a8b98f991
4
+ data.tar.gz: f1efc05452e0af571b36bfded69f171c0f5dbb29
5
5
  SHA512:
6
- metadata.gz: 08535660e159c65f1deab75e7ec6be51a4b422112e611be1a2e1268c24ad3ec687e56576d01294c02051106481438888491fe97acdb94c6534cd247a766388e0
7
- data.tar.gz: a2ca42d30f168aa1c5b81da84f6a9f9a148d6ede9281141f867713f91dc2b40cc200432166bf12d137a70d4de40113ee498c34d773c17b70ba421689292a5150
6
+ metadata.gz: 2a6cab8a3bc4ce424f53526a7b3564c136a54d1aac826a1d43252bb281096d8844880aaf889dc8e2907794e9d8f3f33fc5810c8c0335011a3420b38e890b7057
7
+ data.tar.gz: b8287908ceef0c7329c5aaf1320f315ed50654675ac8e219cdec96f6297d36f3c90247d85ae1b0b088589fdee14361314b03c64680f9304e6a2111abd746ebbc
@@ -3,7 +3,7 @@
3
3
  Gem::Specification.new do |s|
4
4
  # Variables:
5
5
  s.name = "gem2arch"
6
- s.version = "0.0.1"
6
+ s.version = "0.0.2"
7
7
  s.description = "A version of gem2arch by crabtw that creates an ArchLinux PKGBUILD from a ruby gem"
8
8
  s.summary = "Creates an ArchLinux PKGBUILD from a ruby gem"
9
9
  s.authors = ["Ari Mizrahi"]
@@ -18,5 +18,5 @@ Gem::Specification.new do |s|
18
18
  s.require_paths = ["lib"]
19
19
 
20
20
  # Dependencies
21
- s.add_dependency("net-dns", "~> 0.8.0")
21
+ #s.add_dependency("net-dns", "~> 0.8.0")
22
22
  end
@@ -0,0 +1,115 @@
1
+ require 'digest/md5'
2
+ require 'digest/sha1'
3
+
4
+ # Download the gem and return specification information
5
+ # @params [String] gemname is the name of the gem to download
6
+ # @params [String] gemver is the version of the gem to download - default nil
7
+ # @return [Gem::Specification] gem specification object
8
+ def download( gemname, gemver=nil )
9
+ # If gem version is not passed set it
10
+ # to any version greater than 0
11
+ version = gemver || ">=0"
12
+ # Get gem requirement object
13
+ requirement = Gem::Requirement.default
14
+ # Get gem dependency object
15
+ depends = Gem::Dependency.new( gemname, version )
16
+ # Fetch gem specification
17
+ spec_and_source = Gem::SpecFetcher.fetcher.spec_for_dependency( depends, requirement )
18
+ # Get gem specification info
19
+ spec = spec_and_source[0][0][0]
20
+ # Get source URI
21
+ source_uri = spec_and_source[0][0][1]
22
+ # Quit if we don't have a spec, we can't continue without it
23
+ # it probably means the gem doesn't exist in rubygems.org
24
+ exit if spec.nil?
25
+ # Download the .gem file
26
+ system( "gem fetch #{gemname}" )
27
+
28
+ return spec
29
+ end
30
+
31
+ # Hash a file and return it's MD5 or SHA1 value
32
+ # @params [String] file is spec filename
33
+ # @params [Symbol] type is :MD5 or :SHA1
34
+ # @return [String] hash value of passed file parameter
35
+ def digest( file, type )
36
+ # Get MD5 || SHA1 object depending on [type]
37
+ hashv = Digest::MD5.new if type == :MD5
38
+ hashv = Digest::SHA1.new if type == :SHA1
39
+ # Open the file and generate hash
40
+ # in 1024 bit chunks
41
+ File.open( file ) do |chunks|
42
+ while buffer = chunks.read(1024)
43
+ hashv << buffer
44
+ end
45
+ end
46
+
47
+ return hashv.to_s
48
+ end
49
+
50
+ # Build the PKGBUILD file using the downloaded specification
51
+ # @params [Gem::Specification] spec is gem specification object
52
+ def build( spec, archdepends=[] )
53
+ # Set arch=() value of PKGBUILD
54
+ spec.extensions.empty? ? arch = "'any'" : arch = "'i686' 'x86_64'"
55
+ # Calculate digest
56
+ md5sum = digest( "#{spec.full_name}.gem", :MD5 )
57
+ # Get gem dependencies
58
+ depends = spec.runtime_dependencies
59
+ # Modify [Array] depends if it is not empty
60
+ unless depends.empty?
61
+ # Break [Array] depends to modify each element
62
+ depends.map do |dep|
63
+ # For each dependency we need to modify the comparison
64
+ # symbol used to be compatible with PKGBUILD
65
+ dep.requirement.requirements.map do |compare, version|
66
+ # Modify the comparision symbol for PKGBUILD
67
+ compare = '>=' if compare == '~>'
68
+ # Replace the entire string for PKGBUILD
69
+ archdepends << "'ruby-#{dep.name}#{compare}#{version}'"
70
+ end
71
+ end
72
+ end
73
+
74
+ # Build the gem parameters hash
75
+ params = {
76
+ name: spec.name,
77
+ version: spec.version,
78
+ website: spec.homepage,
79
+ description: spec.summary,
80
+ license: spec.license,
81
+ arch: arch,
82
+ md5sum: md5sum,
83
+ depends: archdepends.join(" ")
84
+ }
85
+
86
+ pkgbuild( params )
87
+ end
88
+
89
+ private
90
+
91
+ # Generate the PKGBUILD file
92
+ # @params [Hash] gem contains all parameters required to generate the PKGBUILD file
93
+ def pkgbuild( gem )
94
+ File.open( 'PKGBUILD', 'w' ) do |line|
95
+ line.puts "pkgname=ruby-#{gem[:name]}"
96
+ line.puts "_gemname=#{gem[:name]}"
97
+ line.puts "pkgver=#{gem[:version]}"
98
+ line.puts "pkgrel=0"
99
+ line.puts "pkgdesc=\"#{gem[:description]}\""
100
+ line.puts "arch=(#{gem[:arch]})"
101
+ line.puts "license=('#{gem[:license]}')"
102
+ line.puts "makedepends=('ruby')"
103
+ line.puts "depends=(#{gem[:depends]})"
104
+ line.puts "url='#{gem[:website]}'"
105
+ line.puts "source=('http://rubygems.org/downloads/#{gem[:name]}-#{gem[:version]}.gem')"
106
+ line.puts "md5sums=('#{gem[:md5sum]}')"
107
+ line.puts "noextract=(#{gem[:name]}-#{gem[:version]}.gem)"
108
+
109
+ line.puts "package() {"
110
+ line.puts "\tcd \"$srcdir\""
111
+ line.puts "\tlocal _gemdir=\"$(ruby -e 'puts Gem.default_dir')"
112
+ line.puts "\tgem install --ignore-dependencies --no-user-install -i \"$pkgdir$_gemdir\" -n \"$pkgdir/usr/bin\" $_gemname-$pkgver.gem"
113
+ line.puts "}"
114
+ end
115
+ end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gem2arch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ari Mizrahi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-29 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: net-dns
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ~>
18
- - !ruby/object:Gem::Version
19
- version: 0.8.0
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ~>
25
- - !ruby/object:Gem::Version
26
- version: 0.8.0
11
+ date: 2013-08-01 00:00:00.000000000 Z
12
+ dependencies: []
27
13
  description: A version of gem2arch by crabtw that creates an ArchLinux PKGBUILD from
28
14
  a ruby gem
29
15
  email: codemunchies@gmail.com