Advertisement
Guest User

Untitled

a guest
May 30th, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.51 KB | None | 0 0
  1. #!/usr/bin/env ruby
  2.  
  3. require "yaml"
  4.  
  5. CONFIG = "~/database.yml"
  6. CONFIG_PARAMS = %w(protocol host port database username password).map(&:to_sym)
  7.  
  8. def say(channel=:info, msg)
  9. puts "[#{channel.to_s.upcase}] #{msg}"
  10. end
  11.  
  12. def fail!(msg)
  13. say(:fatal, msg)
  14. exit
  15. end
  16.  
  17. def psql_cmd(protocol:, username:, password:, host:, port:, database:)
  18. pw = password.empty? ? "" : ":#{password}"
  19. "psql #{protocol}://#{username}#{pw}@#{host}:#{port}/#{database}"
  20. end
  21.  
  22. def execute(cmd)
  23. say("Executing: #{cmd}")
  24. exec cmd
  25. end
  26.  
  27. def config(dbalias=nil)
  28. @config ||= begin
  29. unless config = YAML::load(File.open(File.expand_path(CONFIG), "r"))
  30. fail!("Could not load configuration file #{CONFIG}")
  31. end
  32. config
  33. end
  34.  
  35. return @config unless dbalias
  36.  
  37. unless config = @config[dbalias]
  38. fail!("Could not find database configuration for '#{dbalias}'")
  39. end
  40.  
  41. config = config.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
  42. config[:protocol] ||= "postgres"
  43. config[:password] ||= ""
  44.  
  45. unless (missing_keys = CONFIG_PARAMS.select { |k| !config.include?(k) }).empty?
  46. fail!("Invalid configuration for '#{dbalias}': Missing #{missing_keys.join(", ")}")
  47. end
  48.  
  49. say("Loaded config for '#{dbalias}':")
  50. CONFIG_PARAMS.each do |k|
  51. say("\t#{k}: #{config[k]}")
  52. end
  53.  
  54. config
  55. end
  56.  
  57. if ARGV[0].eql?("-l")
  58. say("Available alias:")
  59. config.keys.each do |dbalias|
  60. say("\t#{dbalias}")
  61. end
  62. exit
  63. end
  64.  
  65. unless dbalias = ARGV[0]
  66. fail!("Expected database alias as first argument")
  67. end
  68.  
  69. db = config(dbalias)
  70.  
  71. say("")
  72. execute(psql_cmd(db))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement