lmc 0.10.1 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 5b372c965270e732a0cae9bac5a6f86d30bd1340
4
- data.tar.gz: 34d28f4b1e789a0f31c0cb9a28769d37ca6d8201
2
+ SHA256:
3
+ metadata.gz: e239ac693f1144e6391c0aad69e68657ad5498ae51e3b0c92dcc9e163abb15de
4
+ data.tar.gz: d98d01d4b424db42dc6fb581d763f4b60e20d4e283a87f1b771bd786c8c1a34e
5
5
  SHA512:
6
- metadata.gz: 35ddcdb65d3be6fad01fa189bba0a8a9d377a4dd14c6268306c81bbfd050b06c819b4cad78f649291cb1fa7619ec9a351d60155949fc53ba26fc9a74357862d8
7
- data.tar.gz: 70ea891cf778e2e8d70a8f6ff00453452b4c8c0eb24b8bd59dd6546fd710cf8a6dc01dd07615dbdf9a8f853b1fa025ad6053562558aa8d2cc6265f267f8c23d7
6
+ metadata.gz: abb83a783cfe4247cb3952cdd10df18fd36c4d9ad91d4196783e90aaf5bb39f5be51ee6b65ee1b11c4421077d3479e16f7c10359b83e39e361e90e586c3aee7c
7
+ data.tar.gz: 778005cf105deaf7fbd4bfd9ba60bb595ffb747e14e924a89dc1e56c5e8790518c9f386770ad36c3876280ed72f08e61bc6f081f0e15fbd8123fd570d4fc9b7b
@@ -1,7 +1,7 @@
1
1
  <component name="InspectionProjectProfileManager">
2
2
  <profile version="1.0">
3
3
  <option name="myName" value="Project Default" />
4
- <inspection_tool class="Rubocop" enabled="true" level="WARNING" enabled_by_default="true">
4
+ <inspection_tool class="Rubocop" enabled="false" level="WARNING" enabled_by_default="true">
5
5
  <scope name="Tests" level="ERROR" enabled="true" />
6
6
  </inspection_tool>
7
7
  <inspection_tool class="RubyInstanceMethodNamingConvention" enabled="true" level="WARNING" enabled_by_default="true">
data/.idea/vcs.xml CHANGED
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <project version="4">
3
3
  <component name="VcsDirectoryMappings">
4
- <mapping directory="$PROJECT_DIR$" vcs="Git" />
4
+ <mapping directory="" vcs="Git" />
5
5
  </component>
6
6
  </project>
data/.rubocop.yml CHANGED
@@ -1,8 +1,8 @@
1
- Layout/TrailingBlankLines:
1
+ Layout/TrailingEmptyLines:
2
2
  EnforcedStyle: final_blank_line
3
- Layout/IndentFirstHashElement:
3
+ Layout/FirstHashElementIndentation:
4
4
  IndentationWidth: 4
5
- Metrics/LineLength:
5
+ Layout/LineLength:
6
6
  Max: 110
7
7
  Style/IfUnlessModifier:
8
8
  Enabled: false
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.4.1
1
+ 2.7.1
data/Rakefile CHANGED
@@ -21,15 +21,16 @@ RuboCop::RakeTask.new(:autocop) do |t|
21
21
  'Layout/SpaceAroundOperators',
22
22
  'Layout/SpaceInsideBlockBraces',
23
23
  'Layout/SpaceInsideHashLiteralBraces',
24
- 'Layout/TrailingBlankLines',
25
- 'Style/BracesAroundHashParameters',
24
+ 'Layout/TrailingEmptyLines',
26
25
  'Style/CommentAnnotation',
27
26
  'Style/FrozenStringLiteralComment',
28
27
  'Style/MethodDefParentheses',
29
28
  'Style/RedundantSelf',
30
29
  'Style/RedundantReturn',
31
30
  'Style/StringLiterals',
32
- 'Style/StringLiteralsInInterpolation']
31
+ 'Style/StringLiteralsInInterpolation',
32
+ 'Style/StabbyLambdaParentheses',
33
+ ]
33
34
  t.options = ['--only', autofix.join(','), '--auto-correct', 'lib', 'test', 'Rakefile', 'lmc.gemspec']
34
35
  end
35
36
  task :default => :test
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "result": {
3
- "covered_percent": 90.81
3
+ "covered_percent": 92.33
4
4
  }
5
5
  }
