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
137 138 139 140 141 142 143 144 |
# File 'lib/tapioca/gemfile.rb', line 137 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
134 135 136 |
# File 'lib/tapioca/gemfile.rb', line 134 def files @files end |
#full_gem_path ⇒ Object (readonly)
: String
131 132 133 |
# File 'lib/tapioca/gemfile.rb', line 131 def full_gem_path @full_gem_path end |
#version ⇒ Object (readonly)
: String
131 132 133 |
# File 'lib/tapioca/gemfile.rb', line 131 def version @version end |
Class Method Details
.spec_lookup_by_file_path ⇒ Object
: -> Hash[String, Gemfile::GemSpec]
111 112 113 114 115 116 117 |
# File 'lib/tapioca/gemfile.rb', line 111 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
147 148 149 |
# File 'lib/tapioca/gemfile.rb', line 147 def ==(other) GemSpec === other && other.name == name && other.version == version end |
#contains_path?(path) ⇒ Boolean
: (String path) -> bool
172 173 174 175 176 177 178 |
# File 'lib/tapioca/gemfile.rb', line 172 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
162 163 164 |
# File 'lib/tapioca/gemfile.rb', line 162 def dependencies @spec.dependencies end |
#export_rbi_files? ⇒ Boolean
: -> bool
202 203 204 |
# File 'lib/tapioca/gemfile.rb', line 202 def export_rbi_files? exported_rbi_files.any? end |
#exported_rbi_files ⇒ Object
: -> Array
197 198 199 |
# File 'lib/tapioca/gemfile.rb', line 197 def exported_rbi_files @exported_rbi_files ||= Dir.glob("#{full_gem_path}/rbi/**/*.rbi").sort end |
#exported_rbi_tree ⇒ Object
: -> RBI::MergeTree
207 208 209 210 211 212 213 214 215 216 |
# File 'lib/tapioca/gemfile.rb', line 207 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
152 153 154 |
# File 'lib/tapioca/gemfile.rb', line 152 def ignore?(gemfile_dir) gem_ignored? || gem_in_app_dir?(gemfile_dir, full_gem_path) end |
#name ⇒ Object
: -> String
157 158 159 |
# File 'lib/tapioca/gemfile.rb', line 157 def name @spec.name end |
#parse_yard_docs ⇒ Object
: -> void
181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/tapioca/gemfile.rb', line 181 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
167 168 169 |
# File 'lib/tapioca/gemfile.rb', line 167 def rbi_file_name "#{name}@#{version}.rbi" end |
#relative_path_for(file) ⇒ Object
: (Pathname file) -> Pathname
219 220 221 222 223 224 225 |
# File 'lib/tapioca/gemfile.rb', line 219 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 |