orange_lib 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []