=begin This is an automatically generated file. DO NOT EDIT. Generated from version 2.1.86 of the OpenAPI specification at https://github.com/athenianco/api-spec/releases/tag/2.1.86. Generated by: https://openapi-generator.tech OpenAPI Generator version: 6.5.0 =end require 'date' require 'time' module Athenian # Details of a pull request. All the attributes, stats and events correspond to \"today\", not `date_to`, *except for the PR stages `wip`, `reviewing`, `merging`, `releasing`*, which correspond to `date_to`. class PullRequest # PR is/was open in this repository. attr_accessor :repository # PR number. attr_accessor :number # Title of the PR. attr_accessor :title # Overall number of lines added. attr_accessor :size_added # Overall number of lines removed. attr_accessor :size_removed # Number of files changed in this PR. attr_accessor :files_changed # When this PR was created. attr_accessor :created # When this PR was last updated. attr_accessor :updated # When this PR was last closed. attr_accessor :closed # Number of *regular* (not review) comments in this PR. attr_accessor :comments # Number of commits in this PR. attr_accessor :commits # When was the first time the author of this PR requested a review. attr_accessor :review_requested # When the first review of this PR happened. attr_accessor :first_review # When this PR was approved. attr_accessor :approved # Number of review comments this PR received. A review comment is left at a specific line in a specific file. In other words: review summaries are *not* considered review comments; refer to `reviews`. Comments by the PR author are considered as `comments`, not as `review_comments`. attr_accessor :review_comments # Number of times this PR was reviewed. Reviews by the PR author are not taken into account. attr_accessor :reviews # When this PR was merged. attr_accessor :merged # PR was merged with these failed check runs. attr_accessor :merged_with_failed_check_runs # When this PR was released. attr_accessor :released # URL of the earliest release that includes this merged PR. attr_accessor :release_url # List of deployments that contain this PR. attr_accessor :deployments attr_accessor :stage_timings # List of PR events which happened until `date_to`. `date_from` does not matter. attr_accessor :events_time_machine # List of PR stages as of `date_to` (normally, of length 1). attr_accessor :stages_time_machine # List of PR events that ever happened. attr_accessor :events_now # List of current PR stages (normally, of length 1). attr_accessor :stages_now # List of developers related to this PR. attr_accessor :participants # List of PR labels. attr_accessor :labels # List of linked JIRA issues. attr_accessor :jira # Attribute mapping from ruby-style variable name to JSON key. def self.attribute_map { :'repository' => :'repository', :'number' => :'number', :'title' => :'title', :'size_added' => :'size_added', :'size_removed' => :'size_removed', :'files_changed' => :'files_changed', :'created' => :'created', :'updated' => :'updated', :'closed' => :'closed', :'comments' => :'comments', :'commits' => :'commits', :'review_requested' => :'review_requested', :'first_review' => :'first_review', :'approved' => :'approved', :'review_comments' => :'review_comments', :'reviews' => :'reviews', :'merged' => :'merged', :'merged_with_failed_check_runs' => :'merged_with_failed_check_runs', :'released' => :'released', :'release_url' => :'release_url', :'deployments' => :'deployments', :'stage_timings' => :'stage_timings', :'events_time_machine' => :'events_time_machine', :'stages_time_machine' => :'stages_time_machine', :'events_now' => :'events_now', :'stages_now' => :'stages_now', :'participants' => :'participants', :'labels' => :'labels', :'jira' => :'jira' } end # Returns all the JSON keys this model knows about def self.acceptable_attributes attribute_map.values end # Attribute type mapping. def self.openapi_types { :'repository' => :'String', :'number' => :'Integer', :'title' => :'String', :'size_added' => :'Integer', :'size_removed' => :'Integer', :'files_changed' => :'Integer', :'created' => :'Time', :'updated' => :'Time', :'closed' => :'Time', :'comments' => :'Integer', :'commits' => :'Integer', :'review_requested' => :'Time', :'first_review' => :'Time', :'approved' => :'Time', :'review_comments' => :'Integer', :'reviews' => :'Integer', :'merged' => :'Time', :'merged_with_failed_check_runs' => :'Array', :'released' => :'Time', :'release_url' => :'String', :'deployments' => :'Array', :'stage_timings' => :'StageTimings', :'events_time_machine' => :'Array', :'stages_time_machine' => :'Array', :'events_now' => :'Array', :'stages_now' => :'Array', :'participants' => :'Array', :'labels' => :'Array', :'jira' => :'Array' } end # List of attributes with nullable: true def self.openapi_nullable Set.new([ ]) end # Initializes the object # @param [Hash] attributes Model attributes in the form of hash def initialize(attributes = {}) if (!attributes.is_a?(Hash)) fail ArgumentError, 'The input argument (attributes) must be a hash in `Athenian::PullRequest` initialize method' end # check to see if the attribute exists and convert string to symbol for hash key attributes = attributes.each_with_object({}) { |(k, v), h| if (!self.class.attribute_map.key?(k.to_sym)) fail ArgumentError, "`#{k}` is not a valid attribute in `Athenian::PullRequest`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect end h[k.to_sym] = v } if attributes.key?(:'repository') self.repository = attributes[:'repository'] end if attributes.key?(:'number') self.number = attributes[:'number'] end if attributes.key?(:'title') self.title = attributes[:'title'] end if attributes.key?(:'size_added') self.size_added = attributes[:'size_added'] end if attributes.key?(:'size_removed') self.size_removed = attributes[:'size_removed'] end if attributes.key?(:'files_changed') self.files_changed = attributes[:'files_changed'] end if attributes.key?(:'created') self.created = attributes[:'created'] end if attributes.key?(:'updated') self.updated = attributes[:'updated'] end if attributes.key?(:'closed') self.closed = attributes[:'closed'] end if attributes.key?(:'comments') self.comments = attributes[:'comments'] end if attributes.key?(:'commits') self.commits = attributes[:'commits'] end if attributes.key?(:'review_requested') self.review_requested = attributes[:'review_requested'] end if attributes.key?(:'first_review') self.first_review = attributes[:'first_review'] end if attributes.key?(:'approved') self.approved = attributes[:'approved'] end if attributes.key?(:'review_comments') self.review_comments = attributes[:'review_comments'] end if attributes.key?(:'reviews') self.reviews = attributes[:'reviews'] end if attributes.key?(:'merged') self.merged = attributes[:'merged'] end if attributes.key?(:'merged_with_failed_check_runs') if (value = attributes[:'merged_with_failed_check_runs']).is_a?(Array) self.merged_with_failed_check_runs = value end end if attributes.key?(:'released') self.released = attributes[:'released'] end if attributes.key?(:'release_url') self.release_url = attributes[:'release_url'] end if attributes.key?(:'deployments') if (value = attributes[:'deployments']).is_a?(Array) self.deployments = value end end if attributes.key?(:'stage_timings') self.stage_timings = attributes[:'stage_timings'] end if attributes.key?(:'events_time_machine') if (value = attributes[:'events_time_machine']).is_a?(Array) self.events_time_machine = value end end if attributes.key?(:'stages_time_machine') if (value = attributes[:'stages_time_machine']).is_a?(Array) self.stages_time_machine = value end end if attributes.key?(:'events_now') if (value = attributes[:'events_now']).is_a?(Array) self.events_now = value end end if attributes.key?(:'stages_now') if (value = attributes[:'stages_now']).is_a?(Array) self.stages_now = value end end if attributes.key?(:'participants') if (value = attributes[:'participants']).is_a?(Array) self.participants = value end end if attributes.key?(:'labels') if (value = attributes[:'labels']).is_a?(Array) self.labels = value end end if attributes.key?(:'jira') if (value = attributes[:'jira']).is_a?(Array) self.jira = value end end end # Show invalid properties with the reasons. Usually used together with valid? # @return Array for valid properties with the reasons def list_invalid_properties invalid_properties = Array.new if @repository.nil? invalid_properties.push('invalid value for "repository", repository cannot be nil.') end if @number.nil? invalid_properties.push('invalid value for "number", number cannot be nil.') end if @number < 1 invalid_properties.push('invalid value for "number", must be greater than or equal to 1.') end if @title.nil? invalid_properties.push('invalid value for "title", title cannot be nil.') end if @size_added.nil? invalid_properties.push('invalid value for "size_added", size_added cannot be nil.') end if @size_added < 0 invalid_properties.push('invalid value for "size_added", must be greater than or equal to 0.') end if @size_removed.nil? invalid_properties.push('invalid value for "size_removed", size_removed cannot be nil.') end if @size_removed < 0 invalid_properties.push('invalid value for "size_removed", must be greater than or equal to 0.') end if @files_changed.nil? invalid_properties.push('invalid value for "files_changed", files_changed cannot be nil.') end if @files_changed < 0 invalid_properties.push('invalid value for "files_changed", must be greater than or equal to 0.') end if @created.nil? invalid_properties.push('invalid value for "created", created cannot be nil.') end if @updated.nil? invalid_properties.push('invalid value for "updated", updated cannot be nil.') end if @comments.nil? invalid_properties.push('invalid value for "comments", comments cannot be nil.') end if @comments < 0 invalid_properties.push('invalid value for "comments", must be greater than or equal to 0.') end if @commits.nil? invalid_properties.push('invalid value for "commits", commits cannot be nil.') end if @commits < 0 invalid_properties.push('invalid value for "commits", must be greater than or equal to 0.') end if !@review_comments.nil? && @review_comments < 0 invalid_properties.push('invalid value for "review_comments", must be greater than or equal to 0.') end if !@reviews.nil? && @reviews < 0 invalid_properties.push('invalid value for "reviews", must be greater than or equal to 0.') end if @stage_timings.nil? invalid_properties.push('invalid value for "stage_timings", stage_timings cannot be nil.') end if @events_now.nil? invalid_properties.push('invalid value for "events_now", events_now cannot be nil.') end if @stages_now.nil? invalid_properties.push('invalid value for "stages_now", stages_now cannot be nil.') end if @participants.nil? invalid_properties.push('invalid value for "participants", participants cannot be nil.') end invalid_properties end # Check to see if the all the properties in the model are valid # @return true if the model is valid def valid? return false if @repository.nil? return false if @number.nil? return false if @number < 1 return false if @title.nil? return false if @size_added.nil? return false if @size_added < 0 return false if @size_removed.nil? return false if @size_removed < 0 return false if @files_changed.nil? return false if @files_changed < 0 return false if @created.nil? return false if @updated.nil? return false if @comments.nil? return false if @comments < 0 return false if @commits.nil? return false if @commits < 0 return false if !@review_comments.nil? && @review_comments < 0 return false if !@reviews.nil? && @reviews < 0 return false if @stage_timings.nil? return false if @events_now.nil? return false if @stages_now.nil? return false if @participants.nil? true end # Custom attribute writer method with validation # @param [Object] number Value to be assigned def number=(number) if number.nil? fail ArgumentError, 'number cannot be nil' end if number < 1 fail ArgumentError, 'invalid value for "number", must be greater than or equal to 1.' end @number = number end # Custom attribute writer method with validation # @param [Object] size_added Value to be assigned def size_added=(size_added) if size_added.nil? fail ArgumentError, 'size_added cannot be nil' end if size_added < 0 fail ArgumentError, 'invalid value for "size_added", must be greater than or equal to 0.' end @size_added = size_added end # Custom attribute writer method with validation # @param [Object] size_removed Value to be assigned def size_removed=(size_removed) if size_removed.nil? fail ArgumentError, 'size_removed cannot be nil' end if size_removed < 0 fail ArgumentError, 'invalid value for "size_removed", must be greater than or equal to 0.' end @size_removed = size_removed end # Custom attribute writer method with validation # @param [Object] files_changed Value to be assigned def files_changed=(files_changed) if files_changed.nil? fail ArgumentError, 'files_changed cannot be nil' end if files_changed < 0 fail ArgumentError, 'invalid value for "files_changed", must be greater than or equal to 0.' end @files_changed = files_changed end # Custom attribute writer method with validation # @param [Object] comments Value to be assigned def comments=(comments) if comments.nil? fail ArgumentError, 'comments cannot be nil' end if comments < 0 fail ArgumentError, 'invalid value for "comments", must be greater than or equal to 0.' end @comments = comments end # Custom attribute writer method with validation # @param [Object] commits Value to be assigned def commits=(commits) if commits.nil? fail ArgumentError, 'commits cannot be nil' end if commits < 0 fail ArgumentError, 'invalid value for "commits", must be greater than or equal to 0.' end @commits = commits end # Custom attribute writer method with validation # @param [Object] review_comments Value to be assigned def review_comments=(review_comments) if !review_comments.nil? && review_comments < 0 fail ArgumentError, 'invalid value for "review_comments", must be greater than or equal to 0.' end @review_comments = review_comments end # Custom attribute writer method with validation # @param [Object] reviews Value to be assigned def reviews=(reviews) if !reviews.nil? && reviews < 0 fail ArgumentError, 'invalid value for "reviews", must be greater than or equal to 0.' end @reviews = reviews end # Checks equality by comparing each attribute. # @param [Object] Object to be compared def ==(o) return true if self.equal?(o) self.class == o.class && repository == o.repository && number == o.number && title == o.title && size_added == o.size_added && size_removed == o.size_removed && files_changed == o.files_changed && created == o.created && updated == o.updated && closed == o.closed && comments == o.comments && commits == o.commits && review_requested == o.review_requested && first_review == o.first_review && approved == o.approved && review_comments == o.review_comments && reviews == o.reviews && merged == o.merged && merged_with_failed_check_runs == o.merged_with_failed_check_runs && released == o.released && release_url == o.release_url && deployments == o.deployments && stage_timings == o.stage_timings && events_time_machine == o.events_time_machine && stages_time_machine == o.stages_time_machine && events_now == o.events_now && stages_now == o.stages_now && participants == o.participants && labels == o.labels && jira == o.jira end # @see the `==` method # @param [Object] Object to be compared def eql?(o) self == o end # Calculates hash code according to all attributes. # @return [Integer] Hash code def hash [repository, number, title, size_added, size_removed, files_changed, created, updated, closed, comments, commits, review_requested, first_review, approved, review_comments, reviews, merged, merged_with_failed_check_runs, released, release_url, deployments, stage_timings, events_time_machine, stages_time_machine, events_now, stages_now, participants, labels, jira].hash end # Builds the object from hash # @param [Hash] attributes Model attributes in the form of hash # @return [Object] Returns the model itself def self.build_from_hash(attributes) new.build_from_hash(attributes) end # Builds the object from hash # @param [Hash] attributes Model attributes in the form of hash # @return [Object] Returns the model itself def build_from_hash(attributes) return nil unless attributes.is_a?(Hash) attributes = attributes.transform_keys(&:to_sym) self.class.openapi_types.each_pair do |key, type| if attributes[self.class.attribute_map[key]].nil? && self.class.openapi_nullable.include?(key) self.send("#{key}=", nil) elsif type =~ /\AArray<(.*)>/i # check to ensure the input is an array given that the attribute # is documented as an array but the input is not if attributes[self.class.attribute_map[key]].is_a?(Array) self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) }) end elsif !attributes[self.class.attribute_map[key]].nil? self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]])) end end self end # Deserializes the data based on type # @param string type Data type # @param string value Value to be deserialized # @return [Object] Deserialized data def _deserialize(type, value) case type.to_sym when :Time Time.parse(value) when :Date Date.parse(value) when :String value.to_s when :Integer value.to_i when :Float value.to_f when :Boolean if value.to_s =~ /\A(true|t|yes|y|1)\z/i true else false end when :Object # generic object (usually a Hash), return directly value when /\AArray<(?.+)>\z/ inner_type = Regexp.last_match[:inner_type] value.map { |v| _deserialize(inner_type, v) } when /\AHash<(?.+?), (?.+)>\z/ k_type = Regexp.last_match[:k_type] v_type = Regexp.last_match[:v_type] {}.tap do |hash| value.each do |k, v| hash[_deserialize(k_type, k)] = _deserialize(v_type, v) end end else # model # models (e.g. Pet) or oneOf klass = Athenian.const_get(type) klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value) end end # Returns the string representation of the object # @return [String] String presentation of the object def to_s to_hash.to_s end # to_body is an alias to to_hash (backward compatibility) # @return [Hash] Returns the object in the form of hash def to_body to_hash end # Returns the object in the form of hash # @return [Hash] Returns the object in the form of hash def to_hash hash = {} self.class.attribute_map.each_pair do |attr, param| value = self.send(attr) if value.nil? is_nullable = self.class.openapi_nullable.include?(attr) next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}")) end hash[param] = _to_hash(value) end hash end # Outputs non-array value in the form of hash # For object, use to_hash. Otherwise, just return the value # @param [Object] value Any valid value # @return [Hash] Returns the value in the form of hash def _to_hash(value) if value.is_a?(Array) value.compact.map { |v| _to_hash(v) } elsif value.is_a?(Hash) {}.tap do |hash| value.each { |k, v| hash[k] = _to_hash(v) } end elsif value.respond_to? :to_hash value.to_hash else value end end end end