netbox-client-ruby 0.0.1 → 0.0.2

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.
@@ -2,41 +2,35 @@ require 'netbox_client_ruby/entity'
2
2
  require 'netbox_client_ruby/api/dcim/interface'
3
3
  require 'netbox_client_ruby/api/ipam/vrf'
4
4
  require 'netbox_client_ruby/api/tenancy/tenant'
5
+ require 'ipaddress'
5
6
 
6
7
  module NetboxClientRuby
7
8
  class IpAddress
8
9
  include NetboxClientRuby::Entity
9
10
 
11
+ STATUS_VALUES = {
12
+ active: 1,
13
+ reserved: 2,
14
+ deprecated: 3,
15
+ dhcp: 5
16
+ }.freeze
17
+
10
18
  id id: :id
11
19
  deletable true
12
20
  path 'ipam/ip-addresses/:id.json'
13
21
  creation_path 'ipam/ip-addresses/'
14
22
  object_fields(
15
- vrf: proc { |raw_data| NetboxClientRuby::Vrf.new raw_data['id'] },
16
- tenant: proc { |raw_data| NetboxClientRuby::Tenant.new raw_data['id'] },
17
- status: proc { |raw_data| NetboxClientRuby::IpAddressStatus.new raw_data['value'] },
18
- interface: proc { |raw_data| NetboxClientRuby::Interface.new raw_data['id'] }
23
+ vrf: proc { |raw_data| Vrf.new raw_data['id'] },
24
+ tenant: proc { |raw_data| Tenant.new raw_data['id'] },
25
+ status: proc { |raw_data| STATUS_VALUES.key(raw_data['value']) || raw_data['value'] },
26
+ interface: proc { |raw_data| Interface.new raw_data['id'] },
27
+ address: proc { |raw_ip| IPAddress.parse(raw_ip) }
19
28
  )
20
29
  readonly_fields :display_name
21
- end
22
-
23
- class IpAddressStatus
24
- attr_reader :value, :label
25
30
 
26
- def initialize(status_value)
27
- @value = status_value
28
- @label = case status_value
29
- when 1 then
30
- 'Active'.freeze
31
- when 2 then
32
- 'Reserved'.freeze
33
- when 3 then
34
- 'Deprecated'.freeze
35
- when 5 then
36
- 'DHCP'.freeze
37
- else
38
- 'UNDEFINED'.freeze
39
- end
31
+ def status=(value)
32
+ status_code_lookup = STATUS_VALUES.fetch(value, value)
33
+ method_missing(:status=, status_code_lookup)
40
34
  end
41
35
  end
42
36
  end
@@ -152,15 +152,19 @@ module NetboxClientRuby
152
152
  self
153
153
  end
154
154
 
155
- def update(updated_fields)
156
- checked_updated_fields = {}
157
- updated_fields.each do |key, values|
158
- s_key = key.to_s
159
-
160
- checked_updated_fields[s_key] = values unless readonly_fields.include? s_key
155
+ def update(new_values)
156
+ new_values.each do |attribute, values|
157
+ s_attribute = attribute.to_s
158
+ next if readonly_fields.include? s_attribute
159
+
160
+ sym_attr_writer = "#{attribute}=".to_sym
161
+ if methods.include?(sym_attr_writer)
162
+ public_send(sym_attr_writer, values)
163
+ else
164
+ dirty_data[s_attribute] = values
165
+ end
161
166
  end
162
167
 
163
- dirty_data.merge! checked_updated_fields
164
168
  patch
165
169
  end
166
170
 
@@ -193,10 +197,9 @@ module NetboxClientRuby
193
197
  end
194
198
  end
195
199
 
196
- return objectify(name, object_fields[name]) if object_fields.keys.include? name
197
-
198
- return dirty_data[name] if dirty_data.keys.include? name
199
- return data[name] if data.is_a?(Hash) && data.keys.include?(name)
200
+ return dirty_data[name] if dirty_data.key? name
201
+ return objectify(data[name], object_fields[name]) if object_fields.key? name
202
+ return data[name] if data.is_a?(Hash) && data.key?(name)
200
203
 
201
204
  super
202
205
  end
@@ -207,10 +210,9 @@ module NetboxClientRuby
207
210
  return false if name.end_with?('=') && readonly_fields.include?(name[0..-2])
208
211
  return false if name.end_with?('=') && instance_variables.include?(name[0..-2])
209
212
 
210
- return true if object_fields.keys.include? name
211
-
212
- return true if dirty_data.keys.include? name
213
- return true if data.is_a?(Hash) && data.keys.include?(name)
213
+ return true if dirty_data.key? name
214
+ return true if object_fields.key? name
215
+ return true if data.is_a?(Hash) && data.key?(name)
214
216
 
215
217
  super
216
218
  end
@@ -290,14 +292,12 @@ module NetboxClientRuby
290
292
  end
291
293
  end
292
294
 
293
- def objectify(name, klass_or_proc = nil)
294
- raw_data = data[name]
295
-
295
+ def objectify(raw_data, klass_or_proc = nil)
296
296
  return nil if raw_data.nil?
297
297
 
298
298
  return data_to_obj(raw_data, klass_or_proc) unless raw_data.is_a? Array
299
299
 
300
- data[name].map do |raw_data_entry|
300
+ raw_data.map do |raw_data_entry|
301
301
  data_to_obj(raw_data_entry, klass_or_proc)
302
302
  end
303
303
  end
@@ -33,6 +33,7 @@ Gem::Specification.new do |spec|
33
33
  spec.add_runtime_dependency 'faraday', '~> 0.12'
34
34
  spec.add_runtime_dependency 'faraday_middleware', '~> 0.11.0'
35
35
  spec.add_runtime_dependency 'faraday-detailed_logger', '~> 2.1'
36
+ spec.add_runtime_dependency 'ipaddress', '>= 0.8.3'
36
37
 
37
38
  spec.add_development_dependency 'bundler', '~> 1.14'
38
39
  spec.add_development_dependency 'rake', '~> 10.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: netbox-client-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Mäder
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-08 00:00:00.000000000 Z
11
+ date: 2017-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-configurable
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '2.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: ipaddress
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 0.8.3
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 0.8.3
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: bundler
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -174,6 +188,7 @@ files:
174
188
  - docker-compose.yml
175
189
  - docker/start.sh
176
190
  - docker/start.test.sh
191
+ - dump.sql
177
192
  - lib/netbox-client-ruby.rb
178
193
  - lib/netbox_client_ruby.rb
179
194
  - lib/netbox_client_ruby/api.rb
@@ -248,7 +263,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
248
263
  version: '0'
249
264
  requirements: []
250
265
  rubyforge_project:
251
- rubygems_version: 2.5.2
266
+ rubygems_version: 2.6.11
252
267
  signing_key:
253
268
  specification_version: 4
254
269
  summary: A read/write client for Netbox v2.