ip21 0.0.5 → 0.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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -0
  3. data/ip21.gemspec +4 -1
  4. data/lib/ip21.rb +44 -14
  5. metadata +16 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a8d4ac24d383e2c349ece94689263d7a9b805cb523a287a3a08f627e9e77067d
4
- data.tar.gz: a3d8fd3621a0367f53ea32966174248d51cd07c4abe35b623f093cd633d76c20
3
+ metadata.gz: b56f02bb8919d8869c39d3b98248fbd2befad1160c76195fe1280da011af15b9
4
+ data.tar.gz: cac1e5bf0dabe81118c1245a93f70d503cec9eb1a631e497ee6d6a01c853b108
5
5
  SHA512:
6
- metadata.gz: 6981aa92d3635aa716f19644660d5e1ea676e6cb21e389116a07a09d5f48d785b68a9b60b1b7b5d61d79f9b5d74bd6539f05cd1dac121c6ec456aa2fbcf498c9
7
- data.tar.gz: 2ffcc26a10fa07aaca18a619244ccec717f6e3501e7fbcd8826847dd67edc74fdb90f90d1a724a26805d84e33289ffd40c76fc657aa39fa1ebf180a7e290c54c
6
+ metadata.gz: 5d616968d8a324319d6a426e3ee8e318a8b9cb9784166d20a46babf530fe676e6e3b399d144a07bdca36bf0f63ae98ab5ba72df861311ff501c67e264d510807
7
+ data.tar.gz: b5a2a166c73a875aa8deec5b3375d93cafd38bd28b73b6b9a6ac8efd5d7095e93346ab44d50847e3dce981fb6ce7fed9268ac979ee112f2bb313e68b8ce48c8b
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Aspentech IP21 Ruby Gem
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/ip21@2x.png)](https://badge.fury.io/rb/ip21)
4
+
3
5
  With this gem you will be able to connect to IP21 and execute queries against the database using SQL statements.
4
6
 
5
7
  ## Installing
@@ -1,15 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Gem::Specification.new do |s|
2
4
  s.name = 'ip21'
3
5
  s.summary = 'Aspentech IP21 Adapter for Ruby'
4
6
  s.description = 'Aspentech IP21 Adapter for executing queries using SQLPlus' \
5
7
  'WebService or REST API'
6
- s.version = '0.0.5'
8
+ s.version = '0.0.7'
7
9
  s.date = Time.now.strftime('%Y-%m-%d')
8
10
  s.author = 'Rhuan Barreto'
9
11
  s.email = 'rhuan@rhuan.com.br'
10
12
  s.homepage = 'http://rubygems.org/gems/ip21'
11
13
  s.platform = Gem::Platform::RUBY
12
14
  s.license = 'MIT'
15
+ s.add_dependency 'activesupport', '~>6.0.1'
13
16
  s.add_dependency 'ruby-ntlm', '~>0.0'
14
17
  s.add_dependency 'rubyntlm', '~>0.6'
15
18
  s.add_dependency 'savon', '~>2.12'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Aspentech IP21 Adapter for executing queries using SQLPlus
2
4
  #
3
5
  # This library uses Windows Authentication for connecting to SQLPlus
@@ -25,6 +27,8 @@ class IP21
25
27
  # the IP21 Database
26
28
  # @param [Boolean] soap Set this parameter to true for connecting to SQLPlus
27
29
  # using the SOAP Web Service
30
+ # @param [Boolean] debug Set this parameter to true for enabling debug
31
+ # information
28
32
  def initialize(
29
33
  auth: {
30
34
  account: 'john.doe',
@@ -33,7 +37,8 @@ class IP21
33
37
  },
34
38
  sqlplus_address: '127.0.0.1',
35
39
  ip21_address: '127.0.0.1',
36
- soap: false
40
+ soap: false,
41
+ debug: false
37
42
  )
38
43
  @account = auth[:account]
39
44
  @domain = auth[:domain]
@@ -41,6 +46,7 @@ class IP21
41
46
  @sqlplus_address = sqlplus_address
42
47
  @ip21_address = ip21_address
43
48
  @soap = soap
49
+ @debug = debug
44
50
  end
45
51
 
46
52
  # Executes a direct query againt the database
@@ -49,8 +55,8 @@ class IP21
49
55
  # @param [Integer] limit The maximum number of rows that the query will output
50
56
  #
51
57
  # @return [Hash] Response from the query
52
- def query(sql, limit = 100)
53
- @soap ? soap(sql) : rest(sql, limit)
58
+ def query(sql, limit = 100, type = 'SQL')
59
+ @soap ? soap(sql) : rest(sql, limit, type)
54
60
  end
55
61
 
56
62
  private
@@ -66,16 +72,30 @@ class IP21
66
72
  client.call(:execute_sql, message: { command: sql }).body
67
73
  end
68
74
 
69
- def rest(sql, limit)
75
+ def rest(sql, limit, type)
76
+ response = rest_request(
77
+ rest_address(type), query_body(sql, limit, type)
78
+ )
79
+ parse_rest(response)
80
+ end
81
+
82
+ def rest_request(url, body)
70
83
  require 'net/http'
71
84
  require 'ntlm/http'
72
- uri = URI(rest_address)
85
+ uri = URI(url)
73
86
  http = Net::HTTP.new(uri.host)
74
87
  request = Net::HTTP::Post.new(uri)
75
- request.body = query_body(sql, limit)
88
+ request.body = body
76
89
  request.ntlm_auth(@account, @domain, @password)
77
90
  response = http.request(request)
78
- parse_rest(response)
91
+ debug_info(url, request.body, response) if @debug
92
+ response
93
+ end
94
+
95
+ def debug_info(address, body, response)
96
+ puts "Request: #{address}"
97
+ puts "Body: #{body}"
98
+ puts "Response: #{response.body}"
79
99
  end
80
100
 
81
101
  def parse_rest(response)
@@ -94,14 +114,24 @@ class IP21
94
114
  "http://#{@sqlplus_address}/SQLplusWebService/SQLplusWebService.asmx?WSDL"
95
115
  end
96
116
 
97
- def rest_address
98
- "http://#{@sqlplus_address}/ProcessData/AtProcessDataREST.dll/SQL"
117
+ def rest_address(type)
118
+ "http://#{@sqlplus_address}/ProcessData/AtProcessDataREST.dll/#{type}"
119
+ end
120
+
121
+ def query_body(sql, limit, type)
122
+ case type
123
+ when 'SQL'
124
+ "<SQL c=\"DRIVER={AspenTech SQLplus};HOST=#{@ip21_address};Port=10014;" \
125
+ "CHARINT=N;CHARFLOAT=N;CHARTIME=N;CONVERTERRORS=N;\" m=\"#{limit}\" " \
126
+ "to=\"30\" s=\"#{select?(sql) ? 1 : 0}\"><![CDATA[#{sql}]]></SQL>"
127
+ when 'KPI'
128
+ require 'active_support'
129
+ require 'active_support/core_ext/object/to_query'
130
+ sql.to_query
131
+ end
99
132
  end
100
133
 
101
- def query_body(sql, limit)
102
- "<SQL c=\"DRIVER={AspenTech SQLplus};HOST=#{@ip21_address};" \
103
- 'PORT=10014;CHARISNULL=Y;CHARINT=N;CHARFLOAT=N;CHARTIME=N;' \
104
- "CONVERTERRORS=N;ROWID=Y;TIMEOUT=10\" m=\"#{limit}\">" \
105
- "<![CDATA[#{sql}]]></SQL>"
134
+ def select?(query)
135
+ /^select/i.match?(query)
106
136
  end
107
137
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ip21
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.7
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-05-10 00:00:00.000000000 Z
11
+ date: 2019-11-19 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.0.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.0.1
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: ruby-ntlm
15
29
  requirement: !ruby/object:Gem::Requirement