shelly 0.1.27 → 0.1.28
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/CHANGELOG.md +6 -0
- data/lib/shelly/cli/config.rb +10 -10
- data/lib/shelly/cli/{deploys.rb → deploy.rb} +4 -4
- data/lib/shelly/cli/{files.rb → file.rb} +4 -4
- data/lib/shelly/cli/main.rb +7 -9
- data/lib/shelly/cli/user.rb +3 -3
- data/lib/shelly/version.rb +1 -1
- data/lib/thor/basic.rb +0 -2
- data/lib/thor/thor.rb +6 -0
- data/spec/shelly/cli/{deploys_spec.rb → deploy_spec.rb} +4 -4
- data/spec/shelly/cli/{files_spec.rb → file_spec.rb} +3 -3
- data/spec/shelly/cli/main_spec.rb +23 -23
- metadata +8 -8
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,3 +1,9 @@ | |
| 1 | 
            +
            ## 0.1.28 / 2012-09-21
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            * [feature] Singular form of all subcommands with possibility to invoke them with plural form
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              ```shelly user list``` and ```shelly users list``` works the same
         | 
| 6 | 
            +
             | 
| 1 7 | 
             
            ## 0.1.27 / 2012-09-12
         | 
| 2 8 |  | 
| 3 9 | 
             
            * [bug] shelly check - wrong method for retrieving databases from Cloudfile
         | 
    
        data/lib/shelly/cli/config.rb
    CHANGED
    
    | @@ -3,7 +3,7 @@ require "shelly/cli/command" | |
| 3 3 | 
             
            module Shelly
         | 
| 4 4 | 
             
              module CLI
         | 
| 5 5 | 
             
                class Config < Command
         | 
| 6 | 
            -
                   | 
| 6 | 
            +
                  namespace :config
         | 
| 7 7 | 
             
                  include Helpers
         | 
| 8 8 |  | 
| 9 9 | 
             
                  before_hook :logged_in?, :only => [:list, :show, :create, :new, :edit, :update, :delete]
         | 
| @@ -11,7 +11,7 @@ module Shelly | |
| 11 11 |  | 
| 12 12 | 
             
                  desc "list", "List configuration files"
         | 
| 13 13 | 
             
                  def list
         | 
| 14 | 
            -
                    app = multiple_clouds(options[:cloud], "list")
         | 
| 14 | 
            +
                    app = multiple_clouds(options[:cloud], "config list")
         | 
| 15 15 | 
             
                    configs = app.configs
         | 
| 16 16 | 
             
                    unless configs.empty?
         | 
| 17 17 | 
             
                      say "Configuration files for #{app}", :green
         | 
| @@ -34,7 +34,7 @@ module Shelly | |
| 34 34 |  | 
| 35 35 | 
             
                  desc "show PATH", "View configuration file"
         | 
| 36 36 | 
             
                  def show(path)
         | 
| 37 | 
            -
                    app = multiple_clouds(options[:cloud], "show #{path}")
         | 
| 37 | 
            +
                    app = multiple_clouds(options[:cloud], "config show #{path}")
         | 
| 38 38 | 
             
                    config = app.config(path)
         | 
| 39 39 | 
             
                    say "Content of #{config["path"]}:", :green
         | 
| 40 40 | 
             
                    say config["content"]
         | 
| @@ -62,7 +62,7 @@ module Shelly | |
| 62 62 | 
             
                  desc "edit PATH", "Edit configuration file"
         | 
| 63 63 | 
             
                  def edit(path = nil)
         | 
| 64 64 | 
             
                    say_error "No configuration file specified" unless path
         | 
| 65 | 
            -
                    app = multiple_clouds(options[:cloud], "edit #{path}")
         | 
| 65 | 
            +
                    app = multiple_clouds(options[:cloud], "config edit #{path}")
         | 
| 66 66 | 
             
                    config = app.config(path)
         | 
| 67 67 | 
             
                    content = open_editor(config["path"], config["content"])
         | 
| 68 68 | 
             
                    app.update_config(path, content)
         | 
| @@ -80,7 +80,7 @@ module Shelly | |
| 80 80 |  | 
| 81 81 | 
             
                  desc "delete PATH", "Delete configuration file"
         | 
