gem-dandy 0.1.0 → 0.2.0

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.
@@ -0,0 +1,22 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
22
+ .rvmrc
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 ninja-loss
1
+ Copyright (c) 2010 ninja-loss
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -1,9 +1,43 @@
1
1
  = gem-dandy
2
2
 
3
- Description goes here.
3
+ Utilities to use to manage your gems.
4
+
5
+
6
+ == Usage
7
+
8
+ === Push To Multiple Profiles On rubygems.org
9
+
10
+ GemDandy provides facilities to make pushing gems to multiple profiles on rubygems.org easier. The jeweler
11
+ gem utilizes a config file at ~/.gem/credentials that can only contain a single API key. GemDandy can manage
12
+ the active API key contained in this configuration.
13
+
14
+ Configure one or more profiles:
15
+
16
+ gemdandy config --profile ninja-loss -key 12345
17
+
18
+ gemdandy config --profile midas -key 23456
19
+
20
+ Use any value for the profile parameter as it is just a name for you to identify the profile.
21
+
22
+ Confirm the API key(s) are set up correctly:
23
+
24
+ gemdandy profile --list # => ninja-loss: 12345\nmidas: 23456
25
+
26
+ gemdandy profile --show ninja-loss #=> ninja-loss: 12345
27
+
28
+ gemdandy profile --show ninja-loss #=> midas: 23456
29
+
30
+ Switch to a specific profile:
31
+
32
+ gemdandy profile --switch ninja-loss
33
+
34
+ Check the active profile:
35
+
36
+ gemdandy profile --active
37
+
4
38
 
5
39
  == Note on Patches/Pull Requests
6
-
40
+
7
41
  * Fork the project.
8
42
  * Make your feature addition or bug fix.
9
43
  * Add tests for it. This is important so I don't break it in a
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{gem-dandy}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["ninja-loss"]
@@ -16,29 +16,35 @@ Gem::Specification.new do |s|
16
16
  s.executables = ["gemdandy"]
17
17
  s.extra_rdoc_files = [
18
18
  "LICENSE",
19
- "README.rdoc"
19
+ "README.rdoc"
20
20
  ]
21
21
  s.files = [
22
22
  ".document",
23
- "LICENSE",
24
- "README.rdoc",
25
- "Rakefile",
26
- "VERSION",
27
- "bin/gemdandy",
28
- "gem-dandy.gemspec",
29
- "lib/gem_dandy.rb",
30
- "lib/gem_dandy/rubyforge_profile.rb",
31
- "spec/gem-dandy_spec.rb",
32
- "spec/spec.opts",
33
- "spec/spec_helper.rb"
23
+ ".gitignore",
24
+ "LICENSE",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "bin/gemdandy",
29
+ "gem-dandy.gemspec",
30
+ "lib/gem_dandy.rb",
31
+ "lib/gem_dandy/command.rb",
32
+ "lib/gem_dandy/config_file.rb",
33
+ "lib/gem_dandy/configuration.rb",
34
+ "lib/gem_dandy/output.rb",
35
+ "lib/gem_dandy/rubyforge_profile.rb",
36
+ "spec/gem-dandy_spec.rb",
37
+ "spec/spec.opts",
38
+ "spec/spec_helper.rb"
34
39
  ]
