webget_gemini 1.2.3

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.
data.tar.gz.sig ADDED
Binary file
@@ -0,0 +1,156 @@
1
+ # = Gemini: Gem Initialization Helper
2
+ #
3
+ # Simple gem methods.
4
+ #
5
+ # Example:
6
+ # require 'gemini'
7
+ #
8
+ # Gemini.installed?(:name=>'passenger',:version=>'2.0.0')
9
+ # => true
10
+ #
11
+ # Gemini.install(:name=>'passenger',:version=>'2.0.0')
12
+ # => install passenger 2.0.0 if necessary
13
+ #
14
+ # Gemini.find(:name=>'passenger')
15
+ # => all gemspecs with name 'passenger'
16
+ #
17
+ # Gemini.find(:name=>'passenger',:version=>version_requiremens)
18
+ # => all gemspecs with name 'passenger' that match the requirments
19
+ #
20
+ ##
21
+
22
+ require 'rexml/document'
23
+ require 'rubygems'
24
+ require 'webget_commander'
25
+
26
+ class Gemini
27
+
28
+ TRUST_POLICY_NICKNAME={'no'=>'NoSecurity','low'=>'LowSecurity','medium'=>'MediumSecurity','high'=>'HighSecurity'}
29
+
30
+ # Return true iff a given name is installed
31
+ #
32
+ # Options
33
+ # - name e.g. "foo" [required]
34
+ # - version string e.g. ">=1.2.3"
35
+
36
+ def self.installed?(ops)
37
+ name,version = [:name,:version].map{|k| ops[k]||ops[k.to_s]}
38
+ dep = Gem::Dependency.new name, (version||Gem::Requirement.default)
39
+ !Gem.source_index.search(dep).empty?
40
+ end
41
+
42
+
43
+ # Return an array of all gemspecs that match the name and version requirements
44
+ #
45
+ # Options:
46
+ # - name e.g. "foo" [required]
47
+ # - version: version requirements as defined in Gem.source_index.find_name
48
+
49
+ def self.find(ops)
50
+ name,version = [:name,:version].map{|k| ops[k]||ops[k.to_s]}
51
+ return Gem.source_index.find_name(name,version||[])
52
+ end
53
+
54
+
55
+ # Install a gem, if needed, by running a system command.
56
+ #
57
+ # This dispatches on the first parameter:
58
+ # - nil: install_from_rails_root_cofig_gems_xml
59
+ # - File: install_from_xml_file
60
+ # - String: install_from_xml_text
61
+ # - REXML::Document: install_from_xml_doc
62
+ # - Array: install_from_array
63
+ # - Hash: install_from_options
64
+ #
65
+ # Return status, stdout, stderr
66
+
67
+ def self.install(x=nil)
68
+ if x.class==NilClass then return self.install_from_rails_root_config_gems_xml end
69
+ if x.class==File then return self.install_from_file(x) end
70
+ if x.class==String then return self.install_from_xml_text(x) end
71
+ if x.class==REXML::Document then return self.install_from_xml_doc(x) end
72
+ if x.class==Array then return self.install_from_array(x) end
73
+ return self.install_from_options(x)
74
+ end
75
+
76
+ def self.install_from_rails_root_config_gems_xml
77
+ return self.install_from_xml_file(File.new(RAILS_ROOT+'/config/gems.xml'))
78
+ end
79
+
80
+ def self.install_from_xml_file(file)
81
+ return self.install_from_xml_text(File.read(x))
82
+ end
83
+
84
+ def self.install_from_xml_text
85
+ return self.install_from_xml_doc(REXML::Document.new(x))
86
+ end
87
+
88
+ def self.install_from_xml_doc
89
+ return self.install_from_array(x.elements.each('gems/gem'){}.map{|e| e.attributes})
90
+ end
91
+
92
+ def self.install_from_array(array)
93
+ return x.map{|options| self.install(options)}
94
+ end
95
+
96
+
97
+ public
98
+
99
+ # Install a gem, if needed, by running a system command.
100
+ #
101
+ # Options
102
+ # - name e.g. "foo" [required]
103
+ # - version e.g. ">=1.2.3"
104
+ # - trust: no|low|medium|high (same as NoSecurity|LowSecurity|MediumSecurity|HighSecurity)
105
+ # - append: anything to append to the gem command e.g. " --no-ri --no-rdoc --no-user-install"
106
+ #
107
+
108
+ def self.install_from_options(options)
109
+ return installed?(options) \
110
+ ? [nil,nil,nil] \
111
+ : commander(self.install_command(options))
112
+ end
113
+
114
+
115
+ # Create the system command to do a gem install
116
+ #
117
+ # Options
118
+ # - name e.g. "foo" [required]
119
+ # - version e.g. ">=1.2.3"
120
+ # - trust: no|low|medium|high (aka NoSecurity|LowSecurity|MediumSecurity|HighSecurity)
121
+ # - append (aka installing): anything to append to the gem install command e.g. " --no-ri --no-rdoc --no-user-install"
122
+ #
123
+ # Return the command as a string
124
+
125
+ def self.install_command(ops)
126
+ name,version,trust,source,append,installing = [:name,:version,:trust,:source,:append,:installing].map{|k| ops[k]||ops[k.to_s]}
127
+ append||=installing
128
+ return "sudo gem install #{name}" +
129
+ (version ? " --version \"#{version}\"" : '' ) +
130
+ (trust ? " --trust-policy #{TRUST_POLICY_NICKNAME[trust]||trust}" : '') +
131
+ (source ? [*source].map{|x| " --source \"#{x}\""}.join : '') +
132
+ (append ? (' '+append) : '')
133
+ end
134
+
135
+
136
+
137
+ # Return a lookup hash of all the gems installed on the system,
138
+ # by running the system command 'sudo gem list'.
139
+ #
140
+ # - hash key is a gem name.
141
+ # - hash value is an array of the gem's installed version numbers.
142
+
143
+ def self.sudo_gem_list
144
+ @sudo_gem_list=`sudo gem list`.split(/\n/).map{|line| line.split(/[ \,\(\)]+/)}.inject({}){|h,v| h[v[0]]=v[1,v.length]; h}
145
+ end
146
+
147
+
148
+ # Return true iff the sudo_gem_list hash shows a given gem is installed.
149
+
150
+ def self.sudo_gem_list_installed?(ops)
151
+ name,version = [:name,:version].map{|k| ops[k]||ops[k.to_s]}
152
+ self.sudo_gem_list[name] and (!version or self.sudo_gem_list[name].include?(version))
153
+ end
154
+
155
+ end
156
+
@@ -0,0 +1,23 @@
1
+ require 'test/unit'
2
+ require 'webget_gemini'
3
+
4
+ class GeminiTest < Test::Unit::TestCase
5
+
6
+ def test_gemini_installed_false
7
+ assert(!Gemini.installed?(:name=>'gem-should-not-exist',:version=>'9.9.9'))
8
+ end
9
+
10
+ def test_gemini_install_command
11
+ assert_equal('sudo gem install foo',Gemini.install_command(:name=>'foo'))
12
+ assert_equal('sudo gem install foo --version "9.9.9"',Gemini.install_command(:name=>'foo',:version=>'9.9.9'))
13
+ assert_equal('sudo gem install foo --trust-policy HighSecurity',Gemini.install_command(:name=>'foo',:trust=>'high'))
14
+ end
15
+
16
+ def test_gemini_install
17
+ status,stdout,stderr=Gemini.install(:name=>'gem-should-not-exist',:version=>'9.9.9')
18
+ assert_equal(2,status)
19
+ assert_equal('',stdout)
20
+ assert_equal('ERROR: could not find gem gem-should-not-exist locally or in a repository',stderr)
21
+ end
22
+
23
+ end
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: webget_gemini
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.3
5
+ platform: ruby
6
+ authors:
7
+ - WebGet
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDvDCCAyWgAwIBAgIJAIlSqEkDQaZIMA0GCSqGSIb3DQEBBQUAMIGbMQswCQYD
14
+ VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5j
15
+ aXNjbzETMBEGA1UEChMKV2ViR2V0LmNvbTETMBEGA1UECxMKV2ViR2V0LmNvbTET
16
+ MBEGA1UEAxMKV2ViR2V0LmNvbTEgMB4GCSqGSIb3DQEJARYRd2ViZ2V0QHdlYmdl
17
+ dC5jb20wHhcNMDkwMjI2MTk0NDU4WhcNMTExMTIzMTk0NDU4WjCBmzELMAkGA1UE
18
+ BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
19
+ Y28xEzARBgNVBAoTCldlYkdldC5jb20xEzARBgNVBAsTCldlYkdldC5jb20xEzAR
20
+ BgNVBAMTCldlYkdldC5jb20xIDAeBgkqhkiG9w0BCQEWEXdlYmdldEB3ZWJnZXQu
21
+ Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXCFYfW6hCQl0ToNjaMIXG
22
+ ZfPF6OoR20BO/Tg6V37qPi7gDSZ6vIC6Mxcs8LtEcju85cD9lnKKl/lo4S5/w9Ha
23
+ hGD2ZFFfbF8420X5Za5G2KuriS3GzRz7F5dKCTjb1NH9TPlgOc71bcrDmCwwtFJl
24
+ T+tdfBju0YxLSBiMXf4y5QIDAQABo4IBBDCCAQAwHQYDVR0OBBYEFHB1kXO/Xd4g
25
+ G+AJ2/wwh6JOWXzNMIHQBgNVHSMEgcgwgcWAFHB1kXO/Xd4gG+AJ2/wwh6JOWXzN
26
+ oYGhpIGeMIGbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQG
27
+ A1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UEChMKV2ViR2V0LmNvbTETMBEGA1UE
28
+ CxMKV2ViR2V0LmNvbTETMBEGA1UEAxMKV2ViR2V0LmNvbTEgMB4GCSqGSIb3DQEJ
29
+ ARYRd2ViZ2V0QHdlYmdldC5jb22CCQCJUqhJA0GmSDAMBgNVHRMEBTADAQH/MA0G
30
+ CSqGSIb3DQEBBQUAA4GBADzVXlwuff0/w3yK4LflGKKhtC3oChIrwmSyP6tk628N
31
+ BHokpc4Kz63xSXqzYTnBS7rFBwlYThtNalQeWmoUjGh3Z0ZR0JlhU0ln8899LuJ3
32
+ DXnLFY0cVuBnNDMOOFl8vk1qIcZjcTovhzgcixpG6Uk5qmUsKHRLQf4oQJx7TfLK
33
+ -----END CERTIFICATE-----
34
+
35
+ date: 2009-10-27 00:00:00 -07:00
36
+ default_executable:
37
+ dependencies:
38
+ - !ruby/object:Gem::Dependency
39
+ name: open4
40
+ type: :runtime
41
+ version_requirement:
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 0.9.6
47
+ version:
48
+ - !ruby/object:Gem::Dependency
49
+ name: webget_commander
50
+ type: :runtime
51
+ version_requirement:
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 1.0.1
57
+ version:
58
+ description:
59
+ email: webget@webget.com
60
+ executables: []
61
+
62
+ extensions: []
63
+
64
+ extra_rdoc_files: []
65
+
66
+ files:
67
+ - lib/webget_gemini.rb
68
+ has_rdoc: true
69
+ homepage: http://webget.com/
70
+ licenses: []
71
+
72
+ post_install_message:
73
+ rdoc_options: []
74
+
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: "0"
82
+ version:
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: "0"
88
+ version:
89
+ requirements: []
90
+
91
+ rubyforge_project:
92
+ rubygems_version: 1.3.5
93
+ signing_key:
94
+ specification_version: 3
95
+ summary: "WebGet Gemini: provides gem initial setup method to see if a gem is installed"
96
+ test_files:
97
+ - test/webget_gemini/webget_gemini_test.rb
metadata.gz.sig ADDED
Binary file