gem-ban 1.5.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.
data/AUTHORS ADDED
@@ -0,0 +1 @@
1
+ Barry Allard <barry@barryallard.name>
@@ -0,0 +1,23 @@
1
+ # gem-ban : rubygems plugin
2
+
3
+ ## Installation
4
+
5
+ gem install gem-ban
6
+
7
+
8
+ ## Usage
9
+
10
+ gem ban nokogiri
11
+
12
+ gem unban nokogiri
13
+
14
+ gem listban
15
+
16
+
17
+ ## License
18
+
19
+ GPL v3
20
+
21
+ ## Copyright
22
+
23
+ Copyright 2012 Barry Allard <barry@barryallard.name>
@@ -0,0 +1,55 @@
1
+ require 'rubygems/exceptions'
2
+
3
+ module Gem::Ban
4
+ VERSION = Version = '1.5.2'
5
+
6
+ def self.ban(gem)
7
+ raise Gem::Exception, "The gem #{gem} is already banned." if banned?(gem)
8
+
9
+ _contents[:banned] = if _contents[:banned].is_a?(String)
10
+ [_contents[:banned], gem.to_s].join(' ')
11
+ else
12
+ gem.to_s
13
+ end
14
+ write
15
+ end
16
+
17
+ def self.unban(gem)
18
+ raise Gem::Exception, "There are no currently banned gems." unless banned
19
+ raise Gem::Exception, "The gem #{gem} is not currently banned." unless banned?(gem)
20
+
21
+ _contents[:banned].slice!(gem).strip!
22
+ _contents.delete(:banned) if _contents[:banned].empty?
23
+ write
24
+ end
25
+
26
+ def self.banned?(gem)
27
+ banned.include?(gem)
28
+ end
29
+
30
+ def self.banned
31
+ _contents[:banned].is_a?(String) ? _contents[:banned].split(' ') : []
32
+ end
33
+
34
+ private
35
+ def self._contents
36
+ if ! defined? @@contents
37
+ read
38
+ @@contents ||= {}
39
+ end
40
+ @@contents
41
+ end
42
+
43
+ def self.filename
44
+ File.join(ENV['HOME'],'.gemrc')
45
+ end
46
+
47
+ def self.read
48
+ require 'yaml'
49
+ @@contents=YAML.load(File.read(filename))
50
+ end
51
+
52
+ def self.write
53
+ File.open(filename, 'w') { |f| f.write @@contents.to_yaml }
54
+ end
55
+ end
@@ -0,0 +1,58 @@
1
+ require 'rubygems/ban'
2
+
3
+ class Gem::Commands::BanCommand < Gem::Command
4
+ def initialize
5
+ super 'ban', 'Specific gem installation prevention utility'
6
+ end
7
+
8
+ def arguments # :nodoc:
9
+ ['SUBCOMMAND list, add or remove',
10
+ 'GEMNAME(s) name of a gem to ban or unban'].join "\n"
11
+ end
12
+
13
+ def usage # :nodoc:
14
+ "#{program_name} SUBCOMMAND GEMNAME(S)"
15
+ end
16
+
17
+ def execute
18
+ cmd = options[:args].shift
19
+
20
+ if %w|list add remove|.include? cmd
21
+ return eval("#{cmd}")
22
+ end
23
+
24
+ if %w|help h usage --usage --help -h -?|.include? cmd
25
+ show_help
26
+ abort
27
+ end
28
+
29
+ alert_error "Unknown ban subcommand: #{cmd}"
30
+ show_help
31
+ abort
32
+ end
33
+
34
+
35
+ def list
36
+ unless (_banned = Gem::Ban::banned.join(' ')).empty?
37
+ puts "Banned gems: #{_banned}"
38
+ else
39
+ puts 'Banned gems: (none)'
40
+ end
41
+ end
42
+
43
+ def add
44
+ until (gem = options[:args].shift).nil?
45
+ raise Gem::CommandLineError, "Please specify a gem name to ban on the command line" unless gem
46
+ Gem::Ban::ban(gem)
47
+ end
48
+ end
49
+
50
+ def remove
51
+ until (gem = options[:args].shift).nil?
52
+ raise Gem::CommandLineError, "Please specify a gem name to unban on the command line" unless gem
53
+ Gem::Ban::unban(gem)
54
+ end
55
+ end
56
+ end
57
+
58
+
@@ -0,0 +1,17 @@
1
+ require 'rubygems/exceptions'
2
+ require 'rubygems/installer'
3
+ require 'rubygems/ban'
4
+
5
+ # hack
6
+ class Gem::Installer
7
+ alias :old_ensure_dependency :ensure_dependency
8
+
9
+ # can be overridden using --force
10
+ def ensure_dependency(spec, dependency)
11
+ unless @force
12
+ gem_name = dependency.name.split('gem')[1]
13
+ raise Gem::InstallError, "#{spec.name} attempted installation of banned gem #{gem_name}" if Gem::Ban.banned?(gem_name)
14
+ end
15
+ old_ensure_dependency(spec, dependency)
16
+ end
17
+ end
@@ -0,0 +1,5 @@
1
+ require 'rubygems/commands/ban_command'
2
+ require 'rubygems/command_manager'
3
+ Gem::CommandManager.instance.register_command :ban
4
+
5
+ require 'rubygems/install_ban_plugin' # magical hack
metadata ADDED
@@ -0,0 +1,54 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gem-ban
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.5.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Barry Allard
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-31 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Different places have different requirements, this aims to help ease
15
+ concerns
16
+ email: barry@barryallard.name
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files:
20
+ - README.md
21
+ - AUTHORS
22
+ files:
23
+ - lib/rubygems/ban.rb
24
+ - lib/rubygems/commands/ban_command.rb
25
+ - lib/rubygems/install_ban_plugin.rb
26
+ - lib/rubygems_plugin.rb
27
+ - README.md
28
+ - AUTHORS
29
+ homepage: http://github.com/steakknife/gem-ban
30
+ licenses: []
31
+ post_install_message:
32
+ rdoc_options: []
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ required_rubygems_version: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ requirements: []
48
+ rubyforge_project:
49
+ rubygems_version: 1.8.17
50
+ signing_key:
51
+ specification_version: 3
52
+ summary: gem-ban, prevent certain gems from installation
53
+ test_files: []
54
+ has_rdoc: false