Class: Eco::API::Session::Config::Api

Inherits:
Hash show all
Defined in:
lib/eco/api/session/config/api.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Hash

#deep_merge, #deep_merge!

Constructor Details

#initialize(name, root:, key:, host:, version:, space: :default, mode: :local, user_key: nil, external_key: nil, email: nil, pass: nil, org_id: nil) ⇒ Api



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/eco/api/session/config/api.rb', line 59

def initialize(
  name,
  root:,
  key:,
  host:,
  version:,
  space:        :default,
  mode:         :local,
  user_key:     nil,
  external_key: nil,
  email:        nil,
  pass:         nil,
  org_id:       nil
)
  super(nil)
  @root                = root
  @apis                = {}
  self['name']         = name
  self['space']        = to_space(space)
  self['key']          = key
  self['host']         = host
  self['version']      = version
  self['mode']         = mode
  self['user_key']     = user_key
  self['external_key'] = external_key
  self['email']        = email || ENV['USER_EMAIL']
  self['pass']         = pass  || ENV['USER_PASS']
  self['org_id']       = org_id
end

Class Method Details

.api_class(version = :v0) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/eco/api/session/config/api.rb', line 41

def api_class(version = :v0)
  case to_version(version)
  when :v0
    Ecoportal::API::Internal
  when :v1
    Ecoportal::API::V1
  when :v2
    require 'ecoportal/api-v2'
    Ecoportal::API::V2
  when :graphql
    require 'ecoportal/api-graphql'
    Ecoportal::API::GraphQL
  else
    puts "Unknown api version '#{version}'"
  end
end

.description(api) ⇒ Object

Raises:

  • (ArgumentError)


14
15
16
17
18
19
# File 'lib/eco/api/session/config/api.rb', line 14

def description(api)
  msg = "Expecting #{self}. Given: #{api.class}"
  raise ArgumentError, msg unless api.is_a?(self)

  full_name(api.name, space: api.space)
end

.full_name(name, space: :default) ⇒ Object



21
22
23
24
25
26
# File 'lib/eco/api/session/config/api.rb', line 21

def full_name(name, space: :default)
  space = to_space(space)

  str_space = space == :default ? '' : " (space: :#{space})"
  "'#{name}'#{str_space}"
end

.to_space(value) ⇒ Object



7
8
9
10
11
12
# File 'lib/eco/api/session/config/api.rb', line 7

def to_space(value)
  value = value.to_s.strip.gsub(/[- ]/, '_').downcase
  return :default if value.empty?

  value.to_sym
end

.to_version(str) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/eco/api/session/config/api.rb', line 28

def to_version(str)
  case str.to_sym
  when :external, :v1
    :v1
  when :v2, :oozes
    :v2
  when :graphql
    :graphql
  else # :internal, :v0

    :v0
  end
end

Instance Method Details

#api(version: nil, logger: nil) ⇒ Ecoportal::API::Internal, ...

Obtain an API object of a specific version.



98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/eco/api/session/config/api.rb', line 98

def api(version: nil, logger: nil)
  version     ||= self.version
  switch_logger = (logger != @logger)
  @logger       = logger if logger

  current = get(version)
  return current if current && !switch_logger

  unless api_params?(version)
    msg  = "The api configuration for #{description} "
    msg << "is missing data for the api version '#{self.version(version)}'"
    raise ArgumentError, msg
  end

  new_api(version).tap do |pi|
    set(version, pi)
  end
end

#configEco::API::Session::Config



90
91
92
# File 'lib/eco/api/session/config/api.rb', line 90

def config
  @root.config
end

#descriptionObject



134
135
136
# File 'lib/eco/api/session/config/api.rb', line 134

def description
  self.class.description(self)
end

#emailObject



164
165
166
# File 'lib/eco/api/session/config/api.rb', line 164

def email
  self['email'] || @root.default_email
end

#external_keyObject



152
153
154
# File 'lib/eco/api/session/config/api.rb', line 152

def external_key
  self['external_key'] || (i[v1 v2].include?(version) && key)
end

#get(version) ⇒ Object



121
122
123
# File 'lib/eco/api/session/config/api.rb', line 121

def get(version)
  @apis[self.version(version)]
end

#hostObject



172
173
174
# File 'lib/eco/api/session/config/api.rb', line 172

def host
  self['host']
end

#internal_keyObject



156
157
158
# File 'lib/eco/api/session/config/api.rb', line 156

def internal_key
  (version == :v0) && self['key']
end

#keyObject



144
145
146
# File 'lib/eco/api/session/config/api.rb', line 144

def key
  self['key']
end

#local?Boolean



186
187
188
# File 'lib/eco/api/session/config/api.rb', line 186

def local?
  mode == :local
end

#loggerObject

if no low level connection messages: use IO::NULL



204
205
206
207
# File 'lib/eco/api/session/config/api.rb', line 204

def logger
  @logger ||= ::Logger.new(IO::NULL)
  log_connection? ? @logger : ::Logger.new(IO::NULL)
end

#modeSymbol



182
183
184
# File 'lib/eco/api/session/config/api.rb', line 182

def mode
  self['mode']
end

#mode=(mode) ⇒ Object



177
178
179
# File 'lib/eco/api/session/config/api.rb', line 177

def mode=(mode)
  self['mode'] = mode == :remote ? :remote : :local
end

#nameObject



125
126
127
# File 'lib/eco/api/session/config/api.rb', line 125

def name
  self['name']
end

#one_off?Boolean



138
139
140
141
142
# File 'lib/eco/api/session/config/api.rb', line 138

def one_off?
  return false unless @root.respond_to?(:one_off)

  @root.one_off?
end

#org_idObject



160
161
162
# File 'lib/eco/api/session/config/api.rb', line 160

def org_id
  self['org_id']
end

#passObject



168
169
170
# File 'lib/eco/api/session/config/api.rb', line 168

def pass
  self['pass'] || @root.default_pass
end

#remote?Boolean



190
191
192
# File 'lib/eco/api/session/config/api.rb', line 190

def remote?
  !local?
end

#set(version, api) ⇒ Object



117
118
119
# File 'lib/eco/api/session/config/api.rb', line 117

def set(version, api)
  @apis[self.version(version)] = api
end

#spaceObject



129
130
131
132
# File 'lib/eco/api/session/config/api.rb', line 129

def space
  self['space'] ||= :default
  to_space(self['space'])
end

#user_keyObject



148
149
150
# File 'lib/eco/api/session/config/api.rb', line 148

def user_key
  self['user_key'] || @root.default_user_key
end

#version(value = nil) ⇒ Object



199
200
201
# File 'lib/eco/api/session/config/api.rb', line 199

def version(value = nil)
  self.class.to_version(value || self['version'])
end

#version_available?(version) ⇒ Boolean



195
196
197
# File 'lib/eco/api/session/config/api.rb', line 195

def version_available?(version)
  api_params?(version)
end