data/lib/lmc.rb CHANGED
@@ -5,10 +5,23 @@ require 'restclient'
5
5
 
6
6
  module LMC
7
7
  SERVICELIST = ['cloud-service-auth',
8
+ 'cloud-service-backstage',
9
+ 'cloud-service-config',
8
10
  'cloud-service-devices',
11
+ 'cloud-service-devicetunnel',
12
+ 'cloud-service-dyndns',
13
+ 'cloud-service-fields',
14
+ 'cloud-service-geolocation',
15
+ 'cloud-service-hotspot',
16
+ 'cloud-service-jobs',
9
17
  'cloud-service-monitoring',
10
- 'cloud-service-config',
11
- 'cloud-service-licenses']
18
+ 'cloud-service-messaging',
19
+ 'cloud-service-notification',
20
+ 'cloud-service-licenses',
21
+ 'cloud-service-logging',
22
+ 'cloud-service-preferences',
23
+ 'cloud-service-uf-translator'
24
+ ]
12
25
 
13
26
  def self.useful
14
27
  true
@@ -23,7 +36,7 @@ Dir.glob(File.expand_path('../lmc/*.rb', __FILE__)).each do |file|
23
36
  require file
24
37
  end
25
38
 
26
- ['exceptions', 'auth', 'config', 'monitoring'].each do |folder|
39
+ ['exceptions', 'auth', 'config', 'monitoring', 'preferences'].each do |folder|
27
40
  Dir.glob(File.expand_path("../lmc/#{folder}/*.rb", __FILE__)).each do |file|
28
41
  require file
29
42
  end
data/lib/lmc/Account.rb CHANGED
@@ -25,7 +25,7 @@ module LMC
25
25
  (name.nil? || a.name == name) && (type.nil? || a.type == type)
26
26
  end
27
27
  if accounts.length == 1
28
- return accounts[0]
28
+ accounts[0]
29
29
  elsif accounts.length == 0
30
30
  raise 'Did not find account'
31
31
  else
@@ -56,8 +56,8 @@ module LMC
56
56
  delete_action = AuthAction.new @cloud
57
57
  delete_action.type = AuthAction::ACCOUNT_DELETE
58
58
  delete_action.name = Cloud.user
59
- delete_action.data = {'password' => Cloud.password,
60
- 'accountId' => @id}
59
+ delete_action.data = { 'password' => Cloud.password,
60
+ 'accountId' => @id }
61
61
  delete_action.post
62
62
  @id = nil
63
63
  true
@@ -73,30 +73,33 @@ module LMC
73
73
  def members
74
74
  ids = Cloud.instance.get ['cloud-service-auth', 'accounts', @id, 'members'], 'select' => 'id'
75
75
  puts ids.inspect if Cloud.debug
76
- principals = ids.map do |principal_id|
77
- response = Cloud.instance.get ['cloud-service-auth', 'accounts', @id, 'members', principal_id]
78
- principal = response.body
79
- puts principal.inspect if Cloud.debug
80
- principal
76
+ # these are not actual membership objects
77
+ memberships = ids.map do |member_id|
78
+ response = Cloud.instance.get ['cloud-service-auth', 'accounts', @id, 'members', member_id]
79
+ memberships = response.body
80
+ puts memberships.inspect if Cloud.debug
81
+ memberships
81
82
  end
82
- principals
83
+ memberships
83
84
  end
84
85
 
85
86
  def find_member_by_name(name)
86
87
  if name.nil?
87
88
  raise 'No member name given'
88
89
  end
89
- member = members.find {|m| m.name == name}
90
+ member = members.find { |m| m.name == name }
90
91
  unless member
91
92
  raise "Member named #{name} not found in account #{self}"
92
93
  end
93
94
  member
94
95
  end
95
96
 
97
+ #--
96
98
  # def update_member(principal_id, data)
97
99
  # response = @cloud.post ["cloud-service-auth", "accounts", id, 'members', principal_id], data
98
100
  # return response
99
101
  # end
102
+ #++
100
103
 
101
104
  def remove_membership(member_id)
102
105
  @cloud.delete ['cloud-service-auth', 'accounts', id, 'members', member_id]
@@ -123,16 +126,21 @@ module LMC
123
126
  end
124
127
 
125
128
  def children