| 82 82 | 
             
                  def delete(path)
         | 
| 83 | 
            -
                    app = multiple_clouds(options[:cloud], "delete #{path}")
         | 
| 83 | 
            +
                    app = multiple_clouds(options[:cloud], "config delete #{path}")
         | 
| 84 84 | 
             
                    answer = yes?("Are you sure you want to delete 'path' (yes/no): ")
         | 
| 85 85 | 
             
                    if answer
         | 
| 86 86 | 
             
                      app.delete_config(path)
         | 
| @@ -105,17 +105,17 @@ module Shelly | |
| 105 105 | 
             
                    def open_editor(path, output = "")
         | 
| 106 106 | 
             
                      filename = "shelly-edit-"
         | 
| 107 107 | 
             
                      0.upto(20) { filename += rand(9).to_s }
         | 
| 108 | 
            -
                      filename << File.extname(path)
         | 
| 109 | 
            -
                      filename = File.join(Dir.tmpdir, filename)
         | 
| 110 | 
            -
                      tf = File.open(filename, "w")
         | 
| 108 | 
            +
                      filename << ::File.extname(path)
         | 
| 109 | 
            +
                      filename = ::File.join(Dir.tmpdir, filename)
         | 
| 110 | 
            +
                      tf = ::File.open(filename, "w")
         | 
| 111 111 | 
             
                      tf.sync = true
         | 
| 112 112 | 
             
                      tf.puts output
         | 
| 113 113 | 
             
                      tf.close
         | 
| 114 114 | 
             
                      no_editor unless system("#{ENV['EDITOR']} #{tf.path}")
         | 
| 115 | 
            -
                      tf = File.open(filename, "r")
         | 
| 115 | 
            +
                      tf = ::File.open(filename, "r")
         | 
| 116 116 | 
             
                      output = tf.gets(nil)
         | 
| 117 117 | 
             
                      tf.close
         | 
| 118 | 
            -
                      File.unlink(filename)
         | 
| 118 | 
            +
                      ::File.unlink(filename)
         | 
| 119 119 | 
             
                      output
         | 
| 120 120 | 
             
                    end
         | 
| 121 121 |  | 
| @@ -3,8 +3,8 @@ require "time" | |
| 3 3 |  | 
| 4 4 | 
             
            module Shelly
         | 
| 5 5 | 
             
              module CLI
         | 
| 6 | 
            -
                class  | 
| 7 | 
            -
                  namespace : | 
| 6 | 
            +
                class Deploy < Command
         | 
| 7 | 
            +
                  namespace :deploy
         | 
| 8 8 | 
             
                  include Helpers
         | 
| 9 9 |  | 
| 10 10 | 
             
                  before_hook :logged_in?, :only => [:list, :show]
         | 
| @@ -12,7 +12,7 @@ module Shelly | |
| 12 12 |  | 
| 13 13 | 
             
                  desc "list", "Lists deploy logs"
         | 
| 14 14 | 
             
                  def list
         | 
