ip21 1.0.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/ip21.gemspec +5 -4
  3. data/lib/ip21.rb +74 -38
  4. metadata +22 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9dd35382e2131fbd28394514ad75654306db5c1b82ab25020582e66cc68c70aa
4
- data.tar.gz: 50a792351ef0bd99c769cd4375234a0ca308d2c3c0f137faeca3ee1ddc090471
3
+ metadata.gz: 3f2db67d22993c9740ac8eca2abc8296ec6f36cd149b8905fc40d319b66d870c
4
+ data.tar.gz: 6151fcb02cabf463af378e1e52361ec13447e46318eeb890d697b9ce65e04b8b
5
5
  SHA512:
6
- metadata.gz: 4c551cb26ae0f39eea73adda7585a4f886c6db379e815e8de8565e50450f76c2c84b59310c9101ad1505baf3d7d45faef584be583c0a0aba82b9187806964614
7
- data.tar.gz: cdc1dc78116e7ce6b5f4ac2915ae64c9be5e3bbdc7130065ccdff4623d253c5be9462e7683c28f9b28dfb348f43d8b35fa3251048d0555d8822ecb8759c73eb1
6
+ metadata.gz: cb98cc8f0a206c3df5c07b137033db87c8aa54245d074a18e6bf3185f9a21a4691e6c581e8f452198905796c603a5175a57ade0546b2d67292fa6c95730a0e5d
7
+ data.tar.gz: 97da1c4e0f49802501936c8d5a93351a9f3430d0c040cb06f099ef863bfaf09df85dc50a97639b9d76d08b256815f93240ad98b1a9d795733ac9ea235ab0e49a
data/ip21.gemspec CHANGED
@@ -4,16 +4,17 @@ Gem::Specification.new do |s|
4
4
  s.name = 'ip21'
5
5
  s.summary = 'Aspentech IP21 Adapter for Ruby'
6
6
  s.description = 'Aspentech IP21 Adapter for executing queries using SQLPlus' \
7
- 'WebService or REST API'
8
- s.version = '1.0.0'
7
+ ' REST API'
8
+ s.version = '1.2.0'
9
9
  s.date = Time.now.strftime('%Y-%m-%d')
10
10
  s.author = 'Rhuan Barreto'
11
11
  s.email = 'rhuan@rhuan.com.br'
12
12
  s.homepage = 'http://rubygems.org/gems/ip21'
13
13
  s.platform = Gem::Platform::RUBY
14
14
  s.license = 'MIT'
15
- s.add_dependency 'activesupport', '~>6.0.1'
16
- s.add_dependency 'rubyntlm', '~>0.6'
15
+ s.add_dependency 'activesupport', '~> 6.1.0'
16
+ s.add_dependency 'ruby-ntlm', '~>0.0.4'
17
+ s.add_dependency 'httpi', '~>2.4'
17
18
  s.files = Dir.glob('{docs,bin,lib,spec,templates,benchmarks}/**/*') +
18
19
  ['LICENSE', 'README.md', '.yardopts', __FILE__]
19
20
  s.require_path = 'lib'
data/lib/ip21.rb CHANGED
@@ -45,7 +45,7 @@ class IP21
45
45
  @debug = debug
46
46
  end
47
47
 
48
- # Executes a direct query againt the database
48
+ # Executes a direct query against the database
49
49
  #
50
50
  # @param [String] sql The query to be executed
51
51
  # @param [Integer] limit The maximum number of rows that the query will output
@@ -73,30 +73,31 @@ class IP21
73
73
  # - 1: Record as String
74
74
  # @option opts [Integer] retrieval_type The retrieval type of the query.
75
75
  # Possible values are:
76
- # 0 - Actual
77
- # 1 - Interpolated
78
- # 2 - Best Fit
79
- # 3 - Manual
80
- # 10 - Not Good
81
- # 11 - Good
82
- # 12 - Average
83
- # 13 - Maximum
84
- # 14 - Minimum
85
- # 15 - Range
86
- # 16 - Sum
87
- # 17 - Standard Deviation
88
- # 18 - Variance
89
- # 19 - Good Only
90
- # 20 - Suspect Only
91
- # 21 - First
92
- # 22 - Last
93
- # @option opts [Integer] outsiders Whether or not to include outsiders
94
- # 0 - False
95
- # 1 - True
76
+ # - 0 - Actual
77
+ # - 1 - Interpolated
78
+ # - 2 - Best Fit
79
+ # - 3 - Manual
80
+ # - 10 - Not Good
81
+ # - 11 - Good
82
+ # - 12 - Average
83
+ # - 13 - Maximum
84
+ # - 14 - Minimum
85
+ # - 15 - Range
86
+ # - 16 - Sum
87
+ # - 17 - Standard Deviation
88
+ # - 18 - Variance
89
+ # - 19 - Good Only
90
+ # - 20 - Suspect Only
91
+ # - 21 - First
92
+ # - 22 - Last
93
+ # @option opts [Integer] outsiders Whether or not to include the closest
94
+ # values outside the date/time range
95
+ # - 0 - False
96
+ # - 1 - True
96
97
  #
97
98
  # @return [Hash] Response from IP21
98
99
  def history(tag, start_time, end_time, opts = {
99
- limit: 1000, outsiders: 1, history_format: 0, retrieval_type: 0
100
+ limit: 1000, outsiders: 0, history_format: 0, retrieval_type: 0
100
101
  })
