kalibro_client 3.0.1 → 4.0.0.alpha1
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 +4 -4
- data/features/metric_collector_details/find_by_name.feature +12 -4
- data/features/step_definitions/metric_collector_details_steps.rb +11 -7
- data/features/step_definitions/metric_configuration_steps.rb +2 -2
- data/features/step_definitions/module_result_steps.rb +1 -1
- data/features/support/env.rb +0 -3
- data/kalibro_client.gemspec +1 -0
- data/lib/kalibro_client.rb +4 -39
- data/lib/kalibro_client/entities/base.rb +12 -207
- data/lib/kalibro_client/entities/configurations/base.rb +3 -3
- data/lib/kalibro_client/entities/configurations/kalibro_configuration.rb +0 -4
- data/lib/kalibro_client/entities/configurations/metric_configuration.rb +1 -19
- data/lib/kalibro_client/entities/configurations/reading_group.rb +1 -5
- data/lib/kalibro_client/entities/miscellaneous/base.rb +4 -2
- data/lib/kalibro_client/entities/miscellaneous/metric.rb +0 -2
- data/lib/kalibro_client/entities/processor/base.rb +3 -3
- data/lib/kalibro_client/entities/processor/hotspot_metric_result.rb +1 -1
- data/lib/kalibro_client/entities/processor/metric_collector_details.rb +19 -7
- data/lib/kalibro_client/entities/processor/module_result.rb +0 -13
- data/lib/kalibro_client/entities/processor/project.rb +0 -4
- data/lib/kalibro_client/entities/processor/repository.rb +0 -4
- data/lib/kalibro_client/entities/processor/tree_metric_result.rb +1 -1
- data/lib/kalibro_client/errors.rb +1 -4
- data/lib/kalibro_client/kalibro_cucumber_helpers.rb +7 -36
- data/lib/kalibro_client/kalibro_cucumber_helpers/cleaner.rb +27 -0
- data/lib/kalibro_client/version.rb +1 -1
- data/spec/entities/base_spec.rb +17 -449
- data/spec/entities/configurations/kalibro_configuration_spec.rb +0 -35
- data/spec/entities/configurations/kalibro_range_spec.rb +3 -3
- data/spec/entities/configurations/metric_configuration_spec.rb +1 -58
- data/spec/entities/configurations/reading_group_spec.rb +0 -32
- data/spec/entities/configurations/reading_spec.rb +3 -3
- data/spec/entities/processor/metric_collector_details_spec.rb +46 -25
- data/spec/entities/processor/module_result_spec.rb +0 -41
- data/spec/entities/processor/project_spec.rb +1 -35
- data/spec/entities/processor/repository_spec.rb +1 -14
- data/spec/{savon/fixtures → fixtures}/config.yml +0 -0
- data/spec/{savon/fixtures → fixtures}/invalid_config.yml +0 -0
- data/spec/kalibro_cucumber_helpers/cleaner_spec.rb +32 -0
- metadata +26 -32
- data/lib/kalibro_client/errors/record_invalid.rb +0 -19
- data/lib/kalibro_client/errors/record_not_found.rb +0 -22
- data/lib/kalibro_client/errors/request_error.rb +0 -27
- data/lib/kalibro_client/errors/standard.rb +0 -24
- data/lib/kalibro_client/helpers/date_attributes.rb +0 -11
- data/lib/kalibro_client/helpers/hash_converters.rb +0 -48
- data/lib/kalibro_client/helpers/request_methods.rb +0 -64
- data/lib/kalibro_client/helpers/xml_converters.rb +0 -20
- data/lib/kalibro_client/kalibro_cucumber_helpers/configuration.rb +0 -30
- data/spec/errors/record_invalid_spec.rb +0 -45
- data/spec/helpers/date_attributes_spec.rb +0 -30
- data/spec/helpers/hash_converters_spec.rb +0 -120
- data/spec/helpers/xml_converters_spec.rb +0 -64
- data/spec/kalibro_entities_spec.rb +0 -112
- data/spec/savon/fixtures/project/does_not_exists.xml +0 -1
- data/spec/savon/savon_test_helper.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6661e355aef4c385cec5b0e63fb1852955c12167
|
4
|
+
data.tar.gz: c9e65755d06ff18b3771ad2a5955cc41aec4685a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5957c37b63cc460456d7cefd6281ea7923e90c847394f9c420edf83b02b231ad0205e05de644e01039dd678613a11ef2786185c2b2ec91cbad92d3004e712efa
|
7
|
+
data.tar.gz: 11d63b8ba202abdce33662caa54544c1be73383aee7b6559700d2b63715dabb150de710d4d18df98b33e9238fbae7c179558871bc5251007c23df5c53ce7af73
|
@@ -3,10 +3,18 @@ Feature: Find By Name
|
|
3
3
|
As a developer
|
4
4
|
I want to get a metric collector by name
|
5
5
|
|
6
|
+
Scenario: get a metric collector by name!
|
7
|
+
When I search metric collector Analizo by name!
|
8
|
+
Then I should get "Analizo" metric collector
|
9
|
+
|
10
|
+
Scenario: get a metric collector by inexistent name!
|
11
|
+
When I search metric collector Avalio by name!
|
12
|
+
Then I should get an error
|
13
|
+
|
6
14
|
Scenario: get a metric collector by name
|
7
|
-
When I search metric collector Analizo by name
|
8
|
-
Then I should get Analizo metric collector
|
15
|
+
When I search metric collector "Analizo" by name
|
16
|
+
Then I should get "Analizo" metric collector
|
9
17
|
|
10
18
|
Scenario: get a metric collector by inexistent name
|
11
|
-
When I search metric collector Avalio by name
|
12
|
-
Then I should get
|
19
|
+
When I search metric collector "Avalio" by name
|
20
|
+
Then I should get nil
|
@@ -2,25 +2,29 @@ When(/^I get all metric collector names$/) do
|
|
2
2
|
@metric_collector_names = KalibroClient::Entities::Processor::MetricCollectorDetails.all_names
|
3
3
|
end
|
4
4
|
|
5
|
-
When(/^I search metric collector Analizo by name
|
6
|
-
@
|
5
|
+
When(/^I search metric collector Analizo by name\!$/) do
|
6
|
+
@response = KalibroClient::Entities::Processor::MetricCollectorDetails.find_by_name!("Analizo")
|
7
7
|
end
|
8
8
|
|
9
|
-
When(/^I search metric collector Avalio by name
|
9
|
+
When(/^I search metric collector Avalio by name\!$/) do
|
10
10
|
@is_error = false
|
11
11
|
begin
|
12
|
-
KalibroClient::Entities::Processor::MetricCollectorDetails.find_by_name("Avalio")
|
13
|
-
rescue
|
12
|
+
KalibroClient::Entities::Processor::MetricCollectorDetails.find_by_name!("Avalio")
|
13
|
+
rescue Likeno::Errors::RecordNotFound
|
14
14
|
@is_error = true
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
+
When(/^I search metric collector "(.+)" by name$/) do |name|
|
19
|
+
@response = KalibroClient::Entities::Processor::MetricCollectorDetails.find_by_name(name)
|
20
|
+
end
|
21
|
+
|
18
22
|
Then(/^it should return Analizo string inside of an array$/) do
|
19
23
|
expect(@metric_collector_names.include?("Analizo")).to be_truthy
|
20
24
|
end
|
21
25
|
|
22
|
-
Then(/^I should get
|
23
|
-
expect(@
|
26
|
+
Then(/^I should get "(.+)" metric collector$/) do |name|
|
27
|
+
expect(@response.name).to eq(name)
|
24
28
|
end
|
25
29
|
|
26
30
|
Then(/^I should get an error$/) do
|
@@ -38,7 +38,7 @@ When(/^I search an inexistent metric configuration$/) do
|
|
38
38
|
inexistent_id = rand(Time.now.to_i)
|
39
39
|
begin
|
40
40
|
KalibroClient::Entities::Configurations::MetricConfiguration.find(inexistent_id)
|
41
|
-
rescue
|
41
|
+
rescue Likeno::Errors::RecordNotFound
|
42
42
|
@is_error = true
|
43
43
|
end
|
44
44
|
end
|
@@ -81,7 +81,7 @@ Then(/^I should get an empty list of metric configurations$/) do
|
|
81
81
|
end
|
82
82
|
|
83
83
|
Then(/^the metric configuration should no longer exist$/) do
|
84
|
-
expect { KalibroClient::Entities::Configurations::MetricConfiguration.find(@metric_configuration.id)}.to raise_error(
|
84
|
+
expect { KalibroClient::Entities::Configurations::MetricConfiguration.find(@metric_configuration.id)}.to raise_error(Likeno::Errors::RecordNotFound)
|
85
85
|
end
|
86
86
|
|
87
87
|
Then(/^the metric configuration should exist$/) do
|
data/features/support/env.rb
CHANGED
@@ -15,9 +15,6 @@ end
|
|
15
15
|
# Kalibro hooks
|
16
16
|
require 'kalibro_client/kalibro_cucumber_helpers/hooks'
|
17
17
|
|
18
|
-
# Configuring the right hooks
|
19
|
-
KalibroClient::KalibroCucumberHelpers.configure_from_yml("#{__dir__}/kalibro_cucumber_helpers.yml")
|
20
|
-
|
21
18
|
# The gem itself
|
22
19
|
require 'kalibro_client'
|
23
20
|
|
data/kalibro_client.gemspec
CHANGED
data/lib/kalibro_client.rb
CHANGED
@@ -14,49 +14,14 @@
|
|
14
14
|
# You should have received a copy of the GNU General Public License
|
15
15
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
16
|
|
17
|
-
require '
|
18
|
-
require 'logger'
|
17
|
+
require 'likeno'
|
19
18
|
require "kalibro_client/version"
|
20
19
|
require "kalibro_client/errors"
|
21
20
|
require "kalibro_client/entities"
|
22
21
|
|
23
22
|
module KalibroClient
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
}
|
23
|
+
# Apply default configuration to Likeno
|
24
|
+
Likeno.configure(processor_address: "http://localhost:8082",
|
25
|
+
configurations_address: "http://localhost:8083")
|
28
26
|
|
29
|
-
@valid_config_keys = @config.keys
|
30
|
-
|
31
|
-
@logger = Logger.new(STDOUT)
|
32
|
-
|
33
|
-
# Configure through hash
|
34
|
-
def KalibroClient.configure(opts = {})
|
35
|
-
opts.each {|k,v| @config[k.to_sym] = v if @valid_config_keys.include? k.to_sym}
|
36
|
-
end
|
37
|
-
|
38
|
-
# Configure through yaml file
|
39
|
-
def KalibroClient.configure_with(path_to_yaml_file)
|
40
|
-
begin
|
41
|
-
config = YAML::load(IO.read(path_to_yaml_file))
|
42
|
-
rescue Errno::ENOENT
|
43
|
-
logger.warn("YAML configuration file couldn't be found. Using defaults."); return
|
44
|
-
rescue Psych::SyntaxError
|
45
|
-
logger.warn("YAML configuration file contains invalid syntax. Using defaults."); return
|
46
|
-
end
|
47
|
-
|
48
|
-
configure(config)
|
49
|
-
end
|
50
|
-
|
51
|
-
def KalibroClient.config
|
52
|
-
@config
|
53
|
-
end
|
54
|
-
|
55
|
-
def KalibroClient.logger
|
56
|
-
@logger
|
57
|
-
end
|
58
|
-
|
59
|
-
def KalibroClient.logger=(logger)
|
60
|
-
@logger = logger
|
61
|
-
end
|
62
27
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# This file is part of KalibroClient
|
1
|
+
# This file is part of KalibroClient
|
2
2
|
# Copyright (C) 2013 it's respectives authors (please see the AUTHORS file)
|
3
3
|
#
|
4
4
|
# This program is free software: you can redistribute it and/or modify
|
@@ -14,218 +14,23 @@
|
|
14
14
|
# You should have received a copy of the GNU General Public License
|
15
15
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
16
|
|
17
|
-
require '
|
18
|
-
require 'kalibro_client/
|
19
|
-
require 'kalibro_client/helpers/request_methods'
|
17
|
+
require 'likeno'
|
18
|
+
require 'kalibro_client/errors'
|
20
19
|
|
21
20
|
module KalibroClient
|
22
21
|
module Entities
|
23
|
-
class Base
|
24
|
-
|
25
|
-
|
26
|
-
def
|
27
|
-
|
28
|
-
|
29
|
-
@persisted = persisted
|
30
|
-
end
|
31
|
-
|
32
|
-
def to_hash(options={})
|
33
|
-
hash = Hash.new
|
34
|
-
excepts = options[:except].nil? ? [] : options[:except]
|
35
|
-
excepts << "kalibro_errors"
|
36
|
-
excepts << "persisted"
|
37
|
-
fields.each do |field|
|
38
|
-
hash = field_to_hash(field).merge(hash) if !excepts.include?(field)
|
39
|
-
end
|
40
|
-
hash
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.request(action, params = {}, method = :post, prefix="")
|
44
|
-
response = client.send(method) do |request|
|
45
|
-
url = "/#{endpoint}/#{action}".gsub(":id", params[:id].to_s)
|
46
|
-
url = "/#{prefix}#{url}" unless prefix.empty?
|
47
|
-
request.url url
|
48
|
-
request.body = params unless method == :get || params.empty?
|
49
|
-
request.options.timeout = 300
|
50
|
-
request.options.open_timeout = 300
|
51
|
-
end
|
52
|
-
|
53
|
-
if response.success?
|
54
|
-
response.body
|
55
|
-
# FIXME This condition was added to preserve the deprecated error codes that are returned by kalibro processor
|
56
|
-
elsif response.status == 404 || (response.body.key?('errors') && /NotFound/ === response.body['errors'])
|
57
|
-
raise KalibroClient::Errors::RecordNotFound.new(response: response)
|
58
|
-
else
|
59
|
-
raise KalibroClient::Errors::RequestError.new(response: response)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
|
64
|
-
def self.to_object value
|
65
|
-
value.kind_of?(Hash) ? new(value, true) : value
|
66
|
-
end
|
67
|
-
|
68
|
-
def self.to_objects_array value
|
69
|
-
array = value.kind_of?(Array) ? value : [value]
|
70
|
-
array.each.map { |element| to_object(element) }
|
71
|
-
end
|
72
|
-
|
73
|
-
def save
|
74
|
-
if persisted?
|
75
|
-
self.update
|
76
|
-
else
|
77
|
-
without_request_error? do
|
78
|
-
response = self.class.request(save_action, save_params, :post, save_prefix)
|
79
|
-
|
80
|
-
self.id = response[instance_class_name]["id"]
|
81
|
-
self.created_at = response[instance_class_name]["created_at"] unless response[instance_class_name]["created_at"].nil?
|
82
|
-
self.updated_at = response[instance_class_name]["updated_at"] unless response[instance_class_name]["updated_at"].nil?
|
83
|
-
@persisted = true
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def save!
|
89
|
-
return true if save
|
90
|
-
raise KalibroClient::Errors::RecordInvalid.new(self)
|
22
|
+
class Base < Likeno::Entity
|
23
|
+
# We do not track coverage here as it is deprecated and will be removed soon
|
24
|
+
# :nocov:
|
25
|
+
def kalibro_errors
|
26
|
+
STDERR.puts "DEPRECATED: use 'likeno_errors' instead of 'kalibro_errors'."
|
27
|
+
self.likeno_errors
|
91
28
|
end
|
29
|
+
# :nocov:
|
92
30
|
|
93
|
-
def self.
|
94
|
-
|
95
|
-
new_model.save
|
96
|
-
new_model
|
31
|
+
def self.module_name
|
32
|
+
'KalibroClient'
|
97
33
|
end
|
98
|
-
|
99
|
-
def update(attributes={})
|
100
|
-
attributes.each { |field, value| send("#{field}=", value) if self.class.is_valid?(field) }
|
101
|
-
without_request_error? do
|
102
|
-
self.class.request(update_action, update_params, :put, update_prefix)
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
def ==(another)
|
107
|
-
unless self.class == another.class
|
108
|
-
return false
|
109
|
-
end
|
110
|
-
|
111
|
-
self.variable_names.each do |name|
|
112
|
-
next if name == "created_at" or name == "updated_at" or name == "persisted"
|
113
|
-
unless self.send("#{name}") == another.send("#{name}") then
|
114
|
-
return false
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
return true
|
119
|
-
end
|
120
|
-
|
121
|
-
def self.exists?(id)
|
122
|
-
request(exists_action, id_params(id), :get)['exists']
|
123
|
-
end
|
124
|
-
|
125
|
-
def self.find(id)
|
126
|
-
response = request(find_action, id_params(id), :get)
|
127
|
-
new(response[entity_name], true)
|
128
|
-
end
|
129
|
-
|
130
|
-
def destroy
|
131
|
-
without_request_error? do
|
132
|
-
response = self.class.request(destroy_action, destroy_params, :delete, destroy_prefix)
|
133
|
-
@persisted = false
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
def self.create_objects_array_from_hash (response)
|
138
|
-
create_array_from_hash(response[entity_name.pluralize]).map { |hash| new(hash, true) }
|
139
|
-
end
|
140
|
-
|
141
|
-
def self.create_array_from_hash (response)
|
142
|
-
response = [] if response.nil?
|
143
|
-
response = [response] if response.is_a?(Hash)
|
144
|
-
response
|
145
|
-
end
|
146
|
-
|
147
|
-
alias_method :persisted?, :persisted
|
148
|
-
|
149
|
-
protected
|
150
|
-
|
151
|
-
def instance_variable_names
|
152
|
-
instance_variables.map { |var| var.to_s }
|
153
|
-
end
|
154
|
-
|
155
|
-
def fields
|
156
|
-
instance_variable_names.each.collect { |variable| variable.to_s.sub(/@/, '') }
|
157
|
-
end
|
158
|
-
|
159
|
-
def variable_names
|
160
|
-
instance_variable_names.each.collect { |variable| variable.to_s.sub(/@/, '') }
|
161
|
-
end
|
162
|
-
|
163
|
-
def self.address
|
164
|
-
raise NotImplementedError
|
165
|
-
end
|
166
|
-
|
167
|
-
# TODO: probably the connection could be a class static variable.
|
168
|
-
def self.client
|
169
|
-
Faraday.new(:url => KalibroClient.config[address]) do |conn|
|
170
|
-
conn.request :json
|
171
|
-
conn.response :json, :content_type => /\bjson$/
|
172
|
-
conn.adapter Faraday.default_adapter # make requests with Net::HTTP
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
def self.is_valid?(field)
|
177
|
-
field.to_s[0] != '@' and field != :attributes! and (field =~ /attributes!/).nil? and (field.to_s =~ /xsi/).nil? and (field.to_s =~ /errors/).nil?
|
178
|
-
end
|
179
|
-
|
180
|
-
# TODO rename to instance_entity_name
|
181
|
-
def instance_class_name
|
182
|
-
self.class.entity_name
|
183
|
-
end
|
184
|
-
|
185
|
-
include RequestMethods
|
186
|
-
extend RequestMethods::ClassMethods
|
187
|
-
|
188
|
-
def add_error(exception)
|
189
|
-
@kalibro_errors << exception
|
190
|
-
end
|
191
|
-
|
192
|
-
def self.endpoint
|
193
|
-
entity_name.pluralize
|
194
|
-
end
|
195
|
-
|
196
|
-
def self.entity_name
|
197
|
-
# This loop is a generic way to make this work even when the children class has a different name
|
198
|
-
entity_class = self
|
199
|
-
until entity_class.name.include?("KalibroClient::Entities::") do
|
200
|
-
entity_class = entity_class.superclass
|
201
|
-
end
|
202
|
-
|
203
|
-
return entity_class.name.split("::").last.underscore.downcase
|
204
|
-
end
|
205
|
-
|
206
|
-
def without_request_error?(&block)
|
207
|
-
begin
|
208
|
-
block.call
|
209
|
-
true
|
210
|
-
rescue KalibroClient::Errors::RecordNotFound => error
|
211
|
-
raise error
|
212
|
-
rescue KalibroClient::Errors::RequestError => error
|
213
|
-
raise error if error.response.status.between?(500, 599)
|
214
|
-
|
215
|
-
response_errors = error.response.body['errors']
|
216
|
-
if response_errors.is_a?(Array)
|
217
|
-
response_errors.each { |error_msg| add_error(error_msg) }
|
218
|
-
elsif !response_errors.nil?
|
219
|
-
add_error response_errors
|
220
|
-
else
|
221
|
-
add_error error
|
222
|
-
end
|
223
|
-
|
224
|
-
false
|
225
|
-
end
|
226
|
-
end
|
227
|
-
|
228
|
-
include HashConverters
|
229
34
|
end
|
230
35
|
end
|
231
36
|
end
|
@@ -1,13 +1,13 @@
|
|
1
|
-
require '
|
1
|
+
require 'likeno/helpers/date_attributes'
|
2
2
|
|
3
3
|
module KalibroClient
|
4
4
|
module Entities
|
5
5
|
module Configurations
|
6
6
|
class Base < KalibroClient::Entities::Base
|
7
|
-
include DateAttributes
|
7
|
+
include Likeno::DateAttributes
|
8
8
|
|
9
9
|
def self.address
|
10
|
-
:configurations_address
|
10
|
+
Likeno.config[:configurations_address]
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -24,10 +24,6 @@ module KalibroClient
|
|
24
24
|
@id = value.to_i
|
25
25
|
end
|
26
26
|
|
27
|
-
def self.all
|
28
|
-
create_objects_array_from_hash(request('', {}, :get))
|
29
|
-
end
|
30
|
-
|
31
27
|
def metric_configurations
|
32
28
|
KalibroClient::Entities::Configurations::MetricConfiguration.create_objects_array_from_hash(self.class.request(':id/metric_configurations', {id: id}, :get))
|
33
29
|
end
|
@@ -56,7 +56,7 @@ module KalibroClient
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def update_attributes(attributes={})
|
59
|
-
attributes.each { |field, value| send("#{field}=", value) if self.class.
|
59
|
+
attributes.each { |field, value| send("#{field}=", value) if self.class.valid?(field) }
|
60
60
|
save
|
61
61
|
end
|
62
62
|
|
@@ -68,24 +68,6 @@ module KalibroClient
|
|
68
68
|
create_objects_array_from_hash(request('', {}, :get, "kalibro_configurations/#{configuration_id}"))
|
69
69
|
end
|
70
70
|
|
71
|
-
def self.find(id)
|
72
|
-
begin
|
73
|
-
metric_configuration = request(':id', {id: id}, :get)
|
74
|
-
return new(metric_configuration['metric_configuration'], true)
|
75
|
-
#FIXME Temporary until KalibroProcessor returns proper http statuses
|
76
|
-
rescue KalibroClient::Errors::RequestError
|
77
|
-
raise KalibroClient::Errors::RecordNotFound
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
def self.exists?(id)
|
82
|
-
begin
|
83
|
-
return true unless find(id).nil?
|
84
|
-
rescue KalibroClient::Errors::RecordNotFound
|
85
|
-
return false
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
71
|
def kalibro_ranges
|
90
72
|
KalibroClient::Entities::Configurations::KalibroRange.create_objects_array_from_hash(self.class.request(':id/kalibro_ranges', {id: id}, :get))
|
91
73
|
end
|