Module: Fbe
- Defined in:
- lib/fbe.rb,
lib/fbe/unmask_repos.rb more...
Overview
Unmask.
- Author
-
Yegor Bugayenko (yegor256@gmail.com)
- Copyright
-
Copyright © 2024 Zerocracy
- License
-
MIT
Defined Under Namespace
Classes: Conclude, FakeOctokit, Iterate
Constant Summary collapse
- VERSION =
Current version of the gem (changed by .rultor.yml on every release)
'0.0.14'
Class Method Summary collapse
-
.conclude(fb: Fbe.fb, judge: $judge, loog: $loog, options: $options, global: $global) ⇒ Object
Create a conclude code block.
- .fb(fb: $fb, global: $global, options: $options) ⇒ Object
-
.if_absent(fb: Fbe.fb) {|f| ... } ⇒ Object
Injects a fact if it’s absent in the factbase.
-
.iterate(fb: Fbe.fb, loog: $loog, options: $options, global: $global) ⇒ Object
Create a conclude code block.
- .mask_to_regex(mask) ⇒ Object
- .octo(options: $options, global: $global, loog: Loog::NULL) ⇒ Object
- .unmask_repos(options: $options, global: $global, loog: $loog) ⇒ Object
Class Method Details
.conclude(fb: Fbe.fb, judge: $judge, loog: $loog, options: $options, global: $global) ⇒ Object
Create a conclude code block.
31 32 33 34 |
# File 'lib/fbe/conclude.rb', line 31 def Fbe.conclude(fb: Fbe.fb, judge: $judge, loog: $loog, options: $options, global: $global, &) c = Fbe::Conclude.new(fb:, judge:, loog:, options:, global:) c.instance_eval(&) end |
.fb(fb: $fb, global: $global, options: $options) ⇒ Object
[View source]
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/fbe/fb.rb', line 33 def Fbe.fb(fb: $fb, global: $global, options: $options) global[:fb] ||= begin rules = Dir.glob(File.join('rules', '*.fe')).map { |f| File.read(f) } fbe = Factbase::Rules.new( fb, "(and \n#{rules.join("\n")}\n)", uid: '_id' ) fbe = Factbase::Pre.new(fbe) do |f| max = fb.query('(eq _id (max _id))').each.to_a.first f._id = (max.nil? ? 0 : max._id) + 1 f._time = Time.now f._version = "#{Factbase::VERSION}/#{Judges::VERSION}/#{.judges_action_version}" end Factbase::Looged.new(fbe, Loog::NULL) end end |
.if_absent(fb: Fbe.fb) {|f| ... } ⇒ Object
Injects a fact if it’s absent in the factbase.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/fbe/if_absent.rb', line 31 def Fbe.if_absent(fb: Fbe.fb) attrs = {} f = others(map: attrs) do |*args| k = args[0] if k.end_with?('=') @map[k[0..-2].to_sym] = args[1] else @map[k.to_sym] end end yield f q = attrs.except('_id', '_time', '_version').map do |k, v| vv = v.to_s if v.is_a?(String) vv = "'#{vv.gsub('"', '\\\\"').gsub("'", "\\\\'")}'" elsif v.is_a?(Time) vv = v.utc.iso8601 end "(eq #{k} #{vv})" end.join(' ') q = "(and #{q})" return unless fb.query(q).each.to_a.empty? n = fb.insert attrs.each { |k, v| n.send("#{k}=", v) } n end |
.iterate(fb: Fbe.fb, loog: $loog, options: $options, global: $global) ⇒ Object
Create a conclude code block.
31 32 33 34 |
# File 'lib/fbe/iterate.rb', line 31 def Fbe.iterate(fb: Fbe.fb, loog: $loog, options: $options, global: $global, &) c = Fbe::Iterate.new(fb:, loog:, options:, global:) c.instance_eval(&) end |
.mask_to_regex(mask) ⇒ Object
[View source]
32 33 34 35 36 |
# File 'lib/fbe/unmask_repos.rb', line 32 def self.mask_to_regex(mask) org, repo = mask.split('/') raise "Org '#{org}' can't have an asterisk" if org.include?('*') Regexp.compile("#{org}/#{repo.gsub('*', '.*')}") end |
.octo(options: $options, global: $global, loog: Loog::NULL) ⇒ Object
[View source]
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/fbe/octo.rb', line 34 def Fbe.octo(options: $options, global: $global, loog: Loog::NULL) raise 'The $global is not set' if global.nil? global[:octo] ||= begin if .testing.nil? o = Octokit::Client.new token = .github_token loog.debug("The 'github_token' option is not provided") if token.nil? token = ENV.fetch('GITHUB_TOKEN', nil) if token.nil? loog.debug("The 'GITHUB_TOKEN' environment variable is not set") if token.nil? if token.nil? loog.warn('Accessing GitHub API without a token!') elsif token.empty? loog.warn('The GitHub API token is an empty string, won\'t use it') else o = Octokit::Client.new(access_token: token) loog.info("Accessing GitHub API with a token (#{token.length} chars)") end o.auto_paginate = true o.per_page = 100 o. = { request: { open_timeout: 15, timeout: 15 } } stack = Faraday::RackBuilder.new do |builder| builder.use(Faraday::Retry::Middleware) builder.use(Faraday::HttpCache, serializer: Marshal, shared_cache: false) builder.use(Octokit::Response::RaiseError) builder.adapter(Faraday.default_adapter) end o.middleware = stack o = Verbose.new(o, log: loog) else loog.debug('The connection to GitHub API is mocked') o = Fbe::FakeOctokit.new end decoor(o, loog:) do def off_quota left = @origin.rate_limit.remaining if left < 5 @loog.info("To much GitHub API quota consumed already (remaining=#{left}), stopping") true else false end end def user_name_by_id(id) json = @origin.user(id) name = json[:login] @loog.debug("GitHub user ##{id} has a name: @#{name}") name end def repo_id_by_name(name) json = @origin.repository(name) id = json[:id] @loog.debug("GitHub repository #{name} has an ID: ##{id}") id end def repo_name_by_id(id) json = @origin.repository(id) name = json[:full_name] @loog.debug("GitHub repository ##{id} has a name: #{name}") name end end end end |
.unmask_repos(options: $options, global: $global, loog: $loog) ⇒ Object
[View source]
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/fbe/unmask_repos.rb', line 38 def self.unmask_repos(options: $options, global: $global, loog: $loog) repos = [] masks = (.repositories || '').split(',') masks.reject { |m| m.start_with?('-') }.each do |mask| unless mask.include?('*') repos << mask next end re = Fbe.mask_to_regex(mask) Fbe.octo(loog:, global:, options:).repositories(mask.split('/')[0]).each do |r| repos << r[:full_name] if re.match?(r[:full_name]) end end masks.select { |m| m.start_with?('-') }.each do |mask| re = Fbe.mask_to_regex(mask[1..]) repos.reject! { |r| re.match?(r) } end raise "No repos found matching: #{.repositories}" if repos.empty? loog.debug("Scanning #{repos.size} repositories: #{repos.join(', ')}...") repos end |