gem2arch 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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