35
40
  s.homepage = %q{http://github.com/midas/gem-dandy}
41
+ s.rdoc_options = ["--charset=UTF-8"]
36
42
  s.require_paths = ["lib"]
37
43
  s.rubygems_version = %q{1.3.7}
38
44
  s.summary = %q{Utilities to use to manage your gems.}
39
45
  s.test_files = [
40
46
  "spec/gem-dandy_spec.rb",
41
- "spec/spec_helper.rb"
47
+ "spec/spec_helper.rb"
42
48
  ]
43
49
 
44
50
  if s.respond_to? :specification_version then
@@ -1,16 +1,21 @@
1
1
  require 'trollop'
2
2
  require 'yaml'
3
- # require File.expand_path( "#{File.dirname __FILE__}/gem_dandy/rubyforge_profile" )
4
- Dir.glob "#{File.dirname __FILE__}/gem_dandy/*.rb" do |f|
5
- require File.expand_path( "#{File.dirname __FILE__}/gem_dandy/" +
6
- File.basename( f, '.rb' ) )
7
- end
3
+ # Dir.glob "#{File.dirname __FILE__}/gem_dandy/*.rb" do |f|
4
+ # require File.expand_path( "#{File.dirname __FILE__}/gem_dandy/" +
5
+ # File.basename( f, '.rb' ) )
6
+ # end
8
7
 
9
8
  module GemDandy
9
+ autoload :Command, 'gem_dandy/command'
10
+ autoload :ConfigFile, 'gem_dandy/config_file'
11
+ autoload :Configuration, 'gem_dandy/configuration'
12
+ autoload :Output, 'gem_dandy/output'
13
+ autoload :RubyforgeProfile, 'gem_dandy/rubyforge_profile'
14
+
10
15
  VERSION = File.read( "#{File.dirname __FILE__}/../VERSION" ).chomp
11
16
  end
12
17
 
13
- SUB_COMMANDS = %w(profile)
18
+ SUB_COMMANDS = %w(config profile)
14
19
  global_opts = Trollop::options do
15
20
  version "v0.1.0 (c) 2010 ninja-loss"
16
21
  banner <<-EOS
@@ -20,26 +25,43 @@ Usage:
20
25
  gemdandy [sub-command] [options]
21
26
 
22
27
  sub-commands:
28
+ config
23
29
  profile
24
30
 
31
+ (For help with a sub-command: gemdandy [sub-command] -h)
32
+
25
33
  options:
26
34
  EOS
27
35
  # opt :dry_run, "Perform a dry run", :short => "-n"
28
36
  stop_on SUB_COMMANDS
29
37
  end
30
38
 
31
- cmd = ARGV.shift || '' # get the subcommand
39
+ # Get the sub-command and its options
40
+ #
41
+ cmd = ARGV.shift || ''
32
42
  cmd_opts = case( cmd )
33
- when "profile" # parse delete options
43
+ when "config"
44
+ Trollop::options do
45
+ opt :clear, "Clear the ~/.gemdandyrc file"
46
+ opt :profile, "The name of the profile", :type => String
47
+ opt :key, "The RubyForge API key", :type => String
48
+ end
49
+ when "profile"
34
50
  Trollop::options do
35
51
  opt :active, "Show the currently active Rubyforge profile"
36
- opt :switch, "Switch the currently active Rubyforge profile to <s>", :type => String
52
+ opt :list, "List all of the configured Rubyforge profiles / API keys"
53
+ opt :show, "Show the configured Rubyforge API key for profile <s>", :type => String, :short => "-z"
54
+ opt :switch, "Switch the currently active Rubyforge profile to <s>", :type => String
37
55
  end
38
56
  else
39
57
  Trollop::die "unknown command #{cmd.inspect}"
40
58
  end
41
59
 
60
+ # Execute the command
61
+ #
42
62
  case( cmd )
63
+ when "config"
64
+ GemDandy::Configuration.new( cmd_opts ).perform_action
43
65
  when "profile"
44
66
  GemDandy::RubyforgeProfile.new( cmd_opts ).perform_action
45
67
  end
@@ -0,0 +1,9 @@
1
+ module GemDandy
2
+ class Command
3
+ attr_reader :options
4
+
5
+ def initialize( options )
6
+ @options = options
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,21 @@
1
+ module GemDandy
2
+ module ConfigFile
3
+ def api_keys
4
+ return File.exists?( gemdandy_rc_file ) ?
5
+ YAML::load( File.open( gemdandy_rc_file ) ) :
6
+ {}
7
+ end
8
+
9
+ def find_api_key( identifier )
10
+ api_keys[identifier]
11
+ end
12
+
13
+ def gemdandy_rc_file
14
+ "#{File.expand_path( '~' )}/#{config_file_name}"
15
+ end
16
+
17
+ def config_file_name
18
+ '.gemdandyrc'
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,55 @@
1
+ module GemDandy
2
+ class Configuration < Command
3
+ include ConfigFile
4
+ include Output
5
+
6
+ def perform_action
7
+ if options[:clear_given]
8
+ clear_config
9
+ else
10
+ confirm_add_to_config_options
11
+ add_to_config( options[:profile], options[:key] )
12
+ confirm_add_to_config_success
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def add_to_config( profile, key )
19
+ keys = api_keys.merge( profile => key )
20
+ remove_config_file
21
+ write_config_file( keys )
22
+ end
23
+
24
+ def clear_config
25
+ remove_config_file
26
+ write_config_file( {} )
27
+ report "Successfully cleared the ~/#{config_file_name} file"
28
+ end
29
+
30
+ def confirm_add_to_config_success
31
+ new_key = find_api_key( options[:profile] )
32
+ msg = new_key == options[:key] ?
33
+ "Successfully added #{options[:key]} key to #{options[:profile]} profile" :
34
+ "Failed to add new Ruby forge API key: #{options[:key]}"
35
+ report msg
36
+ end
37
+
38
+ def remove_config_file
39
+ if File.exists?( gemdandy_rc_file )
40
+ `rm #{gemdandy_rc_file}`
41
+ end
42
+ end
43
+
44
+ def write_config_file( key_hash )
45
+ File.open( gemdandy_rc_file, 'w' ) do |f|
46
+ f.write YAML::dump( key_hash )
47
+ end
48
+ end
49
+
50
+ def confirm_add_to_config_options
51
+ die( :profile, "is required" ) unless options[:profile]
52
+ die( :key, "is required" ) unless options[:key]
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,11 @@
1
+ module GemDandy
2
+ module Output
3
+ def report( *args )
4
+ puts *args
5
+ end
6
+
7
+ def die( *args )
8
+ Trollop::die *args
9
+ end
10
+ end
11
+ end
@@ -1,10 +1,7 @@
1
1
  module GemDandy
2
- class RubyforgeProfile
3
- attr_reader :options
4
-
5
- def initialize( options )
6
- @options = options
7
- end
2
+ class RubyforgeProfile < Command
3
+ include ConfigFile
4
+ include Output
8
5
 
9
6
  def perform_action
10
7
  perform_checks
@@ -12,6 +9,11 @@ module GemDandy
12
9
  if options[:switch_given]
13
10
  switch_profile_to( options[:switch] )
14
11
  display_active_profile
12
+ elsif options[:list_given]
13
+ list_configured_profiles
14
+ elsif options[:show_given]
15
+ confirm_show_configured_profile_options
16
+ show_configured_profile( options[:show] )
15
17
  else
16
18
  display_active_profile
17
19
  end
@@ -21,19 +23,35 @@ module GemDandy
21
23
 
22
24
  def perform_checks
23
25
  unless File.exists?( gemdandy_rc_file )
24
- Trollop::die "The ~/.gemdandyrc file does not exist. Please run 'gemdandy config -p <profile-name> -k <key>"
26
+ die "The ~/.gemdandyrc file does not exist. Please run 'gemdandy config -p <profile-name> -k <key>"
25
27
  end
26
28
  end
27
29
 
28
30
  def display_active_profile
29
- puts "Active RubyForge Profile: #{current_profile}"
31
+ report "Active RubyForge Profile: #{current_profile}"
32
+ end
33
+
34
+ def list_configured_profiles
35
+ report api_keys.sort.map { |k,v| "#{k}: #{v}" }.join( "\n" )
36
+ end
37
+
38
+ def show_configured_profile( identifier )
39
+ key = find_api_key( identifier )
40
+ msg = (key.nil? || key.empty?) ?
41
+ "There is no RubyForge API key configured for the #{identifier} profile" :
42
+ "#{identifier}: #{key}"
43
+ report msg
44
+ end
45
+
46
+ def confirm_show_configured_profile_options
47
+ die( :show, "is required" ) unless options[:show]
30
48
  end
31
49
 
32
50
  def switch_profile_to( identifier )
33
- puts "Switching active RubyForge profile to #{options[:switch]}..."
51
+ report "Switching active RubyForge profile to #{options[:switch]}..."
34
52
  credentials_hash = deployed_key_hash || {}
35
53
  unless key = find_api_key( identifier )
36
- Trollop::die "#{identifier} is not a configured RubyForge API profile."
54
+ die "#{identifier} is not a configured RubyForge API profile."
37
55
  end
38
56
  credentials_hash.merge!( credentials_key => key )
39
57
  remove_credentials_file
@@ -52,10 +70,6 @@ module GemDandy
52
70
  end
53
71
  end
54
72
 
55
- def api_keys
56
- YAML::load( File.open( gemdandy_rc_file ) )
57
- end
58
-
59
73
  def deployed_key_hash
60
74
  return File.exists?( gem_credentials_file ) ?
61
75
  YAML::load( File.open( gem_credentials_file ) ) :
@@ -70,18 +84,10 @@ module GemDandy
70
84
  :rubygems_api_key
71
85
  end
72
86
 
73
- def find_api_key( identifier )
74
- api_keys[identifier]
75
- end
76
-
77
87
  def current_profile
78
88
  api_keys.invert[deployed_key]
79
89
  end
80
90
 
81
- def gemdandy_rc_file
82
- "#{File.expand_path( '~' )}/.gemdandyrc"
83
- end
84
-
85
91
  def gem_credentials_file
86
92
  "#{File.expand_path( '~' )}/.gem/credentials"
87
93
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gem-dandy
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 0.1.0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - ninja-loss
@@ -61,6 +61,7 @@ extra_rdoc_files:
61
61
  - README.rdoc
62
62
  files:
63
63
  - .document
64
+ - .gitignore
64
65
  - LICENSE
65
66
  - README.rdoc
66
67
  - Rakefile
@@ -68,6 +69,10 @@ files:
68
69
  - bin/gemdandy
69
70
  - gem-dandy.gemspec
70
71
  - lib/gem_dandy.rb
72
+ - lib/gem_dandy/command.rb
73
+ - lib/gem_dandy/config_file.rb
74
+ - lib/gem_dandy/configuration.rb
75
+ - lib/gem_dandy/output.rb
71
76
  - lib/gem_dandy/rubyforge_profile.rb
72
77
  - spec/gem-dandy_spec.rb
73
78
  - spec/spec.opts
@@ -77,8 +82,8 @@ homepage: http://github.com/midas/gem-dandy
77
82
  licenses: []
78
83
 
79
84
  post_install_message:
80
- rdoc_options: []
81
-
85
+ rdoc_options:
86
+ - --charset=UTF-8
82
87
  require_paths:
83
88
  - lib
84
89
  required_ruby_version: !ruby/object:Gem::Requirement