Class: PactBroker::Pacts::PactPublication

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/pact_broker/pacts/pact_publication.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.subtract(a, *b) ⇒ Object



65
66
67
68
# File 'lib/pact_broker/pacts/pact_publication.rb', line 65

def self.subtract(a, *b)
  b_ids = b.flat_map{ |pact_publications| pact_publications.collect(&:id) }
  a.reject{ |pact_publication| b_ids.include?(pact_publication.id) }
end

Instance Method Details

#<=>(other) ⇒ Object



180
181
182
183
184
# File 'lib/pact_broker/pacts/pact_publication.rb', line 180

def <=> other
  self_fields = [consumer.name.downcase, provider.name.downcase, consumer_version_order || 0]
  other_fields = [other.consumer.name.downcase, other.provider.name.downcase, other.consumer_version_order || 0]
  self_fields <=> other_fields
end

#before_createObject



70
71
72
73
# File 'lib/pact_broker/pacts/pact_publication.rb', line 70

def before_create
  super
  self.revision_number ||= 1
end

#consumer_version_tagsObject

If the consumer_version is already loaded, and it already has tags, use those otherwise, load them directly.



89
90
91
92
93
94
95
# File 'lib/pact_broker/pacts/pact_publication.rb', line 89

def consumer_version_tags
  if associations[:consumer_version] && associations[:consumer_version].associations[:tags]
    consumer_version.tags
  else
    tags
  end
end

#head_pact_tagsObject



75
76
77
# File 'lib/pact_broker/pacts/pact_publication.rb', line 75

def head_pact_tags
  consumer_version.tags.select{ |tag| head_tag_names.include?(tag.name) }
end

#head_tag_namesObject

The names of the tags for which this pact is the latest pact with that tag (ie. it is not necessarily the pact for the latest consumer version with the given tag)



81
82
83
84
85
# File 'lib/pact_broker/pacts/pact_publication.rb', line 81

def head_tag_names
  @head_tag_names ||= head_pact_publications_for_tags
    .select { |head_pact_publication| head_pact_publication.id == id }
    .collect { | head_pact_publication| head_pact_publication.values.fetch(:tag_name) }
end

#latest_for_branch?Boolean

Returns:

  • (Boolean)


105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/pact_broker/pacts/pact_publication.rb', line 105

def latest_for_branch?
  if !defined?(@latest_for_branch)
    if consumer_version.branch_versions.empty?
      @latest_for_branch = nil
    else
      self_order = self.consumer_version.order
      @latest_for_branch = consumer_version.branch_versions.any? do | branch_version |
        branch_versions_join = {
          Sequel[:cv][:id] => Sequel[:branch_versions][:version_id],
          Sequel[:branch_versions][:branch_name] => branch_version.branch_name
        }
        PactPublication.where(consumer_id: consumer_id, provider_id: provider_id)
          .join_consumer_versions(:cv) do
            Sequel[:cv][:order] > self_order
          end
          .join(:branch_versions, branch_versions_join)
        .empty?
      end
    end
  end
  @latest_for_branch
end

#latest_main_branch_verificationObject



101
102
103
# File 'lib/pact_broker/pacts/pact_publication.rb', line 101

def latest_main_branch_verification
  pact_version.latest_main_branch_verification
end

#latest_verificationObject



97
98
99
# File 'lib/pact_broker/pacts/pact_publication.rb', line 97

def latest_verification
  pact_version.latest_verification
end

#pact_version_shaObject



176
177
178
# File 'lib/pact_broker/pacts/pact_publication.rb', line 176

def pact_version_sha
  pact_version.sha
end

#to_domainObject



128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/pact_broker/pacts/pact_publication.rb', line 128

def to_domain
  PactBroker::Domain::Pact.new(
    id: id,
    provider: provider,
    consumer: consumer,
    consumer_version_number: consumer_version.number,
    consumer_version: to_version_domain,
    revision_number: revision_number,
    json_content: pact_version.content,
    pact_version_sha: pact_version.sha,
    latest_verification: pact_version.latest_verification,
    created_at: created_at,
    head_tag_names: [],
    db_model: self
  )
end

#to_domain_lightweightObject



145
146
147
148
149
150
151
152
153
154
155
156
157
# File 'lib/pact_broker/pacts/pact_publication.rb', line 145

def to_domain_lightweight
  PactBroker::Domain::Pact.new(
    id: id,
    provider: provider,
    consumer: consumer,
    consumer_version_number: consumer_version.number,
    consumer_version: to_version_domain_lightweight,
    revision_number: revision_number,
    pact_version_sha: pact_version.sha,
    created_at: created_at,
    db_model: self
    )
end

#to_domain_with_contentObject



168
169
170
# File 'lib/pact_broker/pacts/pact_publication.rb', line 168

def to_domain_with_content
  to_domain
end

#to_head_pactObject



172
173
174
# File 'lib/pact_broker/pacts/pact_publication.rb', line 172

def to_head_pact
  HeadPact.new(to_domain, consumer_version.number, values[:tag_name])
end

#to_version_domainObject

Think we really could just use the version here.



160
161
162
# File 'lib/pact_broker/pacts/pact_publication.rb', line 160

def to_version_domain
  consumer_version
end

#to_version_domain_lightweightObject



164
165
166
# File 'lib/pact_broker/pacts/pact_publication.rb', line 164

def to_version_domain_lightweight
  consumer_version
end