101
102
  parse_rest(
102
103
  rest_request(
@@ -112,37 +113,54 @@ class IP21
112
113
 
113
114
  private
114
115
 
116
+ # Execute the request
117
+ #
118
+ # @param [String] type The request type to be passed to rest_address function
119
+ # @param [String] body The request body
115
120
  def rest_request(type, body)
116
- require 'net/http'
117
- require 'ntlm/http'
118
- uri = URI(rest_address(type))
119
- http = Net::HTTP.new(uri.host)
120
- request = Net::HTTP::Post.new(uri)
121
+ require 'httpi'
122
+ HTTPI.log = @debug
123
+ request = HTTPI::Request.new(rest_address(type))
121
124
  request.body = body
122
- request.ntlm_auth(@account, @domain, @password)
123
- response = http.request(request)
124
- debug_info(uri, request.body, response) if @debug
125
+ request.auth.ntlm(@account, @password, @domain)
126
+ response = HTTPI.post(request)
127
+ debug_info(request.url, request.body, response) if @debug
125
128
  response
126
129
  end
127
130
 
131
+ # Generates request debug info
132
+ #
133
+ # @param [String] address The request address
134
+ # @param [String] body The request body
135
+ # @param [String] response The request response
128
136
  def debug_info(address, body, response)
129
137
  puts "Request: #{address}"
130
138
  puts "Body: #{body}"
131
139
  puts "Response: #{response.body}"
132
140
  end
133
141
 
142
+ # Parse the API response displaying errors if needed
143
+ #
144
+ # @param [Object] response The request response
145
+ #
146
+ # @return [Hash] Response or error from the API
134
147
  def parse_rest(response)
135
- if response.code == '200'
148
+ if response.code == 200
136
149
  require 'json'
137
150
  JSON.parse(response.body)
138
151
  else
139
152
  {
140
153
  status: response.code,
141
- message: "Error on IP21: #{response.message}"
154
+ message: "Error on IP21: #{response.body}"
142
155
  }
143
156
  end
144
157
  end
145
158
 
159
+ # Generate the URL for accessing IP21 based on type
160
+ #
161
+ # @param [String] type The type of the request.
162
+ #
163
+ # @return [String] Address to access request
146
164
  def rest_address(type)
147
165
  "http://#{@sqlplus_address}/ProcessData/AtProcessDataREST.dll/#{type}"
148
166
  end
@@ -163,12 +181,30 @@ class IP21
163
181
  }.to_query
164
182
  end
165
183
 
166
- def history_query_body(tag, start_time, end_time, opts)
167
- '<Q f="D" allQuotes="1"><Tag>' + "<N><![CDATA[#{tag}]]></N>" \
168
- "<D><![CDATA[#{@ip21_address}]]></D>" + "<HF>#{opts[:history_format]}</HF>" \
169
- "<St>#{start_time}</St>" + "<Et>#{end_time}</Et>" \
170
- "<RT>#{opts[:retrieval_type]}</RT>" + "<X>#{opts[:limit]}</X>" \
171
- "<O>#{opts[:outsiders]}</O>" + '</Tag></Q>'
184
+ def history_query_body(tags, start_time, end_time, opts)
185
+ opts[:limit] ||= 1000
186
+ opts[:outsiders] ||= 0
187
+ opts[:history_format] ||= 0
188
+ opts[:retrieval_type] ||= 0
189
+ body = if tags.is_a?(String)
190
+ tag_request(tags, start_time, end_time, opts)
191
+ else
192
+ tags.map { |tag| tag_request(tag, start_time, end_time, opts) }.join
193
+ end
194
+ '<Q appId="20" f="D" allQuotes="1">' + body + '</Q>'
195
+ end
196
+
197
+ def tag_request(tag, start_time, end_time, opts)
198
+ '<Tag>' \
199
+ "<N><![CDATA[#{tag}]]></N>" \
200
+ "<D><![CDATA[#{@ip21_address}]]></D>" \
201
+ "<HF>#{opts[:history_format]}</HF>" \
202
+ "<St>#{start_time}</St>" \
203
+ "<Et>#{end_time}</Et>" \
204
+ "<RT>#{opts[:retrieval_type]}</RT>" \
205
+ "<X>#{opts[:limit]}</X>" \
206
+ "<O>#{opts[:outsiders]}</O>" \
207
+ '</Tag>'
172
208
  end
173
209
 
174
210
  def select?(query)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ip21
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rhuan Barreto
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-10 00:00:00.000000000 Z
11
+ date: 2021-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,30 +16,43 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 6.0.1
19
+ version: 6.1.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 6.0.1
26
+ version: 6.1.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: rubyntlm
28
+ name: ruby-ntlm
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.6'
33
+ version: 0.0.4
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.6'
41
- description: Aspentech IP21 Adapter for executing queries using SQLPlusWebService
42
- or REST API
40
+ version: 0.0.4
41
+ - !ruby/object:Gem::Dependency
42
+ name: httpi
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.4'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.4'
55
+ description: Aspentech IP21 Adapter for executing queries using SQLPlus REST API
43
56
  email: rhuan@rhuan.com.br
44
57
  executables: []
45
58
  extensions: []