Class: GemXray::GemMetadataResolver
- Inherits:
-
Object
- Object
- GemXray::GemMetadataResolver
- Defined in:
- lib/gemxray/gem_metadata_resolver.rb
Defined Under Namespace
Classes: RemotePackage
Constant Summary collapse
- CONSTANT_PATTERN =
/^\s*(?:class|module)\s+([A-Z][A-Za-z0-9_:]*)/.freeze
Instance Method Summary collapse
- #constant_candidates_for(gem_name, version_requirement: nil) ⇒ Object
-
#initialize(cache_dir: File.join(Dir.home, ".gemxray", "cache", "gem_metadata"), spec_fetcher: Gem::SpecFetcher.fetcher, remote_fetcher: Gem::RemoteFetcher.fetcher) ⇒ GemMetadataResolver
constructor
A new instance of GemMetadataResolver.
- #railtie?(gem_name, version_requirement: nil) ⇒ Boolean
Constructor Details
#initialize(cache_dir: File.join(Dir.home, ".gemxray", "cache", "gem_metadata"), spec_fetcher: Gem::SpecFetcher.fetcher, remote_fetcher: Gem::RemoteFetcher.fetcher) ⇒ GemMetadataResolver
Returns a new instance of GemMetadataResolver.
13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/gemxray/gem_metadata_resolver.rb', line 13 def initialize(cache_dir: File.join(Dir.home, ".gemxray", "cache", "gem_metadata"), spec_fetcher: Gem::SpecFetcher.fetcher, remote_fetcher: Gem::RemoteFetcher.fetcher) @cache_dir = cache_dir @spec_fetcher = spec_fetcher @remote_fetcher = remote_fetcher @constant_cache = {} @railtie_cache = {} @remote_package_cache = {} @remote_fetch_available = true end |
Instance Method Details
#constant_candidates_for(gem_name, version_requirement: nil) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/gemxray/gem_metadata_resolver.rb', line 25 def constant_candidates_for(gem_name, version_requirement: nil) @constant_cache[cache_key(gem_name, version_requirement)] ||= begin defaults = default_constant_candidates(gem_name) discovered = gem_sources_for(gem_name, version_requirement).flat_map do |spec| extract_constants(spec, gem_name) end (defaults + discovered).uniq rescue StandardError default_constant_candidates(gem_name) end end |
#railtie?(gem_name, version_requirement: nil) ⇒ Boolean
37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/gemxray/gem_metadata_resolver.rb', line 37 def railtie?(gem_name, version_requirement: nil) key = cache_key(gem_name, version_requirement) return @railtie_cache[key] if @railtie_cache.key?(key) @railtie_cache[key] = gem_sources_for(gem_name, version_requirement).any? do |spec| all_ruby_files_for(spec, gem_name).any? do |path| File.read(path, encoding: "utf-8").match?(/Rails::(?:Railtie|Engine)/) rescue StandardError false end end rescue StandardError @railtie_cache[key] = false end |