Class: Gemview::Gem
- Inherits:
-
Object
show all
- Defined in:
- lib/gemview/gem.rb
Defined Under Namespace
Classes: Dependency, Version
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(options) ⇒ Gem
Returns a new instance of Gem.
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/gemview/gem.rb', line 23
def initialize(options)
@name = options.fetch("name")
@downloads = options.fetch("downloads")
@version = options.fetch("version")
@version_downloads = options.fetch("version_downloads")
@version_created_at = options["version_created_at"]
&.then { |time| Time.parse(time) }
@authors = options.fetch("authors")
@info = options.fetch("info")
@licenses = (options.fetch("licenses") || []).freeze
@project_uri = options.fetch("project_uri")
@homepage_uri = options.fetch("homepage_uri")
@source_code_uri = options.fetch("source_code_uri")
@changelog_uri = options.fetch("changelog_uri")
@development_dependencies = options
.dig("dependencies", "development")
&.map { |hash| Dependency.new(hash).freeze }
&.freeze
@runtime_dependencies = options
.dig("dependencies", "runtime")
&.map { |hash| Dependency.new(hash).freeze }
&.freeze
end
|
Instance Attribute Details
#authors ⇒ Object
Returns the value of attribute authors.
5
6
7
|
# File 'lib/gemview/gem.rb', line 5
def authors
@authors
end
|
#changelog_uri ⇒ Object
Returns the value of attribute changelog_uri.
5
6
7
|
# File 'lib/gemview/gem.rb', line 5
def changelog_uri
@changelog_uri
end
|
#development_dependencies ⇒ Object
Returns the value of attribute development_dependencies.
5
6
7
|
# File 'lib/gemview/gem.rb', line 5
def development_dependencies
@development_dependencies
end
|
#downloads ⇒ Object
Returns the value of attribute downloads.
5
6
7
|
# File 'lib/gemview/gem.rb', line 5
def downloads
@downloads
end
|
#homepage_uri ⇒ Object
Returns the value of attribute homepage_uri.
5
6
7
|
# File 'lib/gemview/gem.rb', line 5
def homepage_uri
@homepage_uri
end
|
#info ⇒ Object
Returns the value of attribute info.
5
6
7
|
# File 'lib/gemview/gem.rb', line 5
def info
@info
end
|
#licenses ⇒ Object
Returns the value of attribute licenses.
5
6
7
|
# File 'lib/gemview/gem.rb', line 5
def licenses
@licenses
end
|
#name ⇒ Object
Returns the value of attribute name.
5
6
7
|
# File 'lib/gemview/gem.rb', line 5
def name
@name
end
|
#project_uri ⇒ Object
Returns the value of attribute project_uri.
5
6
7
|
# File 'lib/gemview/gem.rb', line 5
def project_uri
@project_uri
end
|
#runtime_dependencies ⇒ Object
Returns the value of attribute runtime_dependencies.
5
6
7
|
# File 'lib/gemview/gem.rb', line 5
def runtime_dependencies
@runtime_dependencies
end
|
#source_code_uri ⇒ Object
Returns the value of attribute source_code_uri.
5
6
7
|
# File 'lib/gemview/gem.rb', line 5
def source_code_uri
@source_code_uri
end
|
#version ⇒ Object
Returns the value of attribute version.
5
6
7
|
# File 'lib/gemview/gem.rb', line 5
def version
@version
end
|
#version_created_at ⇒ Object
Returns the value of attribute version_created_at.
5
6
7
|
# File 'lib/gemview/gem.rb', line 5
def version_created_at
@version_created_at
end
|
#version_downloads ⇒ Object
Returns the value of attribute version_downloads.
5
6
7
|
# File 'lib/gemview/gem.rb', line 5
def version_downloads
@version_downloads
end
|
Class Method Details
.author(username:) ⇒ Array<Gemview::Gem>
225
226
227
|
# File 'lib/gemview/gem.rb', line 225
def self.author(username:)
Client.v1.gems(username).map { |gem_hash| new(gem_hash) }
end
|
.find(name:, version: nil) ⇒ Gemview::Gem
207
208
209
210
211
212
213
214
215
|
# File 'lib/gemview/gem.rb', line 207
def self.find(name:, version: nil)
@find ||= {}
@find[[name, version]] ||= new case version
when String
Client.v2.info(name, version)
else
Client.v1.info(name)
end
end
|
235
236
237
|
# File 'lib/gemview/gem.rb', line 235
def self.just_updated
Client.v1.just_updated.map { |gem_hash| new(gem_hash) }
end
|
230
231
232
|
# File 'lib/gemview/gem.rb', line 230
def self.latest
Client.v1.latest.map { |gem_hash| new(gem_hash) }
end
|
219
220
221
|
# File 'lib/gemview/gem.rb', line 219
def self.search(term:)
Client.v1.search(term).map { |gem_hash| new(gem_hash) }
end
|
241
242
243
244
|
# File 'lib/gemview/gem.rb', line 241
def self.versions(name:)
@versions ||= {}
@versions[name] ||= Client.v1.versions(name).map { |gem_hash| Version.new(gem_hash).freeze }.freeze
end
|
Instance Method Details
#changelog ⇒ String?
202
|
# File 'lib/gemview/gem.rb', line 202
def changelog = git_repo&.changelog
|
#changelog? ⇒ Boolean
199
|
# File 'lib/gemview/gem.rb', line 199
def changelog? = git_repo? && git_repo.changelog?
|
#dependencies? ⇒ Boolean
126
127
128
|
# File 'lib/gemview/gem.rb', line 126
def dependencies?
!runtime_dependencies.nil? && !development_dependencies.nil?
end
|
#dependencies_str ⇒ String
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
# File 'lib/gemview/gem.rb', line 131
def dependencies_str
runtime_deps_str = runtime_dependencies.join("\n").strip
runtime_deps_str = if runtime_deps_str.empty?
"(none)"
else
"```rb\n#{runtime_deps_str}\n```"
end
dev_deps_str = development_dependencies.join("\n").strip
dev_deps_str = if dev_deps_str.empty?
"(none)"
else
"```rb\n#{dev_deps_str}\n```"
end
dependencies = <<~DEPENDENCIES
## [Dependencies]
### Runtime Dependencies:
#{runtime_deps_str}
### Development Dependencies:
#{dev_deps_str}
DEPENDENCIES
Terminal.prettify_markdown(dependencies)
end
|
178
179
180
181
182
183
184
185
186
187
|
# File 'lib/gemview/gem.rb', line 178
def git_repo
return @git_repo if defined? @git_repo
@git_repo = GitRepo.from_urls(
homepage_uri: homepage_uri,
source_code_uri: source_code_uri,
changelog_uri: changelog_uri,
version: version
)
end
|
#git_repo? ⇒ Boolean
190
|
# File 'lib/gemview/gem.rb', line 190
def git_repo? = !git_repo.nil?
|
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/gemview/gem.rb', line 100
def
info_lines = Strings.wrap(info.gsub(/\s+/, " ").strip, 79).lines.map(&:strip)
if info_lines.size > 3
info_lines = info_lines.take(3)
info_lines.last << "…"
end
= <<~HEADER
## [#{version}] #{name}
```
#{info_lines.join("\n")}
```
| Updated at | #{version_created_at} |
| Total Downloads | #{humanized_downloads} |
| Authors | #{authors} |
| Licenses | #{licenses} |
| Project URI | #{project_uri} |
HEADER
Terminal.prettify_markdown()
end
|
#humanized_downloads ⇒ String
Ex. 1234567890 -> “1,234,567,890”
#readme ⇒ String?
196
|
# File 'lib/gemview/gem.rb', line 196
def readme = git_repo&.readme
|
#readme? ⇒ Boolean
193
|
# File 'lib/gemview/gem.rb', line 193
def readme? = git_repo? && git_repo.readme?
|
#selector_str ⇒ String
83
84
85
86
87
88
89
90
|
# File 'lib/gemview/gem.rb', line 83
def selector_str
one_line_info = info.gsub(/\s+/, " ").strip
<<~SELECT
#{name} [#{version}]
-- #{Strings.truncate(one_line_info, 75)}
SELECT
end
|
#title_str(subsection:) ⇒ String
93
94
95
96
97
|
# File 'lib/gemview/gem.rb', line 93
def title_str(subsection:)
Terminal.prettify_markdown(<<~LINE)
## [#{version}] #{name} >> #{subsection}
LINE
end
|
#versions_str ⇒ String
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
|
# File 'lib/gemview/gem.rb', line 160
def versions_str
rows = self.class.versions(name: name).map do |version|
pretty_downloads = Number.humanized_integer(version.downloads)
"| #{version.release_date} | #{version.version} | #{pretty_downloads} | #{version.ruby_version}"
end
table = <<~TABLE
## [Versions]
| *Release Date* | *Gem Version* | *Downloads* | *Ruby Version* |
|----------------|---------------|-------------|----------------|
#{rows.join("\n")}
TABLE
Terminal.prettify_markdown(table)
end
|