Module: Label
- Defined in:
- lib/label.rb,
lib/label/version.rb,
lib/label/description_formatter.rb
Defined Under Namespace
Classes: DescriptionFormatter
Constant Summary collapse
- GEM_REGEXP =
/^(?<whitespace> *)gem ['"](?<name>.+?)['"](:?, ['"](?<version>.+?)['"])?/
- VERSION =
"1.0.0"
Class Method Summary collapse
-
.describe(name, version = nil) ⇒ Object
Describe the given gem.
- .label(gemfile = "Gemfile") ⇒ Object
-
.process(gemfile, describing = nil, described = nil) ⇒ Object
Process the given Gemfile.
-
.read(file) ⇒ Object
Read the given file.
-
.write(file, text) ⇒ Object
Write to the given file.
Class Method Details
.describe(name, version = nil) ⇒ Object
Describe the given gem.
name - A String with the name of a gem. version - A String describing the version of a gem.
Returns a String.
87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/label.rb', line 87 def describe name, version = nil requirement = Gem::Requirement.new(version) or_raise = -> do raise Gem::LoadError.new("Could not find '#{name}' (#{requirement})") end specs.find or_raise do |spec| spec.name == name && requirement.satisfied_by?(spec.version) end.summary end |
.label(gemfile = "Gemfile") ⇒ Object
14 15 16 17 18 19 20 21 |
# File 'lib/label.rb', line 14 def label gemfile = "Gemfile" describing = lambda { |name| STDOUT.write "#{name}: " } described = lambda { |description| STDOUT.puts description } output = process gemfile, describing, described write gemfile, output end |
.process(gemfile, describing = nil, described = nil) ⇒ Object
Process the given Gemfile.
gemfile - A String describing the path to a Gemfile. describing - A Proc to be called once a query to describe a gem begins.
Receives the name of the gem as an argument.
described - A Proc to be called once a query to describe a gem completes.
Receives the description as an argument.
30 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 57 58 59 60 61 62 |
# File 'lib/label.rb', line 30 def process gemfile, describing = nil, described = nil file = read gemfile lines = file.read.split "\n" processed_lines = [] lines.each_with_index do |line, i| match = line.match GEM_REGEXP if match previous_line = lines[i - 1] whitespace = match[:whitespace] name = match[:name] version = match[:version] unless previous_line =~ /^ *#/ describing.call(name) if describing description = describe(name, version) described.call(description) if described processed_lines << format(description, "#{whitespace}#") end end processed_lines << line end processed_lines.join("\n") + "\n" end |
.read(file) ⇒ Object
Read the given file.
file - A String describing the path to a file.
67 68 69 |
# File 'lib/label.rb', line 67 def read file File.open file end |
.write(file, text) ⇒ Object
Write to the given file.
file - A String describing the path to a file. text - A String describing text to be written.
75 76 77 78 79 |
# File 'lib/label.rb', line 75 def write file, text File.open file, "w" do |file| file.write text end end |