still_active 0.1.1 → 0.4.1

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.
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "active_support/isolated_execution_state"
3
4
  require "active_support/core_ext/integer/time"
4
5
 
5
6
  module StillActive
@@ -11,9 +12,9 @@ module StillActive
11
12
  return StillActive.config.unsure_emoji if most_recent_activity.nil?
12
13
 
13
14
  case most_recent_activity
14
- when (StillActive.config.safe_range_end.years.ago)..(Time.now)
15
+ when (StillActive.config.no_warning_range_end.years.ago)..(Time.now)
15
16
  ""
16
- when (StillActive.config.warning_range_end.years.ago)..(StillActive.config.safe_range_end.years.ago)
17
+ when (StillActive.config.warning_range_end.years.ago)..(StillActive.config.no_warning_range_end.years.ago)
17
18
  StillActive.config.warning_emoji
18
19
  else
19
20
  StillActive.config.critical_warning_emoji
@@ -36,7 +36,7 @@ module StillActive
36
36
  last_commit_date = data.dig(:last_commit_date)
37
37
  last_commit_url = repository_url
38
38
 
39
- inactive_repository_emoji = data.dig(:last_activity_worrying_emoji)
39
+ inactive_repository_emoji = data.dig(:last_activity_warning_emoj)
40
40
  using_latest_version_emoji = data.dig(:up_to_date_emoji)
41
41
 
42
42
  formatted_name = markdown_url(text: gem_name, url: repository_url)
@@ -2,6 +2,8 @@
2
2
 
3
3
  module StillActive
4
4
  module VersionHelper
5
+ extend self
6
+
5
7
  def find_version(versions:, version_string: nil, pre_release: false)
6
8
  if version_string && pre_release
7
9
  versions&.find { |v| v["number"] == version_string && v["prerelease"] == pre_release }
@@ -6,7 +6,6 @@ require_relative "../helpers/emoji_helper"
6
6
  require_relative "../helpers/markdown_helper"
7
7
  require_relative "../helpers/version_helper"
8
8
  require_relative "workflow"
9
- require "debug"
10
9
  # require "cli/ui"
11
10
 
12
11
  module StillActive
@@ -28,12 +27,12 @@ module StillActive
28
27
  puts MarkdownHelper.markdown_table_header_line
29
28
  result.keys.sort.each do |name|
