point-cli 0.0.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of point-cli might be problematic. Click here for more details.

@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + "/../lib/point_cli"
3
+ PointCLI.run(ARGV.shift, ARGV)
@@ -0,0 +1,41 @@
1
+ desc "Lists all domains on your account"
2
+ usage "point list [group]"
3
+ command "list" do |group|
4
+ use_hirb
5
+ domains = Point::Zone.find(:all)
6
+ table domains, :fields => [:id, :name, :ttl, :group, :updated_at], :headers => {:id => "ID", :name => "Name", :ttl => "TTL", :group => "Group", :updated_at => "Last updated"}
7
+ end
8
+
9
+ desc "Get information about the specified domain"
10
+ usage "point info [domain]"
11
+ command "info", :required_args => 1 do |domain|
12
+ zone = select_zone(domain)
13
+
14
+ divider
15
+ puts " Domain Name...: #{zone.name}"
16
+ puts " TTL...........: #{zone.ttl}"
17
+ puts " Group.........: #{zone.group.empty? ? 'none' : zone.group}"
18
+ if zone.additional_slaves
19
+ heading " Additional Slaves"
20
+ for slave in zone.additional_slaves.to_s.split("\n")
21
+ puts " * #{slave}"
22
+ end
23
+ end
24
+ heading " Dates"
25
+
26
+ puts " Created at....: #{zone.created_at}"
27
+ puts " Updated at....: #{zone.updated_at}"
28
+ puts " Last live at..: #{zone.last_updated_on_server_at}"
29
+
30
+ divider
31
+ puts "See 'cb records #{zone.name}' for a list of records on this domain."
32
+ end
33
+
34
+ desc "Return all records for this domain"
35
+ usage "point records [domain]"
36
+ command "records", :required_args => 1 do |domain|
37
+ zone = select_zone(domain)
38
+ puts "Showing records for #{zone.name}"
39
+ use_hirb
40
+ table zone.records, :fields => [:record_type, :name, :data, :aux], :headers => {:record_type => "Type", :name => "Name", :data => "Data", :aux => "Aux"}
41
+ end
@@ -0,0 +1,30 @@
1
+ desc "Setup the Point Gem for access"
2
+ usage "point setup"
3
+ command "setup" do
4
+ puts "\e[33;44mPointHQ CLI Setup Tool\e[0m"
5
+ puts "You can use this tool to automatically download and save your API key so you can easily use the"
6
+ puts "the command line interface."
7
+
8
+ unless `which curl`; $?.success?
9
+ puts "'curl' is not installed on this computer. You need to install curl to use this command line"
10
+ puts "setup tool"
11
+ Process.exit(1)
12
+ end
13
+
14
+ username = ask("E-Mail Address: ")
15
+ password = ask("Password: ") { |q| q.echo = ''}
16
+
17
+ puts "Attempting to get your API key from '#{Point.site}'..."
18
+
19
+ command = "curl -q -s -u \"#{username}:#{password}\" #{Point.site}/api_key"
20
+ if `#{command}` =~ /(\w{40})/
21
+ api_key = $1
22
+ else
23
+ puts "\e[31mAccess was denied or the server was unavailable. Please check your username & password is correct.\e[0m"
24
+ Process.exit(1)
25
+ end
26
+
27
+ config_json = {:username => username, :apitoken => api_key}.to_json
28
+ File.open($point_config_file, 'w') { |f| f.write(config_json)}
29
+ puts "\e[32mConfiguration was successfully saved to #{$point_config_file}\e[0m"
30
+ end
@@ -0,0 +1,142 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+
3
+ require 'point'
4
+ require 'hirb'
5
+
6
+ require 'highline/import'
7
+ HighLine.track_eof = false
8
+
9
+ require 'point_cli/command'
10
+
11
+ trap("INT") { puts; exit }
12
+
13
+ ## Load Configuration before we do anything else
14
+ $point_config_file = File.expand_path(File.join('~', '.point'))
15
+ if File.exist?($point_config_file)
16
+ config_hash = JSON.parse(File.read($point_config_file))
17
+ Point.username = config_hash['username']
18
+ Point.apitoken = config_hash['apitoken']
19
+ end
20
+
21
+ module PointCLI
22
+
23
+ VERSION = "0.0.1"
24
+
25
+ extend self
26
+
27
+ def run(command, args = [])
28
+ load_commands
29
+ command = 'help' if command.nil?
30
+ if @commands[command]
31
+ @options = parse_options(args)
32
+ if args.size < @commands[command][:required_args]
33
+ puts "usage: #{@commands[command][:usage]}"
34
+ else
35
+ @commands[command][:block].call(*args)
36
+ end
37
+ else
38
+ puts "Command not found. Check 'point help' for full information."
39
+ end
40
+ rescue Point::Errors::AccessDenied
41
+ puts "Access Denied. The username & API key stored for your account was invalid. Have you run 'point setup'?"
42
+ Process.exit(1)
43
+ rescue Point::Error
44
+ puts "An error occured with your point request."
45
+ Process.exit(1)
46
+ end
47
+
48
+ def command(command, options = {}, &block)
49
+ @commands = Hash.new if @commands.nil?
50
+ @commands[command] = Hash.new
51
+ @commands[command][:description] = @next_description
52
+ @commands[command][:usage] = @next_usage
53
+ @commands[command][:flags] = @next_flags
54
+ @commands[command][:required_args] = (options[:required_args] || 0)
55
+ @commands[command][:block] = Command.new(block)
56
+ @next_usage, @next_description, @next_flags = nil, nil, nil
57
+ end
58
+
59
+ def commands
60
+ @commands
61
+ end
62
+
63
+ def desc(value)
64
+ @next_description = value
65
+ end
66
+
67
+ def usage(value)
68
+ @next_usage = value
69
+ end
70
+
71
+ def flags(key, value)
72
+ @next_flags = Hash.new if @next_flags.nil?
73
+ @next_flags[key] = value
74
+ end
75
+
76
+ def load_commands
77
+ Dir[File.join(File.dirname(__FILE__), 'commands', '*.rb')].each do |path|
78
+ PointCLI.module_eval File.read(path), path
79
+ end
80
+ end
81
+
82
+ def parse_options(args)
83
+ idx = 0
84
+ args.clone.inject({}) do |memo, arg|
85
+ case arg
86
+ when /^--(.+?)=(.*)/
87
+ args.delete_at(idx)
88
+ memo.merge($1.to_sym => $2)
89
+ when /^--(.+)/
90
+ args.delete_at(idx)
91
+ memo.merge($1.to_sym => true)
92
+ when "--"
93
+ args.delete_at(idx)
94
+ return memo
95
+ else
96
+ idx += 1
97
+ memo
98
+ end
99
+ end
100
+ end
101
+
102
+ end
103
+
104
+ PointCLI.desc "Displays this help message"
105
+ PointCLI.usage "point usage [command]"
106
+ PointCLI.command "help" do |command|
107
+ if command.nil?
108
+ puts "The Point Gem allows you to easily control your DNS hosting from a simple to use"
109
+ puts "command line interface. "
110
+ puts
111
+ for key, command in PointCLI.commands.sort_by{|k,v| k}
112
+ puts " #{key.ljust(15)} #{command[:description]}"
113
+ end
114
+ puts
115
+ puts "For more information see http://www.pointhq.com/gem"
116
+ puts "See 'point help [command]' for usage information."
117
+ else
118
+ if c = PointCLI.commands[command]
119
+ puts c[:description]
120
+ if c[:usage]
121
+ puts
122
+ puts "Usage:"
123
+ puts " #{c[:usage]}"
124
+ end
125
+ if c[:flags]
126
+ puts
127
+ puts "Options:"
128
+ for key, value in c[:flags]
129
+ puts " #{key.ljust(15)} #{value}"
130
+ end
131
+ end
132
+ else
133
+ puts "Command Not Found. Check 'point help' for a full list of commands available to you."
134
+ end
135
+ end
136
+ end
137
+
138
+ PointCLI.desc "Displays the current version number"
139
+ PointCLI.command "version" do
140
+ puts "Point Library Version..: #{Point::VERSION}"
141
+ puts "Point CLI Version......: #{PointCLI::VERSION} "
142
+ end
@@ -0,0 +1,59 @@
1
+ module PointCLI
2
+ class Command
3
+
4
+ def initialize(block)
5
+ (class << self;self end).send :define_method, :command, &block
6
+ end
7
+
8
+ def call(*args)
9
+ arity = method(:command).arity
10
+ args << nil while args.size < arity
11
+ send :command, *args
12
+ end
13
+
14
+ def use_hirb
15
+ begin
16
+ require 'hirb'
17
+ extend Hirb::Console
18
+ rescue LoadError
19
+ puts "Hirb is not installed. Install hirb using '[sudo] gem install hirb' to get cool ASCII tables"
20
+ Process.exit(1)
21
+ end
22
+ end
23
+
24
+ def display_zone_information(zone)
25
+ puts "Zone #{zone.inspect}"
26
+ end
27
+
28
+
29
+ def select_zone(zone)
30
+ zones = Point::Zone.find(:all)
31
+ zones = zones.select{|z| z.name.match(/\A#{zone}/) }
32
+ if zones.size == 0
33
+ puts "There are no zones matching the domain you entered"
34
+ Process.exit(1)
35
+ elsif zones.size > 1
36
+ puts "There are multiple zones matching the domain you have posted. Which domain would"
37
+ puts "you like to view?"
38
+ zone_choice = choose do |menu|
39
+ for zone in zones
40
+ menu.choice(zone.name)
41
+ end
42
+ end
43
+ zones.select{|z| z.name == zone_choice}.first
44
+ else
45
+ zones.first
46
+ end
47
+ end
48
+
49
+ def heading(title)
50
+ puts "-" * 80
51
+ puts title
52
+ end
53
+
54
+ def divider
55
+ puts "=" * 80
56
+ end
57
+
58
+ end
59
+ end
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: point-cli
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Adam Cooke
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-29 00:00:00 +00:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: highline
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.5.0
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: json
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.1.5
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: hirb
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.2.7
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: point
47
+ type: :runtime
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 1.0.0
54
+ version:
55
+ description:
56
+ email: adam@atechmedia.com
57
+ executables:
58
+ - point
59
+ extensions: []
60
+
61
+ extra_rdoc_files: []
62
+
63
+ files:
64
+ - lib/commands/domains.rb
65
+ - lib/commands/setup.rb
66
+ - lib/point_cli/command.rb
67
+ - lib/point_cli.rb
68
+ - bin/point
69
+ has_rdoc: true
70
+ homepage: http://www.pointhq.com
71
+ licenses: []
72
+
73
+ post_install_message:
74
+ rdoc_options: []
75
+
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: "0"
83
+ version:
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: "0"
89
+ version:
90
+ requirements: []
91
+
92
+ rubyforge_project:
93
+ rubygems_version: 1.3.5
94
+ signing_key:
95
+ specification_version: 3
96
+ summary: CLI client for the PointHQ DNS Hosting System
97
+ test_files: []
98
+