Module: Projects::Methods

Included in:
App
Defined in:
lib/projects/methods.rb

Constant Summary

HVE_CONTENT_TYPE =
'application/vnd.perforce.project.hve.v1+json'
HVE_ID =
'hveProject'

Instance Method Summary (collapse)

Instance Method Details

- (Object) depot_path_for_name(name)

[View source]

91
92
93
# File 'lib/projects/methods.rb', line 91

def depot_path_for_name(name)
  "#{hve_projects_path}/#{name}"
end

- (Object) encode_name(name)

[View source]

79
80
81
# File 'lib/projects/methods.rb', line 79

def encode_name(name)
  HWSStrings.component_encode(name)
end

- (Object) fetch(id)

The ID is a URL encoded version of the directory name under HVE_PROJECTS_PATH.

This will unencode the ID and fetch by name.

[View source]

50
51
52
53
54
55
56
57
58
59
# File 'lib/projects/methods.rb', line 50

def fetch(id)
  name = unencode_name(id)

  if !Cloud::Settings.cloud_enabled?
    return fetch_by_depot_dir_name(name)
  else
    projects_service = Cloud::Projects.new(env:@env)
    projects_service.fetch(id)
  end
end

- (Object) fetch_by_depot_dir_name(name)

Returns the project's “details” based on the project name.

No validation is done to ensure this directory actually exists in the system.

[View source]

65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/projects/methods.rb', line 65

def fetch_by_depot_dir_name(name)
  return nil if env['hws_settings'].HVE_PROJECTS_PATH.nil?
  id = encode_name(name)

  {
      'id': id,
      'name': name,
      'server': server_uri_for_id(id),
      HVE_ID => {
          'depotPath': depot_path_for_name(name)
      }
  }
end

- (Object) hve_projects_path

[View source]

95
96
97
# File 'lib/projects/methods.rb', line 95

def hve_projects_path
  env['hws_settings'].HVE_PROJECTS_PATH || fail('HVE_PROJECTS_PATH not set')
end

- (Object) list(details: false, extension: nil)

List HVE Projects as configured in the system.

See the Appendix in the documentation for details on values.

[View source]

13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/projects/methods.rb', line 13

def list(details: false, extension: nil)
  return if extension and (extension != HVE_ID or extension != HVE_CONTENT_TYPE)

  if Cloud::Settings.cloud_enabled?
    projects_service = Cloud::Projects.new(env:@env)
    return projects_service.list(details: details)
  end

  project_dirs = list_project_names
  project_names = project_dirs.map { |d| File.basename(d) }

  if details
    project_names.map { |n| fetch_by_depot_dir_name(n) }
  else
    project_names.map { |n| encode_name(n) }
  end
end

- (Object) list_project_names

[View source]

31
32
33
34
35
36
37
38
# File 'lib/projects/methods.rb', line 31

def list_project_names
  if !Cloud::Settings.cloud_enabled?
    return list_project_names_onsite_impl
  else
    projects_service = Cloud::Projects.new(env:@env)
    return projects_service.list(false)
  end
end

- (Object) list_project_names_onsite_impl

[View source]

40
41
42
43
44
# File 'lib/projects/methods.rb', line 40

def list_project_names_onsite_impl
  pattern = "#{hve_projects_path}/*"
  results = p4.run_dirs(pattern)
  results.map { |r| r['dir'] }
end

- (Object) p4host

[View source]

131
132
133
# File 'lib/projects/methods.rb', line 131

def p4host
  env['hws_settings'].P4HOST
end

- (Object) p4port

[View source]

127
128
129
# File 'lib/projects/methods.rb', line 127

def p4port
  env['hws_settings'].P4PORT || fail('P4PORT setting not available')
end

- (Object) safe_hve_projects_path

[View source]

99
100
101
# File 'lib/projects/methods.rb', line 99

def safe_hve_projects_path
  hve_projects_path.gsub('//', '/')
end

- (Object) server

[View source]

118
119
120
121
122
123
124
125
# File 'lib/projects/methods.rb', line 118

def server
  return p4port if p4port.include?(':')

  host = p4host ? p4host : 'localhost'
  port = p4port

  "#{host}:#{port}"
end

- (Object) server_uri_for_id(id)

[View source]

87
88
89
# File 'lib/projects/methods.rb', line 87

def server_uri_for_id(id)
  "p4://#{userinfo}#{server}#{safe_hve_projects_path}/#{id}"
end

- (Object) unencode_name(name)

[View source]

83
84
85
# File 'lib/projects/methods.rb', line 83

def unencode_name(name)
  HWSStrings.component_decode(name)
end

- (Object) userinfo

For HVE Projects, it may be interesting to people to see various connection settings for each server URL.

[View source]

105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/projects/methods.rb', line 105

def userinfo
  data = {}
  if env['hws_settings'].P4CHARSET
    data['P4CHARSET'] = env['hws_settings'].P4CHARSET
  end
  if data.keys.empty?
    ''
  else
    encoded_data = data.map {|k,v| "#{k}=#{v}"}.join(';')
    "#{encoded_data}@"
  end
end