Class: LabClient::Klass

Inherits:
LabStruct show all
Extended by:
Docs
Includes:
CurlHelper, Logger
Defined in:
lib/labclient/klass.rb

Overview

Common Configuration for all Class Helpers

Instance Attribute Summary collapse

Attributes inherited from LabStruct

#response, #table

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Docs

demo, desc, doc, docs, example, json, markdown, navigation, option, result, subtitle, title

Methods included from CurlHelper

#curl

Methods included from Logger

#logger, logger, logger_setup

Methods inherited from LabStruct

#[], #[]=, #as_json, #inspect, #key?, #keys, #method_missing, #respond_to_missing?, #slice, #to_h

Constructor Details

#initialize(table = nil, response = nil, client = nil) ⇒ Klass

Returns a new instance of Klass.



108
109
110
111
112
113
114
# File 'lib/labclient/klass.rb', line 108

def initialize(table = nil, response = nil, client = nil)
  # @table = table unless table.nil?
  @client = client
  @response = response

  super(table)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class LabClient::LabStruct

Instance Attribute Details

#clientObject (readonly)

Returns the value of attribute client.



8
9
10
# File 'lib/labclient/klass.rb', line 8

def client
  @client
end

Class Method Details

.date_time_attrs(list) ⇒ Object

Define a list of DateTime Attributes



127
128
129
130
131
132
133
# File 'lib/labclient/klass.rb', line 127

def self.date_time_attrs(list)
  list.each do |kind|
    define_method(kind) do
      DateTime.parse @table[kind] if has? kind
    end
  end
end

.user_attrs(list) ⇒ Object

Define a list of LabClient::User Attributes



136
137
138
139
140
141
142
# File 'lib/labclient/klass.rb', line 136

def self.user_attrs(list)
  list.each do |kind|
    define_method(kind) do
      User.new(@table[kind], response, client) if has? kind
    end
  end
end

Instance Method Details

#api_methodsObject

Documented API Methods



43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/labclient/klass.rb', line 43

def api_methods
  docs = LabClient::Docs.docs.dig(group_name, 'Reference')

  unless docs
    puts 'No Available Help'
    return false
  end

  LabClient::Docs.docs.dig(group_name, 'Reference').map do |doc|
    doc[:options].map do |opt|
      opt[:name]
    end
  end.flatten.sort
end

#collect_project_id(position = 1) ⇒ Object Also known as: collect_group_id, collect_user_id

TODO: Combine all of these?



63
64
65
66
67
68
69
70
# File 'lib/labclient/klass.rb', line 63

def collect_project_id(position = 1)
  # Check if Path / Pagination will be blank
  if response.path.nil?
    response.request.base_url.split(@client.base_url, 2)[position]
  else
    CGI.unescape response.path.split('/')[position]
  end
end

#collect_release_id(position = 3) ⇒ Object



75
76
77
# File 'lib/labclient/klass.rb', line 75

def collect_release_id(position = 3)
  response.path.split('/')[position]
end

#collect_repository_id(position = 4) ⇒ Object



79
80
81
# File 'lib/labclient/klass.rb', line 79

def collect_repository_id(position = 4)
  response.path.split('/')[position]
end

#format_time?(time) ⇒ Boolean

Formatting Time Helper

Returns:

  • (Boolean)


122
123
124
# File 'lib/labclient/klass.rb', line 122

def format_time?(time)
  time.respond_to?(:to_time)
end

#group_nameObject

Category and Primary Key for docs



84
85
86
# File 'lib/labclient/klass.rb', line 84

def group_name
  self.class.instance_variable_get('@group_name') || klass.pluralize
end

#help(help_filter = nil) ⇒ Object

API Methods here have to be explicitly documented / custom helpers Assume no methods by default



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/labclient/klass.rb', line 19

def help(help_filter = nil)
  docs = LabClient::Docs.docs.dig(group_name, 'Reference')
  unless docs
    puts 'No Available Help'
    return false
  end

  puts klass
  docs.each do |doc|
    next unless doc[:options]

    doc[:options].each do |opt|
      next if help_filter && !(opt[:name] + opt[:text]).include?(help_filter.to_s)

      puts "  #{opt[:name]}"
      puts "    #{opt[:text]}\n"
    end
  end

  # Ignore Output
  nil
end

#klassObject

Helper to get docs



94
95
96
# File 'lib/labclient/klass.rb', line 94

def klass
  self.class.name.split('::', 2).last.split(/(?=[A-Z])/).join(' ')
end

#quiet?Boolean

Quiet Reader Helper

Returns:

  • (Boolean)


104
105
106
# File 'lib/labclient/klass.rb', line 104

def quiet?
  client.quiet?
end

#success?Boolean

Forward response success

Returns:

  • (Boolean)


117
118
119
# File 'lib/labclient/klass.rb', line 117

def success?
  @response.success?
end

#to_json(*_args) ⇒ Object

Prevent stack level errors, but turning into has first



89
90
91
# File 'lib/labclient/klass.rb', line 89

def to_json(*_args)
  to_h.to_json
end

#update_self(obj) ⇒ Object



98
99
100
101
# File 'lib/labclient/klass.rb', line 98

def update_self(obj)
  @table = obj.table
  self
end

#valid_group_project_levelsObject



58
59
60
# File 'lib/labclient/klass.rb', line 58

def valid_group_project_levels
  %i[guest reporter developer maintainer owner]
end

#verboseObject

TODO: Awesome Print / Amazing Print Conflicts?



13
14
15
# File 'lib/labclient/klass.rb', line 13

def verbose
  ap @table, ruby19_syntax: true
end