marathon-api 2.0.0 → 2.0.1
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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/bin/marathon +1 -1
- data/lib/marathon.rb +4 -6
- data/lib/marathon/app.rb +27 -21
- data/lib/marathon/connection.rb +11 -11
- data/lib/marathon/constraint.rb +1 -1
- data/lib/marathon/container.rb +2 -2
- data/lib/marathon/container_docker.rb +2 -2
- data/lib/marathon/container_docker_port_mapping.rb +2 -2
- data/lib/marathon/container_volume.rb +1 -1
- data/lib/marathon/deployment.rb +4 -1
- data/lib/marathon/deployment_action.rb +1 -0
- data/lib/marathon/deployment_info.rb +3 -2
- data/lib/marathon/deployment_step.rb +1 -1
- data/lib/marathon/error.rb +24 -16
- data/lib/marathon/event_subscriptions.rb +1 -1
- data/lib/marathon/group.rb +2 -1
- data/lib/marathon/health_check.rb +7 -7
- data/lib/marathon/leader.rb +1 -1
- data/lib/marathon/queue.rb +2 -1
- data/lib/marathon/task.rb +7 -3
- data/lib/marathon/util.rb +7 -7
- data/lib/marathon/version.rb +1 -1
- data/spec/marathon/app_spec.rb +58 -54
- data/spec/marathon/base_spec.rb +10 -10
- data/spec/marathon/container_docker_port_mapping_spec.rb +7 -7
- data/spec/marathon/container_docker_spec.rb +13 -13
- data/spec/marathon/container_spec.rb +9 -9
- data/spec/marathon/container_volume_spec.rb +4 -4
- data/spec/marathon/deployment_action_spec.rb +1 -1
- data/spec/marathon/deployment_info_spec.rb +2 -2
- data/spec/marathon/deployment_spec.rb +19 -19
- data/spec/marathon/deployment_step_spec.rb +4 -4
- data/spec/marathon/error_spec.rb +7 -7
- data/spec/marathon/group_spec.rb +47 -47
- data/spec/marathon/marathon_spec.rb +1 -1
- data/spec/marathon/queue_spec.rb +9 -9
- data/spec/marathon/task_spec.rb +12 -12
- data/spec/marathon/util_spec.rb +17 -17
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 8b60887f834b4861afd26cac261c219767fbd208
         | 
| 4 | 
            +
              data.tar.gz: b25e03b3dc591c0f3503cb60a3c8c4b528fe032e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 66917b9f6d31568d01dcab7c31c083ef4a1d53d4423ddb1435c78cb86b76e2b5e069f630c2a9aa920c1ac1bc9e24746baa5894962e9fded20fd698dafae8ba72
         | 
| 7 | 
            +
              data.tar.gz: 2d20bb4db6d22dd4c1ebf3cfee576b34616fd10547fa48bb69b43ed70b4965a9d6ed2a9b0e83890058752141051bd1af33028a29ccb5274d63c3944177084bfc
         | 
    
        data/.travis.yml
    CHANGED
    
    
    
        data/bin/marathon
    CHANGED
    
    | @@ -110,7 +110,7 @@ end | |
| 110 110 | 
             
            def subcmd_kill_tasks(cmd_opts)
         | 
| 111 111 | 
             
              if cmd_opts[:task_id]
         | 
| 112 112 | 
             
                puts "Killing task of '#{cmd_opts[:id]}' with id '#{cmd_opts[:task_id]}'"
         | 
