Class: Packages::Helm::IndexPresenter

Inherits:
Object
  • Object
show all
Includes:
API::Helpers::RelatedResourcesHelpers
Defined in:
app/presenters/packages/helm/index_presenter.rb

Constant Summary collapse

API_VERSION =
'v1'
CHANNEL =
'channel'
INDEX_YAML_SUFFIX =
"/#{CHANNEL}/index.yaml"
EMPTY_HASH =
{}.freeze

Instance Method Summary collapse

Methods included from API::Helpers::RelatedResourcesHelpers

#expose_path, #expose_url, #issues_available?, #mrs_available?, #project_feature_string_access_level

Constructor Details

#initialize(project_id_param, channel, packages) ⇒ IndexPresenter

Returns a new instance of IndexPresenter.



13
14
15
16
17
# File 'app/presenters/packages/helm/index_presenter.rb', line 13

def initialize(project_id_param, channel, packages)
  @project_id_param = project_id_param
  @channel = channel
  @packages = packages
end

Instance Method Details

#api_versionObject



19
20
21
# File 'app/presenters/packages/helm/index_presenter.rb', line 19

def api_version
  API_VERSION
end

#entriesObject



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'app/presenters/packages/helm/index_presenter.rb', line 23

def entries
  return EMPTY_HASH unless @channel.present?

  result = Hash.new { |h, k| h[k] = [] }

  # this .each is safe as we have max 300 objects
  most_recent_package_files.each do |package_file|
    name = package_file.['name']
    result[name] << package_file..merge({
      'created' => package_file.created_at.utc.strftime('%Y-%m-%dT%H:%M:%S.%NZ'),
      'digest' => package_file.file_sha256,
      'urls' => ["charts/#{package_file.file_name}"]
    })
  end

  result
end

#generatedObject



41
42
43
# File 'app/presenters/packages/helm/index_presenter.rb', line 41

def generated
  Time.zone.now.utc.strftime('%Y-%m-%dT%H:%M:%S.%NZ')
end

#server_infoObject



45
46
47
48
49
50
51
52
53
# File 'app/presenters/packages/helm/index_presenter.rb', line 45

def server_info
  path = api_v4_projects_packages_helm_index_yaml_path(
    id: ERB::Util.url_encode(@project_id_param),
    channel: CHANNEL
  )
  {
    'contextPath' => path.delete_suffix(INDEX_YAML_SUFFIX)
  }
end