126
- @cloud.auth_for_accounts([id, ROOT_ACCOUNT_UUID])
127
- response = @cloud.get ['cloud-service-auth', 'accounts', id, 'children']
128
- response.map {|child| Account.new @cloud, child}
129
+ @cloud.auth_for_accounts([ROOT_ACCOUNT_UUID])
130
+ # Projects can not have children, return empty map immediately as optimization
131
+ if type != 'PROJECT'
132
+ response = @cloud.get ['cloud-service-auth', 'accounts', id, 'children']
133
+ response.map { |child| Account.new @cloud, child }
134
+ else
135
+ []
136
+ end
129
137
  end
130
138
 
139
+ # This can only show the most recent page of logs so far
131
140
  def logs
132
- # https://lmctest/cloud-service-logging/accounts/6392b234-b11c-498a-a077-a5f5b23c54a0/logs?lang=DE
133
141
  cloud = Cloud.instance
134
142
  cloud.auth_for_accounts [id]
135
- cloud.get(['cloud-service-logging', 'accounts', id, 'logs?lang=DE']).body
143
+ cloud.get(['cloud-service-logging', 'accounts', id, 'logs', 'paginated?lang=DE']).body.logs
136
144
  end
137
145
 
138
146
  def sites
@@ -140,7 +148,7 @@ module LMC
140
148
  return [] if @type == 'PRIVATE_CLOUD'
141
149
  @cloud.auth_for_accounts([id])
142
150
  response = @cloud.get ['cloud-service-devices', 'accounts', id, 'sites'], :select => :id
143
- response.body.map {|data|
151
+ response.body.map { |data|
144
152
  Site.new(UUID.new(data), self)
145
153
  }
146
154
  end
@@ -168,6 +176,10 @@ module LMC
168
176
  "#{name}"
169
177
  end
170
178
 
179
+ def summary
180
+ "\"#{@name}\" (#{@type}) ID: #{@id}"
181
+ end
182
+
171
183
  private
172
184
 
173
185
  ## should be put into entity or such
data/lib/lmc/Cloud.rb CHANGED
@@ -7,22 +7,24 @@ require 'restclient'
7
7
  module LMC
8
8
  class Cloud
9
9
  class << self
10
- attr_accessor :cloud_host, :user, :password, :verbose, :debug, :verify_tls, :use_tls
10
+ attr_accessor :cloud_host, :user, :password, :code, :verbose, :debug, :verify_tls, :use_tls
11
11
  Cloud.use_tls = true
12
12
  Cloud.verify_tls = true
13
+ Cloud.code = nil
13
14
  end
14
15
 
15
16
  def self.instance(opts = { authorize: true })
16
- @@inst ||= new(@cloud_host, @user, @password, opts[:authorize])
17
+ @@inst ||= new(@cloud_host, @user, @password, @code, opts[:authorize])
17
18
  end
18
19
 
19
20
  attr_reader :auth_ok, :cloud_host, :user, :password
20
21
 
21
- def initialize(cloud_host, user, pass, auth = true)
22
+ def initialize(cloud_host, user, password, code = nil, auth = true)
22
23
  @auth_ok = false
23
24
  @cloud_host = cloud_host
24
25
  @user = user
25
- @password = pass
26
+ @password = password
27
+ @code = code
26
28
  @verify_tls = Cloud.verify_tls
27
29
  @last_authorized_account_ids = nil
28
30
  @logger ||= ::LMC::Logger.new(STDOUT) if Cloud.debug
@@ -31,7 +33,7 @@ module LMC
31
33
  authorize if auth
32
34
  end
33
35
 
34
- # hide password from dumps
36
+ # hide secret fields from being displayed in dumps
35
37
  def inspect
36
38
  "#<Cloud:#{object_id}, #{build_url}>"
37
39
  end
@@ -63,6 +65,11 @@ module LMC
63
65
  post ['cloud-service-auth', 'accounts', account_id, 'members'], body
64
66
  end
65
67
 
68
+ # @param section Array of String to indicate section to access. Example: ['principal', 'self', 'ui']
69
+ def preferences(section)
70
+ LMC::Preferences.new cloud: self, section: section
71
+ end
72
+
66
73
  def get(path, params = nil)
67
74
  prepared_headers = headers
68
75
  prepared_headers[:params] = params
@@ -74,31 +81,37 @@ module LMC
74
81
  execute_request args
75
82
  end
76
83
 
77
- def put(path, body_object)
84
+ def put(path, body_object, params = nil)
85
+ prepared_headers = headers
86
+ prepared_headers[:params] = params
78
87
  args = {
79
88
  :method => :put,
80
89
  :url => build_url(path),
81
- :payload => body_object.to_json
82
-
90
+ :payload => body_object.to_json,
91
+ :headers => prepared_headers
83
92
  }
84
93
  execute_request args
85
94
  end
86
95
 
87
- def post(path, body_object)
96
+ def post(path, body_object, params=nil )
97
+ prepared_headers = headers
98
+ prepared_headers[:params] = params
88
99
  args = {
89
100
  :method => :post,
90
101
  :url => build_url(path),
91
- :payload => body_object.to_json
102
+ :payload => body_object.to_json,
103
+ :headers => prepared_headers
92
104
  }
93
105
  execute_request args
94
106
  end
95
107
 
96
- def delete(path, body_object = nil)
108
+ def delete(path, params = nil)
109
+ prepared_headers = headers
110
+ prepared_headers[:params] = params
97
111
  args = {
98
112
  :method => :delete,
99
113
  :url => build_url(path),
100
- :payload => body_object.to_json,
101
- :headers => headers
114
+ :headers => prepared_headers
102
115
  }
103
116
  execute_request args
104
117
  end
@@ -142,7 +155,12 @@ module LMC
142
155
  }
