ad_state_of_the_back 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: '034811597bad97e468a77e1942525ae2cc3c91332cb91815b8f931c0ef424b92'
4
+ data.tar.gz: 83a7cf0542a0e70d9220473a284195031e33bc803ef6be80e915806373a54cac
5
+ SHA512:
6
+ metadata.gz: 9b0acbfb2b335ab194711c0879c6cfea472431de3783fcf458b573f3a621a56329b2d22d749b294270dcfff22506b814fc2a5ac0d9d262052ca7a8a57f028c0a
7
+ data.tar.gz: 52a90ae63ffaa039633fd28a20130d6bc862b923facd9db8f2a89a12b5bb7437bc25ad120cf4bc7f6987c6da76dfd0546635f5cdd52e0a13d70d6facb09b4219
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'ad_state_of_the_back'
4
+
5
+ AdStateOfTheBack::Runner.new(ARGV).run
@@ -0,0 +1,7 @@
1
+ require 'bundler'
2
+ require 'google/apis/sheets_v4'
3
+ require 'googleauth'
4
+
5
+ require 'ad_state_of_the_back/gemfile_parser'
6
+ require 'ad_state_of_the_back/google_spreadsheet_repository'
7
+ require 'ad_state_of_the_back/runner'
@@ -0,0 +1,17 @@
1
+ module AdStateOfTheBack
2
+ class GemfileParser
3
+ def initialize
4
+ @lockfile_parser = Bundler::LockfileParser.new(Bundler.read_file(Bundler.default_lockfile))
5
+ end
6
+
7
+ def rails_version
8
+ rails_spec = @lockfile_parser.specs.detect{ |spec| spec.name == 'rails' }
9
+ return unless rails_spec
10
+ rails_spec.version.to_s
11
+ end
12
+
13
+ def ruby_version
14
+ @lockfile_parser.ruby_version
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,66 @@
1
+ module AdStateOfTheBack
2
+ class GoogleSpreadsheetRepository
3
+ APPLICATION_NAME = 'AD State of the Back'.freeze
4
+ SCOPE = Google::Apis::SheetsV4::AUTH_SPREADSHEETS
5
+
6
+ RUBY_VERSION_COLUMN = 'B'
7
+ RAILS_VERSION_COLUMN = 'C'
8
+ LAST_CHECKED_COLUMN = 'H'
9
+
10
+ def initialize(spreadsheet_id:)
11
+ @spreadsheet_id = spreadsheet_id
12
+
13
+ @service = Google::Apis::SheetsV4::SheetsService.new
14
+ @service.client_options.application_name = APPLICATION_NAME
15
+ @service.authorization = authorize
16
+ end
17
+
18
+ def update_spreadsheet_line(spreadsheet_line:, **values_to_update)
19
+ value_range_array = values_to_update.map do |info_to_update, value|
20
+ self.class.create_value_range_object(
21
+ info_to_update: info_to_update,
22
+ spreadsheet_line: spreadsheet_line,
23
+ value: value
24
+ )
25
+ end
26
+
27
+ request_body = self.class.create_batch_update_values_request_object(
28
+ value_range_array: value_range_array
29
+ )
30
+
31
+ batch_update(request_body)
32
+ end
33
+
34
+ private
35
+
36
+ def self.create_value_range_object(info_to_update:, spreadsheet_line:, value:)
37
+ column = const_get("#{info_to_update.upcase}_COLUMN")
38
+ Google::Apis::SheetsV4::ValueRange.new(
39
+ range: "Sheet1!#{column}#{spreadsheet_line}",
40
+ values: [[value]]
41
+ )
42
+ end
43
+
44
+ def self.create_batch_update_values_request_object(value_range_array:)
45
+ Google::Apis::SheetsV4::BatchUpdateValuesRequest.new(
46
+ data: value_range_array,
47
+ value_input_option: 'RAW'
48
+ )
49
+ end
50
+
51
+ def batch_update(request_body)
52
+ @service.batch_update_values(@spreadsheet_id, request_body) do |_, err|
53
+ Google::Apis.logger.error(err) if err
54
+ end
55
+ end
56
+
57
+ def authorize
58
+ authorizer = Google::Auth::ServiceAccountCredentials.make_creds(
59
+ scope: SCOPE
60
+ )
61
+
62
+ authorizer.fetch_access_token!
63
+ authorizer
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,20 @@
1
+ module AdStateOfTheBack
2
+ class Runner
3
+ def initialize(args = ARGV)
4
+ @spreadsheet_id = args[0]
5
+ @spreadsheet_line = args[1]
6
+
7
+ @google_spreadsheet_repository = GoogleSpreadsheetRepository.new(spreadsheet_id: @spreadsheet_id)
8
+ @gemfile_parser = GemfileParser.new
9
+ end
10
+
11
+ def run
12
+ @google_spreadsheet_repository.update_spreadsheet_line(
13
+ spreadsheet_line: @spreadsheet_line,
14
+ ruby_version: @gemfile_parser.ruby_version,
15
+ rails_version: @gemfile_parser.rails_version,
16
+ last_checked: Time.new.strftime('%Y-%m-%d')
17
+ )
18
+ end
19
+ end
20
+ end
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ad_state_of_the_back
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.3
5
+ platform: ruby
6
+ authors:
7
+ - Fabernovel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-11-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: byebug
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '11.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '11.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 2.0.0
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 2.0.2
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: 2.0.0
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 2.0.2
47
+ - !ruby/object:Gem::Dependency
48
+ name: google-api-client
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: 0.33.1
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: 0.33.1
61
+ - !ruby/object:Gem::Dependency
62
+ name: googleauth
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 0.10.0
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 0.10.0
75
+ description: |-
76
+ This gem automatically gathers information about backend projects and uploads it to a Google
77
+ Spreadsheet.
78
+ email:
79
+ executables:
80
+ - ad_state_of_the_back
81
+ extensions: []
82
+ extra_rdoc_files: []
83
+ files:
84
+ - bin/ad_state_of_the_back
85
+ - lib/ad_state_of_the_back.rb
86
+ - lib/ad_state_of_the_back/gemfile_parser.rb
87
+ - lib/ad_state_of_the_back/google_spreadsheet_repository.rb
88
+ - lib/ad_state_of_the_back/runner.rb
89
+ homepage: https://www.fabernovel.com
90
+ licenses:
91
+ - MIT
92
+ metadata: {}
93
+ post_install_message:
94
+ rdoc_options: []
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ requirements: []
108
+ rubygems_version: 3.0.6
109
+ signing_key:
110
+ specification_version: 4
111
+ summary: A simple gem to track the state of backend projects.
112
+ test_files: []