lmc 0.10.1 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
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: []