143
156
  if account_ids != @last_authorized_account_ids
144
157
  begin
145
- reply = post(['cloud-service-auth', 'auth'], name: @user, password: @password, accountIds: account_ids, termsOfUse: tos)
158
+ reply = post(['cloud-service-auth', 'auth'],
159
+ name: @user,
160
+ password: @password,
161
+ code: @code,
162
+ accountIds: account_ids,
163
+ termsOfUse: tos)
146
164
  @last_authorized_account_ids = account_ids
147
165
  @auth_token = reply
148
166
  @auth_ok = true
@@ -151,6 +169,7 @@ module LMC
151
169
  if response['code'] == 100
152
170
  raise LMC::OutdatedTermsOfUseException.new(response)
153
171
  end
172
+ raise e
154
173
  end
155
174
  end
156
175
  end
@@ -180,7 +199,7 @@ module LMC
180
199
  internal_args.merge! args
181
200
  begin
182
201
  resp = RestClient::Request.execute internal_args
183
- return LMCResponse.new(resp)
202
+ LMCResponse.new(resp)
184
203
  rescue RestClient::ExceptionWithResponse => e
185
204
  if Cloud.debug
186
205
  puts 'EXCEPTION: ' + e.to_s
data/lib/lmc/Response.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'ostruct'
4
+ require 'recursive-open-struct'
4
5
  module LMC
5
6
  class LMCResponse
6
7
  attr_reader :body, :code, :headers
@@ -13,12 +14,12 @@ module LMC
13
14
  if @body_object.class == Array
14
15
  @body = @body_object.map { |elem|
15
16
  if elem.is_a? Hash then
16
- OpenStruct.new(elem)
17
+ RecursiveOpenStruct.new(elem, recurse_over_arrays: true)
17
18
  else
18
19
  elem
19
20
  end}
20
21
  elsif @body_object.class == Hash
21
- @body = OpenStruct.new(@body_object)
22
+ @body = RecursiveOpenStruct.new(@body_object, recurse_over_arrays: true)
22
23
  elsif @body_object.class == TrueClass || @body_object.class == FalseClass
23
24
  @body = @body_object
24
25
  else
data/lib/lmc/User.rb CHANGED
@@ -34,6 +34,7 @@ module LMC
34
34
  action = AuthAction.new Cloud.instance
35
35
  action.type = 'PASSWORD_RESET'
36
36
  action.name = @email
37
+ action.data = nil
37
38
  action.post
38
39
  end
39
40
  end
data/lib/lmc/authority.rb CHANGED
@@ -5,8 +5,7 @@ module LMC
5
5
  attr_accessor :account, :id, :name, :visibility, :type
6
6
 
7
7
  def initialize(data, account)
8
- # TODO: Use cloud object from account
9
- @cloud = Cloud.instance
8
+ @cloud = account.cloud
10
9
  apply_data(data)
11
10
  @account = account
12
11
  end
@@ -54,7 +54,7 @@ module LMC
54
54
  def descriptive_confighash
55
55
  item_map = dscui.item_by_id_map