| 113 | 
            -
                tasks = [Marathon::Task.delete(cmd_opts[: | 
| 113 | 
            +
                tasks = [Marathon::Task.delete(cmd_opts[:task_id], cmd_opts[:scale])]
         | 
| 114 114 | 
             
              elsif cmd_opts[:host]
         | 
| 115 115 | 
             
                puts "Killing tasks of '#{cmd_opts[:id]}' on host '#{cmd_opts[:host]}'"
         | 
| 116 116 | 
             
                tasks = Marathon::Task.delete_all(cmd_opts[:id], cmd_opts[:host], cmd_opts[:scale])
         | 
    
        data/lib/marathon.rb
    CHANGED
    
    | @@ -37,7 +37,7 @@ module Marathon | |
| 37 37 | 
             
                attr_reader :connection
         | 
| 38 38 |  | 
| 39 39 | 
             
                def initialize(url, options)
         | 
| 40 | 
            -
                  @connection = Connection.new(url,options)
         | 
| 40 | 
            +
                  @connection = Connection.new(url, options)
         | 
| 41 41 | 
             
                end
         | 
| 42 42 |  | 
| 43 43 | 
             
                def ping
         | 
| @@ -88,7 +88,7 @@ module Marathon | |
| 88 88 |  | 
| 89 89 | 
             
              attr_reader :singleton
         | 
| 90 90 |  | 
| 91 | 
            -
              @singleton = MarathonInstance::new(DEFAULT_URL,{})
         | 
| 91 | 
            +
              @singleton = MarathonInstance::new(DEFAULT_URL, {})
         | 
| 92 92 |  | 
| 93 93 | 
             
              # Get the marathon url from environment
         | 
| 94 94 | 
             
              def env_url
         | 
| @@ -134,7 +134,7 @@ module Marathon | |
| 134 134 |  | 
| 135 135 |  | 
| 136 136 | 
             
              def reset_singleton!
         | 
| 137 | 
            -
                @singleton = MarathonInstance.new(url,options)
         | 
| 137 | 
            +
                @singleton = MarathonInstance.new(url, options)
         | 
| 138 138 | 
             
              end
         | 
| 139 139 |  | 
| 140 140 | 
             
              def reset_connection!
         | 
| @@ -156,7 +156,5 @@ module Marathon | |
| 156 156 | 
             
              end
         | 
| 157 157 |  | 
| 158 158 | 
             
              module_function :connection, :env_options, :env_url, :info, :logger, :logger=, :ping, :metrics,
         | 
| 159 | 
            -
                              :options, :options=, :url, :url | 
| 160 | 
            -
             | 
| 161 | 
            -
             | 
| 159 | 
            +
                              :options, :options=, :url, :url=, :reset_connection!, :reset_singleton!, :singleton
         | 
| 162 160 | 
             
            end
         | 
    
        data/lib/marathon/app.rb
    CHANGED
    
    | @@ -7,10 +7,10 @@ class Marathon::App < Marathon::Base | |
| 7 7 | 
             
                              deployments uris user version labels ]
         | 
| 8 8 |  | 
| 9 9 | 
             
              DEFAULTS = {
         | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 10 | 
            +
                  :env => {},
         | 
| 11 | 
            +
                  :labels => {},
         | 
| 12 | 
            +
                  :ports => [],
         | 
| 13 | 
            +
                  :uris => [],
         | 
| 14 14 | 
             
              }
         | 
| 15 15 |  | 
| 16 16 | 
             
              attr_reader :healthChecks, :constraints, :container, :read_only, :tasks
         | 
| @@ -19,7 +19,8 @@ class Marathon::App < Marathon::Base | |
| 19 19 | 
             
              # ++hash++: Hash including all attributes.
         | 
| 20 20 | 
             
              #           See https://mesosphere.github.io/marathon/docs/rest-api.html#post-/v2/apps for full details.
         | 
| 21 21 | 
             
              # ++read_only++: prevent actions on this application
         | 
| 22 | 
            -
               | 
| 22 | 
            +
              # ++marathon_instance++: MarathonInstance holding a connection to marathon
         | 
| 23 | 
            +
              def initialize(hash, marathon_instance = Marathon.singleton, read_only = false)
         | 
| 23 24 | 
             
                super(Marathon::Util.merge_keywordized_hash(DEFAULTS, hash), ACCESSORS)
         | 
| 24 25 | 
             
                raise ArgumentError, 'App must have an id' unless id
         | 
| 25 26 | 
             
                @read_only = read_only
         | 
| @@ -121,17 +122,20 @@ class Marathon::App < Marathon::Base | |
| 121 122 | 
             
              # Returns a string for listing the application.
         | 
| 122 123 | 
             
              def to_pretty_s
         | 
| 123 124 | 
             
                %Q[
         | 
| 124 | 
            -
            App ID:     #{id}
         | 
| 125 | 
            -
            Instances:  #{tasks.size}/#{instances}
         | 
| 126 | 
            -
            Command:    #{cmd}
         | 
| 127 | 
            -
            CPUs:       #{cpus}
         | 
| 128 | 
            -
            Memory:     #{mem} MB
         | 
| 129 | 
            -
            #{pretty_container}
         | 
| 130 | 
            -
            #{pretty_uris}
         | 
| 131 | 
            -
            #{pretty_env}
         | 
| 132 | 
            -
            #{pretty_constraints}
         | 
| 133 | 
            -
            Version:    #{version}
         | 
| 134 | 
            -
                ] | 
| 125 | 
            +
                App ID:     #{id}
         | 
| 126 | 
            +
                Instances:  #{tasks.size}/#{instances}
         | 
| 127 | 
            +
                Command:    #{cmd}
         | 
| 128 | 
            +
                CPUs:       #{cpus}
         | 
| 129 | 
            +
                Memory:     #{mem} MB
         | 
| 130 | 
            +
                #{pretty_container}
         | 
| 131 | 
            +
                #{pretty_uris}
         | 
| 132 | 
            +
                #{pretty_env}
         | 
| 133 | 
            +
                #{pretty_constraints}
         | 
| 134 | 
            +
                Version:    #{version}
         | 
| 135 | 
            +
                ]
         | 
| 136 | 
            +
                    .gsub(/\n\s+/, "\n")
         | 
| 137 | 
            +
                    .gsub(/\n\n+/, "\n")
         | 
| 138 | 
            +
                    .strip
         | 
| 135 139 | 
             
              end
         | 
| 136 140 |  | 
| 137 141 | 
             
              private
         | 
| @@ -143,7 +147,7 @@ Version:    #{version} | |
| 143 147 | 
             
              end
         | 
| 144 148 |  | 
| 145 149 | 
             
              def pretty_env
         | 
| 146 | 
            -
                env.map { |k,v| "ENV:        #{k}=#{v}" }.join("\n")
         | 
| 150 | 
            +
                env.map { |k, v| "ENV:        #{k}=#{v}" }.join("\n")
         | 
| 147 151 | 
             
              end
         | 
| 148 152 |  | 
| 149 153 | 
             
              def pretty_uris
         | 
| @@ -181,7 +185,7 @@ Version:    #{version} | |
| 181 185 | 
             
                #               "apps.tasks". Apps' tasks are not embedded in the response by default.
         | 
| 182 186 | 
             
                #               "apps.failures". Apps' last failures are not embedded in the response by default.
         | 
| 183 187 | 
             
                def list(cmd = nil, embed = nil, id=nil, label=nil)
         | 
| 184 | 
            -
                  Marathon.singleton.apps.list(cmd,embed, id, label)
         | 
| 188 | 
            +
                  Marathon.singleton.apps.list(cmd, embed, id, label)
         | 
| 185 189 | 
             
                end
         | 
| 186 190 |  | 
| 187 191 | 
             
                # Delete the application with id.
         | 
| @@ -189,6 +193,7 @@ Version:    #{version} | |
| 189 193 | 
             
                def delete(id)
         | 
| 190 194 | 
             
                  Marathon.singleton.apps.delete(id)
         | 
| 191 195 | 
             
                end
         | 
| 196 | 
            +
             | 
| 192 197 | 
             
                alias :remove :delete
         | 
| 193 198 |  | 
| 194 199 | 
             
                # Create and start an application.
         | 
| @@ -197,6 +202,7 @@ Version:    #{version} | |
| 197 202 | 
             
                def start(hash)
         | 
| 198 203 | 
             
                  Marathon.singleton.apps.start(hash)
         | 
| 199 204 | 
             
                end
         | 
| 205 | 
            +
             | 
| 200 206 | 
             
                alias :create :start
         | 
| 201 207 |  | 
| 202 208 | 
             
                # Restart the application with id.
         | 
| @@ -204,7 +210,7 @@ Version:    #{version} | |
| 204 210 | 
             
                # ++force++: If the app is affected by a running deployment, then the update operation will fail.
         | 
| 205 211 | 
             
                #            The current deployment can be overridden by setting the `force` query parameter.
         | 
| 206 212 | 
             
                def restart(id, force = false)
         | 
| 207 | 
            -
                  Marathon.singleton.apps.restart(id,force)
         | 
| 213 | 
            +
                  Marathon.singleton.apps.restart(id, force)
         | 
| 208 214 | 
             
                end
         | 
| 209 215 |  | 
| 210 216 | 
             
                # Change parameters of a running application. The new application parameters apply only to subsequently
         | 
| @@ -214,7 +220,7 @@ Version:    #{version} | |
| 214 220 | 
             
                # ++force++: If the app is affected by a running deployment, then the update operation will fail.
         | 
| 215 221 | 
             
                #            The current deployment can be overridden by setting the `force` query parameter.
         | 
| 216 222 | 
             
                def change(id, hash, force = false)
         | 
| 217 | 
            -
                  Marathon.singleton.apps.change(id,hash,force)
         | 
| 223 | 
            +
                  Marathon.singleton.apps.change(id, hash, force)
         | 
| 218 224 | 
             
                end
         | 
| 219 225 |  | 
| 220 226 | 
             
                # List the versions of the application with id.
         | 
| @@ -227,7 +233,7 @@ Version:    #{version} | |
| 227 233 | 
             
                # ++id++: Application id
         | 
| 228 234 | 
             
                # ++version++: Version name
         | 
| 229 235 | 
             
                def version(id, version)
         | 
| 230 | 
            -
                  Marathon.singleton.apps.version(id,version)
         | 
| 236 | 
            +
                  Marathon.singleton.apps.version(id, version)
         | 
| 231 237 | 
             
                end
         | 
| 232 238 | 
             
              end
         | 
| 233 239 | 
             
            end
         | 
    
        data/lib/marathon/connection.rb
    CHANGED
    
    | @@ -5,9 +5,9 @@ class Marathon::Connection | |
| 5 5 | 
             
              include HTTParty
         | 
| 6 6 |  | 
| 7 7 | 
             
              headers(
         | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 8 | 
            +
                  'Content-Type' => 'application/json',
         | 
| 9 | 
            +
                  'Accept' => 'application/json',
         | 
| 10 | 
            +
                  'User-Agent' => "ub0r/Marathon-API #{Marathon::VERSION}"
         | 
| 11 11 | 
             
              )
         | 
| 12 12 |  | 
| 13 13 | 
             
              default_timeout 5
         | 
| @@ -23,8 +23,8 @@ class Marathon::Connection | |
| 23 23 | 
             
                @options = options
         | 
| 24 24 | 
             
                if @options[:username] and @options[:password]
         | 
| 25 25 | 
             
                  @options[:basic_auth] = {
         | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 26 | 
            +
                      :username => @options[:username],
         | 
| 27 | 
            +
                      :password => @options[:password]
         | 
| 28 28 | 
             
                  }
         | 
| 29 29 | 
             
                  @options.delete(:username)
         | 
| 30 30 | 
             
                  @options.delete(:password)
         | 
| @@ -47,14 +47,14 @@ class Marathon::Connection | |
| 47 47 | 
             
                "Marathon::Connection { :url => #{url} :options => #{options} }"
         | 
| 48 48 | 
             
              end
         | 
| 49 49 |  | 
| 50 | 
            -
            private
         | 
| 50 | 
            +
              private
         | 
| 51 51 |  | 
| 52 52 | 
             
              # Create URL suffix for a hash of query parameters.
         | 
| 53 53 | 
             
              # URL escaping is done internally.
         | 
| 54 54 | 
             
              # ++query++: Hash of query parameters.
         | 
| 55 55 | 
             
              def query_params(query)
         | 
| 56 | 
            -
                query = query.select { |k,v| !v.nil? }
         | 
| 57 | 
            -
                URI.escape(query.map { |k,v| "#{k}=#{v}" }.join('&'))
         | 
| 56 | 
            +
                query = query.select { |k, v| !v.nil? }
         | 
| 57 | 
            +
                URI.escape(query.map { |k, v| "#{k}=#{v}" }.join('&'))
         | 
| 58 58 | 
             
              end
         | 
| 59 59 |  | 
| 60 60 | 
             
              # Create request object.
         | 
| @@ -68,9 +68,9 @@ private | |
| 68 68 | 
             
                headers = opts.delete(:headers) || {}
         | 
| 69 69 | 
             
                opts[:body] = opts[:body].to_json unless opts[:body].nil?
         | 
| 70 70 | 
             
                {
         | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 71 | 
            +
                    :method => http_method,
         | 
| 72 | 
            +
                    :url => "#{@url}#{path}",
         | 
| 73 | 
            +
                    :query => query
         | 
| 74 74 | 
             
                }.merge(@options).merge(opts).reject { |_, v| v.nil? }
         | 
| 75 75 | 
             
              end
         | 
| 76 76 |  | 
    
        data/lib/marathon/constraint.rb
    CHANGED
    
    | @@ -7,7 +7,7 @@ class Marathon::Constraint < Marathon::Base | |
| 7 7 | 
             
              def initialize(array)
         | 
| 8 8 | 
             
                raise Marathon::Error::ArgumentError, 'array must be an Array' unless array.is_a?(Array)
         | 
| 9 9 | 
             
                raise Marathon::Error::ArgumentError,
         | 
| 10 | 
            -
             | 
| 10 | 
            +
                      'array must be [attribute, operator, parameter] where only parameter is optional' \
         | 
| 11 11 | 
             
                  unless array.size != 2 or array.size != 3
         | 
| 12 12 | 
             
                super
         | 
| 13 13 | 
             
              end
         | 
    
        data/lib/marathon/container.rb
    CHANGED
    
    
| @@ -4,8 +4,8 @@ class Marathon::ContainerDockerPortMapping < Marathon::Base | |
| 4 4 |  | 
| 5 5 | 
             
              ACCESSORS = %w[ containerPort hostPort servicePort protocol ]
         | 
| 6 6 | 
             
              DEFAULTS = {
         | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 7 | 
            +
                  :protocol => 'tcp',
         | 
| 8 | 
            +
                  :hostPort => 0
         | 
| 9 9 | 
             
              }
         | 
| 10 10 |  | 
| 11 11 | 
             
              # Create a new container docker port mappint object.
         | 
    
        data/lib/marathon/deployment.rb
    CHANGED
    
    | @@ -22,6 +22,7 @@ class Marathon::Deployment < Marathon::Base | |
| 22 22 | 
             
              def delete(force = false)
         | 
| 23 23 | 
             
                @marathon_instance.deployments.delete(id, force)
         | 
| 24 24 | 
             
              end
         | 
| 25 | 
            +
             | 
| 25 26 | 
             
              alias :cancel :delete
         | 
| 26 27 |  | 
| 27 28 | 
             
              def to_s
         | 
| @@ -42,8 +43,9 @@ class Marathon::Deployment < Marathon::Base | |
| 42 43 | 
             
                #            is created to restore the previous configuration. If set to true, then the deployment
         | 
| 43 44 | 
             
                #            is still canceled but no rollback deployment is created.
         | 
| 44 45 | 
             
                def delete(id, force = false)
         | 
| 45 | 
            -
                  Marathon.singleton.deployments.delete(id,force)
         | 
| 46 | 
            +
                  Marathon.singleton.deployments.delete(id, force)
         | 
| 46 47 | 
             
                end
         | 
| 48 | 
            +
             | 
| 47 49 | 
             
                alias :cancel :delete
         | 
| 48 50 | 
             
                alias :remove :delete
         | 
| 49 51 | 
             
              end
         | 
| @@ -55,6 +57,7 @@ class Marathon::Deployments | |
| 55 57 | 
             
                @marathon_instance = marathon_instance
         | 
| 56 58 | 
             
                @connection = @marathon_instance.connection
         | 
| 57 59 | 
             
              end
         | 
| 60 | 
            +
             | 
| 58 61 | 
             
              # List running deployments.
         | 
| 59 62 | 
             
              def list
         | 
| 60 63 | 
             
                json = @connection.get('/v2/deployments')
         | 
| @@ -6,7 +6,8 @@ class Marathon::DeploymentInfo < Marathon::Base | |
| 6 6 |  | 
| 7 7 | 
             
              # Create a new deployment info object.
         | 
| 8 8 | 
             
              # ++hash++: Hash returned by API, including 'deploymentId' and 'version'
         | 
| 9 | 
            -
               | 
| 9 | 
            +
              # ++marathon_instance++: MarathonInstance holding a connection to marathon
         | 
| 10 | 
            +
              def initialize(hash, marathon_instance = Marathon.singleton)
         | 
| 10 11 | 
             
                super(hash, %w[deploymentId version])
         | 
| 11 12 | 
             
                raise Marathon::Error::ArgumentError, 'version must not be nil' unless version
         | 
| 12 13 | 
             
                @marathon_instance = marathon_instance
         | 
| @@ -17,7 +18,7 @@ class Marathon::DeploymentInfo < Marathon::Base | |
| 17 18 | 
             
              def wait(timeout = 60)
         | 
| 18 19 | 
             
                Timeout::timeout(timeout) do
         | 
| 19 20 | 
             
                  deployments = nil
         | 
| 20 | 
            -
                  while deployments.nil? or deployments. | 
| 21 | 
            +
                  while deployments.nil? or deployments.any? { |e| e.id == deploymentId } do
         | 
| 21 22 | 
             
                    sleep(RECHECK_INTERVAL)
         | 
| 22 23 | 
             
                    deployments = @marathon_instance.deployments.list
         | 
| 23 24 | 
             
                  end
         | 
| @@ -15,7 +15,7 @@ class Marathon::DeploymentStep < Marathon::Base | |
| 15 15 | 
             
              end
         | 
| 16 16 |  | 
| 17 17 | 
             
              def to_s
         | 
| 18 | 
            -
                "Marathon::DeploymentStep { :actions => #{actions.map{|e| e.to_pretty_s}.join(',')} }"
         | 
| 18 | 
            +
                "Marathon::DeploymentStep { :actions => #{actions.map { |e| e.to_pretty_s }.join(',')} }"
         | 
| 19 19 | 
             
              end
         | 
| 20 20 |  | 
| 21 21 | 
             
            end
         | 
    
        data/lib/marathon/error.rb
    CHANGED
    
    | @@ -2,28 +2,36 @@ | |
| 2 2 | 
             
            module Marathon::Error
         | 
| 3 3 | 
             
              # The default error. It's never actually raised, but can be used to catch all
         | 
| 4 4 | 
             
              # gem-specific errors that are thrown as they all subclass from this.
         | 
| 5 | 
            -
              class MarathonError < StandardError; | 
| 5 | 
            +
              class MarathonError < StandardError;
         | 
| 6 | 
            +
              end
         | 
| 6 7 |  | 
| 7 8 | 
             
              # Raised when invalid arguments are passed to a method.
         | 
| 8 | 
            -
              class ArgumentError < MarathonError; | 
| 9 | 
            +
              class ArgumentError < MarathonError;
         | 
| 10 | 
            +
              end
         | 
| 9 11 |  | 
| 10 12 | 
             
              # Raised when a request returns a 400 or 422.
         | 
| 11 | 
            -
              class ClientError < MarathonError; | 
| 13 | 
            +
              class ClientError < MarathonError;
         | 
| 14 | 
            +
              end
         | 
| 12 15 |  | 
| 13 16 | 
             
              # Raised when a request returns a 404.
         | 
| 14 | 
            -
              class NotFoundError < MarathonError; | 
| 17 | 
            +
              class NotFoundError < MarathonError;
         | 
| 18 | 
            +
              end
         | 
| 15 19 |  | 
| 16 20 | 
             
              # Raised when there is an unexpected response code / body.
         | 
| 17 | 
            -
              class UnexpectedResponseError < MarathonError; | 
| 21 | 
            +
              class UnexpectedResponseError < MarathonError;
         | 
| 22 | 
            +
              end
         | 
| 18 23 |  | 
| 19 24 | 
             
              # Raised when a request times out.
         | 
| 20 | 
            -
              class TimeoutError < MarathonError; | 
| 25 | 
            +
              class TimeoutError < MarathonError;
         | 
| 26 | 
            +
              end
         | 
| 21 27 |  | 
| 22 28 | 
             
              # Raised when login fails.
         | 
| 23 | 
            -
              class AuthenticationError < MarathonError; | 
| 29 | 
            +
              class AuthenticationError < MarathonError;
         | 
| 30 | 
            +
              end
         | 
| 24 31 |  | 
| 25 32 | 
             
              # Raised when an IO action fails.
         | 
| 26 | 
            -
              class IOError < MarathonError; | 
| 33 | 
            +
              class IOError < MarathonError;
         | 
| 34 | 
            +
              end
         | 
| 27 35 |  | 
| 28 36 | 
             
              # Raise error specific to http response.
         | 
| 29 37 | 
             
              # ++response++: HTTParty response object.
         | 
| @@ -37,14 +45,14 @@ module Marathon::Error | |
| 37 45 | 
             
              # ++response++: HTTParty response object.
         | 
| 38 46 | 
             
              def error_class(response)
         | 
| 39 47 | 
             
                case response.code
         | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            +
                  when 400
         | 
| 49 | 
            +
                    ClientError
         | 
| 50 | 
            +
                  when 422
         | 
| 51 | 
            +
                    ClientError
         | 
| 52 | 
            +
                  when 404
         | 
| 53 | 
            +
                    NotFoundError
         | 
| 54 | 
            +
                  else
         | 
| 55 | 
            +
                    UnexpectedResponseError
         | 
| 48 56 | 
             
                end
         | 
| 49 57 | 
             
              end
         | 
| 50 58 |  | 
| @@ -2,7 +2,7 @@ | |
| 2 2 | 
             
            # See https://mesosphere.github.io/marathon/docs/rest-api.html#event-subscriptions for full list of API's methods.
         | 
| 3 3 | 
             
            class Marathon::EventSubscriptions
         | 
| 4 4 |  | 
| 5 | 
            -
              def initialize(marathon_instance)
         | 
| 5 | 
            +
              def initialize(marathon_instance = Marathon.singleton)
         | 
| 6 6 | 
             
                @connection = marathon_instance.connection
         | 
| 7 7 | 
             
              end
         | 
| 8 8 |  | 
    
        data/lib/marathon/group.rb
    CHANGED
    
    | @@ -13,7 +13,8 @@ class Marathon::Group < Marathon::Base | |
| 13 13 | 
             
              # Create a new group object.
         | 
| 14 14 | 
             
              # ++hash++: Hash including all attributes.
         | 
| 15 15 | 
             
              #           See https://mesosphere.github.io/marathon/docs/rest-api.html#post-/v2/groups for full details.
         | 
| 16 | 
            -
               | 
| 16 | 
            +
              # ++marathon_instance++: MarathonInstance holding a connection to marathon
         | 
| 17 | 
            +
              def initialize(hash, marathon_instance = Marathon.singleton)
         | 
| 17 18 | 
             
                super(Marathon::Util.merge_keywordized_hash(DEFAULTS, hash), ACCESSORS)
         | 
| 18 19 | 
             
                @marathon_instance = marathon_instance
         | 
| 19 20 | 
             
                raise ArgumentError, 'Group must have an id' unless id
         | 
| @@ -3,13 +3,13 @@ | |
| 3 3 | 
             
            class Marathon::HealthCheck < Marathon::Base
         | 
| 4 4 |  | 
| 5 5 | 
             
              DEFAULTS = {
         | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 6 | 
            +
                  :gracePeriodSeconds => 300,
         | 
| 7 | 
            +
                  :intervalSeconds => 60,
         | 
| 8 | 
            +
                  :maxConsecutiveFailures => 3,
         | 
| 9 | 
            +
                  :path => '/',
         | 
| 10 | 
            +
                  :portIndex => 0,
         | 
| 11 | 
            +
                  :protocol => 'HTTP',
         | 
| 12 | 
            +
                  :timeoutSeconds => 20
         | 
| 13 13 | 
             
              }
         | 
| 14 14 |  | 
| 15 15 | 
             
              ACCESSORS = %w[ command gracePeriodSeconds intervalSeconds maxConsecutiveFailures
         |