lib/core/util.rb in rise-cli-0.2.9 vs lib/core/util.rb in rise-cli-0.3.0

- old
+ new

@@ -1,144 +1,144 @@ -require 'fileutils' -require 'paint' -require 'json' -require 'http' -require 'bcrypt' -require 'io/console' -require 'whirly' -require 'os' -require 'json' -require 'credit_card_validations' -require_relative 'constants' - -module Rise - # - # Utility methods - # - module Util - # - # Checks if rise is being run for the first time - # - def self.first_run? - !File.directory?(File.join(Dir.home, '.rise')) - end - - # - # 1 = git, 2 = gem, 3 = unknown - # - def self.git_or_gem? - gem = nil - return 1 if File.exist?(File.join(Rise::Constants::RISE_DIR, '.git')) - if OS.windows? - gem = system('which gem > NUL') - else - gem = system('which gem > /dev/null') - end - return 2 if gem - 3 - end - - # - # Check for a new version of the gem - # - def self.check_for_update! - src = Rise::Util.git_or_gem? - if src == 2 - Rise::Text.vputs("Source: RubyGems") - elsif src == 1 - Rise::Text.vputs("Source: git") - else - Rise::Text.vputs("Source: unknown") - end - - begin - if src == 2 # if the gem was downloaded from rubygems - current_version = JSON.parse(HTTP.get('https://rubygems.org/api/v1/versions/rise-cli/latest.json'))['version'] - - current_version_i = current_version.gsub('.', '').to_i - - if current_version_i > Rise::Constants::VERSION.gsub('.', '').to_i - Whirly.start( - spinner: 'line', - status: "New version available (#{Paint[Rise::Constants::VERSION, 'red']} -> #{Paint[current_version, '#3498db']}), updating..." - ) do - system("gem install rise-cli") - puts Paint["Update complete, just run #{Paint['`rise`', '#3498db']} to deploy"] - end - end - elsif src == 1 - Rise::Text.vputs("It seems you're on bleeding edge, fetching new changes...") - Rise::Text.vputs("Updating from #{`git show --no-color --oneline -s`.split(' ')[0]} to #{`git rev-parse --short HEAD`}") - `git pull` - puts Paint["Update complete, just run #{Paint['`rise`', '#3498db']} to deploy"] - end - rescue StandardError => e - puts "Unable to check for updates. Error: #{Paint[e.message, 'red']}" - exit 1 - end - end - - # - # Creates all of the necessary files and login information - # - def self.setup(first = true) - if first - puts Paint['Detected first time setup, creating necessary files...', :blue] - FileUtils.mkdir(RISE_DATA_DIR) - FileUtils.mkdir(File.join(RISE_DATA_DIR, 'auth')) - end - - puts Paint['Create a password to secure your uploads.', :bold] - pw = Rise::Util.signup - while (length = pw.length) - break if length > 8 - puts Paint["Password not long enough, - it has to be longer than 8 characters\n", :red] - pw = Rise::Util.signup - end - File.open(File.join(RISE_DATA_DIR, 'auth', 'creds.json'), 'w') do |f| - Rise::Text.vputs("\nWriting hash to creds.json...") - creds_hash = { 'hash' => BCrypt::Password.create(pw) } - f.puts(JSON.pretty_generate(creds_hash)) - end - puts "\nAll done!\nRun #{Paint['`rise`', '#3498db']} to deploy" - end - - def self.signup - print 'Password: ' - STDIN.noecho(&:gets).chomp - end - - # - # Opens +url+ in a web browser if possible - # - def self.open_deployment_in_browser(url) - if OS.windows? - system("START \"\" \"#{url}\"") - else - system("open #{url}") - end - end - - - # @param number [String] the credit card number to add - def self.add_cc_number(number) - if !number.is_a?(String) - raise ArgumentError, '`number` must be of type String' - end - - if !CreditCardValidations::Detector.new(number).valid? - puts Paint['Credit card is not valid'] - return - end - - File.open(File.join(RISE_DIR, 'auth', 'payment', 'cc.json'), 'w') do |c| - c.puts(JSON.pretty_generate({'cc' => number})) - end - - # TODO make a request to the backend to store the cc in db - - puts 'Credit card stored for later use.' - end - - end -end +require 'fileutils' +require 'paint' +require 'json' +require 'http' +require 'bcrypt' +require 'io/console' +require 'whirly' +require 'os' +require 'json' +require 'credit_card_validations' +require_relative 'constants' + +module Rise + # + # Utility methods + # + module Util + # + # Checks if rise is being run for the first time + # + def self.first_run? + !File.directory?(File.join(Dir.home, '.rise')) + end + + # + # 1 = git, 2 = gem, 3 = unknown + # + def self.git_or_gem? + gem = nil + return 1 if File.exist?(File.join(Rise::Constants::RISE_DIR, '.git')) + if OS.windows? + gem = system('which gem > NUL') + else + gem = system('which gem > /dev/null') + end + return 2 if gem + 3 + end + + # + # Check for a new version of the gem + # + def self.check_for_update! + src = Rise::Util.git_or_gem? + if src == 2 + Rise::Text.vputs("Source: RubyGems") + elsif src == 1 + Rise::Text.vputs("Source: git") + else + Rise::Text.vputs("Source: unknown") + end + + begin + if src == 2 # if the gem was downloaded from rubygems + current_version = JSON.parse(HTTP.get('https://rubygems.org/api/v1/versions/rise-cli/latest.json'))['version'] + + current_version_i = current_version.gsub('.', '').to_i + + if current_version_i > Rise::Constants::VERSION.gsub('.', '').to_i + Whirly.start( + spinner: 'line', + status: "New version available (#{Paint[Rise::Constants::VERSION, 'red']} -> #{Paint[current_version, '#3498db']}), updating..." + ) do + system("gem install rise-cli") + puts Paint["Update complete, just run #{Paint['`rise`', '#3498db']} to deploy"] + end + end + elsif src == 1 + Rise::Text.vputs("It seems you're on bleeding edge, fetching new changes...") + Rise::Text.vputs("Updating from #{`git show --no-color --oneline -s`.split(' ')[0]} to #{`git rev-parse --short HEAD`}") + `git pull` + puts Paint["Update complete, just run #{Paint['`rise`', '#3498db']} to deploy"] + end + rescue StandardError => e + puts "Unable to check for updates. Error: #{Paint[e.message, 'red']}" + exit 1 + end + end + + # + # Creates all of the necessary files and login information + # + def self.setup(first = true) + if first + puts Paint['Detected first time setup, creating necessary files...', :blue] + FileUtils.mkdir(RISE_DATA_DIR) + FileUtils.mkdir(File.join(RISE_DATA_DIR, 'auth')) + end + + puts Paint['Create a password to secure your uploads.', :bold] + pw = Rise::Util.signup + while (length = pw.length) + break if length > 8 + puts Paint["Password not long enough, + it has to be longer than 8 characters\n", :red] + pw = Rise::Util.signup + end + File.open(File.join(RISE_DATA_DIR, 'auth', 'creds.json'), 'w') do |f| + Rise::Text.vputs("\nWriting hash to creds.json...") + creds_hash = { 'hash' => BCrypt::Password.create(pw) } + f.puts(JSON.pretty_generate(creds_hash)) + end + puts "\nAll done!\nRun #{Paint['`rise`', '#3498db']} to deploy" + end + + def self.signup + print 'Password: ' + STDIN.noecho(&:gets).chomp + end + + # + # Opens +url+ in a web browser if possible + # + def self.open_deployment_in_browser(url) + if OS.windows? + system("START \"\" \"#{url}\"") + else + system("open #{url}") + end + end + + + # @param number [String] the credit card number to add + def self.add_cc_number(number) + if !number.is_a?(String) + raise ArgumentError, '`number` must be of type String' + end + + if !CreditCardValidations::Detector.new(number).valid? + puts Paint['Credit card is not valid'] + return + end + + File.open(File.join(RISE_DIR, 'auth', 'payment', 'cc.json'), 'w') do |c| + c.puts(JSON.pretty_generate({'cc' => number})) + end + + # TODO make a request to the backend to store the cc in db + + puts 'Credit card stored for later use.' + end + + end +end