56
56
  confighash.map { |k, v|
57
- [item_map[k].description, v]
57
+ [item_map[k.to_s].description, v]
58
58
  }.to_h
59
59
  end
60
60
 
@@ -172,16 +172,17 @@ module LMC
172
172
  end
173
173
 
174
174
  def redeem_ticket(tries)
175
+ wait_seconds = 0.5
175
176
  attempts = 1
176
177
  until @response
177
- raise 'Too many attempts' if attempts > tries
178
+ raise "Timeout waiting for config (#{attempts * wait_seconds}s)" if attempts > tries
178
179
  attempts += 1
179
180
  body = @cloud.get(url_ticket).body
180
181
  unless body.respond_to? :ticketId
181
182
  @ticket_id = nil
182
183
  @response = body
183
184
  end
184
- sleep 0.5
185
+ sleep wait_seconds * attempts
185
186
  end
186
187
  end
187
188
 
@@ -28,7 +28,7 @@ module LMC
28
28
  attr_reader :version_string, :sections
29
29
 
30
30
  def initialize(v_hash)
31
- keys = v_hash.keys
31
+ keys = v_hash.to_h.keys
32
32
  raise('More than one version key contained in dscui.') if keys.length > 1
33
33
  @version_string = keys.first
34
34
  @sections = v_hash[@version_string].map { |section_wrapper| Section.new section_wrapper }
@@ -76,7 +76,7 @@ module LMC
76
76
  end
77
77
 
78
78
  def initialize(item_wrapper)
79
- keys = item_wrapper.keys
79
+ keys = item_wrapper.to_h.keys
80
80
  raise('More than one key contained in item wrapper') if keys.length > 1
81
81
  @type = keys.first
82
82
  item = item_wrapper[@type]
data/lib/lmc/entity.rb CHANGED
@@ -5,9 +5,9 @@ module LMC
5
5
  def self.get_by_uuid_or_name(term)
6
6
  raise 'Missing argument' if term.nil?
7
7
  begin
8
- return get_by_uuid term
8
+ get_by_uuid term
9
9
  rescue RestClient::BadRequest, URI::InvalidURIError
10
- return get_by_name term
10
+ get_by_name term
11
11
  end
12
12
  end
13
13
 
data/lib/lmc/logger.rb CHANGED
@@ -5,7 +5,7 @@ module LMC
5
5
  class Logger < ::Logger
6
6
  @cloud = nil
7
7
  attr_accessor :cloud
8
- @@header_token_re = /"Authorization"=>"Bearer ([\S.]*)"/
8
+ @@header_token_re = /"Authorization"=>"Bearer ([\S]*)"/
9
9
  def <<(line)
10
10
  value_found = @@header_token_re.match line
11
11
  if value_found
@@ -9,9 +9,6 @@ module LMC
9
9
  end
10
10
  end
11
11
  klass.class_exec do
12
- def methodtest
13
- puts("cloud-service-#{service_name}")
14
- end
15
12
 
16
13
  # method that wraps attr_accessor to keep the defined attrs in a class instance var for serializing
17
14
  def self.resource_attrs(*attrs)
@@ -26,10 +23,6 @@ module LMC
26
23
  end
27
24
  end
28
25
 
29
- def method_on_instance_of_class
30
- puts("cloud-service-#{service_name} #{inspect}, #{@cloud}")
31
- end
32
-
33
26
  def collection_path
34
27
  ["cloud-service-#{service_name}", collection_name]
35
28
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+ module LMC
3
+ class Preferences
4
+ def initialize(cloud:, section:)
5
+ @cloud = cloud
6
+ @section = section
7
+ end
8
+
9
+ def get(path)
10
+ response = @cloud.get build_url, { path: path }
11
+ response.body
12
+ end
13
+
14
+ def put(path, payload)
15
+ @cloud.put build_url, payload, { path: path }
16
+ end
17
+
18
+ private
19
+ def build_url
20
+ ['cloud-service-preferences'] + @section
21
+ end
22
+ end
23
+ end
24
+
data/lib/lmc/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LMC
4
- VERSION = '0.10.1'
4
+ VERSION = '0.14.0'
5
5
  end
6
6
 
data/lmc.gemspec CHANGED
@@ -10,6 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.authors = ['erpel']
11
11
  spec.email = ['philipp@copythat.de']
12
12
 