| 15 | 
            -
                    app = multiple_clouds(options[:cloud], " | 
| 15 | 
            +
                    app = multiple_clouds(options[:cloud], "deploy list")
         | 
| 16 16 | 
             
                    logs = app.deploy_logs
         | 
| 17 17 | 
             
                    unless logs.empty?
         | 
| 18 18 | 
             
                      say "Available deploy logs", :green
         | 
| @@ -33,7 +33,7 @@ module Shelly | |
| 33 33 | 
             
                  desc "show LOG", "Show specific deploy log"
         | 
| 34 34 | 
             
                  def show(log = nil)
         | 
| 35 35 | 
             
                    specify_log(log)
         | 
| 36 | 
            -
                    app = multiple_clouds(options[:cloud], " | 
| 36 | 
            +
                    app = multiple_clouds(options[:cloud], "deploy show #{log}")
         | 
| 37 37 | 
             
                    content = app.deploy_log(log)
         | 
| 38 38 | 
             
                    say "Log for deploy done on #{content["created_at"]}", :green
         | 
| 39 39 | 
             
                    if content["bundle_install"]
         | 
| @@ -2,8 +2,8 @@ require "shelly/cli/command" | |
| 2 2 |  | 
| 3 3 | 
             
            module Shelly
         | 
| 4 4 | 
             
              module CLI
         | 
| 5 | 
            -
                class  | 
| 6 | 
            -
                  namespace : | 
| 5 | 
            +
                class File < Command
         | 
| 6 | 
            +
                  namespace :file
         | 
| 7 7 | 
             
                  include Helpers
         | 
| 8 8 |  | 
| 9 9 | 
             
                  before_hook :logged_in?, :only => [:upload, :download]
         | 
| @@ -12,7 +12,7 @@ module Shelly | |
| 12 12 |  | 
| 13 13 | 
             
                  desc "upload PATH", "Upload files to persistent data storage"
         | 
| 14 14 | 
             
                  def upload(path)
         | 
| 15 | 
            -
                    app = multiple_clouds(options[:cloud], "upload #{path}")
         | 
| 15 | 
            +
                    app = multiple_clouds(options[:cloud], "file upload #{path}")
         | 
| 16 16 | 
             
                    app.upload(path)
         | 
| 17 17 | 
             
                  rescue Client::ConflictException
         | 
| 18 18 | 
             
                    say_error "Cloud #{app} is not running. Cannot upload files."
         | 
| @@ -25,7 +25,7 @@ module Shelly | |
| 25 25 | 
             
                    DEST_PATH - optional destination where files should be saved. By default is current working directory.
         | 
| 26 26 | 
             
                  }
         | 
| 27 27 | 
             
                  def download(relative_source = ".", destination = ".")
         | 
| 28 | 
            -
                    app = multiple_clouds(options[:cloud], "download #{relative_source} #{destination}")
         | 
| 28 | 
            +
                    app = multiple_clouds(options[:cloud], "file download #{relative_source} #{destination}")
         | 
| 29 29 | 
             
                    app.download(relative_source, destination)
         | 
| 30 30 | 
             
                  rescue Client::ConflictException
         | 
| 31 31 | 
             
                    say_error "Cloud #{app} is not running. Cannot download files."
         | 
    
        data/lib/shelly/cli/main.rb
    CHANGED
    
    | @@ -2,20 +2,18 @@ | |
| 2 2 | 
             
            require "shelly/cli/command"
         | 
| 3 3 | 
             
            require "shelly/cli/user"
         | 
| 4 4 | 
             
            require "shelly/cli/backup"
         | 
| 5 | 
            -
            require "shelly/cli/ | 
| 5 | 
            +
            require "shelly/cli/deploy"
         | 
| 6 6 | 
             
            require "shelly/cli/config"
         | 
| 7 | 
            -
            require "shelly/cli/ | 
| 7 | 
            +
            require "shelly/cli/file"
         | 
| 8 8 |  | 
| 9 9 | 
             
            module Shelly
         | 
| 10 10 | 
             
              module CLI
         | 
| 11 11 | 
             
                class Main < Command
         | 
| 12 | 
            -
                   | 
| 13 | 
            -
             | 
| 14 | 
            -
                   | 
| 15 | 
            -
                   | 
| 16 | 
            -
                   | 
| 17 | 
            -
                  register(Config, "config", "config <command>", "Manage application configuration files")
         | 
| 18 | 
            -
                  register(Files, "files", "files <command>", "Upload and download files to and from persistent storage")
         | 
| 12 | 
            +
                  register_subcommand(User, "user", "user <command>", "Manage collaborators")
         | 
| 13 | 
            +
                  register_subcommand(Backup, "backup", "backup <command>", "Manage database backups")
         | 
| 14 | 
            +
                  register_subcommand(Deploy, "deploy", "deploy <command>", "View deploy logs")
         | 
| 15 | 
            +
                  register_subcommand(Config, "config", "config <command>", "Manage application configuration files")
         | 
| 16 | 
            +
                  register_subcommand(File, "file", "file <command>", "Upload and download files to and from persistent storage")
         | 
| 19 17 |  | 
| 20 18 | 
             
                  check_unknown_options!(:except => :rake)
         | 
| 21 19 |  | 
    
        data/lib/shelly/cli/user.rb
    CHANGED
    
    | @@ -11,7 +11,7 @@ module Shelly | |
| 11 11 |  | 
| 12 12 | 
             
                  desc "list", "List users with access to clouds defined in Cloudfile"
         | 
| 13 13 | 
             
                  def list
         | 
| 14 | 
            -
                    app = multiple_clouds(options[:cloud], "list")
         | 
| 14 | 
            +
                    app = multiple_clouds(options[:cloud], "user list")
         | 
| 15 15 | 
             
                    say "Cloud #{app}:"
         | 
| 16 16 | 
             
                    app.active_collaborations.each { |c| say "  #{c["email"]}" }
         | 
| 17 17 | 
             
                    app.inactive_collaborations.each { |c|
         | 
| @@ -21,7 +21,7 @@ module Shelly | |
| 21 21 | 
             
                  desc "add [EMAIL]", "Add new developer to clouds defined in Cloudfile"
         | 
| 22 22 | 
             
                  def add(email = nil)
         | 
| 23 23 | 
             
                    user = Shelly::User.new
         | 
| 24 | 
            -
                    app = multiple_clouds(options[:cloud], "add")
         | 
| 24 | 
            +
                    app = multiple_clouds(options[:cloud], "user add")
         | 
| 25 25 | 
             
                    user_email = email || ask_for_email({:guess_email => false})
         | 
| 26 26 | 
             
                    user.send_invitation(app.to_s, user_email)
         | 
| 27 27 | 
             
                    say "Sending invitation to #{user_email} to work on #{app}", :green
         | 
| @@ -37,7 +37,7 @@ module Shelly | |
| 37 37 | 
             
                  desc "delete [EMAIL]", "Remove developer from clouds defined in Cloudfile"
         | 
| 38 38 | 
             
                  def delete(email = nil)
         | 
| 39 39 | 
             
                    user = Shelly::User.new
         | 
| 40 | 
            -
                    app = multiple_clouds(options[:cloud], "delete")
         | 
| 40 | 
            +
                    app = multiple_clouds(options[:cloud], "user delete")
         | 
| 41 41 | 
             
                    user_email = email || ask_for_email({:guess_email => false})
         | 
| 42 42 | 
             
                    user.delete_collaboration(app.to_s, user_email)
         | 
| 43 43 | 
             
                    say "User #{user_email} deleted from cloud #{app}"
         | 
    
        data/lib/shelly/version.rb
    CHANGED
    
    
    
        data/lib/thor/basic.rb
    CHANGED
    
    
    
        data/lib/thor/thor.rb
    CHANGED
    
    | @@ -1,5 +1,11 @@ | |
| 1 1 | 
             
            class Thor
         | 
| 2 2 | 
             
              class << self
         | 
| 3 | 
            +
                def register_subcommand(klass, subcommand, usage, description, options = {})
         | 
| 4 | 
            +
                  register(klass, subcommand, usage, description, options)
         | 
| 5 | 
            +
                  # This could be done with ActiveSupport::Inflector module but is this necessary?
         | 
| 6 | 
            +
                  register(klass, subcommand + "s", usage, description, :hide => true)
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
             | 
| 3 9 | 
             
                def before_hook(method, options = {})
         | 
| 4 10 | 
             
                  @hook = {} unless @hook
         | 
| 5 11 | 
             
                  @hook[method] = options
         | 
| @@ -1,11 +1,11 @@ | |
| 1 1 | 
             
            require "spec_helper"
         | 
| 2 | 
            -
            require "shelly/cli/ | 
| 2 | 
            +
            require "shelly/cli/deploy"
         | 
| 3 3 |  | 
| 4 | 
            -
            describe Shelly::CLI:: | 
| 4 | 
            +
            describe Shelly::CLI::Deploy do
         | 
| 5 5 | 
             
              before do
         | 
| 6 6 | 
             
                FileUtils.stub(:chmod)
         | 
| 7 | 
            -
                @deploys = Shelly::CLI:: | 
| 8 | 
            -
                Shelly::CLI:: | 
| 7 | 
            +
                @deploys = Shelly::CLI::Deploy.new
         | 
| 8 | 
            +
                Shelly::CLI::Deploy.stub(:new).and_return(@deploys)
         | 
| 9 9 | 
             
                @client = mock
         | 
| 10 10 | 
             
                Shelly::Client.stub(:new).and_return(@client)
         | 
| 11 11 | 
             
                $stdout.stub(:puts)
         | 
| @@ -1,10 +1,10 @@ | |
| 1 1 | 
             
            require "spec_helper"
         | 
| 2 | 
            -
            require "shelly/cli/ | 
| 2 | 
            +
            require "shelly/cli/file"
         | 
| 3 3 |  | 
| 4 | 
            -
            describe Shelly::CLI:: | 
| 4 | 
            +
            describe Shelly::CLI::File do
         | 
| 5 5 | 
             
              before do
         | 
| 6 6 | 
             
                FileUtils.stub(:chmod)
         | 
| 7 | 
            -
                @cli_files = Shelly::CLI:: | 
| 7 | 
            +
                @cli_files = Shelly::CLI::File.new
         | 
| 8 8 | 
             
                @client = mock
         | 
| 9 9 | 
             
                Shelly::Client.stub(:new).and_return(@client)
         | 
| 10 10 | 
             
                @client.stub(:token).and_return("abc")
         | 
| @@ -27,29 +27,29 @@ describe Shelly::CLI::Main do | |
| 27 27 | 
             
                it "should display available commands" do
         | 
| 28 28 | 
             
                  out = IO.popen("bin/shelly --debug").read.strip
         | 
| 29 29 | 
             
                  out.should include("Tasks:")
         | 
| 30 | 
            -
                  out.should include("shelly add | 
| 31 | 
            -
                  out.should include("shelly backup <command> | 
| 32 | 
            -
                  out.should include("shelly check | 
| 33 | 
            -
                  out.should include("shelly config <command> | 
| 34 | 
            -
                  out.should include("shelly console | 
| 35 | 
            -
                  out.should include("shelly dbconsole | 
| 36 | 
            -
                  out.should include("shelly delete | 
| 37 | 
            -
                  out.should include("shelly  | 
| 38 | 
            -
                  out.should include("shelly  | 
| 39 | 
            -
                  out.should include("shelly help [TASK] | 
| 40 | 
            -
                  out.should include("shelly info | 
| 41 | 
            -
                  out.should include("shelly list | 
| 42 | 
            -
                  out.should include("shelly login [EMAIL] | 
| 43 | 
            -
                  out.should include("shelly logout | 
| 44 | 
            -
                  out.should include("shelly logs | 
| 45 | 
            -
                  out.should include("shelly open | 
| 46 | 
            -
                  out.should include("shelly rake TASK | 
| 47 | 
            -
                  out.should include("shelly redeploy | 
| 48 | 
            -
                  out.should include("shelly register [EMAIL] | 
| 49 | 
            -
                  out.should include("shelly setup | 
| 50 | 
            -
                  out.should include("shelly start | 
| 51 | 
            -
                  out.should include("shelly stop | 
| 52 | 
            -
                  out.should include("shelly user <command> | 
| 30 | 
            +
                  out.should include("shelly add               # Add a new cloud")
         | 
| 31 | 
            +
                  out.should include("shelly backup <command>  # Manage database backups")
         | 
| 32 | 
            +
                  out.should include("shelly check             # Check if application fulfills Shelly Cloud requirements")
         | 
| 33 | 
            +
                  out.should include("shelly config <command>  # Manage application configuration files")
         | 
| 34 | 
            +
                  out.should include("shelly console           # Open application console")
         | 
| 35 | 
            +
                  out.should include("shelly dbconsole         # Run rails dbconsole")
         | 
| 36 | 
            +
                  out.should include("shelly delete            # Delete the cloud")
         | 
| 37 | 
            +
                  out.should include("shelly deploy <command>  # View deploy logs")
         | 
| 38 | 
            +
                  out.should include("shelly file <command>    # Upload and download files to and from persistent storage")
         | 
| 39 | 
            +
                  out.should include("shelly help [TASK]       # Describe available tasks or one specific task")
         | 
| 40 | 
            +
                  out.should include("shelly info              # Show basic information about cloud")
         | 
| 41 | 
            +
                  out.should include("shelly list              # List available clouds")
         | 
| 42 | 
            +
                  out.should include("shelly login [EMAIL]     # Log into Shelly Cloud")
         | 
| 43 | 
            +
                  out.should include("shelly logout            # Logout from Shelly Cloud")
         | 
| 44 | 
            +
                  out.should include("shelly logs              # Show latest application logs")
         | 
| 45 | 
            +
                  out.should include("shelly open              # Open application page in browser")
         | 
| 46 | 
            +
                  out.should include("shelly rake TASK         # Run rake task")
         | 
| 47 | 
            +
                  out.should include("shelly redeploy          # Redeploy application")
         | 
| 48 | 
            +
                  out.should include("shelly register [EMAIL]  # Register new account")
         | 
| 49 | 
            +
                  out.should include("shelly setup             # Set up git remotes for deployment on Shelly Cloud")
         | 
| 50 | 
            +
                  out.should include("shelly start             # Start the cloud")
         | 
| 51 | 
            +
                  out.should include("shelly stop              # Shutdown the cloud")
         | 
| 52 | 
            +
                  out.should include("shelly user <command>    # Manage collaborators")
         | 
| 53 53 | 
             
                  out.should include("Options")
         | 
| 54 54 | 
             
                  out.should include("[--debug]  # Show debug information")
         | 
| 55 55 | 
             
                  out.should include("-h, [--help]   # Describe available tasks or one specific task")
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: shelly
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.28
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2012-09- | 
| 12 | 
            +
            date: 2012-09-21 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: rspec
         | 
| @@ -292,8 +292,8 @@ files: | |
| 292 292 | 
             
            - lib/shelly/cli/backup.rb
         | 
| 293 293 | 
             
            - lib/shelly/cli/command.rb
         | 
| 294 294 | 
             
            - lib/shelly/cli/config.rb
         | 
| 295 | 
            -
            - lib/shelly/cli/ | 
| 296 | 
            -
            - lib/shelly/cli/ | 
| 295 | 
            +
            - lib/shelly/cli/deploy.rb
         | 
| 296 | 
            +
            - lib/shelly/cli/file.rb
         | 
| 297 297 | 
             
            - lib/shelly/cli/main.rb
         | 
| 298 298 | 
             
            - lib/shelly/cli/runner.rb
         | 
| 299 299 | 
             
            - lib/shelly/cli/user.rb
         | 
| @@ -318,8 +318,8 @@ files: | |
| 318 318 | 
             
            - spec/shelly/backup_spec.rb
         | 
| 319 319 | 
             
            - spec/shelly/cli/backup_spec.rb
         | 
| 320 320 | 
             
            - spec/shelly/cli/config_spec.rb
         | 
| 321 | 
            -
            - spec/shelly/cli/ | 
| 322 | 
            -
            - spec/shelly/cli/ | 
| 321 | 
            +
            - spec/shelly/cli/deploy_spec.rb
         | 
| 322 | 
            +
            - spec/shelly/cli/file_spec.rb
         | 
| 323 323 | 
             
            - spec/shelly/cli/main_spec.rb
         | 
| 324 324 | 
             
            - spec/shelly/cli/runner_spec.rb
         | 
| 325 325 | 
             
            - spec/shelly/cli/user_spec.rb
         | 
| @@ -362,8 +362,8 @@ test_files: | |
| 362 362 | 
             
            - spec/shelly/backup_spec.rb
         | 
| 363 363 | 
             
            - spec/shelly/cli/backup_spec.rb
         | 
| 364 364 | 
             
            - spec/shelly/cli/config_spec.rb
         | 
| 365 | 
            -
            - spec/shelly/cli/ | 
| 366 | 
            -
            - spec/shelly/cli/ | 
| 365 | 
            +
            - spec/shelly/cli/deploy_spec.rb
         | 
| 366 | 
            +
            - spec/shelly/cli/file_spec.rb
         | 
| 367 367 | 
             
            - spec/shelly/cli/main_spec.rb
         | 
| 368 368 | 
             
            - spec/shelly/cli/runner_spec.rb
         | 
| 369 369 | 
             
            - spec/shelly/cli/user_spec.rb
         |