lm_rest 1.0.6 → 1.0.7

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.
@@ -1,12 +1,20 @@
1
+ require 'uri'
2
+
1
3
  module LMRest
2
4
  module RequestParams
3
5
  def self.parameterize(params_hash)
4
- unless params_hash.empty?
5
- params_hash.keys.each.with_index.reduce('?') do |string, (key, index)|
6
- index > 0 ? string << '&' : ''
7
- string << "#{key}=#{params_hash.fetch(key)}"
8
- end
6
+ return '' if params_hash.nil? || params_hash.empty?
7
+
8
+ params = params_hash.each_with_object([]) do |(key, value), pairs|
9
+ next if value.nil?
10
+
11
+ values = value.is_a?(Array) ? value : [value]
12
+ values.each { |item| pairs << [key.to_s, item] unless item.nil? }
9
13
  end
14
+
15
+ return '' if params.empty?
16
+
17
+ "?#{URI.encode_www_form(params)}"
10
18
  end
11
19
  end
12
20
  end
@@ -1,46 +1,97 @@
1
1
  module LMRest
2
2
  class Resource
3
+ attr_reader :attributes
3
4
 
4
5
  def initialize(properties)
6
+ @attributes = {}
7
+
5
8
  properties.each do |key, value|
6
- instance_variable_set(:"@#{key}", value)
7
- define_singleton_method(key.intern) { instance_variable_get("@#{key}") }
8
- define_singleton_method("#{key}=".intern) do |new_value|
9
- instance_variable_set("@#{key}", new_value)
10
- end
9
+ @attributes[key.to_s] = value
11
10
  end
12
11
  end
13
12
 
13
+ def [](key)
14
+ @attributes[key.to_s]
15
+ end
16
+
17
+ def []=(key, value)
18
+ @attributes[key.to_s] = value
19
+ end
20
+
21
+ def key?(key)
22
+ @attributes.key?(key.to_s)
23
+ end
24
+
14
25
  def to_h
15
- instance_variables.map do |var|
16
- [var[1..-1].to_s, instance_variable_get(var)]
17
- end.to_h
26
+ deep_copy(@attributes)
27
+ end
28
+
29
+ def method_missing(name, *args)
30
+ attribute_name = name.to_s
31
+
32
+ if attribute_name.end_with?('=')
33
+ raise ArgumentError, "wrong number of arguments (#{args.count} for 1)" unless args.count == 1
34
+
35
+ @attributes[attribute_name.delete_suffix('=')] = args.first
36
+ elsif args.empty? && @attributes.key?(attribute_name)
37
+ @attributes[attribute_name]
38
+ else
39
+ super
40
+ end
41
+ end
42
+
43
+ def respond_to_missing?(name, include_private = false)
44
+ attribute_name = name.to_s
45
+
46
+ attribute_name.end_with?('=') || @attributes.key?(attribute_name) || super
18
47
  end
19
48
 
20
49
  class << self
21
50
 
22
51
  def parse(body)
23
- begin
24
- if body.key? 'items'
25
- parse_collection(body['items'])
52
+ case body
53
+ when nil
54
+ nil
55
+ when Array
56
+ parse_collection(body)
57
+ when Hash
58
+ if body.key?('items')
59
+ parse_collection(body['items'] || [])
26
60
  else
27
61
  parse_object(body)
28
62
  end
29
-
30
- rescue => e
31
- puts e
32
- puts "Response body: " + body
63
+ when String
64
+ body
65
+ else
66
+ body
33
67
  end
34
68
  end
35
69
 
36
70
  def parse_collection(items)
37
71
  items.map do |item|
38
- new(item)
72
+ item.is_a?(Hash) ? new(item) : item
39
73
  end
40
74
  end
41
75
 
42
76
  def parse_object(item)
43
- new(item)
77
+ item.is_a?(Hash) ? new(item) : item
78
+ end
79
+ end
80
+
81
+ private
82
+
83
+ def deep_copy(value)
84
+ case value
85
+ when LMRest::Resource
86
+ value.to_h
87
+ when Hash
88
+ value.each_with_object({}) do |(key, item), copied|
89
+ copied[key] = deep_copy(item)
90
+ end
91
+ when Array
92
+ value.map { |item| deep_copy(item) }
93
+ else
94
+ value
44
95
  end
45
96
  end
46
97
  end
@@ -1,3 +1,3 @@
1
1
  module LMRest
2
- VERSION = '1.0.6'
2
+ VERSION = '1.0.7'
3
3
  end
data/lm_rest.gemspec CHANGED
@@ -31,4 +31,5 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency 'minitest'
32
32
  spec.add_dependency 'rest-client'
33
33
  spec.add_dependency 'json', '> 2.5.1'
34
+ spec.add_dependency 'base64'
34
35
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lm_rest
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Rodrigues
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-12-04 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bundler
@@ -80,6 +79,20 @@ dependencies:
80
79
  - - ">"
81
80
  - !ruby/object:Gem::Version
82
81
  version: 2.5.1
82
+ - !ruby/object:Gem::Dependency
83
+ name: base64
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
83
96
  description: Interact programmatically with your LogicMonitor account via the REST
84
97
  API.
85
98
  email:
@@ -89,6 +102,7 @@ executables:
89
102
  extensions: []
90
103
  extra_rdoc_files: []
91
104
  files:
105
+ - ".codex"
92
106
  - ".gitignore"
93
107
  - ".travis.yml"
94
108
  - Gemfile
@@ -98,6 +112,7 @@ files:
98
112
  - api.json
99
113
  - bin/console
100
114
  - bin/ds_checker.rb
115
+ - bin/graphgrab.rb
101
116
  - bin/setup
102
117
  - bin/system_category_cleaner.rb
103
118
  - lib/lm_rest.rb
@@ -110,7 +125,6 @@ homepage: https://github.com/mikerodrigues/lm_rest
110
125
  licenses: []
111
126
  metadata:
112
127
  allowed_push_host: https://rubygems.org
113
- post_install_message:
114
128
  rdoc_options: []
115
129
  require_paths:
116
130
  - lib
@@ -125,8 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
139
  - !ruby/object:Gem::Version
126
140
  version: '0'
127
141
  requirements: []
128
- rubygems_version: 3.4.19
129
- signing_key:
142
+ rubygems_version: 3.6.9
130
143
  specification_version: 4
131
144
  summary: API Wrapper for LogicMonitor Rest API v2.
132
145
  test_files: []