30
29
  result[name].merge!({
31
- last_activity_worrying_emoji: EmojiHelper.inactive_gem_emoji(result[name]),
30
+ last_activity_warning_emoj: EmojiHelper.inactive_gem_emoji(result[name]),
32
31
  up_to_date_emoji: EmojiHelper.using_latest_emoji(
33
- using_last_release: up_to_date?(
32
+ using_last_release: VersionHelper.up_to_date?(
34
33
  version_used: result[name].dig(:version_used), latest_version: result[name].dig(:latest_version)
35
34
  ),
36
- using_last_pre_release: up_to_date?(
35
+ using_last_pre_release: VersionHelper.up_to_date?(
37
36
  version_used: result[name].dig(:version_used), latest_version: result[name].dig(:latest_pre_release_version)
38
37
  ),
39
38
  ),
@@ -5,12 +5,14 @@ require "bundler"
5
5
  module StillActive
6
6
  class Config
7
7
  attr_accessor :critical_warning_emoji, :futurist_emoji, :gemfile_path, :gems, :github_oauth_token, :output_format,
8
- :safe_range_end, :success_emoji, :unsure_emoji, :warning_emoji, :warning_range_end
8
+ :parallelism, :no_warning_range_end, :success_emoji, :unsure_emoji, :warning_emoji, :warning_range_end
9
9
 
10
10
  def initialize
11
11
  @gemfile_path = Bundler.default_gemfile.to_s
12
12
  @gems = []
13
13
 
14
+ @parallelism = 10
15
+
14
16
  @output_format = :markdown
15
17
 
16
18
  @critical_warning_emoji = "🚩"
@@ -19,7 +21,7 @@ module StillActive
19
21
  @unsure_emoji = "❓"
20
22
  @warning_emoji = "⚠️"
21
23
 
22
- @safe_range_end = 1
24
+ @no_warning_range_end = 1
23
25
  @warning_range_end = 3
24
26
  end
25
27
 
@@ -15,6 +15,7 @@ module StillActive
15
15
  add_gems_option(opts)
16
16
  add_output_options(opts)
17
17
  add_token_options(opts)
18
+ add_parallelism_options(opts)
18
19
  add_range_options(opts)
19
20
  add_emoji_options(opts)
20
21
  end
@@ -57,13 +58,19 @@ module StillActive
57
58
  end
58
59
  end
59
60
 
61
+ def add_parallelism_options(opts)
62
+ opts.on("--simultaneous-requests=QTY", Integer, "Number of simultaneous requests made") do |value|
63
+ StillActive.config { |config| config.parallelism = value }
64
+ end
65
+ end
66
+
60
67
  def add_range_options(opts)
61
- opts.on("--safe-range-end=YEARS", Integer,
62
- "maximum number of years since last activity to be considered safe") do |value|
63
- StillActive.config { |config| config.safe_range_end = value }
68
+ opts.on("--no-warning-range-end=YEARS", Integer,
69
+ "maximum number of years since last activity until which you do not want to be warned about ") do |value|
70
+ StillActive.config { |config| config.no_warning_range_end = value }
64
71
  end
65
72
  opts.on("--warning-range-end=YEARS", Integer,
66
- "maximum number of years since last activity to be considered worrying") do |value|
73
+ "maximum number of years since last activity that you want to be warned about") do |value|
67
74
  StillActive.config { |config| config.warning_range_end = value }
68
75
  end
69
76
  end
@@ -5,6 +5,9 @@ module StillActive
5
5
  GITHUB_REGEX = %r{(http(?:s)?://(?:www\.)?(github)\.com/((?:\w|_|-)+)/((?:\w|_|-)+))}i
6
6
  GITLAB_REGEX = %r{(http(?:s)?://(?:www\.)?(gitlab)\.com/((?:\w|_|-)+)/((?:\w|_|-)+))}i
7
7
 
8
+ HASH_KEYS = [:url, :source, :owner, :name]
9
+ private_constant :HASH_KEYS
10
+
8
11
  extend self
9
12
 
10
13
  def valid?(url:)
@@ -18,7 +21,7 @@ module StillActive
18
21
  values = url&.scan(regex)&.first
19
22
  next if values.nil? || values.empty?
20
23
 
21
- return [:url, :source, :owner, :name].zip(values).to_h
24
+ return HASH_KEYS.zip(values).to_h
22
25
  end
23
26
  { source: :unhandled, owner: nil, name: nil }
24
27
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module StillActive
4
- VERSION = "0.1.1"
4
+ VERSION = "0.4.1"
5
5
  end
@@ -4,6 +4,7 @@ require_relative "repository"
4
4
  require_relative "../helpers/version_helper"
5
5
  require "async"
6
6
  require "async/barrier"
7
+ require "async/semaphore"
7
8
  require "gems"
8
9
  require "github_api"
9
10
 
@@ -15,9 +16,10 @@ module StillActive
15
16
  def call
16
17
  task = Async do
17
18
  barrier = Async::Barrier.new
19
+ semaphore = Async::Semaphore.new(StillActive.config.parallelism, parent: barrier)
18
20
  result_object = {}
19
21
  StillActive.config.gems.each_with_object(result_object) do |gem, hash|
20
- barrier.async do
22
+ semaphore.async do
21
23
  gem_info(gem_name: gem[:name], result_object: hash, gem_version: gem.dig(:version))
22
24
  end
23
25
  end
@@ -31,43 +33,40 @@ module StillActive
31
33
 
32
34
  def gem_info(gem_name:, result_object:, gem_version: nil)
33
35
  result_object[gem_name] = {}
34
- result_object[gem_name].merge!({
35
- version_used: gem_version,
36
- }) if gem_version
36
+ result_object[gem_name][:version_used] = gem_version if gem_version
37
37
 
38
38
  vs = versions(gem_name: gem_name)
39
39
  repo_info = repository_info(gem_name: gem_name, versions: vs)
40
40
  last_commit_date = last_commit_date(source: repo_info[:source], repository_owner: repo_info[:owner],
41
41
  repository_name: repo_info[:name])
42
- last_release = find_version(versions: vs, pre_release: false)
43
- last_pre_release = find_version(versions: vs, pre_release: true)
42
+ last_release = VersionHelper.find_version(versions: vs, pre_release: false)
43
+ last_pre_release = VersionHelper.find_version(versions: vs, pre_release: true)
44
44
  result_object[gem_name].merge!({
45
- latest_version: gem_version(version_hash: last_release),
46
- latest_version_release_date: release_date(version_hash: last_release),
45
+ latest_version: VersionHelper.gem_version(version_hash: last_release),
46
+ latest_version_release_date: VersionHelper.release_date(version_hash: last_release),
47
47
 
48
- latest_pre_release_version: gem_version(version_hash: last_pre_release),
49
- latest_pre_release_version_release_date: release_date(version_hash: last_pre_release),
48
+ latest_pre_release_version: VersionHelper.gem_version(version_hash: last_pre_release),
49
+ latest_pre_release_version_release_date: VersionHelper.release_date(version_hash: last_pre_release),
50
50
 
51
51
  repository_url: repo_info[:url],
52
52
  last_commit_date: last_commit_date,
53
53
  })
54
54
 
55
55
  unless vs.empty?
56
- result_object[gem_name].merge!({ ruby_gems_url: "https://rubygems.org/gems/#{gem_name}" })
56
+ result_object[gem_name][:ruby_gems_url] = "https://rubygems.org/gems/#{gem_name}"
57
57
  end
58
58
 
59
59
  if gem_version
60
- version_used = find_version(versions: vs, version_string: gem_version)
60
+ version_used = VersionHelper.find_version(versions: vs, version_string: gem_version)
61
61
  result_object[gem_name].merge!({
62
- # global_warning: global_warning,
63
62
  up_to_date:
64
- up_to_date?(
65
- version_used: version_used,
66
- latest_version: last_release,
67
- latest_pre_release_version: last_pre_release
68
- ),
63
+ VersionHelper.up_to_date?(
64
+ version_used: version_used,
65
+ latest_version: last_release,
66
+ latest_pre_release_version: last_pre_release
67
+ ),
69
68
 
70
- version_used_release_date: release_date(version_hash: version_used),
69
+ version_used_release_date: VersionHelper.release_date(version_hash: version_used),
71
70
  })
72
71
  end
73
72
  rescue StandardError => e
@@ -82,7 +81,6 @@ module StillActive
82
81
  end
83
82
 
84
83
  def repository_info(gem_name:, versions:)
85
- # binding.break # if gem_name == "still_active"
86
84
  valid_repository_url =
87
85
  installed_gem_urls(gem_name: gem_name).find { |url| Repository.valid?(url: url) } ||
88
86
  rubygems_versions_repository_url(versions: versions).find { |url| Repository.valid?(url: url) } ||
@@ -90,7 +88,6 @@ module StillActive
90
88
  Repository.url_with_owner_and_name(url: valid_repository_url)
91
89
  end
92
90
 
93
- # does not make network requests
94
91
  def installed_gem_urls(gem_name:)
95
92
  info = Gem::Dependency.new(gem_name).matching_specs.first
96
93
  return [] if info.nil?
@@ -101,15 +98,12 @@ module StillActive
101
98
  ].compact.uniq
102
99
  end
103
100
 
104
- # does not make network requests
105
101
  def rubygems_versions_repository_url(versions:)
106
102
  versions
107
- .map { |version| version.dig("metadata", "source_code_uri") }
108
- .compact
103
+ .filter_map { |version| version.dig("metadata", "source_code_uri") }
109
104
  .uniq
110
105
  end
111
106
 
112
- # makes network request
113
107
  def rubygems_gem_repository_url(gem_name:)
114
108
  info = Gems.info(gem_name)
115
109
  return [] if info.nil?
@@ -122,7 +116,6 @@ module StillActive
122
116
  []
123
117
  end
124
118
 
125
- # makes network request
126
119
  def last_commit(source:, repository_owner:, repository_name:)
127
120
  case source.to_sym
128
121
  when :github
@@ -132,7 +125,6 @@ module StillActive
132
125
  end
133
126
  end
134
127
 
135
- # makes network request
136
128
  def last_commit_date(source:, repository_owner:, repository_name:)
137
129
  commit = last_commit(source: source, repository_owner: repository_owner, repository_name: repository_name)
138
130
  case source.to_sym
data/still_active.gemspec CHANGED
@@ -10,9 +10,9 @@ Gem::Specification.new do |spec|
10
10
 
11
11
  spec.summary = "Check if gems are under active development."
12
12
  spec.description = "Obtain last release, pre-release, and last commit date to determine if a gem is still under active development."
13
- spec.homepage = "https://github.com/SeanLF/still_active."
13
+ spec.homepage = "https://github.com/SeanLF/still_active"
14
14
  spec.license = "MIT"
15
- spec.required_ruby_version = ">= 2.6.0"
15
+ spec.required_ruby_version = ">= 2.7.0"
16
16
 
17
17
  # spec.metadata["allowed_push_host"] = "TODO: Set to 'https://mygemserver.com'"
18
18
 
@@ -35,12 +35,15 @@ Gem::Specification.new do |spec|
35
35
  spec.add_development_dependency("debug")
36
36
  spec.add_development_dependency("faker")
37
37
  spec.add_development_dependency("rubocop")
38
+ spec.add_development_dependency("rubocop-performance")
39
+ spec.add_development_dependency("rubocop-rspec")
38
40
  spec.add_development_dependency("rubocop-shopify")
39
41
 
40
42
  spec.add_runtime_dependency("activesupport")
41
43
  spec.add_runtime_dependency("async")
42
44
  # spec.add_runtime_dependency("cli-ui")
43
45
  spec.add_runtime_dependency("async-http")
46
+ spec.add_runtime_dependency("bundler", ">= 2.0")
44
47
  spec.add_runtime_dependency("gems")
45
48
  spec.add_runtime_dependency("github_api")
46
49
  # spec.add_runtime_dependency("gitlab")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: still_active
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Floyd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-07 00:00:00.000000000 Z
11
+ date: 2022-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dead_end
@@ -66,6 +66,34 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-performance
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: rubocop-shopify
71
99
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +150,20 @@ dependencies:
122
150
  - - ">="
123
151
  - !ruby/object:Gem::Version
124
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: bundler
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '2.0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '2.0'
125
167
  - !ruby/object:Gem::Dependency
126
168
  name: gems
127
169
  requirement: !ruby/object:Gem::Requirement
@@ -159,7 +201,9 @@ executables:
159
201
  extensions: []
160
202
  extra_rdoc_files: []
161
203
  files:
162
- - ".github/workflows/main.yml"
204
+ - ".github/workflows/codeql-analysis.yml"
205
+ - ".github/workflows/rspec.yml"
206
+ - ".github/workflows/rubocop-analysis.yml"
163
207
  - ".gitignore"
164
208
  - ".rspec"
165
209
  - ".rubocop.yml"
@@ -172,6 +216,7 @@ files:
172
216
  - bin/console
173
217
  - bin/setup
174
218
  - bin/still_active
219
+ - fixtures/vcr_cassettes/gems.yml
175
220
  - lib/helpers/bundler_helper.rb
176
221
  - lib/helpers/emoji_helper.rb
177
222
  - lib/helpers/markdown_helper.rb
@@ -185,13 +230,13 @@ files:
185
230
  - lib/still_active/version.rb
186
231
  - lib/still_active/workflow.rb
187
232
  - still_active.gemspec
188
- homepage: https://github.com/SeanLF/still_active.
233
+ homepage: https://github.com/SeanLF/still_active
189
234
  licenses:
190
235
  - MIT
191
236
  metadata:
192
- homepage_uri: https://github.com/SeanLF/still_active.
193
- source_code_uri: https://github.com/SeanLF/still_active.
194
- changelog_uri: https://github.com/SeanLF/still_active./blob/main/CHANGELOG.md
237
+ homepage_uri: https://github.com/SeanLF/still_active
238
+ source_code_uri: https://github.com/SeanLF/still_active
239
+ changelog_uri: https://github.com/SeanLF/still_active/blob/main/CHANGELOG.md
195
240
  post_install_message:
196
241
  rdoc_options: []
197
242
  require_paths:
@@ -200,14 +245,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
200
245
  requirements:
201
246
  - - ">="
202
247
  - !ruby/object:Gem::Version
203
- version: 2.6.0
248
+ version: 2.7.0
204
249
  required_rubygems_version: !ruby/object:Gem::Requirement
205
250
  requirements:
206
251
  - - ">="
207
252
  - !ruby/object:Gem::Version
208
253
  version: '0'
209
254
  requirements: []
210
- rubygems_version: 3.2.30
255
+ rubygems_version: 3.3.5
211
256
  signing_key:
212
257
  specification_version: 4
213
258
  summary: Check if gems are under active development.
@@ -1,16 +0,0 @@
1
- name: Ruby
2
-
3
- on: [push,pull_request]
4
-
5
- jobs:
6
- build:
7
- runs-on: ubuntu-latest
8
- steps:
9
- - uses: actions/checkout@v2
10
- - name: Set up Ruby
11
- uses: ruby/setup-ruby@v1
12
- with:
13
- ruby-version: 3.0.2
14
- bundler-cache: true
15
- - name: Run the default task
16
- run: bundle exec rake