orange_lib 0.1.0

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f14d0448ea4ce673a6e577226fe7d948bbc01520
4
+ data.tar.gz: 05cdf17759eb28d8883e524382d71aba24e06a11
5
+ SHA512:
6
+ metadata.gz: d0c112b747dc074614f126bc4301ba70f28549c96d14baae0045a0b2a43eed27ac47340afdabcf73828c9e2bdba8a1edaee420a4ab3ff5b48b7cf62010506f1a
7
+ data.tar.gz: 4e8a6c2d2e30abb88de70e8446a50cff122025a606943cb0099338542dd3ca09fee91e83ed9d4166bb19a1d7e0d51d9e8718eb5090b1804f076512f5d01ce557
Binary file
@@ -0,0 +1,12 @@
1
+ require 'cucumber'
2
+ require 'httparty'
3
+ require 'jsonpath'
4
+ require 'rack/test'
5
+ require 'base64'
6
+ require 'rspec'
7
+ require 'orange_lib/version'
8
+ require 'orange_lib/rest'
9
+
10
+ module OrangeLib
11
+ # Your code goes here...
12
+ end
@@ -0,0 +1,31 @@
1
+ require 'cassandra'
2
+
3
+ module OrangeLib
4
+ class CassandraHandler
5
+
6
+ # Initialize a connection to cassandra
7
+ # @param [String] host ip address of the cassandra host
8
+ # @param [String] key_space the key_space for connection to cassandra host
9
+ # @return [Session] Cassandra session.
10
+ # @example
11
+ # @__cassandra_handler ||= HMS::CassandraHandler.new('localhost', 'halo_test')
12
+ def initialize(host, key_space)
13
+ cluster = Cassandra.cluster(hosts: [host])
14
+ @session = cluster.connect(key_space)
15
+ end
16
+
17
+ # Execute a sql statement.
18
+ # @param [String] sql_string the sql statement you would like to execute
19
+ # @return [Cassandra::Result]
20
+ # @example
21
+ # cassandra_handler ||= HMS::CassandraHandler.new('localhost', 'halo_test')
22
+ # sql = "SELECT count(*) FROM data WHERE uid in ('#{items_list}')"
23
+ # result = cassandra_handler.execute(sql)
24
+ # result.rows.each do |row|
25
+ # num_rows = row["count"]
26
+ # end
27
+ def execute(sql_string)
28
+ @session.execute(sql_string)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,21 @@
1
+ require 'open3'
2
+ module OrangeLib
3
+ module CommandLine
4
+
5
+ # Execute a command line
6
+ # @param [String] command command
7
+ # @return [String] String of output which will be print on screen when we execute the comman
8
+ # @example
9
+ # execute_command('echo $PATH')
10
+ def execute_command(command)
11
+ output = ''
12
+ Open3.popen2e(command) {|stdin, stdout_and_stderr, wait_thr|
13
+ stdout_and_stderr.each{|line|
14
+ puts line
15
+ output << line
16
+ }
17
+ }
18
+ output
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,148 @@
1
+ require 'java'
2
+ require_relative '../ojdbc14.jar'
3
+
4
+ java_import 'oracle.jdbc.OracleDriver'
5
+ java_import 'java.sql.DriverManager'
6
+
7
+ module OrangeLib
8
+ class OracleHandler
9
+ attr_reader :connection
10
+
11
+ # Initialize a connection to cassandra
12
+ # @param [String] user
13
+ # @param [String] password
14
+ # @param [String] host
15
+ # @param [String] service_name
16
+ # @example
17
+ # db = Orange::OracleHandler.new('audit_repo', 'audit_repo123', 'localhost', '1521', 'orclpmd')
18
+ def initialize(user, password, host, port, service_name)
19
+ oradriver = OracleDriver.new
20
+ DriverManager.registerDriver oradriver
21
+ @user = user
22
+ @password = password
23
+ @host = host
24
+ @port = port
25
+ @service_name = service_name
26
+
27
+ begin
28
+ @connection = DriverManager.get_connection("jdbc:oracle:thin:@#{@host}:#{@port.to_i}/#{@service_name}",
29
+ @user, @password)
30
+ @connection.auto_commit = false
31
+ rescue Exception => ex
32
+ raise "Connection failed! :X url=jdbc:oracle:thin:@#{host}:#{port}/#{service_name}\nException: #{ex}"
33
+ return
34
+ end
35
+ end
36
+
37
+ # Execute a sql statement.
38
+ # @param [String] sql_string the sql statement you would like to execute
39
+ # @return [Array]
40
+ # @example
41
+ # db = Orange::OracleHandler.new('audit_repo', 'audit_repo123', '192.168.40.50','orclpmd.Orangeonline.com')
42
+ # result = db.execute("SELECT MAX(ID) FROM AUDIT_REQUEST WHERE HMS_ID='piid_1438591533'")
43
+ # result.each do |row|
44
+ # puts row
45
+ # end
46
+ def execute(sql_string)
47
+ error_msg = nil
48
+ open_connection if @connection.is_closed
49
+ begin
50
+ stmt = @connection.prepare_statement(sql_string)
51
+ row_set = stmt.execute_query
52
+ meta_data = row_set.get_meta_data
53
+ column_count = meta_data.get_column_count
54
+ columns = {}
55
+ for index in 1..column_count do
56
+ label = meta_data.get_column_label(index)
57
+ columns[label] = {}
58
+ columns[label][:type] = meta_data.get_column_type_name(index).to_s.downcase
59
+ columns[label][:precision] = meta_data.get_precision(index)
60
+ columns[label][:scale] = meta_data.get_scale(index)
61
+ end
62
+
63
+ materias = []
64
+ while row_set.next
65
+ hash_materia = {}
66
+ columns.each do |column_name, column_type|
67
+ if column_type[:type] == 'blob'
68
+ value = row_set.get_blob(column_name.to_s)
69
+ else
70
+ value = row_set.get_string(column_name.to_s)
71
+ end
72
+ hash_materia[column_name] = convert_data_type(column_type, value)
73
+ end
74
+ materias << hash_materia
75
+ end
76
+ materias
77
+ rescue Exception => ex
78
+ error_msg = "Oracle query execution failed.\nException: #{ex}"
79
+ ensure
80
+ row_set.close unless row_set.nil?
81
+ stmt.close unless stmt.nil?
82
+ @connection.close unless (@connection.is_closed || @connection.nil?)
83
+ raise error_msg unless error_msg.nil?
84
+ end
85
+ end
86
+
87
+
88
+ # Execute a sql statement for updating.
89
+ # @param [String] sql_string the sql statement you would like to execute
90
+ # @return [Int] number of rows which are affected
91
+ # @example
92
+ # db = HMS::OracleHandler.new('audit_repo', 'audit_repo123', '192.168.40.50','orclpmd.hmsonline.com')
93
+ # result = db.execute_update("UPDATE user set username = 'user1' where id = 1")
94
+ # puts result
95
+ def execute_update(sql_string)
96
+ error_msg = nil
97
+ open_connection if @connection.is_closed
98
+ begin
99
+ stmt = @connection.prepare_statement(sql_string)
100
+ number_of_rows = stmt.execute_update
101
+ @connection.commit
102
+ number_of_rows
103
+ rescue Exception => ex
104
+ @connection.rollback
105
+ error_msg = "Oracle query execution failed.\nException: #{ex}"
106
+ ensure
107
+ stmt.close unless stmt.nil?
108
+ @connection.close unless (@connection.is_closed || @connection.nil?)
109
+ raise error_msg unless error_msg.nil?
110
+ end
111
+ end
112
+
113
+ private
114
+ def convert_data_type(orcl_data={}, value)
115
+ if value.nil?
116
+ nil
117
+ else
118
+ case orcl_data[:type]
119
+ when 'number' then
120
+ if orcl_data[:scale] > 0
121
+ value.to_f
122
+ else
123
+ value.to_i
124
+ end
125
+ when 'date' then Date.parse(value)
126
+ when 'timestamp' then
127
+ time_string = value.split('.').map(&:strip)
128
+ time_string = "#{time_string[0]} #{time_string[1]}:#{time_string[2]}:#{time_string[3]} #{time_string[4]}"
129
+ Time.parse(time_string)
130
+ else value
131
+ end
132
+ end
133
+ end
134
+
135
+ def open_connection
136
+ oradriver = OracleDriver.new
137
+ DriverManager.registerDriver oradriver
138
+ begin
139
+ @connection = DriverManager.get_connection("jdbc:oracle:thin:@#{@host}:#{@port.to_i}/#{@service_name}",
140
+ @user, @password)
141
+ @connection.auto_commit = false
142
+ rescue Exception => ex
143
+ raise "Connection failed! :X url=jdbc:oracle:thin:@#{host}:#{port}/#{service_name}\nException: #{ex}"
144
+ return
145
+ end
146
+ end
147
+ end
148
+ end
@@ -0,0 +1,102 @@
1
+ require 'httparty'
2
+ require_relative 'vars'
3
+ require_relative 'command_line'
4
+
5
+ module OrangeLib
6
+ class Error < StandardError; end
7
+ class Rest
8
+ include HTTParty
9
+ include OrangeLib::Variables
10
+ include OrangeLib::CommandLine
11
+
12
+ attr_reader :response
13
+ attr_reader :request
14
+
15
+ def initialize()
16
+ end
17
+
18
+ def initialize(opts={})
19
+ mergeOpt opts
20
+ end
21
+
22
+ def mergeOpt(opts={})
23
+ self.class.default_options = self.class.default_options.merge(opts.to_hash)
24
+ puts self.class.default_options
25
+ end
26
+
27
+ def perform_request(http_method, path, options={}, &block) #:nodoc:
28
+ method = eval("Net::HTTP::#{http_method.to_s.capitalize}")
29
+ options = ModuleInheritableAttributes.hash_deep_dup(self.class.default_options).merge(options.to_hash)
30
+ begin
31
+ if (!options[:debug_request].nil? && options[:debug_request].to_s.downcase.eql?("true"))
32
+ options = debugPass options
33
+ end
34
+
35
+ if (!options[:debug_request].nil? && options[:debug_request].to_s.downcase.eql?("false"))
36
+ options = debugErr options
37
+ end
38
+
39
+ process_headers(options)
40
+ process_cookies(options)
41
+ puts options
42
+ @response = HTTParty::Request.new(method, path, options).perform(&block)
43
+
44
+ rescue => e
45
+ puts "Rescued #{e.inspect}"
46
+ end
47
+
48
+ @response
49
+
50
+ end
51
+
52
+ def response
53
+ raise OrangeLib::Error.new('@response is null') if @response.nil?
54
+ @response
55
+ end
56
+
57
+ def process_headers(options)
58
+ if options[:headers] && headers.any?
59
+ options[:headers] = headers.merge(options[:headers])
60
+ end
61
+ end
62
+
63
+ def process_cookies(options) #:nodoc:
64
+ return unless options[:cookies] || self.class.default_cookies.any?
65
+ options[:headers] ||= headers.dup
66
+ options[:headers]['cookie'] = cookies.merge(options.delete(:cookies) || {}).to_cookie_string
67
+ end
68
+
69
+ def headers(h = {})
70
+ raise ArgumentError, 'Headers must an object which responds to #to_hash' unless h.respond_to?(:to_hash)
71
+ self.class.default_options[:headers] ||= {}
72
+ self.class.default_options[:headers].merge!(h.to_hash)
73
+ end
74
+
75
+ def setHost(host)
76
+ raise OrangeLib::Error.new('host param is null') if host.nil?
77
+ self.class.base_uri host
78
+ end
79
+
80
+ def Host
81
+ self.class.base_uri
82
+ end
83
+
84
+ def setFollowRedirect(flag)
85
+ self.class.follow_redirects flag
86
+ end
87
+
88
+ def debugPass(opts={})
89
+ raise ArgumentError, 'opts param must an object which responds to #to_hash' unless opts.respond_to?(:to_hash)
90
+ self.class.default_options[:debug_output] = $stdout
91
+ opts = ModuleInheritableAttributes.hash_deep_dup(self.class.default_options).merge(opts.to_hash)
92
+ opts
93
+ end
94
+
95
+ def debugErr(opts={})
96
+ raise ArgumentError, 'opts param must an object which responds to #to_hash' unless opts.respond_to?(:to_hash)
97
+ self.class.default_options[:debug_output] = $stderr
98
+ opts = ModuleInheritableAttributes.hash_deep_dup(self.class.default_options).merge(opts.to_hash)
99
+ opts
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,74 @@
1
+ module OrangeLib
2
+ module Variables
3
+
4
+ # Create variable with input name and value. If input value is not passed, method will return value of variable
5
+ #(This function is used if we would like to store a value to a variable in cucumber)
6
+ # @param [String] name variable name
7
+ # @param [Object] value value of variable
8
+ # @return [Object] value of variable if input value is not passed.
9
+ # @example
10
+ # variable('REPORT_ID', 'c73f5f2a-d098-4d84-8831-35c704773747') => store report id as variable REPORT_ID
11
+ # variable('REPORT_ID') => return value of variable REPORT_ID
12
+ def variable(name, value = nil)
13
+ name = name.to_sym
14
+ return variables[name] if value.nil?
15
+
16
+ variables[name] = value
17
+ end
18
+
19
+
20
+ # Remove all of stored variables.
21
+ # @example
22
+ # clear_variables
23
+ def clear_variables
24
+ variables.clear
25
+ end
26
+
27
+
28
+ # Interpret an input string or hash by using the variable that set before that or the params argument
29
+ # @params [String] input the template string.
30
+ # @params [Hash] params the data is used for template
31
+ # @example
32
+ # app.variable('app', 'bdd-lib')
33
+ # model = { name: 'Chris', friends: [{fname: 'Hung'}, {fname: 'Aurora'}] }
34
+ # template = 'Hello %{name} from %{app}, your friends are %{friends[0].fname} and %{friends[1].fname}'
35
+ # output = app.interpret_string(template, model) # -> Hello Chris from bdd-lib, your friends are Hung and Aurora
36
+ def interpret_string(input, params = {})
37
+ # Merge optional parameters with global variables
38
+ params = variables.merge(params)
39
+ params = flatten_hash(params)
40
+
41
+ if input.class == Hash
42
+ input.each { |k, v| input[k] = interpret_string(v) }
43
+ elsif input.class == String && input =~ /(\%\{.+\})+/
44
+ input % params
45
+ else
46
+ input
47
+ end
48
+ end
49
+
50
+ private
51
+ def variables
52
+ @variables ||= {}
53
+ end
54
+
55
+ def flatten_hash(hash)
56
+ hash.each_with_object({}) do |(key, value), output|
57
+ if value.is_a? Hash
58
+ flatten_hash(value).map do |v_key, v_value|
59
+ output["#{key}.#{v_key}".to_sym] = v_value
60
+ end
61
+ elsif value.is_a? Array
62
+ value.each_with_index do |item, index|
63
+ v_hash = {"[#{index}]" => item}
64
+ flatten_hash(v_hash).map do |v_key, v_value|
65
+ output["#{key}#{v_key}".to_sym] = v_value
66
+ end
67
+ end
68
+ else
69
+ output[key.to_sym] = value.to_s
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,3 @@
1
+ module OrangeLib
2
+ VERSION = "0.1.0"
3
+ end
metadata ADDED
@@ -0,0 +1,212 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: orange_lib
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Hung Thanh Nguyen
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-06-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ~>
17
+ - !ruby/object:Gem::Version
18
+ version: '1.10'
19
+ name: bundler
20
+ prerelease: false
21
+ type: :runtime
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '10.0'
33
+ name: rake
34
+ prerelease: false
35
+ type: :runtime
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: '3.2'
47
+ name: rspec
48
+ prerelease: false
49
+ type: :runtime
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '3.2'
55
+ - !ruby/object:Gem::Dependency
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ version: '2.0'
61
+ name: cucumber
62
+ prerelease: false
63
+ type: :runtime
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '2.0'
69
+ - !ruby/object:Gem::Dependency
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ~>
73
+ - !ruby/object:Gem::Version
74
+ version: '0.3'
75
+ name: httmultiparty
76
+ prerelease: false
77
+ type: :runtime
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '0.3'
83
+ - !ruby/object:Gem::Dependency
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ version: '0.13'
89
+ name: httparty
90
+ prerelease: false
91
+ type: :runtime
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '0.13'
97
+ - !ruby/object:Gem::Dependency
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ~>
101
+ - !ruby/object:Gem::Version
102
+ version: '0.5'
103
+ name: jsonpath
104
+ prerelease: false
105
+ type: :runtime
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: '0.5'
111
+ - !ruby/object:Gem::Dependency
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ~>
115
+ - !ruby/object:Gem::Version
116
+ version: '0.6'
117
+ name: rack-test
118
+ prerelease: false
119
+ type: :runtime
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ version: '0.6'
125
+ - !ruby/object:Gem::Dependency
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - '>='
129
+ - !ruby/object:Gem::Version
130
+ version: '0.3'
131
+ - - '>='
132
+ - !ruby/object:Gem::Version
133
+ version: 3.0.0.rc.1
134
+ name: cassandra-driver
135
+ prerelease: false
136
+ type: :runtime
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0.3'
142
+ - - '>='
143
+ - !ruby/object:Gem::Version
144
+ version: 3.0.0.rc.1
145
+ - !ruby/object:Gem::Dependency
146
+ requirement: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ~>
149
+ - !ruby/object:Gem::Version
150
+ version: '2.0'
151
+ name: rubysl-base64
152
+ prerelease: false
153
+ type: :runtime
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ~>
157
+ - !ruby/object:Gem::Version
158
+ version: '2.0'
159
+ - !ruby/object:Gem::Dependency
160
+ requirement: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ~>
163
+ - !ruby/object:Gem::Version
164
+ version: '1.6'
165
+ name: nokogiri
166
+ prerelease: false
167
+ type: :runtime
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ~>
171
+ - !ruby/object:Gem::Version
172
+ version: '1.6'
173
+ description: A set of rest lib utilizing HTTParty that ease basic testing of Restful APIs
174
+ email:
175
+ - hungtnguyen@kms-technology.com
176
+ executables: []
177
+ extensions: []
178
+ extra_rdoc_files: []
179
+ files:
180
+ - lib/ojdbc14.jar
181
+ - lib/orange_lib.rb
182
+ - lib/orange_lib/cassandra_handler.rb
183
+ - lib/orange_lib/command_line.rb
184
+ - lib/orange_lib/oracle_handler.rb
185
+ - lib/orange_lib/rest.rb
186
+ - lib/orange_lib/vars.rb
187
+ - lib/orange_lib/version.rb
188
+ homepage: https://rubygems.org/gems/orange
189
+ licenses:
190
+ - Aurora
191
+ metadata: {}
192
+ post_install_message:
193
+ rdoc_options: []
194
+ require_paths:
195
+ - lib
196
+ required_ruby_version: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - '>='
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ required_rubygems_version: !ruby/object:Gem::Requirement
202
+ requirements:
203
+ - - '>='
204
+ - !ruby/object:Gem::Version
205
+ version: '0'
206
+ requirements: []
207
+ rubyforge_project:
208
+ rubygems_version: 2.4.5
209
+ signing_key:
210
+ specification_version: 4
211
+ summary: Rest lib support to create cucumber step definitions
212
+ test_files: []