Class: Tapioca::Gemfile::GemSpec
- Inherits:
-
Object
- Object
- Tapioca::Gemfile::GemSpec
- Extended by:
- T::Sig
- Includes:
- Tapioca::GemHelper
- Defined in:
- lib/tapioca/gemfile.rb
Constant Summary collapse
- IGNORED_GEMS =
[ "sorbet", "sorbet-static", "sorbet-runtime", "sorbet-static-and-runtime", "debug", "irb", "fakefs", ].freeze
Instance Attribute Summary collapse
-
#files ⇒ Object
readonly
: Array.
-
#full_gem_path ⇒ Object
readonly
: String.
-
#version ⇒ Object
readonly
: String.
Class Method Summary collapse
-
.spec_lookup_by_file_path ⇒ Object
: -> Hash[String, Gemfile::GemSpec].
Instance Method Summary collapse
-
#==(other) ⇒ Object
: (BasicObject other) -> bool.
-
#contains_path?(path) ⇒ Boolean
: (String path) -> bool.
-
#dependencies ⇒ Object
: -> Array.
-
#export_rbi_files? ⇒ Boolean
: -> bool.
-
#exported_rbi_files ⇒ Object
: -> Array.
-
#exported_rbi_tree ⇒ Object
: -> RBI::MergeTree.
-
#ignore?(gemfile_dir) ⇒ Boolean
: (String gemfile_dir) -> bool.
-
#initialize(spec) ⇒ GemSpec
constructor
: (Spec spec) -> void.
-
#name ⇒ Object
: -> String.
-
#parse_yard_docs ⇒ Object
: -> void.
-
#rbi_file_name ⇒ Object
: -> String.
-
#relative_path_for(file) ⇒ Object
: (Pathname file) -> Pathname.
Methods included from Tapioca::GemHelper
#gem_in_app_dir?, #gem_in_bundle_path?, #gem_in_ruby_path?, #to_realpath
Constructor Details
#initialize(spec) ⇒ GemSpec
: (Spec spec) -> void
139 140 141 142 143 144 145 146 |
# File 'lib/tapioca/gemfile.rb', line 139 def initialize(spec) @spec = spec #: Tapioca::Gemfile::Spec real_gem_path = to_realpath(@spec.full_gem_path) @full_gem_path = real_gem_path #: String @version = version_string #: String @exported_rbi_files = nil #: Array[String]? @files = collect_files #: Array[Pathname] end |
Instance Attribute Details
#files ⇒ Object (readonly)
: Array
136 137 138 |
# File 'lib/tapioca/gemfile.rb', line 136 def files @files end |
#full_gem_path ⇒ Object (readonly)
: String
133 134 135 |
# File 'lib/tapioca/gemfile.rb', line 133 def full_gem_path @full_gem_path end |
#version ⇒ Object (readonly)
: String
133 134 135 |
# File 'lib/tapioca/gemfile.rb', line 133 def version @version end |
Class Method Details
.spec_lookup_by_file_path ⇒ Object
: -> Hash[String, Gemfile::GemSpec]
113 114 115 116 117 118 119 |
# File 'lib/tapioca/gemfile.rb', line 113 def spec_lookup_by_file_path @lookup ||= [*::Gem::Specification.default_stubs, *::Gem::Specification.stubs] .map! { |spec| new(spec.to_spec) } .flat_map do |spec| spec.files.filter_map { |file| [file.realpath.to_s, spec] if file.exist? } end.to_h #: Hash[String, Gemfile::GemSpec]? end |
Instance Method Details
#==(other) ⇒ Object
: (BasicObject other) -> bool
149 150 151 |
# File 'lib/tapioca/gemfile.rb', line 149 def ==(other) GemSpec === other && other.name == name && other.version == version end |
#contains_path?(path) ⇒ Boolean
: (String path) -> bool
174 175 176 177 178 179 180 |
# File 'lib/tapioca/gemfile.rb', line 174 def contains_path?(path) if default_gem? files.any? { |file| file.to_s == to_realpath(path) } else path_in_dir?(to_realpath(path), full_gem_path) || has_parent_gemspec?(path) end end |
#dependencies ⇒ Object
: -> Array
164 165 166 |
# File 'lib/tapioca/gemfile.rb', line 164 def dependencies @spec.dependencies end |
#export_rbi_files? ⇒ Boolean
: -> bool
204 205 206 |
# File 'lib/tapioca/gemfile.rb', line 204 def export_rbi_files? exported_rbi_files.any? end |
#exported_rbi_files ⇒ Object
: -> Array
199 200 201 |
# File 'lib/tapioca/gemfile.rb', line 199 def exported_rbi_files @exported_rbi_files ||= Dir.glob("#{full_gem_path}/rbi/**/*.rbi").sort end |
#exported_rbi_tree ⇒ Object
: -> RBI::MergeTree
209 210 211 212 213 214 215 216 217 218 |
# File 'lib/tapioca/gemfile.rb', line 209 def exported_rbi_tree rewriter = RBI::Rewriters::Merge.new(keep: RBI::Rewriters::Merge::Keep::NONE) exported_rbi_files.each do |file| rbi = RBI::Parser.parse_file(file) rewriter.merge(rbi) end rewriter.tree end |
#ignore?(gemfile_dir) ⇒ Boolean
: (String gemfile_dir) -> bool
154 155 156 |
# File 'lib/tapioca/gemfile.rb', line 154 def ignore?(gemfile_dir) gem_ignored? || gem_in_app_dir?(gemfile_dir, full_gem_path) end |
#name ⇒ Object
: -> String
159 160 161 |
# File 'lib/tapioca/gemfile.rb', line 159 def name @spec.name end |
#parse_yard_docs ⇒ Object
: -> void
183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
# File 'lib/tapioca/gemfile.rb', line 183 def parse_yard_docs files.each do |path| YARD.parse(path.to_s, [], Logger::Severity::FATAL) rescue RangeError # In some circumstances, YARD will raise an error when parsing a file # that is actually valid Ruby. We don't want tapioca to halt in these # cases, so we'll rescue the error, pretend like there was no # documentation, and move on. # # This can be removed when https://github.com/lsegal/yard/issues/1536 # is resolved and released. [] end end |
#rbi_file_name ⇒ Object
: -> String
169 170 171 |
# File 'lib/tapioca/gemfile.rb', line 169 def rbi_file_name "#{name}@#{version}.rbi" end |
#relative_path_for(file) ⇒ Object
: (Pathname file) -> Pathname
221 222 223 224 225 226 227 |
# File 'lib/tapioca/gemfile.rb', line 221 def relative_path_for(file) if default_gem? file.realpath.relative_path_from(RbConfig::CONFIG["rubylibdir"]) else file.realpath.relative_path_from(full_gem_path) end end |