ruby-miradore 2.1.2 → 2.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/Gemfile.lock +24 -8
- data/fixtures/vcr_cassettes/Change_User_Email_Address.yml +2 -2
- data/fixtures/vcr_cassettes/Change_User_Email_Address_Error.yml +2 -2
- data/fixtures/vcr_cassettes/Change_User_Email_Address_Without_v1.yml +2 -2
- data/fixtures/vcr_cassettes/Get_Device_Location.yml +3 -3
- data/fixtures/vcr_cassettes/Get__Mobile_Device.yml +6 -6
- data/fixtures/vcr_cassettes/InvDevice.yml +4 -4
- data/fixtures/vcr_cassettes/LockDevice_all.yml +2 -2
- data/fixtures/vcr_cassettes/all_criteria.yml +56 -24
- data/fixtures/vcr_cassettes/auth_not_found.yml +2 -2
- data/fixtures/vcr_cassettes/error_by_serial_number.yml +2 -2
- data/fixtures/vcr_cassettes/full_list_and_details.yml +5 -5
- data/fixtures/vcr_cassettes/get_location.yml +2 -2
- data/fixtures/vcr_cassettes/get_user_from_miradore.yml +2 -2
- data/fixtures/vcr_cassettes/search_by_serial_number.yml +7 -7
- data/fixtures/vcr_cassettes/user_alredy_exist_in_miradore.yml +159 -0
- data/lib/ruby/miradore/version.rb +1 -1
- data/lib/ruby/miradore.rb +38 -34
- data/ruby-miradore.gemspec +3 -1
- metadata +32 -8
- data/ruby-miradore-0.1.2.gem +0 -0
- data/ruby-miradore-0.1.3.gem +0 -0
- data/ruby-miradore-1.1.0.gem +0 -0
- data/ruby-miradore-1.1.1.gem +0 -0
- data/ruby-miradore-1.2.2.gem +0 -0
@@ -0,0 +1,159 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://rzilient.online.miradore.com/API/User?auth=&filters=&select=*,ID
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: |
|
9
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
10
|
+
<Content>
|
11
|
+
<Items>
|
12
|
+
<User>
|
13
|
+
<Email>jim.straw@trestacom.com</Email>
|
14
|
+
<Firstname>Jim</Firstname>
|
15
|
+
<Lastname>Straw</Lastname>
|
16
|
+
<PhoneNumber>123456789</PhoneNumber>
|
17
|
+
</User>
|
18
|
+
</Items>
|
19
|
+
</Content>
|
20
|
+
headers:
|
21
|
+
Accept-Encoding:
|
22
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
23
|
+
Accept:
|
24
|
+
- "*/*"
|
25
|
+
User-Agent:
|
26
|
+
- Ruby
|
27
|
+
response:
|
28
|
+
status:
|
29
|
+
code: 400
|
30
|
+
message: Bad Request
|
31
|
+
headers:
|
32
|
+
Cache-Control:
|
33
|
+
- no-cache
|
34
|
+
Pragma:
|
35
|
+
- no-cache
|
36
|
+
Content-Length:
|
37
|
+
- '179'
|
38
|
+
Content-Type:
|
39
|
+
- text/xml; charset=utf-8
|
40
|
+
Expires:
|
41
|
+
- "-1"
|
42
|
+
Server:
|
43
|
+
- Microsoft-IIS/10.0
|
44
|
+
X-Aspnet-Version:
|
45
|
+
- 4.0.30319
|
46
|
+
X-Frame-Options:
|
47
|
+
- SAMEORIGIN
|
48
|
+
Date:
|
49
|
+
- Tue, 02 Nov 2021 11:37:07 GMT
|
50
|
+
body:
|
51
|
+
encoding: UTF-8
|
52
|
+
string: "<Content><Error><Description>Failed to validate imported 'User':
|
53
|
+
Email 'jim.straw@trestacom.com' is already in use.</Description><Code>400</Code></Error></Content>"
|
54
|
+
recorded_at: Tue, 02 Nov 2021 11:37:08 GMT
|
55
|
+
- request:
|
56
|
+
method: post
|
57
|
+
uri: https://rzilient.online.miradore.com/API/User?auth=&filters=&select=*,ID
|
58
|
+
body:
|
59
|
+
encoding: UTF-8
|
60
|
+
string: |
|
61
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
62
|
+
<Content>
|
63
|
+
<Items>
|
64
|
+
<User>
|
65
|
+
<Email>jim.straw@trestacom.com</Email>
|
66
|
+
<Firstname>Jim</Firstname>
|
67
|
+
<Lastname>Straw</Lastname>
|
68
|
+
<PhoneNumber>123456789</PhoneNumber>
|
69
|
+
</User>
|
70
|
+
</Items>
|
71
|
+
</Content>
|
72
|
+
headers:
|
73
|
+
Accept-Encoding:
|
74
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
75
|
+
Accept:
|
76
|
+
- "*/*"
|
77
|
+
User-Agent:
|
78
|
+
- Ruby
|
79
|
+
response:
|
80
|
+
status:
|
81
|
+
code: 400
|
82
|
+
message: Bad Request
|
83
|
+
headers:
|
84
|
+
Cache-Control:
|
85
|
+
- no-cache
|
86
|
+
Pragma:
|
87
|
+
- no-cache
|
88
|
+
Content-Length:
|
89
|
+
- '179'
|
90
|
+
Content-Type:
|
91
|
+
- text/xml; charset=utf-8
|
92
|
+
Expires:
|
93
|
+
- "-1"
|
94
|
+
Server:
|
95
|
+
- Microsoft-IIS/10.0
|
96
|
+
X-Aspnet-Version:
|
97
|
+
- 4.0.30319
|
98
|
+
X-Frame-Options:
|
99
|
+
- SAMEORIGIN
|
100
|
+
Date:
|
101
|
+
- Tue, 02 Nov 2021 11:37:12 GMT
|
102
|
+
body:
|
103
|
+
encoding: UTF-8
|
104
|
+
string: "<Content><Error><Description>Failed to validate imported 'User':
|
105
|
+
Email 'jim.straw@trestacom.com' is already in use.</Description><Code>400</Code></Error></Content>"
|
106
|
+
recorded_at: Tue, 02 Nov 2021 11:37:12 GMT
|
107
|
+
- request:
|
108
|
+
method: post
|
109
|
+
uri: https://rzilient.online.miradore.com/API/User?auth=&filters=&select=*,ID
|
110
|
+
body:
|
111
|
+
encoding: UTF-8
|
112
|
+
string: |
|
113
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
114
|
+
<Content>
|
115
|
+
<Items>
|
116
|
+
<User>
|
117
|
+
<Email>jim.straw@trestacom.com</Email>
|
118
|
+
<Firstname>Jim</Firstname>
|
119
|
+
<Lastname>Straw</Lastname>
|
120
|
+
<PhoneNumber>123456789</PhoneNumber>
|
121
|
+
</User>
|
122
|
+
</Items>
|
123
|
+
</Content>
|
124
|
+
headers:
|
125
|
+
Accept-Encoding:
|
126
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
127
|
+
Accept:
|
128
|
+
- "*/*"
|
129
|
+
User-Agent:
|
130
|
+
- Ruby
|
131
|
+
response:
|
132
|
+
status:
|
133
|
+
code: 400
|
134
|
+
message: Bad Request
|
135
|
+
headers:
|
136
|
+
Cache-Control:
|
137
|
+
- no-cache
|
138
|
+
Pragma:
|
139
|
+
- no-cache
|
140
|
+
Content-Length:
|
141
|
+
- '179'
|
142
|
+
Content-Type:
|
143
|
+
- text/xml; charset=utf-8
|
144
|
+
Expires:
|
145
|
+
- "-1"
|
146
|
+
Server:
|
147
|
+
- Microsoft-IIS/10.0
|
148
|
+
X-Aspnet-Version:
|
149
|
+
- 4.0.30319
|
150
|
+
X-Frame-Options:
|
151
|
+
- SAMEORIGIN
|
152
|
+
Date:
|
153
|
+
- Tue, 02 Nov 2021 11:37:54 GMT
|
154
|
+
body:
|
155
|
+
encoding: UTF-8
|
156
|
+
string: "<Content><Error><Description>Failed to validate imported 'User':
|
157
|
+
Email 'jim.straw@trestacom.com' is already in use.</Description><Code>400</Code></Error></Content>"
|
158
|
+
recorded_at: Tue, 02 Nov 2021 11:37:54 GMT
|
159
|
+
recorded_with: VCR 6.0.0
|
data/lib/ruby/miradore.rb
CHANGED
@@ -4,6 +4,7 @@ require_relative "miradore/version"
|
|
4
4
|
require "httparty"
|
5
5
|
require "json"
|
6
6
|
require "crack/xml"
|
7
|
+
require "active_support/core_ext/hash/conversions"
|
7
8
|
require "finest/builder"
|
8
9
|
|
9
10
|
module Ruby
|
@@ -32,54 +33,58 @@ module Ruby
|
|
32
33
|
remove_instance_variable(:@auth) if @auth.nil?
|
33
34
|
end
|
34
35
|
|
35
|
-
#
|
36
|
-
# This call will perform all GET calls regardless the API version that it's calling.
|
37
|
-
# The version would be determined based on the superclass name.
|
38
|
-
# If the superclass is Request the GET will call simple_v1 which will require the item which is class name.
|
39
|
-
# otherwise will call to retrieve devices based on filters.
|
40
|
-
#
|
41
|
-
def self.all(**args)
|
42
|
-
response = JSON.parse(
|
43
|
-
Crack::XML.parse(
|
44
|
-
get(
|
45
|
-
Miradore.url[version] % args.merge(
|
46
|
-
item: object_name,
|
47
|
-
attribute: args.fetch(:attribute, "*"),
|
48
|
-
auth: args.fetch(:auth, nil),
|
49
|
-
filter: args.fetch(:filter, nil)
|
50
|
-
)
|
51
|
-
).body
|
52
|
-
).to_json,
|
53
|
-
quirks_mode: true
|
54
|
-
).dig("Content", "Items")
|
55
|
-
transform(response, args)
|
56
|
-
rescue StandardError => e
|
57
|
-
MiradoreError.new({ error: e&.message || "Error connecting to manager service provider", status: :not_found })
|
58
|
-
end
|
59
|
-
|
60
36
|
class << self
|
37
|
+
#
|
38
|
+
# This call will perform all GET calls regardless the API version that it's calling.
|
39
|
+
# The version would be determined based on the superclass name.
|
40
|
+
# If the superclass is Request the GET will call simple_v1 which will require the item which is class name.
|
41
|
+
# otherwise will call to retrieve devices based on filters.
|
42
|
+
#
|
43
|
+
def all(**args)
|
44
|
+
transform(
|
45
|
+
Crack::XML.parse(
|
46
|
+
http_method(args).body
|
47
|
+
).dig("Content", "Items"), args
|
48
|
+
)
|
49
|
+
end
|
50
|
+
|
51
|
+
def add(**args)
|
52
|
+
transform(
|
53
|
+
Crack::XML.parse(
|
54
|
+
http_method(args.merge(method: :post, attribute: "ID")).body
|
55
|
+
)
|
56
|
+
)
|
57
|
+
end
|
58
|
+
|
59
|
+
protected
|
60
|
+
|
61
|
+
def http_method(**args)
|
62
|
+
url = Miradore.url[version] % args.merge(
|
63
|
+
item: to_s.demodulize,
|
64
|
+
attribute: args.fetch(:attribute, "*"),
|
65
|
+
auth: args.fetch(:auth, nil),
|
66
|
+
filter: args.fetch(:filter, nil)
|
67
|
+
)
|
68
|
+
method(args.fetch(:method, :get)).call(url, body: args.fetch(:body, nil)&.to_xml(root: "Content"))
|
69
|
+
end
|
70
|
+
|
61
71
|
private
|
62
72
|
|
63
73
|
def transform(res, args = {})
|
64
|
-
instance_name = "Ruby::Miradore::#{res.keys.first.capitalize}"
|
65
74
|
if res.values.first.is_a?(Array)
|
66
75
|
return res.values.first.map! do |e|
|
67
|
-
|
76
|
+
const_get(to_s).new(args.merge(e.transform_keys(&:downcase)))
|
68
77
|
end
|
69
78
|
end
|
70
|
-
|
71
|
-
Object.const_get(instance_name).new(args.merge(res.values.first&.transform_keys(&:downcase)))
|
79
|
+
const_get(to_s).new(args.merge(res.values.first&.transform_keys(&:downcase)))
|
72
80
|
rescue StandardError
|
73
|
-
|
81
|
+
{ error: "#{to_s.demodulize}(s) not found", status: :not_found }
|
74
82
|
end
|
75
83
|
|
76
84
|
def version
|
77
85
|
superclass == Object ? :request_v1 : :item_v1
|
78
86
|
end
|
79
87
|
|
80
|
-
def object_name
|
81
|
-
to_s.split("::").last
|
82
|
-
end
|
83
88
|
end
|
84
89
|
|
85
90
|
end
|
@@ -154,6 +159,5 @@ module Ruby
|
|
154
159
|
|
155
160
|
class Organization < Request; end
|
156
161
|
|
157
|
-
class MiradoreError < Request; end
|
158
162
|
end
|
159
163
|
end
|
data/ruby-miradore.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.description = "Miradore MSP Ruby Gem"
|
13
13
|
spec.homepage = "https://github.com/eddygarcas/ruby-miradore"
|
14
14
|
spec.license = "MIT"
|
15
|
-
spec.required_ruby_version = Gem::Requirement.new(">= 2.7.
|
15
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.7.4")
|
16
16
|
|
17
17
|
spec.metadata["allowed_push_host"] = "https://rubygems.org/"
|
18
18
|
|
@@ -31,6 +31,8 @@ Gem::Specification.new do |spec|
|
|
31
31
|
|
32
32
|
# Uncomment to register a new dependency of your gem
|
33
33
|
# spec.add_dependency "example-gem", "~> 1.0"
|
34
|
+
spec.add_dependency "activesupport", "~> 6.1"
|
35
|
+
spec.add_dependency 'builder', '~> 2.0'
|
34
36
|
spec.add_dependency "crack", "~> 0.4"
|
35
37
|
spec.add_dependency "finest-builder", "~> 1.0"
|
36
38
|
spec.add_dependency "httparty", "~> 0.18"
|
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-miradore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eduard Garcia Castelló
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '6.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '6.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: builder
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.0'
|
13
41
|
- !ruby/object:Gem::Dependency
|
14
42
|
name: crack
|
15
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,13 +157,9 @@ files:
|
|
129
157
|
- fixtures/vcr_cassettes/get_location.yml
|
130
158
|
- fixtures/vcr_cassettes/get_user_from_miradore.yml
|
131
159
|
- fixtures/vcr_cassettes/search_by_serial_number.yml
|
160
|
+
- fixtures/vcr_cassettes/user_alredy_exist_in_miradore.yml
|
132
161
|
- lib/ruby/miradore.rb
|
133
162
|
- lib/ruby/miradore/version.rb
|
134
|
-
- ruby-miradore-0.1.2.gem
|
135
|
-
- ruby-miradore-0.1.3.gem
|
136
|
-
- ruby-miradore-1.1.0.gem
|
137
|
-
- ruby-miradore-1.1.1.gem
|
138
|
-
- ruby-miradore-1.2.2.gem
|
139
163
|
- ruby-miradore.gemspec
|
140
164
|
homepage: https://github.com/eddygarcas/ruby-miradore
|
141
165
|
licenses:
|
@@ -153,7 +177,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
153
177
|
requirements:
|
154
178
|
- - ">="
|
155
179
|
- !ruby/object:Gem::Version
|
156
|
-
version: 2.7.
|
180
|
+
version: 2.7.4
|
157
181
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
158
182
|
requirements:
|
159
183
|
- - ">="
|
data/ruby-miradore-0.1.2.gem
DELETED
Binary file
|
data/ruby-miradore-0.1.3.gem
DELETED
Binary file
|
data/ruby-miradore-1.1.0.gem
DELETED
Binary file
|
data/ruby-miradore-1.1.1.gem
DELETED
Binary file
|
data/ruby-miradore-1.2.2.gem
DELETED
Binary file
|