Ifd_Automation 2.6 → 2.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.
- checksums.yaml +4 -4
- data/bin/generate.rb +21 -3
- data/bin/helper.rb +5 -4
- data/lib/Ifd_Automation/require_libs.rb +9 -6
- data/lib/Ifd_Automation/version.rb +1 -1
- data/lib/helper/{assertion_helpers.rb → assertion_helper.rb} +5 -5
- data/lib/helper/auto_util.rb +164 -0
- data/lib/helper/database_helper.rb +81 -0
- data/lib/helper/file_helper.rb +36 -0
- data/lib/helper/mail_helper.rb +58 -0
- data/lib/helper/rest_helper.rb +91 -0
- data/lib/helper/soap_helper.rb +59 -0
- data/lib/helper/ssh_helper.rb +39 -0
- data/lib/helper/web_steps_helper.rb +447 -0
- data/project/Dockerfile +20 -0
- data/project/Gemfile.lock +176 -0
- data/project/README.md +60 -0
- data/project/cucumber.yml +6 -0
- data/project/docker-compose.yml +7 -0
- data/project/features/TestData/globalData.yml +3 -1
- data/project/features/TestSuite/WebGUI.feature +16 -2
- data/project/features/step_definitions/IFD_Libraries/REST_steps.rb +34 -0
- data/project/features/step_definitions/IFD_Libraries/SOAP_steps.rb +38 -0
- data/project/features/step_definitions/IFD_Libraries/database_steps.rb +44 -0
- data/{lib/Ifd_Automation/dynamic_store_vavue_steps.rb → project/features/step_definitions/IFD_Libraries/dynamic_store_value_steps.rb} +8 -10
- data/project/features/step_definitions/IFD_Libraries/email_steps.rb +36 -0
- data/project/features/step_definitions/IFD_Libraries/file_steps.rb +11 -0
- data/project/features/step_definitions/IFD_Libraries/ssh_steps.rb +20 -0
- data/{lib/Ifd_Automation → project/features/step_definitions/IFD_Libraries}/web_steps.rb +18 -8
- data/project/features/step_definitions/lib_steps/actionwords.rb +14 -10
- data/project/features/step_definitions/lib_steps/steps.rb +6 -0
- data/project/features/step_definitions/repositories/project_object.yml +2 -6
- data/project/features/support/env.rb +18 -18
- data/project/features/support/hooks.rb +22 -59
- metadata +45 -17
- data/lib/Ifd_Automation/REST_steps.rb +0 -90
- data/lib/Ifd_Automation/SOAP_steps.rb +0 -68
- data/lib/Ifd_Automation/database_steps.rb +0 -80
- data/lib/Ifd_Automation/email_steps.rb +0 -72
- data/lib/Ifd_Automation/file_steps.rb +0 -24
- data/lib/Ifd_Automation/ssh_steps.rb +0 -38
- data/lib/helper/auto_utils.rb +0 -67
- data/lib/helper/connection_helpers.rb +0 -15
- data/lib/helper/core.rb +0 -646
- data/lib/helper/mail_helpers.rb +0 -17
- data/lib/helper/web_steps_helpers.rb +0 -176
- data/project/features/step_definitions/lib_steps/test.rb +0 -6
@@ -1,68 +0,0 @@
|
|
1
|
-
require 'savon'
|
2
|
-
require_relative 'require_libs'
|
3
|
-
require 'jsonpath'
|
4
|
-
|
5
|
-
# Example
|
6
|
-
# When I get SOAP operations list from 'http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx?wsdl'
|
7
|
-
When /^I get SOAP operations list from '(.*?)'$/ do |url|
|
8
|
-
request_url = URI.encode check_dynamic_value url
|
9
|
-
@SOAPclient = Savon.client(ssl_verify_mode: :none,
|
10
|
-
wsdl: "#{request_url}",
|
11
|
-
:open_timeout => 10,
|
12
|
-
:read_timeout => 10,
|
13
|
-
:log => false)
|
14
|
-
p "Operations List: #{@SOAPclient.operations}"
|
15
|
-
end
|
16
|
-
|
17
|
-
# Example
|
18
|
-
# When I send SOAP request with operation name "verify_email" and XML file "soap.xml"
|
19
|
-
When /^I send SOAP request with operation name "(.*)" and XML file "(.*)"$/ do |operation_name,file_name|
|
20
|
-
xml = File.read($test_data_dir + file_name)
|
21
|
-
@response = call_and_fail_gracefully(@SOAPclient, operation_name.downcase.to_sym, xml: xml )
|
22
|
-
end
|
23
|
-
|
24
|
-
# Example
|
25
|
-
# I send SOAP request with operation name "xr" and following data:
|
26
|
-
# """
|
27
|
-
# Sample XML
|
28
|
-
# """
|
29
|
-
When /^I send SOAP request with operation name "(.*)" and following data:$/ do |operation_name,raw_data|
|
30
|
-
@response = call_and_fail_gracefully(@SOAPclient, operation_name.downcase.to_sym, xml: raw_data )
|
31
|
-
end
|
32
|
-
|
33
|
-
Then /^the status code should be "(.*)"$/ do |status|
|
34
|
-
Assertion.assert_string_equal(get_soap_response.http.code, status.to_i)
|
35
|
-
end
|
36
|
-
|
37
|
-
|
38
|
-
# Example
|
39
|
-
# Then the SOAP response node should have "$..response_text" with text "Email Domain Not Found"
|
40
|
-
Then /^the SOAP response node should have "(.*?)" with text "(.*?)"$/ do |json_path, text|
|
41
|
-
json = get_soap_response.body.to_json
|
42
|
-
results = JsonPath.new(json_path).on(json).to_a.map(&:to_s)
|
43
|
-
Assertion.assert_string_equal(text, results[0])
|
44
|
-
end
|
45
|
-
|
46
|
-
Then /^I print the SOAP response$/ do
|
47
|
-
p "SOAP RESPONSE: #{get_soap_response}"
|
48
|
-
end
|
49
|
-
|
50
|
-
def get_soap_response
|
51
|
-
soap_response = @response
|
52
|
-
if soap_response.nil?
|
53
|
-
raise "ERROR***: MISSING STEPS: Please send SOAP request to get the response first."
|
54
|
-
else
|
55
|
-
soap_response
|
56
|
-
end
|
57
|
-
soap_response
|
58
|
-
end
|
59
|
-
|
60
|
-
def call_and_fail_gracefully(client, *args, &block)
|
61
|
-
if client.nil?
|
62
|
-
raise "ERROR***: MISSING STEPS: Please run step to get operation list from WSDL first."
|
63
|
-
else
|
64
|
-
client.call(*args, &block)
|
65
|
-
end
|
66
|
-
rescue Savon::SOAPFault => e
|
67
|
-
puts e.message
|
68
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
require_relative 'require_libs'
|
2
|
-
Given /^I create connection to database with:$/ do |data|
|
3
|
-
unless data.hashes.empty?
|
4
|
-
data = data.hashes[0]
|
5
|
-
data = JSON.parse(data) unless data.is_a? Hash
|
6
|
-
|
7
|
-
data.each_pair do |k, v|
|
8
|
-
data[k] = check_dynamic_value(v)
|
9
|
-
end
|
10
|
-
@connection = Connection.new(data)
|
11
|
-
put_log "Connect to database successfully!" if @connection
|
12
|
-
end
|
13
|
-
end
|
14
|
-
# NEW
|
15
|
-
When /^I close SQL connection$/ do
|
16
|
-
@connection.disconnect!
|
17
|
-
if !@connection.connected?
|
18
|
-
put_log "Disconnected to Database!"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
|
23
|
-
#NEW
|
24
|
-
And /^I run sql script:$/ do |raw_data|
|
25
|
-
begin
|
26
|
-
script = bind_with_dyn_vars(raw_data)
|
27
|
-
@result = @connection.connection.execute(script)
|
28
|
-
rescue Exception => e
|
29
|
-
raise e.message
|
30
|
-
end
|
31
|
-
# end
|
32
|
-
end
|
33
|
-
|
34
|
-
# Example
|
35
|
-
# When I run sql script "select * from users where email=#{id}"
|
36
|
-
And /^I run sql script "(.*)"$/ do |sql|
|
37
|
-
script = check_dynamic_value sql
|
38
|
-
if @connection
|
39
|
-
@result = @connection.connection.execute(script)
|
40
|
-
else
|
41
|
-
raise "ERROR: Create connection to database first!"
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
Then /^show me the result of SQL statement$/ do
|
46
|
-
unless @result.nil?
|
47
|
-
p result.to_hash
|
48
|
-
for i in 0..@result
|
49
|
-
puts "\n SQL Result: #{i}"
|
50
|
-
end
|
51
|
-
@result.each(:as => :hash) do |row|
|
52
|
-
puts "----#{row}===="
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
# Example
|
58
|
-
# Then the result of SQL statement should be:
|
59
|
-
# """
|
60
|
-
# {"name": "quoc anh", "email": "anhpq.info@gmail.com"}
|
61
|
-
# """
|
62
|
-
Then /^the result of SQL statement should be:$/ do |json|
|
63
|
-
expected = JSON.parse(json)
|
64
|
-
@result.each(:as => :hash) do |row|
|
65
|
-
Assertion.assert_string_equal(expected,row)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
# Example
|
70
|
-
# Then the result of SQL statement should have "email" with value "anhpq.info@gmail.com"
|
71
|
-
Then /^the result of SQL statement should have "(.*)" with value "(.*)"$/ do |json_path, value|
|
72
|
-
@result.each(:as => :hash) do |row|
|
73
|
-
results = JsonPath.new(json_path).on(row).to_a.map(&:to_s)
|
74
|
-
Assertion.assert_string_equal(results[0], value)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
When /^I store the result of SQL script as "(.*?)"$/ do |var_name|
|
79
|
-
set_var(var_name, @result)
|
80
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
require 'action_mailer'
|
2
|
-
require_relative 'require_libs'
|
3
|
-
# Example:
|
4
|
-
#
|
5
|
-
# Then I send an email with:
|
6
|
-
# """
|
7
|
-
# From: from@example.com
|
8
|
-
# Reply-To: reply-to@example.com
|
9
|
-
# To: anh.pham@infodation.vn
|
10
|
-
# Subject: SUBJECT
|
11
|
-
# Attachments: globalData.yml
|
12
|
-
|
13
|
-
# BODY
|
14
|
-
# """
|
15
|
-
#
|
16
|
-
Then /^I send an e?mail with:$/ do |raw_data|
|
17
|
-
raw_data.strip!
|
18
|
-
header, body = raw_data.split(/\n\n/, 2) # 2: maximum number of fields
|
19
|
-
conditions = {}
|
20
|
-
header.split("\n").each do |row|
|
21
|
-
if row.lstrip.chop.match(/^[a-z\-]+:/i)
|
22
|
-
key, value = row.split(":", 2)
|
23
|
-
conditions[key.gsub(' ','').underscore.to_sym] = value.gsub(' ','')
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
27
|
-
conditions[:body] = body if body
|
28
|
-
filepath = ($test_data_dir + conditions[:attachments] if conditions[:attachments])
|
29
|
-
Email.send_email(conditions[:to], conditions[:subject], conditions[:body],filepath)
|
30
|
-
end
|
31
|
-
|
32
|
-
# Example:
|
33
|
-
#
|
34
|
-
# Then I should receive an email with:
|
35
|
-
# """
|
36
|
-
# From: from@example.com
|
37
|
-
# Reply-To: reply-to@example.com
|
38
|
-
# To: anh.pham@infodation.vn
|
39
|
-
# Subject: SUBJECT
|
40
|
-
# Attachments: globalData.yml
|
41
|
-
|
42
|
-
# BODY
|
43
|
-
# """
|
44
|
-
#
|
45
|
-
|
46
|
-
Then /^I should receive an e?mail with:$/ do |raw_data|
|
47
|
-
raw_data.strip!
|
48
|
-
header, body = raw_data.split(/\n\n/, 2) # 2: maximum number of fields
|
49
|
-
conditions = {}
|
50
|
-
header.split("\n").each do |row|
|
51
|
-
if row.lstrip.chop.match(/^[a-z\-]+:/i)
|
52
|
-
key, value = row.split(":", 2)
|
53
|
-
conditions[key.gsub(' ','').underscore.to_sym] = value.gsub(' ','')
|
54
|
-
|
55
|
-
end
|
56
|
-
end
|
57
|
-
conditions[:body] = body.squeeze(' ').strip if body
|
58
|
-
sleep 5
|
59
|
-
emails = Mail.find(:what => :last, :count => 1)
|
60
|
-
|
61
|
-
if emails.instance_of? Mail::Message
|
62
|
-
Assertion.assert_string_equal(conditions[:from], emails.from[0].to_s)
|
63
|
-
Assertion.assert_string_equal(conditions[:subject], emails.subject)
|
64
|
-
Assertion.assert_string_contain(conditions[:body], emails.body)
|
65
|
-
emails.attachments.each do |attachment|
|
66
|
-
Assertion.assert_string_equal(conditions[:attachments], attachment.filename)
|
67
|
-
end if conditions[:attachments]
|
68
|
-
else
|
69
|
-
raise "WARNING: *** No new Email is found"
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require_relative 'require_libs'
|
2
|
-
|
3
|
-
Then /^I delete test file "(.*)"$/ do |file_name|
|
4
|
-
file_path = ($test_data_dir + file_name.gsub(" ", "_"))
|
5
|
-
if File.exists?(file_path)
|
6
|
-
File.delete(file_path)
|
7
|
-
puts "#{file_name} is deleted successfully"
|
8
|
-
else
|
9
|
-
puts "File #{file_name} does not exists"
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
Given /^I read data from file "(.*)"$/ do |file_name|
|
14
|
-
@file_data = ""
|
15
|
-
file_path = $test_data_dir + file_name.downcase
|
16
|
-
if File.exist?(file_path)
|
17
|
-
file = File.open(file_path)
|
18
|
-
@file_data += file.read
|
19
|
-
file.close
|
20
|
-
else
|
21
|
-
raise "*** WARNING: File #{file_name} does not exist."
|
22
|
-
end
|
23
|
-
p @file_data
|
24
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'net/ssh'
|
2
|
-
require_relative 'require_libs'
|
3
|
-
When /^I SSH to "([^\"]*)" with the following credentials:$/ do |hostname, table|
|
4
|
-
hostname = check_dynamic_value hostname
|
5
|
-
@keys = []
|
6
|
-
@auth_methods ||= %w(password)
|
7
|
-
session = table.hashes.first
|
8
|
-
session_keys = Array.new(@keys)
|
9
|
-
session_auth_methods = Array.new(@auth_methods)
|
10
|
-
if session["keyfile"]
|
11
|
-
session_keys << session["keyfile"]
|
12
|
-
session_auth_methods << "publickey"
|
13
|
-
end
|
14
|
-
|
15
|
-
@SSHconnection = Net::SSH.start(hostname, session["username"], :password => session["password"],
|
16
|
-
:auth_methods => session_auth_methods,
|
17
|
-
:keys => session_keys)
|
18
|
-
end
|
19
|
-
|
20
|
-
When /^I run SSH command "([^\"]*)"$/ do |command|
|
21
|
-
command = check_dynamic_value command
|
22
|
-
@output = @SSHconnection.exec!(command)
|
23
|
-
end
|
24
|
-
|
25
|
-
|
26
|
-
Then /^show me the SSH output result$/ do
|
27
|
-
p @output
|
28
|
-
end
|
29
|
-
|
30
|
-
Then /^I should see "([^\"]*)" in the SSH output$/ do |string|
|
31
|
-
string = check_dynamic_value string
|
32
|
-
Assertion.assert_string_equal(string, @output.strip)
|
33
|
-
end
|
34
|
-
|
35
|
-
When /^I store the result of SSH as "(.*?)"$/ do |var_name|
|
36
|
-
$context_value = bind_with_dyn_vars(@output)
|
37
|
-
set_var(var_name, '$context_value')
|
38
|
-
end
|
data/lib/helper/auto_utils.rb
DELETED
@@ -1,67 +0,0 @@
|
|
1
|
-
#-----------------------------------------------------
|
2
|
-
# support define and bind variable dynamically
|
3
|
-
#-----------------------------------------------------
|
4
|
-
$dyn_vars = nil
|
5
|
-
|
6
|
-
# set value to a variable
|
7
|
-
def set_var(var_name, var_value)
|
8
|
-
if $dyn_vars == nil
|
9
|
-
$dyn_vars = binding
|
10
|
-
end
|
11
|
-
|
12
|
-
strEval = var_name + "=" + var_value
|
13
|
-
eval strEval, $dyn_vars
|
14
|
-
end
|
15
|
-
|
16
|
-
# bind string with $dyn_vars context
|
17
|
-
def bind_with_dyn_vars(str)
|
18
|
-
if $dyn_vars == nil
|
19
|
-
$dyn_vars = binding
|
20
|
-
end
|
21
|
-
|
22
|
-
strEval = '"' + str + '"'
|
23
|
-
return eval strEval, $dyn_vars
|
24
|
-
end
|
25
|
-
|
26
|
-
# evaluate operation/statement with $dyn_vars context
|
27
|
-
def eval_with_dyn_vars(operation)
|
28
|
-
if $dyn_vars == nil
|
29
|
-
$dyn_vars = binding
|
30
|
-
end
|
31
|
-
|
32
|
-
eval operation, $dyn_vars
|
33
|
-
end
|
34
|
-
|
35
|
-
def bind_with_dyn_json_vars(json, bind_json)
|
36
|
-
if json.kind_of? Hash
|
37
|
-
json.each_pair do |k, v|
|
38
|
-
if v.kind_of? String
|
39
|
-
bind_json[bind_with_dyn_vars(k)] = bind_with_dyn_json_vars(v, bind_json)
|
40
|
-
elsif v.kind_of? Hash
|
41
|
-
temp = Hash.new
|
42
|
-
v.each_pair do |k1, v1|
|
43
|
-
temp[bind_with_dyn_vars(k1)] = bind_with_dyn_json_vars(v1, temp)
|
44
|
-
end
|
45
|
-
bind_json[bind_with_dyn_vars(k)] = temp
|
46
|
-
elsif v.kind_of? Array
|
47
|
-
temp1 = Array.new
|
48
|
-
v.each {|item|
|
49
|
-
temp2 = Hash.new
|
50
|
-
bind_with_dyn_json_vars(item, temp2)
|
51
|
-
temp1 << temp2
|
52
|
-
}
|
53
|
-
bind_json[bind_with_dyn_vars(k)] = temp1
|
54
|
-
end
|
55
|
-
end
|
56
|
-
elsif json.kind_of? Array
|
57
|
-
temp1 = Array.new
|
58
|
-
json.each {|item|
|
59
|
-
temp2 = Hash.new
|
60
|
-
bind_with_dyn_json_vars(item, temp2)
|
61
|
-
temp1 << temp2
|
62
|
-
}
|
63
|
-
return temp1
|
64
|
-
else
|
65
|
-
return bind_with_dyn_vars(json)
|
66
|
-
end
|
67
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'tiny_tds'
|
2
|
-
require 'activerecord-sqlserver-adapter'
|
3
|
-
require 'active_record'
|
4
|
-
|
5
|
-
module Connection
|
6
|
-
def self.new(connection_params)
|
7
|
-
begin
|
8
|
-
put_log ("Connecting to database...")
|
9
|
-
return ActiveRecord::Base.establish_connection(connection_params)
|
10
|
-
rescue Exception => e
|
11
|
-
raise e.message
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
data/lib/helper/core.rb
DELETED
@@ -1,646 +0,0 @@
|
|
1
|
-
require 'rspec'
|
2
|
-
def check_dynamic_value value
|
3
|
-
if !value.is_a? Fixnum
|
4
|
-
if value.include? "params="
|
5
|
-
resolve_params value
|
6
|
-
else
|
7
|
-
bind_with_dyn_vars value
|
8
|
-
end
|
9
|
-
else
|
10
|
-
value
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
|
15
|
-
def resolve_params url
|
16
|
-
condition = url.match(/params='([^']*)'/)[0]
|
17
|
-
if condition
|
18
|
-
params_name = url.match(/params='([^']*)'/)[1]
|
19
|
-
params_value = $PARAMS["#{params_name.downcase}"]
|
20
|
-
if params_value
|
21
|
-
url = url.gsub(condition, params_value)
|
22
|
-
else
|
23
|
-
raise "ERROR: no data found with given params #{params_name}"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
url
|
27
|
-
end
|
28
|
-
|
29
|
-
#Print script log to console
|
30
|
-
def put_log str
|
31
|
-
p str if $_CFWEB['Print Log'] == true
|
32
|
-
end
|
33
|
-
|
34
|
-
|
35
|
-
def get_xpath_value_from_object_file string_object
|
36
|
-
string_object = string_object.gsub(/"/, "'")
|
37
|
-
puts "String_object: #{string_object}"
|
38
|
-
locator_matching = /(.*?)(\{.*?\})/.match(string_object)
|
39
|
-
puts "locator_matching : #{locator_matching}"
|
40
|
-
dyn_pros = {}
|
41
|
-
if locator_matching != nil
|
42
|
-
string_object = locator_matching[1]
|
43
|
-
eval(locator_matching[2].gsub(/['][\s,\t]*?:[\s,\t]*?[']?/, "'=>'")).each { |k, v|
|
44
|
-
dyn_pros[k.to_s.upcase] = v
|
45
|
-
}
|
46
|
-
end
|
47
|
-
|
48
|
-
hash_object = $OBJECT[string_object]
|
49
|
-
if hash_object == nil
|
50
|
-
put_log ">>> OBJECT NAME MAYBE NOT FOUND!!!"
|
51
|
-
# true.should eq false
|
52
|
-
expect(true).to eq(false)
|
53
|
-
end
|
54
|
-
xpath_value = ""
|
55
|
-
upcase_attrb = {}
|
56
|
-
if hash_object != nil
|
57
|
-
hash_object.each { |k, v|
|
58
|
-
k = k.to_s.upcase
|
59
|
-
put_log "\n#{k} =~ /ph_/i and dyn_pros[#{k}]: #{k =~ /ph_/i and dyn_pros[k] != nil}"
|
60
|
-
if k =~ /ph_/i
|
61
|
-
if dyn_pros[k] != nil
|
62
|
-
# Assign place holder value to place holder property, also remove prefix ph_ from property key,
|
63
|
-
# also remove this pl from dyn_pros <= should be consider to continue transfer into inner object in relation
|
64
|
-
if v =~ /<ph_value>/i
|
65
|
-
upcase_attrb[k[3..k.size-1]] = v.gsub(/<ph_value>/i, dyn_pros[k])
|
66
|
-
else
|
67
|
-
upcase_attrb[k[3..k.size-1]] = dyn_pros[k]
|
68
|
-
end
|
69
|
-
dyn_pros.delete(k)
|
70
|
-
end
|
71
|
-
else
|
72
|
-
upcase_attrb[k.to_s.upcase] = v
|
73
|
-
end
|
74
|
-
xpath_value = v
|
75
|
-
}
|
76
|
-
end
|
77
|
-
xpath_value
|
78
|
-
end
|
79
|
-
|
80
|
-
# Find object by Xpath
|
81
|
-
# def find_object string_object
|
82
|
-
# p ":find object--"
|
83
|
-
# startTime = Time.new.to_i
|
84
|
-
# string_object = string_object.gsub(/"/, "'")
|
85
|
-
# locator_matching = /(.*?)(\{.*?\})/.match(string_object)
|
86
|
-
# dyn_pros = {}
|
87
|
-
# if locator_matching != nil
|
88
|
-
# string_object = locator_matching[1]
|
89
|
-
# eval(locator_matching[2].gsub(/['][\s,\t]*?:[\s,\t]*?[']?/, "'=>'")).each { |k, v|
|
90
|
-
# dyn_pros[k.to_s.upcase] = v
|
91
|
-
# }
|
92
|
-
# end
|
93
|
-
#
|
94
|
-
# hash_object = $OBJECT[string_object]
|
95
|
-
# p "hash_object--------#{hash_object}"
|
96
|
-
# if hash_object == nil
|
97
|
-
# put_log ">>> OBJECT NAME MAYBE NOT FOUND!!!"
|
98
|
-
# # true.should eq false
|
99
|
-
# expect(true).to eq(false)
|
100
|
-
# end
|
101
|
-
# upcase_attrb = {}
|
102
|
-
# if hash_object != nil
|
103
|
-
# hash_object.each { |k, v|
|
104
|
-
# k = k.to_s.upcase
|
105
|
-
# p "\n#{k} =~ /ph_/i and dyn_pros[#{k}]: #{k =~ /ph_/i and dyn_pros[k] != nil}"
|
106
|
-
# if k =~ /ph_/i
|
107
|
-
# if dyn_pros[k] != nil
|
108
|
-
# # Assign place holder value to place holder property, also remove prefix ph_ from property key,
|
109
|
-
# # also remove this pl from dyn_pros <= should be consider to continue transfer into inner object in relation
|
110
|
-
# if v =~ /<ph_value>/i
|
111
|
-
# upcase_attrb[k[3..k.size-1]] = v.gsub(/<ph_value>/i, dyn_pros[k])
|
112
|
-
# else
|
113
|
-
# upcase_attrb[k[3..k.size-1]] = dyn_pros[k]
|
114
|
-
# end
|
115
|
-
#
|
116
|
-
# dyn_pros.delete(k)
|
117
|
-
# end
|
118
|
-
# else
|
119
|
-
# upcase_attrb[k.to_s.upcase] = v
|
120
|
-
# end
|
121
|
-
#
|
122
|
-
# }
|
123
|
-
# end
|
124
|
-
# p ":upcase_attrb----#{upcase_attrb}"
|
125
|
-
# if upcase_attrb.size > 0
|
126
|
-
# strId = ""
|
127
|
-
# strClass = ""
|
128
|
-
# strName = ""
|
129
|
-
# strTagname = ""
|
130
|
-
# strXpathSelector = ""
|
131
|
-
# strText = ""
|
132
|
-
#
|
133
|
-
# index = nil
|
134
|
-
# upcase_attrb.each { |key, value|
|
135
|
-
# upcase_key = key.to_s.upcase
|
136
|
-
# if upcase_key == "XPATH_SELECTOR"
|
137
|
-
# strXpathSelector = value
|
138
|
-
# end
|
139
|
-
# }
|
140
|
-
# continue_run = true
|
141
|
-
#
|
142
|
-
# if continue_run == true
|
143
|
-
# begin
|
144
|
-
# if strXpathSelector != nil and strXpathSelector.size > 0
|
145
|
-
# p "---------------------:get_objects_by_XpathSelector"
|
146
|
-
# foundElements = get_objects_by_XpathSelector(strXpathSelector)
|
147
|
-
# else
|
148
|
-
# #Generate Selector
|
149
|
-
# strGenerateXpathSel = ""
|
150
|
-
# strGenerateXpathSel = generate_xpath_selector(strId, strClass, strName, strTagname)
|
151
|
-
# if strGenerateXpathSel.length > 0
|
152
|
-
# foundElements = get_objects_by_XpathSelector(strGenerateXpathSel)
|
153
|
-
# end
|
154
|
-
# end
|
155
|
-
#
|
156
|
-
# if foundElements == nil or foundElements.size == 0
|
157
|
-
# currentTime = Time.new.to_i
|
158
|
-
# else
|
159
|
-
# # put_log "\nBREAK!!!"
|
160
|
-
# break
|
161
|
-
# end
|
162
|
-
# test = currentTime - startTime
|
163
|
-
# # put_log "\n#TIMEOUNT:#{test} < #{$_CFWEB['Wait Time']}"
|
164
|
-
# sleep(0.5)
|
165
|
-
# end while (currentTime - startTime) < $_CFWEB['Wait Time']
|
166
|
-
#
|
167
|
-
# if foundElements != nil or foundElements.size != 0
|
168
|
-
# if index != nil and index.to_i >= 0
|
169
|
-
# matched_index = 0;
|
170
|
-
# return_element = nil
|
171
|
-
# foundElements.each { |cur_element|
|
172
|
-
# passCheck = find_object_check_object(cur_element, strId, strText)
|
173
|
-
# if passCheck
|
174
|
-
# if matched_index == index.to_i
|
175
|
-
# return_element = cur_element
|
176
|
-
# break
|
177
|
-
# else
|
178
|
-
# matched_index = matched_index + 1
|
179
|
-
# end
|
180
|
-
# end
|
181
|
-
# }
|
182
|
-
# return return_element
|
183
|
-
# else
|
184
|
-
# return_element = nil
|
185
|
-
# foundElements.each { |cur_element|
|
186
|
-
# passCheck = find_object_check_object(cur_element, strId, strText)
|
187
|
-
# if passCheck
|
188
|
-
# return_element = cur_element
|
189
|
-
# break
|
190
|
-
# end
|
191
|
-
# }
|
192
|
-
# return return_element
|
193
|
-
# end # if index != nil and index.to_i >= 0
|
194
|
-
# end #if foundElements != nil or foundElements.length != 0
|
195
|
-
# end #if continue = true
|
196
|
-
# end
|
197
|
-
#
|
198
|
-
# return nil
|
199
|
-
# end
|
200
|
-
def find_object string_object
|
201
|
-
p ":find object--"
|
202
|
-
startTime = Time.new.to_i
|
203
|
-
string_object = string_object.gsub(/"/, "'")
|
204
|
-
locator_matching = /(.*?)(\{.*?\})/.match(string_object)
|
205
|
-
dyn_pros = {}
|
206
|
-
if locator_matching != nil
|
207
|
-
string_object = locator_matching[1]
|
208
|
-
eval(locator_matching[2].gsub(/['][\s,\t]*?:[\s,\t]*?[']?/, "'=>'")).each { |k, v|
|
209
|
-
dyn_pros[k.to_s.upcase] = v
|
210
|
-
}
|
211
|
-
end
|
212
|
-
|
213
|
-
hash_object = $OBJECT[string_object]
|
214
|
-
p "hash_object--------#{hash_object}"
|
215
|
-
if hash_object == nil
|
216
|
-
put_log ">>> OBJECT NAME MAYBE NOT FOUND!!!"
|
217
|
-
# true.should eq false
|
218
|
-
expect(true).to eq(false)
|
219
|
-
end
|
220
|
-
upcase_attrb = {}
|
221
|
-
if hash_object != nil
|
222
|
-
hash_object.each { |k, v|
|
223
|
-
k = k.to_s.upcase
|
224
|
-
p "\n#{k} =~ /ph_/i and dyn_pros[#{k}]: #{k =~ /ph_/i and dyn_pros[k] != nil}"
|
225
|
-
if k =~ /ph_/i
|
226
|
-
if dyn_pros[k] != nil
|
227
|
-
# Assign place holder value to place holder property, also remove prefix ph_ from property key,
|
228
|
-
# also remove this pl from dyn_pros <= should be consider to continue transfer into inner object in relation
|
229
|
-
if v =~ /<ph_value>/i
|
230
|
-
upcase_attrb[k[3..k.size-1]] = v.gsub(/<ph_value>/i, dyn_pros[k])
|
231
|
-
else
|
232
|
-
upcase_attrb[k[3..k.size-1]] = dyn_pros[k]
|
233
|
-
end
|
234
|
-
|
235
|
-
dyn_pros.delete(k)
|
236
|
-
end
|
237
|
-
else
|
238
|
-
upcase_attrb[k.to_s.upcase] = v
|
239
|
-
end
|
240
|
-
|
241
|
-
}
|
242
|
-
end
|
243
|
-
p ":upcase_attrb----#{upcase_attrb}"
|
244
|
-
p ":dyn_pros----#{dyn_pros}"
|
245
|
-
if upcase_attrb.size > 0
|
246
|
-
strId = ""
|
247
|
-
strClass = ""
|
248
|
-
strName = ""
|
249
|
-
strTagname = ""
|
250
|
-
strXpathSelector = ""
|
251
|
-
strCssSelecor = ""
|
252
|
-
strText = ""
|
253
|
-
|
254
|
-
index = nil
|
255
|
-
upcase_attrb.each { |key, value|
|
256
|
-
upcase_key = key.to_s.upcase
|
257
|
-
case upcase_key
|
258
|
-
when "XPATH_SELECTOR"
|
259
|
-
strXpathSelector = value
|
260
|
-
when "CSS_SELECTOR"
|
261
|
-
strCssSelecor = value
|
262
|
-
end
|
263
|
-
# if upcase_key == "XPATH_SELECTOR"
|
264
|
-
# strXpathSelector = value
|
265
|
-
# end
|
266
|
-
}
|
267
|
-
continue_run = true
|
268
|
-
|
269
|
-
if continue_run == true
|
270
|
-
begin
|
271
|
-
if strXpathSelector != nil and strXpathSelector.size > 0
|
272
|
-
p "---------------------:get_objects_by_XpathSelector"
|
273
|
-
foundElements = get_objects_by_XpathSelector(strXpathSelector)
|
274
|
-
elsif strCssSelecor != nil and strCssSelecor.size > 0
|
275
|
-
p "---------------------:get_objects_by_CssSelector"
|
276
|
-
foundElements = get_objects_by_CssSelector(strCssSelecor)
|
277
|
-
# else
|
278
|
-
# #Generate Selector
|
279
|
-
# strGenerateXpathSel = ""
|
280
|
-
# strGenerateXpathSel = generate_xpath_selector(strId, strClass, strName, strTagname)
|
281
|
-
# if strGenerateXpathSel.length > 0
|
282
|
-
# foundElements = get_objects_by_XpathSelector(strGenerateXpathSel)
|
283
|
-
# end
|
284
|
-
end
|
285
|
-
|
286
|
-
if foundElements == nil or foundElements.size == 0
|
287
|
-
currentTime = Time.new.to_i
|
288
|
-
else
|
289
|
-
# put_log "\nBREAK!!!"
|
290
|
-
break
|
291
|
-
end
|
292
|
-
test = currentTime - startTime
|
293
|
-
# put_log "\n#TIMEOUNT:#{test} < #{$_CFWEB['Wait Time']}"
|
294
|
-
sleep(0.5)
|
295
|
-
end while (currentTime - startTime) < $_CFWEB['Wait Time']
|
296
|
-
|
297
|
-
if foundElements != nil or foundElements.size != 0
|
298
|
-
if index != nil and index.to_i >= 0
|
299
|
-
matched_index = 0
|
300
|
-
return_element = nil
|
301
|
-
foundElements.each { |cur_element|
|
302
|
-
passCheck = find_object_check_object(cur_element, strId, strText)
|
303
|
-
if passCheck
|
304
|
-
if matched_index == index.to_i
|
305
|
-
return_element = cur_element
|
306
|
-
break
|
307
|
-
else
|
308
|
-
matched_index = matched_index + 1
|
309
|
-
end
|
310
|
-
end
|
311
|
-
}
|
312
|
-
return return_element
|
313
|
-
else
|
314
|
-
return_element = nil
|
315
|
-
foundElements.each { |cur_element|
|
316
|
-
passCheck = find_object_check_object(cur_element, strId, strText)
|
317
|
-
if passCheck
|
318
|
-
return_element = cur_element
|
319
|
-
break
|
320
|
-
end
|
321
|
-
}
|
322
|
-
return return_element
|
323
|
-
end # if index != nil and index.to_i >= 0
|
324
|
-
end #if foundElements != nil or foundElements.length != 0
|
325
|
-
end #if continue = true
|
326
|
-
end
|
327
|
-
|
328
|
-
return nil
|
329
|
-
end
|
330
|
-
#Generate Xpath Selector
|
331
|
-
def generate_xpath_selector(strId, strClass, strName, strTagname)
|
332
|
-
strGenerateXpathSel = ""
|
333
|
-
if strId != nil and strId.length > 0 and (strId =~ /^#/) == nil
|
334
|
-
strGenerateXpathSel = "[@id='#{strId}']"
|
335
|
-
end
|
336
|
-
if strClass != nil and strClass.length > 0 and (strClass =~ /^#/) == nil
|
337
|
-
strGenerateXpathSel = "#{strGenerateXpathSel}[@class='#{strClass}']"
|
338
|
-
end
|
339
|
-
if strName != nil and strName.length > 0 and (strName =~ /^#/) == nil
|
340
|
-
strGenerateXpathSel = "#{strGenerateXpathSel}[@name='#{strName}']"
|
341
|
-
end
|
342
|
-
|
343
|
-
if strGenerateXpathSel.length > 0
|
344
|
-
if strTagname != nil and strTagname.length > 0
|
345
|
-
strGenerateXpathSel = "//#{strTagname}#{strGenerateXpathSel}"
|
346
|
-
else
|
347
|
-
strGenerateXpathSel = "//*#{strGenerateXpathSel}"
|
348
|
-
end
|
349
|
-
end
|
350
|
-
|
351
|
-
return strGenerateXpathSel
|
352
|
-
end
|
353
|
-
|
354
|
-
#Get object by XpathSelector
|
355
|
-
def get_objects_by_XpathSelector(strXpathSelector)
|
356
|
-
p "-----strXpathSelector: #{strXpathSelector}"
|
357
|
-
foundElements = nil
|
358
|
-
begin
|
359
|
-
foundElements = page.all(:xpath, strXpathSelector)
|
360
|
-
rescue StandardError => myStandardError
|
361
|
-
put_log "\n>>> Error: #{myStandardError}"
|
362
|
-
end
|
363
|
-
|
364
|
-
return foundElements
|
365
|
-
end
|
366
|
-
|
367
|
-
#Get object by CSS Selector
|
368
|
-
def get_objects_by_CssSelector(strCSSSelector)
|
369
|
-
p "---strCSSSelector---:#{strCSSSelector}"
|
370
|
-
foundElements = nil
|
371
|
-
begin
|
372
|
-
foundElements = page.all(:css, strCSSSelector)
|
373
|
-
rescue StandardError => myStandardError
|
374
|
-
put_log "\n>>> Error: #{myStandardError}"
|
375
|
-
end
|
376
|
-
|
377
|
-
return foundElements
|
378
|
-
end
|
379
|
-
|
380
|
-
#Find/Check the object by ID and Text
|
381
|
-
def find_object_check_object cur_element, strId, strText
|
382
|
-
passCheck = true
|
383
|
-
if cur_element != nil
|
384
|
-
|
385
|
-
# Check ID
|
386
|
-
if strId != nil and strId.length > 0
|
387
|
-
if strId =~ /^#/
|
388
|
-
strId = strId[1..-1]
|
389
|
-
end
|
390
|
-
end
|
391
|
-
|
392
|
-
# Check Text
|
393
|
-
if passCheck and strText != nil and strText.length > 0
|
394
|
-
if (strText =~ /^#/)
|
395
|
-
strText = strText[1..-1]
|
396
|
-
end
|
397
|
-
end
|
398
|
-
return passCheck
|
399
|
-
end
|
400
|
-
|
401
|
-
return false
|
402
|
-
end
|
403
|
-
|
404
|
-
# Check object property
|
405
|
-
def execute_checkproperty element, property, negate, value, isSpecialChar=false
|
406
|
-
Capybara.configure do |config|
|
407
|
-
config.ignore_hidden_elements = false
|
408
|
-
end
|
409
|
-
foundElement = find_object(element)
|
410
|
-
|
411
|
-
check = false
|
412
|
-
if foundElement == nil and value == ""
|
413
|
-
check = true
|
414
|
-
# check.should eq true
|
415
|
-
expect(check).to eq true
|
416
|
-
else
|
417
|
-
# put_log "\n\n\t>>> execute_checkproperty: finish to found element"
|
418
|
-
if foundElement != nil
|
419
|
-
if property.upcase == 'VALUE'
|
420
|
-
actual_value = foundElement.value()
|
421
|
-
|
422
|
-
elsif property.upcase == 'TEXT'
|
423
|
-
actual_value = foundElement.text()
|
424
|
-
|
425
|
-
elsif property.upcase == 'SPECIAL CHAR'
|
426
|
-
actual_value = foundElement.text()
|
427
|
-
isSpecialChar = true
|
428
|
-
|
429
|
-
elsif property.upcase == 'TAGNAME'
|
430
|
-
actual_value = foundElement.tag_name()
|
431
|
-
|
432
|
-
elsif property.upcase == 'STYLE'
|
433
|
-
actual_value = foundElement[:style]
|
434
|
-
|
435
|
-
elsif property.upcase == 'DISABLED'
|
436
|
-
actual_value = foundElement[:disabled]
|
437
|
-
|
438
|
-
elsif property.upcase == 'WIDTH'
|
439
|
-
actual_value = foundElement[:width]
|
440
|
-
|
441
|
-
elsif property.upcase == 'HEIGHT'
|
442
|
-
actual_value = foundElement[:height]
|
443
|
-
|
444
|
-
elsif property.upcase == 'ID'
|
445
|
-
actual_value = foundElement[:id]
|
446
|
-
|
447
|
-
elsif property.upcase == 'NAME'
|
448
|
-
actual_value = foundElement[:name]
|
449
|
-
|
450
|
-
elsif property.upcase == 'CLASS'
|
451
|
-
actual_value = foundElement[:class]
|
452
|
-
|
453
|
-
elsif property.upcase == 'HREF'
|
454
|
-
actual_value = foundElement[:href]
|
455
|
-
|
456
|
-
elsif property.upcase == 'TITLE'
|
457
|
-
actual_value = foundElement[:title]
|
458
|
-
|
459
|
-
elsif property.upcase == 'TYPE'
|
460
|
-
actual_value = foundElement[:type]
|
461
|
-
|
462
|
-
elsif property.upcase == 'CHECKED'
|
463
|
-
actual_value = "true" if foundElement.checked? == true
|
464
|
-
actual_value = "false" if foundElement.checked? == false
|
465
|
-
else
|
466
|
-
actual_value = foundElement["#{property}"]
|
467
|
-
end
|
468
|
-
|
469
|
-
if actual_value == nil
|
470
|
-
actual_value = ''
|
471
|
-
end
|
472
|
-
else
|
473
|
-
put_log "\nError >> Not found object: #{element}"
|
474
|
-
end
|
475
|
-
|
476
|
-
Capybara.configure do |config|
|
477
|
-
config.ignore_hidden_elements = true
|
478
|
-
end
|
479
|
-
|
480
|
-
if Assertion.reg_compare(actual_value,value, isSpecialChar)
|
481
|
-
check = true
|
482
|
-
end
|
483
|
-
|
484
|
-
put_log "\n#{property} :: Actual result is: '#{actual_value}' -- Expected result is: '#{value}'"
|
485
|
-
|
486
|
-
if negate == " not"
|
487
|
-
# check.should_not eq true
|
488
|
-
# expect(check).not_to eql true
|
489
|
-
actual_value.should_not eq value
|
490
|
-
expect(actual_value).not_to eql value
|
491
|
-
# !Assertion.assert_string_not_equal(actual_value,value)
|
492
|
-
elsif
|
493
|
-
actual_value.should eq value
|
494
|
-
expect(actual_value).to eq value
|
495
|
-
# Assertion.assert_string_equal(actual_value,value)
|
496
|
-
end
|
497
|
-
end
|
498
|
-
end
|
499
|
-
|
500
|
-
def execute_getproperty element, property
|
501
|
-
Capybara.configure do |config|
|
502
|
-
config.ignore_hidden_elements = false
|
503
|
-
end
|
504
|
-
foundElement = find_object(element)
|
505
|
-
|
506
|
-
check = false
|
507
|
-
if foundElement == nil and value == ""
|
508
|
-
check = true
|
509
|
-
# check.should eq true
|
510
|
-
expect(check).to eq true
|
511
|
-
else
|
512
|
-
# put_log "\n\n\t>>> execute_getproperty: finish to found element"
|
513
|
-
if foundElement != nil
|
514
|
-
if property.upcase == 'VALUE'
|
515
|
-
actual_value = foundElement.value()
|
516
|
-
|
517
|
-
elsif property.upcase == 'TEXT'
|
518
|
-
actual_value = foundElement.text()
|
519
|
-
|
520
|
-
elsif property.upcase == 'TAGNAME'
|
521
|
-
actual_value = foundElement.tag_name()
|
522
|
-
|
523
|
-
elsif property.upcase == 'STYLE'
|
524
|
-
actual_value = foundElement[:style]
|
525
|
-
|
526
|
-
elsif property.upcase == 'DISABLED'
|
527
|
-
actual_value = foundElement[:disabled]
|
528
|
-
|
529
|
-
elsif property.upcase == 'WIDTH'
|
530
|
-
actual_value = foundElement[:width]
|
531
|
-
|
532
|
-
elsif property.upcase == 'HEIGHT'
|
533
|
-
actual_value = foundElement[:height]
|
534
|
-
|
535
|
-
elsif property.upcase == 'ID'
|
536
|
-
actual_value = foundElement[:id]
|
537
|
-
|
538
|
-
elsif property.upcase == 'NAME'
|
539
|
-
actual_value = foundElement[:name]
|
540
|
-
|
541
|
-
elsif property.upcase == 'CLASS'
|
542
|
-
actual_value = foundElement[:class]
|
543
|
-
|
544
|
-
elsif property.upcase == 'HREF'
|
545
|
-
actual_value = foundElement[:href]
|
546
|
-
|
547
|
-
elsif property.upcase == 'TITLE'
|
548
|
-
actual_value = foundElement[:title]
|
549
|
-
|
550
|
-
elsif property.upcase == 'TYPE'
|
551
|
-
actual_value = foundElement[:type]
|
552
|
-
|
553
|
-
else
|
554
|
-
actual_value = foundElement["#{property}"]
|
555
|
-
end
|
556
|
-
|
557
|
-
if actual_value == nil
|
558
|
-
actual_value = ''
|
559
|
-
end
|
560
|
-
else
|
561
|
-
put_log "\nError >> Not found object: #{element}"
|
562
|
-
end
|
563
|
-
|
564
|
-
Capybara.configure do |config|
|
565
|
-
config.ignore_hidden_elements = true
|
566
|
-
end
|
567
|
-
actual_value
|
568
|
-
end
|
569
|
-
end
|
570
|
-
# Get text from web element
|
571
|
-
def execute_gettext element
|
572
|
-
foundElement = find_object(element)
|
573
|
-
if foundElement != nil
|
574
|
-
tagname = foundElement.tag_name()
|
575
|
-
|
576
|
-
if tagname.upcase == 'SELECT'
|
577
|
-
#@text = page.evaluate_script("$(\"##{foundElement[:id]}\").text()")
|
578
|
-
else
|
579
|
-
actual_text = foundElement.text()
|
580
|
-
if (actual_text == nil or actual_text.length == 0) and (tagname.upcase == 'INPUT' or tagname.upcase == 'TEXTAREA')
|
581
|
-
actual_text = foundElement.value()
|
582
|
-
end
|
583
|
-
end
|
584
|
-
|
585
|
-
put_log "\nText is '" + actual_text + "' of object '" + element + "'"
|
586
|
-
$context_value = actual_text
|
587
|
-
else
|
588
|
-
put_log "\nError >> Not found object: #{element}"
|
589
|
-
exit
|
590
|
-
end
|
591
|
-
end
|
592
|
-
|
593
|
-
def var_collect string_var
|
594
|
-
if string_var =~ /^.*{year}.*$/
|
595
|
-
string_var = replace_year(string_var)
|
596
|
-
end
|
597
|
-
|
598
|
-
if string_var =~ /^.*{month}.*$/
|
599
|
-
string_var = replace_month(string_var)
|
600
|
-
end
|
601
|
-
|
602
|
-
if string_var =~ /^.*{day}.*$/
|
603
|
-
string_var = replace_day(string_var)
|
604
|
-
end
|
605
|
-
|
606
|
-
if string_var =~ /^.*{store_value}.*$/
|
607
|
-
string_var = $context_value
|
608
|
-
end
|
609
|
-
|
610
|
-
return string_var
|
611
|
-
end
|
612
|
-
|
613
|
-
def replace_year str
|
614
|
-
t = Time.now()
|
615
|
-
return str.gsub("{year}", t.year.to_s)
|
616
|
-
end
|
617
|
-
|
618
|
-
def replace_month str
|
619
|
-
t = Time.now()
|
620
|
-
_month = t.month
|
621
|
-
if _month < 10
|
622
|
-
return str.gsub("{month}", "0#{_month.to_s}")
|
623
|
-
else
|
624
|
-
return str.gsub("{month}", "#{_month.to_s}")
|
625
|
-
end
|
626
|
-
return str
|
627
|
-
end
|
628
|
-
|
629
|
-
def replace_day str
|
630
|
-
t = Time.now()
|
631
|
-
_day = t.day
|
632
|
-
if _day < 10
|
633
|
-
return str.gsub("{day}", "0#{_day.to_s}")
|
634
|
-
else
|
635
|
-
return str.gsub("{day}", "#{_day.to_s}")
|
636
|
-
end
|
637
|
-
return str
|
638
|
-
end
|
639
|
-
|
640
|
-
def replace_pipe str_pipe
|
641
|
-
put_log ">>>> #{str_pipe}"
|
642
|
-
if str_pipe =~ /^.*{pipe}.*$/
|
643
|
-
return str_pipe.gsub("{pipe}", "|")
|
644
|
-
end
|
645
|
-
return str_pipe
|
646
|
-
end
|