label 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +4 -0
- data/AUTHORS.md +3 -2
- data/Gemfile +2 -0
- data/README.md +13 -10
- data/bin/label +5 -1
- data/lib/label.rb +7 -4
- data/lib/label/description_formatter.rb +48 -0
- data/lib/label/summary_extractor.rb +2 -2
- data/lib/label/version.rb +1 -1
- data/spec/fixtures/processed_gemfile +14 -1
- data/spec/fixtures/stock_gemfile +7 -0
- data/spec/label/description_formatter_spec.rb +59 -0
- data/spec/label/summary_extractor_spec.rb +11 -0
- data/spec/label_spec.rb +30 -0
- data/spec/spec_helper.rb +3 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25dc28997376d566445cf8c15d3151daa408eda7
|
4
|
+
data.tar.gz: c122b3799a49542703ac11ba550820f0d21d8f69
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 510ef82eab2b5627931e647aa4edf68dd0f01f83c45c27204897dc9cc34b95df36fb6c7affa1d19785cc990fc3374b4b5a0d9dfd01771e7b26771b95364c7330
|
7
|
+
data.tar.gz: 9ae86f37ba891fed191a76180f190ac79989ff9d7101e653cc227b81665258bc5d9a0b9faf421b67565fc1e5edb5eb1c55b1879281ddf462e556d95c8192079b
|
data/.travis.yml
ADDED
data/AUTHORS.md
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
-
Label is written and maintained by Johannes Gorset and various contributors:
|
1
|
+
Label is written and maintained by [Johannes Gorset](https://github.com/jgorset) and various contributors:
|
2
2
|
|
3
|
-
* Felipe Espinoza
|
3
|
+
* [Felipe Espinoza](https://github.com/fespinoza)
|
4
|
+
* [Tim Kurvers](https://github.com/timkurvers)
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Label
|
2
2
|
|
3
|
+
[](https://rubygems.org/gems/label)
|
4
|
+
[](https://travis-ci.org/jgorset/label)
|
5
|
+
[](https://gemnasium.com/jgorset/label)
|
6
|
+
[](https://codeclimate.com/github/jgorset/label)
|
7
|
+
[](https://coveralls.io/r/jgorset/label)
|
8
|
+
|
3
9
|
Label labels the gems in your Gemfile.
|
4
10
|
|
5
11
|
## Installation
|
@@ -8,17 +14,13 @@ Label labels the gems in your Gemfile.
|
|
8
14
|
|
9
15
|
## Usage
|
10
16
|
|
11
|
-
|
12
|
-
|
17
|
+
```zsh
|
18
|
+
$ label
|
19
|
+
```
|
13
20
|
|
14
21
|
```ruby
|
15
|
-
# /path/to/Gemfile
|
16
|
-
|
17
22
|
source 'http://rubygems.org'
|
18
23
|
|
19
|
-
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
|
20
|
-
gem 'rails', '4.0.0'
|
21
|
-
|
22
24
|
# Flexible authentication solution for Rails with Warden
|
23
25
|
gem 'devise'
|
24
26
|
|
@@ -31,10 +33,11 @@ gem 'carrierwave'
|
|
31
33
|
gem 'rails_admin'
|
32
34
|
```
|
33
35
|
|
34
|
-
|
36
|
+
Label will look for a `Gemfile` in your current working directory by default, but you can
|
37
|
+
tell it to look somewhere else if you like:
|
35
38
|
|
36
|
-
```
|
37
|
-
|
39
|
+
```zsh
|
40
|
+
$ label /path/to/Gemfile
|
38
41
|
```
|
39
42
|
|
40
43
|
## I love you
|
data/bin/label
CHANGED
data/lib/label.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "label/version"
|
2
2
|
require "label/gemspec_info"
|
3
|
+
require "label/description_formatter"
|
3
4
|
require "optparse"
|
4
5
|
require "ostruct"
|
5
6
|
require "gems"
|
@@ -8,12 +9,10 @@ module Label
|
|
8
9
|
|
9
10
|
class << self
|
10
11
|
|
11
|
-
def label
|
12
|
+
def label gemfile = "Gemfile"
|
12
13
|
describing = lambda { |gem| STDOUT.write "#{gem}: " }
|
13
14
|
described = lambda { |description| STDOUT.puts description }
|
14
15
|
|
15
|
-
gemfile = "Gemfile"
|
16
|
-
|
17
16
|
output = process gemfile, describing, described
|
18
17
|
|
19
18
|
write gemfile, output
|
@@ -50,7 +49,7 @@ module Label
|
|
50
49
|
|
51
50
|
described.call description if described
|
52
51
|
|
53
|
-
processed_lines << "#{whitespace}#
|
52
|
+
processed_lines << format(description, "#{whitespace}#")
|
54
53
|
end
|
55
54
|
end
|
56
55
|
|
@@ -98,6 +97,10 @@ module Label
|
|
98
97
|
|
99
98
|
private
|
100
99
|
|
100
|
+
def format description, prepend_string
|
101
|
+
DescriptionFormatter.format description, prepend_string
|
102
|
+
end
|
103
|
+
|
101
104
|
# Exctract the source options form a Gemfile gem declaration
|
102
105
|
# as :github, :path and/or :branch and return a Hash with those options
|
103
106
|
# :rubygems is the default
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Label
|
2
|
+
class DescriptionFormatter
|
3
|
+
|
4
|
+
FIRST_SENTENCE_REGEXP = /(?<first_sentence>([^.]*https?:\/\/[^\s]*\..*\..*)|([^.]*\.))(?<rest>.*)/
|
5
|
+
CHARACTERS_PER_LINE = 90
|
6
|
+
|
7
|
+
# Formats a description
|
8
|
+
#
|
9
|
+
# description - A description String to be formatted.
|
10
|
+
# separator - A String to be used as aditional separator formatting
|
11
|
+
def self.format description, separator = ''
|
12
|
+
if md = description.match(FIRST_SENTENCE_REGEXP)
|
13
|
+
break_in_lines md[:first_sentence].strip, separator
|
14
|
+
else
|
15
|
+
"#{separator} #{description}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
# split lines that are too long in multiple lines
|
22
|
+
def self.break_in_lines description, separator = ''
|
23
|
+
description.gsub!(/\n/, ' ')
|
24
|
+
description = "#{separator} #{description}"
|
25
|
+
|
26
|
+
index = CHARACTERS_PER_LINE
|
27
|
+
while description.length > index
|
28
|
+
index = previous_space_index description, index
|
29
|
+
new_line_string = "\n#{separator} "
|
30
|
+
description[index] = new_line_string
|
31
|
+
index += CHARACTERS_PER_LINE + new_line_string.length
|
32
|
+
end
|
33
|
+
description
|
34
|
+
end
|
35
|
+
|
36
|
+
# given a string returns and an index returns the index of the first previous
|
37
|
+
# space character in the given string
|
38
|
+
def self.previous_space_index description, index
|
39
|
+
limit_char = description[index]
|
40
|
+
while limit_char != ' '
|
41
|
+
index -= 1
|
42
|
+
limit_char = description[index]
|
43
|
+
end
|
44
|
+
index
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -6,7 +6,7 @@ module Label
|
|
6
6
|
STRING_REGEXPS = [
|
7
7
|
/\"(?<content>[^"]*)\"/,
|
8
8
|
/'(?<content>[^']*)'/,
|
9
|
-
/%q\{(?<content>[^}]*)\}
|
9
|
+
/%q\{(?<content>[^}]*)\}/i
|
10
10
|
]
|
11
11
|
|
12
12
|
def initialize content
|
@@ -14,7 +14,7 @@ module Label
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def extract_summary
|
17
|
-
STRING_REGEXPS.
|
17
|
+
STRING_REGEXPS.find do |regexp|
|
18
18
|
md = content.match(/\w+\.summary\s+=\s+#{regexp}/)
|
19
19
|
return md[:content] if md
|
20
20
|
end
|
data/lib/label/version.rb
CHANGED
@@ -6,9 +6,22 @@ gem 'rails', '4.0.0'
|
|
6
6
|
# Authentication
|
7
7
|
gem 'devise'
|
8
8
|
|
9
|
-
# Upload files in your Ruby applications, map them to a range of ORMs, store them on
|
9
|
+
# Upload files in your Ruby applications, map them to a range of ORMs, store them on
|
10
|
+
# different backends.
|
10
11
|
gem 'carrierwave'
|
11
12
|
|
13
|
+
# Nokogiri (é¸) is an HTML, XML, SAX, and Reader parser.
|
14
|
+
gem 'nokogiri'
|
15
|
+
# Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/].
|
16
|
+
gem 'pg'
|
17
|
+
|
18
|
+
group :production do
|
19
|
+
# \Unicorn is an HTTP server for Rack applications designed to only serve fast clients
|
20
|
+
# on low-latency, high-bandwidth connections and take advantage of features in
|
21
|
+
# Unix/Unix-like kernels.
|
22
|
+
gem 'unicorn'
|
23
|
+
end
|
24
|
+
|
12
25
|
group :test do
|
13
26
|
# BDD for Ruby
|
14
27
|
gem 'rspec'
|
data/spec/fixtures/stock_gemfile
CHANGED
@@ -0,0 +1,59 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'label/description_formatter'
|
3
|
+
|
4
|
+
def format input_string, prepend_string = "#"
|
5
|
+
Label::DescriptionFormatter.format input_string, prepend_string
|
6
|
+
end
|
7
|
+
|
8
|
+
describe Label::DescriptionFormatter do
|
9
|
+
|
10
|
+
describe '.format' do
|
11
|
+
it 'does not change descriptions that are not that long' do
|
12
|
+
description = "An IRB alternative and runtime developer console"
|
13
|
+
expect(format(description)).to eq "# #{description}"
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'with long descriptions' do
|
17
|
+
it 'returns the first sentence (ended by ".") for long descriptions' do
|
18
|
+
long_description = "Nokogiri (é\u008B¸) is an HTML, XML, SAX, and Reader "+
|
19
|
+
"parser. Among Nokogiri's\nmany features is the "+
|
20
|
+
"ability to search documents via XPath or CSS3 "+
|
21
|
+
"selectors.\n\nXML is like violence - if it "+
|
22
|
+
"doesnâ\u0080\u0099t solve your problems, you are not"+
|
23
|
+
"using\nenough of it."
|
24
|
+
result = format(long_description)
|
25
|
+
expect(result).to eq "# Nokogiri (é\u008B¸) is an HTML, XML, SAX, and Reader parser."
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'returns the first sentence an include urls correctly' do
|
29
|
+
long_description = "Pg is the Ruby interface to the {PostgreSQL RDBMS}"+
|
30
|
+
"[http://www.postgresql.org/].\n\nIt works with {PostgreSQL 8.4 and later}"+
|
31
|
+
"[http://www.postgresql.org/support/versioning/].\n\nA small example usage:\n\n"+
|
32
|
+
" #!/usr/bin/env ruby\n\n require 'pg'\n\n# Output a table of current "+
|
33
|
+
"connections to the DB\n conn =PG.connect( dbname: 'sales' )\n conn.exec("+
|
34
|
+
" \"SELECT * FROM pg_stat_activity\" ) do |result|\n puts \" PID |"+
|
35
|
+
" User | Query\"\n result.each do|row|\n puts \" %7d |"+
|
36
|
+
" %-16s | %s \" %\nrow.values_at('procpid', 'usename', 'current_query')\n"+
|
37
|
+
" end\n end"
|
38
|
+
result = format long_description, '#'
|
39
|
+
expect(result).to eq "# Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/]."
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'returns the first sentence in multiple lines when this is too long' do
|
43
|
+
long_description = "\\Unicorn is an HTTP server for Rack applications "+
|
44
|
+
"designed to only serve\nfast clients on low-latency, high-bandwidth "+
|
45
|
+
"connections and take\nadvantage of features in Unix/Unix-like kernels."+
|
46
|
+
"Slow clients should\nonly be served by placing a reverse proxy capable"+
|
47
|
+
" of fully buffering\nboth the the request and response in between "+
|
48
|
+
"\\Unicorn and slow clients."
|
49
|
+
|
50
|
+
expected_description = " # \\Unicorn is an HTTP server for Rack applications "+
|
51
|
+
"designed to only serve fast clients\n # on low-latency, high-bandwidth "+
|
52
|
+
"connections and take advantage of features in\n # Unix/Unix-like kernels."
|
53
|
+
expect(format(long_description, ' #')).to eq expected_description
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
@@ -28,11 +28,22 @@ describe Label::SummaryExtractor do
|
|
28
28
|
include_examples "extracts summary", "A series of generators an other rails \"defaults\" for my 'projects'"
|
29
29
|
end
|
30
30
|
|
31
|
+
context "for strings defined with %Q{}" do
|
32
|
+
let(:content) { "s.email = [\"fespinozacast@gmail.com\"]\n s.homepage = \"fespinoza.github.io\"\n s.summary = %Q{A series of generators an other rails \"defaults\" for my 'projects'}\n s.description = \"TODO.\"\n s.license = \"MIT\"\n\n" }
|
33
|
+
|
34
|
+
include_examples "extracts summary", "A series of generators an other rails \"defaults\" for my 'projects'"
|
35
|
+
end
|
36
|
+
|
31
37
|
context "for different gem configuration variable names" do
|
32
38
|
let(:content) { "g.email = [\"fespinozacast@gmail.com\"]\n g.homepage = \"fespinoza.github.io\"\n g.summary = %q{A series of generators an other rails \"defaults\" for my 'projects'}\n g.description = \"TODO.\"\n g.license = \"MIT\"\n\n" }
|
33
39
|
|
34
40
|
include_examples "extracts summary", "A series of generators an other rails \"defaults\" for my 'projects'"
|
35
41
|
end
|
36
42
|
|
43
|
+
context "for summaries that don't exist at all" do
|
44
|
+
let(:content) { "s.email = [\"fespinozacast@gmail.com\"]\n s.homepage = \"fespinoza.github.io\"\n s.description = \"TODO.\"\n s.license = \"MIT\"\n\n" }
|
45
|
+
|
46
|
+
include_examples "extracts summary", nil
|
47
|
+
end
|
37
48
|
end
|
38
49
|
end
|
data/spec/label_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require "spec_helper"
|
2
3
|
|
3
4
|
describe Label do
|
@@ -16,6 +17,35 @@ describe Label do
|
|
16
17
|
"Label labels the gems in your Gemfile"
|
17
18
|
)
|
18
19
|
|
20
|
+
allow(subject).to receive(:describe).with("pg", rubygems: true).and_return(
|
21
|
+
"Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/].\n\n"+
|
22
|
+
"It works with {PostgreSQL 8.4 and later}[http://www.postgresql.org/support/versioning/]."+
|
23
|
+
"\n\nA small example usage:\n\n #!/usr/bin/env ruby\n\n require 'pg'\n\n"+
|
24
|
+
"# Output a table of current connections to the DB\n conn ="+
|
25
|
+
"PG.connect( dbname: 'sales' )\n conn.exec( \"SELECT * FROM pg_stat_activity\" )"+
|
26
|
+
"do |result|\n puts \" PID | User | Query\"\n result.each do"+
|
27
|
+
"|row|\n puts \" %7d | %-16s | %s \" %\n"+
|
28
|
+
"row.values_at('procpid', 'usename', 'current_query')\n end\n end"
|
29
|
+
)
|
30
|
+
|
31
|
+
allow(subject).to receive(:describe).with("nokogiri", rubygems: true).and_return(
|
32
|
+
"Nokogiri (é\u008B¸) is an HTML, XML, SAX, and Reader "+
|
33
|
+
"parser. Among Nokogiri's\nmany features is the "+
|
34
|
+
"ability to search documents via XPath or CSS3 "+
|
35
|
+
"selectors.\n\nXML is like violence - if it "+
|
36
|
+
"doesnâ\u0080\u0099t solve your problems, you are not"+
|
37
|
+
"using\nenough of it."
|
38
|
+
)
|
39
|
+
|
40
|
+
allow(subject).to receive(:describe).with("unicorn", rubygems: true).and_return(
|
41
|
+
"\\Unicorn is an HTTP server for Rack applications "+
|
42
|
+
"designed to only serve\nfast clients on low-latency, high-bandwidth "+
|
43
|
+
"connections and take\nadvantage of features in Unix/Unix-like kernels."+
|
44
|
+
"Slow clients should\nonly be served by placing a reverse proxy capable"+
|
45
|
+
" of fully buffering\nboth the the request and response in between "+
|
46
|
+
"\\Unicorn and slow clients."
|
47
|
+
)
|
48
|
+
|
19
49
|
allow(subject).to receive(:describe).with("pry", github: "pry/pry", branch: "development")
|
20
50
|
.and_return("An IRB alternative and runtime developer console")
|
21
51
|
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: label
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Johannes Gorset
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-04-
|
11
|
+
date: 2014-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gems
|
@@ -75,6 +75,7 @@ extensions: []
|
|
75
75
|
extra_rdoc_files: []
|
76
76
|
files:
|
77
77
|
- .gitignore
|
78
|
+
- .travis.yml
|
78
79
|
- AUTHORS.md
|
79
80
|
- Gemfile
|
80
81
|
- LICENSE.txt
|
@@ -83,11 +84,13 @@ files:
|
|
83
84
|
- bin/label
|
84
85
|
- label.gemspec
|
85
86
|
- lib/label.rb
|
87
|
+
- lib/label/description_formatter.rb
|
86
88
|
- lib/label/gemspec_info.rb
|
87
89
|
- lib/label/summary_extractor.rb
|
88
90
|
- lib/label/version.rb
|
89
91
|
- spec/fixtures/processed_gemfile
|
90
92
|
- spec/fixtures/stock_gemfile
|
93
|
+
- spec/label/description_formatter_spec.rb
|
91
94
|
- spec/label/gemspec_info_spec.rb
|
92
95
|
- spec/label/summary_extractor_spec.rb
|
93
96
|
- spec/label_spec.rb
|
@@ -119,7 +122,9 @@ summary: Label labels the gems in your Gemfile
|
|
119
122
|
test_files:
|
120
123
|
- spec/fixtures/processed_gemfile
|
121
124
|
- spec/fixtures/stock_gemfile
|
125
|
+
- spec/label/description_formatter_spec.rb
|
122
126
|
- spec/label/gemspec_info_spec.rb
|
123
127
|
- spec/label/summary_extractor_spec.rb
|
124
128
|
- spec/label_spec.rb
|
125
129
|
- spec/spec_helper.rb
|
130
|
+
has_rdoc:
|