adx_toolkit 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a6c2072dca2f80b4b1de523a7f55fdd96361681d0d6330b57e27b4d5abae934c
4
+ data.tar.gz: f13e607cc958c25fe71e76f68211df46f4aad7b071bc57f1d5158b6acee39bda
5
+ SHA512:
6
+ metadata.gz: ef8bd8f1c7eae5b6f873dbc10bb766d387dbb152fa4e0015989f138095db6d2d396789ba64821dc496b205bf290acf5e921852291296a354d01e80c5be14bc6a
7
+ data.tar.gz: c299d3bd70b7ed919962275ae60a351d9955a6f09489dbe7f509e0471cbb03f62cc571fa782e6d44595212da486e8d43cd1d5cb1d3865ae1920731571de5e402
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # frozen_string_literal: true
4
+
5
+ require 'slack_poster'
6
+
7
+ CHANNEL = ARGV[0]
8
+ MESSAGE = ARGV[1]
9
+ TOKEN = ARGV[2]
10
+
11
+ slack_poster = SlackPoster.new(NetworkRequest.new)
12
+ slack_poster.post_message(CHANNEL, MESSAGE, TOKEN)
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # frozen_string_literal: true
4
+
5
+ require 'net/http'
6
+ require 'uri'
7
+ require 'json'
8
+
9
+ # Helper class for network request like simple bash curl
10
+ class NetworkRequest
11
+ def request(url, params, headers = [], method = 'Get')
12
+ uri = URI.parse(url)
13
+ uri.query = URI.encode_www_form(params)
14
+ req_method = Object.const_get "Net::HTTP::#{method}"
15
+ request = req_method.new(uri.request_uri)
16
+ http = Net::HTTP.new(uri.host, uri.port)
17
+ http.use_ssl = (uri.scheme == 'https')
18
+ headers.each do |key, value|
19
+ request[key] = value
20
+ end
21
+ response = http.request(request)
22
+ JSON.parse(response.body)
23
+ end
24
+
25
+ # Simple post
26
+ def post(url, params, payload)
27
+ uri = URI.parse(url)
28
+ uri.query = URI.encode_www_form(params)
29
+ Net::HTTP.post_form(uri, payload)
30
+ end
31
+ end
32
+
33
+ # Mock of NetworkRequest class
34
+ class MockedNetworkRequest
35
+ def request(url, params, headers = [], method = 'Get')
36
+ @uri = URI.parse(url)
37
+ @uri.query = URI.encode_www_form(params)
38
+ @req_method = Object.const_get "Net::HTTP::#{method}"
39
+ @headers = headers
40
+ end
41
+
42
+ # Simple post
43
+ def post(url, params, payload)
44
+ @uri = URI.parse(url)
45
+ @uri.query = URI.encode_www_form(params)
46
+ @req_method = Object.const_get 'Net::HTTP::Post'
47
+ @payload = payload
48
+ end
49
+ end
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # frozen_string_literal: true
4
+
5
+ # Class that responsible for running bash script
6
+ class SystemRunner
7
+ def run(command)
8
+ p "Running => #{command.chomp}"
9
+ system(command) || raise("Error running #{command}")
10
+ end
11
+
12
+ def run_with_output(command)
13
+ # p "Running => #{command.chomp}"
14
+ output = `#{command} 2>&1` || raise("Error running #{command}")
15
+ output.chomp
16
+ end
17
+ end
18
+
19
+ # System runner test double
20
+ class TestSystemRunner
21
+ attr_reader :is_running
22
+
23
+ def initialize
24
+ @log = []
25
+ end
26
+
27
+ def run(command)
28
+ @log.append(command)
29
+ @is_running = true
30
+ end
31
+
32
+ def run_with_output(command)
33
+ @log.append(command)
34
+ @is_running = true
35
+ end
36
+
37
+ def running?(command)
38
+ @log.include?(command)
39
+ end
40
+
41
+ def running_sequence?(*commands)
42
+ @log == commands
43
+ end
44
+
45
+ def print_log
46
+ p @log
47
+ end
48
+ end
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # frozen_string_literal: true
4
+
5
+ require_relative 'adx_toolkit/system_runner'
6
+
7
+ module ADXToolkit
8
+ # Upload file to gdrive
9
+ class GdriveUploader
10
+ def initialize(runner)
11
+ @system_runner = runner
12
+ end
13
+
14
+ def check_file_validity(file_path)
15
+ abort("Can't find file at #{file_path}") unless File.exist?(file_path)
16
+ end
17
+
18
+ def upload(file_path, file_name, directory_id)
19
+ check_file_validity(file_path)
20
+
21
+ # p "uploading file #{file_path} with file_name #{file_name}"
22
+ command = "gdrive upload --share -p \"#{directory_id}\" --name \"#{file_name}\" \"#{file_path}\""
23
+ command += " | grep -i https | cut -d' ' -f7"
24
+ share_link = @system_runner.run_with_output command
25
+ share_link
26
+ end
27
+
28
+ def update(file_path, file_name, file_id)
29
+ check_file_validity(file_path)
30
+
31
+ # p "updating #{file_name} using file #{file_path} with file id #{file_id}"
32
+ command = "gdrive update --name \"#{file_name}\" \"#{file_id}\" \"#{file_path}\""
33
+ @system_runner.run command
34
+ end
35
+
36
+ def upload_or_update(file_path, file_name, directory_id)
37
+ file_id = get_file_id(directory_id, file_name)
38
+ if file_id.empty?
39
+ upload(file_path, file_name, directory_id)
40
+ else
41
+ update(file_path, file_name, file_id)
42
+ end
43
+ end
44
+
45
+ def get_file_id(directory_id, file_name_prefix)
46
+ ## Get FILEID of the file with same file_name_prefix if exists
47
+ command = "gdrive list -q \"name contains '#{file_name_prefix}' and '#{directory_id}' in parents\" "
48
+ command += "--order \"modifiedTime desc\" -m 1 --no-header | awk '{print $1;}'"
49
+ file_id = @system_runner.run_with_output command
50
+ file_id
51
+ end
52
+
53
+ def download(file_path: '.', file_name:, directory_id: 'root')
54
+ file_id = get_file_id(directory_id, file_name)
55
+ abort "#{file_name} not found in directory id #{directory_id}" unless file_id
56
+
57
+ command = "gdrive download -f -r --path \"#{file_path}\" \"#{file_id}\""
58
+ @system_runner.run command
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # frozen_string_literal: true
4
+
5
+ require_relative 'adx_toolkit/network_request'
6
+
7
+ module ADXToolkit
8
+ # Send message and upload file to slack
9
+ class SlackPoster
10
+ URL = 'https://slack.com/api/'
11
+
12
+ def initialize(network_request = NetworkRequest.new)
13
+ @network_request = network_request
14
+ end
15
+
16
+ def post_message(channel_id, message, token)
17
+ url = "#{URL}chat.postMessage"
18
+ escaped_message = escape_newline(message)
19
+ @network_request.post(url, { token: token }, 'channel' => channel_id, 'text' => escaped_message)
20
+ end
21
+
22
+ def escape_newline(message)
23
+ new_message = message.gsub('%0A', "\n")
24
+ # new_message = new_message.gsub('0x0A', "\n")
25
+ # new_message = new_message.gsub('\n', "\n")
26
+ new_message
27
+ end
28
+ end
29
+ end
metadata ADDED
@@ -0,0 +1,229 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: adx_toolkit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Core ADX
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-03-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cucumber
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.1'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 3.1.2
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '3.1'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 3.1.2
33
+ - !ruby/object:Gem::Dependency
34
+ name: mocha
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.11'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.11.2
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.11'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.11.2
53
+ - !ruby/object:Gem::Dependency
54
+ name: rake
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '13.0'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 13.0.1
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '13.0'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 13.0.1
73
+ - !ruby/object:Gem::Dependency
74
+ name: rubocop
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 0.79.0
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.79'
83
+ type: :development
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 0.79.0
90
+ - - "~>"
91
+ - !ruby/object:Gem::Version
92
+ version: '0.79'
93
+ - !ruby/object:Gem::Dependency
94
+ name: rufo
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '0.8'
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 0.8.1
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '0.8'
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 0.8.1
113
+ - !ruby/object:Gem::Dependency
114
+ name: simplecov
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '0.17'
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 0.17.1
123
+ type: :development
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '0.17'
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: 0.17.1
133
+ - !ruby/object:Gem::Dependency
134
+ name: simplecov-html
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '0.10'
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: 0.10.2
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '0.10'
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: 0.10.2
153
+ - !ruby/object:Gem::Dependency
154
+ name: test-unit
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '3.3'
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: 3.3.5
163
+ type: :development
164
+ prerelease: false
165
+ version_requirements: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - "~>"
168
+ - !ruby/object:Gem::Version
169
+ version: '3.3'
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: 3.3.5
173
+ - !ruby/object:Gem::Dependency
174
+ name: webmock
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '3.7'
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: 3.7.6
183
+ type: :development
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - "~>"
188
+ - !ruby/object:Gem::Version
189
+ version: '3.7'
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: 3.7.6
193
+ description: " Toolkit for Core ADX\n"
194
+ email:
195
+ - apps.ci-cd@bukalapak.com
196
+ executables:
197
+ - slack_poster
198
+ extensions: []
199
+ extra_rdoc_files: []
200
+ files:
201
+ - bin/slack_poster
202
+ - lib/adx_toolkit/network_request.rb
203
+ - lib/adx_toolkit/system_runner.rb
204
+ - lib/gdrive_uploader.rb
205
+ - lib/slack_poster.rb
206
+ homepage:
207
+ licenses:
208
+ - MIT
209
+ metadata: {}
210
+ post_install_message:
211
+ rdoc_options: []
212
+ require_paths:
213
+ - lib
214
+ required_ruby_version: !ruby/object:Gem::Requirement
215
+ requirements:
216
+ - - ">="
217
+ - !ruby/object:Gem::Version
218
+ version: '0'
219
+ required_rubygems_version: !ruby/object:Gem::Requirement
220
+ requirements:
221
+ - - ">="
222
+ - !ruby/object:Gem::Version
223
+ version: '0'
224
+ requirements: []
225
+ rubygems_version: 3.0.3
226
+ signing_key:
227
+ specification_version: 4
228
+ summary: A toolkit for ADX
229
+ test_files: []