13
+ spec.required_ruby_version = '~> 2.0'
13
14
  spec.summary = %q{Library for interacting with LMC cloud instances}
14
15
  spec.license = 'BSD-3-Clause'
15
16
 
@@ -32,13 +33,13 @@ Gem::Specification.new do |spec|
32
33
  spec.add_development_dependency 'bundler', '~> 2.0'
33
34
  spec.add_development_dependency 'minitest', '~> 5.11'
34
35
  spec.add_development_dependency 'minitest-reporters', '~> 1'
35
- spec.add_development_dependency 'rake', '~> 10.0'
36
- spec.add_development_dependency 'recursive-open-struct', '~> 1.1'
36
+ spec.add_development_dependency 'rake', '~> 12.0'
37
37
  spec.add_development_dependency 'simplecov', '~> 0.15'
38
38
  spec.add_development_dependency 'pry-nav', '~> 0.2.4'
39
39
  spec.add_development_dependency 'rubocop', '~> 0.58.1'
40
40
 
41
- spec.add_runtime_dependency 'json', '~> 2.0'
41
+ spec.add_runtime_dependency 'json', '~> 2.3'
42
42
  spec.add_runtime_dependency 'rest-client', '~> 2.0'
43
+ spec.add_runtime_dependency 'recursive-open-struct', '~> 1.1'
43
44
  end
44
45
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lmc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.1
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - erpel
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-25 00:00:00.000000000 Z
11
+ date: 2021-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -58,28 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '10.0'
61
+ version: '12.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '10.0'
69
- - !ruby/object:Gem::Dependency
70
- name: recursive-open-struct
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '1.1'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '1.1'
68
+ version: '12.0'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: simplecov
85
71
  requirement: !ruby/object:Gem::Requirement
@@ -128,14 +114,14 @@ dependencies:
128
114
  requirements:
129
115
  - - "~>"
130
116
  - !ruby/object:Gem::Version
131
- version: '2.0'
117
+ version: '2.3'
132
118
  type: :runtime
133
119
  prerelease: false
134
120
  version_requirements: !ruby/object:Gem::Requirement
135
121
  requirements:
136
122
  - - "~>"
137
123
  - !ruby/object:Gem::Version
138
- version: '2.0'
124
+ version: '2.3'
139
125
  - !ruby/object:Gem::Dependency
140
126
  name: rest-client
141
127
  requirement: !ruby/object:Gem::Requirement
@@ -150,7 +136,21 @@ dependencies:
150
136
  - - "~>"
151
137
  - !ruby/object:Gem::Version
152
138
  version: '2.0'
153
- description:
139
+ - !ruby/object:Gem::Dependency
140
+ name: recursive-open-struct
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '1.1'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '1.1'
153
+ description:
154
154
  email:
155
155
  - philipp@copythat.de
156
156
  executables: []
@@ -195,33 +195,33 @@ files:
195
195
  - lib/lmc/mixins/json_able.rb
196
196
  - lib/lmc/mixins/service_resource.rb
197
197
  - lib/lmc/monitoring/monitoring_record.rb
198
+ - lib/lmc/preferences/preferences.rb
198
199
  - lib/lmc/principal.rb
199
200
  - lib/lmc/uuid.rb
200
201
  - lib/lmc/version.rb
201
202
  - lmc.gemspec
202
203
  - misc/debug_log_experiment.rb
203
- homepage:
204
+ homepage:
204
205
  licenses:
205
206
  - BSD-3-Clause
206
207
  metadata: {}
207
- post_install_message:
208
+ post_install_message:
208
209
  rdoc_options: []
209
210
  require_paths:
210
211
  - lib
211
212
  required_ruby_version: !ruby/object:Gem::Requirement
212
213
  requirements:
213
- - - ">="
214
+ - - "~>"
214
215
  - !ruby/object:Gem::Version
215
- version: '0'
216
+ version: '2.0'
216
217
  required_rubygems_version: !ruby/object:Gem::Requirement
217
218
  requirements:
218
219
  - - ">="
219
220
  - !ruby/object:Gem::Version
220
221
  version: '0'
221
222
  requirements: []
222
- rubyforge_project:
223
- rubygems_version: 2.6.11
224
- signing_key:
223
+ rubygems_version: 3.1.2
224
+ signing_key:
225
225
  specification_version: 4
226
226
  summary: Library for interacting with LMC cloud instances
227
227
  test_files: []