ud 0.1.1 → 0.1.2
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 +7 -0
- data/bin/ud +1 -1
- data/lib/ud.rb +3 -33
- data/lib/ud/formatting.rb +51 -1
- data/tests/formatting_tests.rb +42 -2
- data/tests/query_tests.rb +2 -2
- metadata +27 -45
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 11f8394cb33159ae220771206f5c66611840532a
|
4
|
+
data.tar.gz: ed5b562d420f7a2e071a9da934c0b8528978674f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6d3b91414b1ee2f7ba0543ffc684892bc0d064f2e762623a22ab85a792a20883b5b565684ad801c6ddf3f2bf49106e043530dbc9ae63618620962b98dc3091a0
|
7
|
+
data.tar.gz: 8cfe02567efc781a86af680b6d2a11bbeb4e6f81440ea543f7aa1523500381d2aad36adb5287c115faa8a07bd108877da4bf79aca5263719f5c4190e98336b7f
|
data/bin/ud
CHANGED
@@ -15,7 +15,7 @@ where [options] are:
|
|
15
15
|
EOS
|
16
16
|
|
17
17
|
opt :ratio, 'Filter by upvotes/downvotes ratio', :type => :float, :default => 0.0
|
18
|
-
opt :count, 'Limit the number of definitions', :type => :int, :default =>
|
18
|
+
opt :count, 'Limit the number of definitions', :type => :int, :default => 1, :short => '-n'
|
19
19
|
opt :color, 'Use colorized output', :default => true
|
20
20
|
opt :up, 'Shortcut for \'-r 2\''
|
21
21
|
|
data/lib/ud.rb
CHANGED
@@ -14,7 +14,7 @@ module UD
|
|
14
14
|
|
15
15
|
# The current version of the module
|
16
16
|
def UD.version
|
17
|
-
'0.1.
|
17
|
+
'0.1.2'
|
18
18
|
end
|
19
19
|
|
20
20
|
# Get the search URL to query for a given term.
|
@@ -62,7 +62,7 @@ module UD
|
|
62
62
|
# upvotes/downvotes ratio. Other options may be added in the future.
|
63
63
|
def UD.query(term, *opts)
|
64
64
|
|
65
|
-
opts = {:count =>
|
65
|
+
opts = {:count => 1, :ratio => 0.0}.merge(opts[0] || {})
|
66
66
|
|
67
67
|
return [] if opts[:count] <= 0
|
68
68
|
|
@@ -106,37 +106,7 @@ module UD
|
|
106
106
|
# Format results for output
|
107
107
|
# [results] this must be an array of results, as returned by +UD.query+.
|
108
108
|
def UD.format_results(results, color=true)
|
109
|
-
|
110
|
-
|
111
|
-
t = ' ' # 4-spaces tab
|
112
|
-
|
113
|
-
results.map do |r|
|
114
|
-
|
115
|
-
word = r[:word]
|
116
|
-
upvotes = r[:upvotes]
|
117
|
-
downvotes = r[:downvotes]
|
118
|
-
|
119
|
-
if (color)
|
120
|
-
word = word.bold
|
121
|
-
upvotes = upvotes.to_s.green
|
122
|
-
downvotes = downvotes.to_s.red
|
123
|
-
end
|
124
|
-
|
125
|
-
votes = "#{upvotes}/#{downvotes}"
|
126
|
-
definition = UD::Formatting.fit(r[:definition], 75).map {|l| t+l}.join("\n")
|
127
|
-
example = UD::Formatting.fit(r[:example], 75).map {|l| t+l}.join("\n")
|
128
|
-
|
129
|
-
s = ''
|
130
|
-
|
131
|
-
s << "* #{word} (#{votes}):\n"
|
132
|
-
s << "\n"
|
133
|
-
s << definition
|
134
|
-
s << "\n\n Example:\n"
|
135
|
-
s << example
|
136
|
-
s << "\n\n"
|
137
|
-
|
138
|
-
end.join("\n")
|
139
|
-
|
109
|
+
UD::Formatting.text(results, color)
|
140
110
|
end
|
141
111
|
|
142
112
|
end
|
data/lib/ud/formatting.rb
CHANGED
@@ -7,8 +7,58 @@ module UD
|
|
7
7
|
# Fit a text in a given width (number of chars). It returns
|
8
8
|
# a list of lines of text.
|
9
9
|
def self.fit(txt, width=79)
|
10
|
+
return [] if width < 1
|
11
|
+
|
10
12
|
# from http://stackoverflow.com/a/7567210/735926
|
11
|
-
|
13
|
+
r = /(.{1,#{width}})(?:\s|$)/m
|
14
|
+
txt.split("\n").map { |l| l.scan(r) }.flatten
|
15
|
+
end
|
16
|
+
|
17
|
+
# Add a tab at the beginning of a text. If it's a list, add a tab at
|
18
|
+
# the beginning of each element.
|
19
|
+
# [txt] The text to tab, may be a string or a list of strings
|
20
|
+
# [width] The width (number of spaces) of a tab
|
21
|
+
def self.tab(txt, width=4)
|
22
|
+
width = 0 if width < 0
|
23
|
+
|
24
|
+
tab = ' ' * width
|
25
|
+
|
26
|
+
return tab + txt if txt.is_a?(String)
|
27
|
+
|
28
|
+
txt.map { |l| tab + l }
|
29
|
+
end
|
30
|
+
|
31
|
+
# Format results for text output (e.g. in the terminal)
|
32
|
+
# [results] this must be an array of results, as returned by +UD.query+.
|
33
|
+
def self.text(results, color=true)
|
34
|
+
require 'colored' if color
|
35
|
+
|
36
|
+
results.map do |r|
|
37
|
+
|
38
|
+
word = r[:word]
|
39
|
+
upvotes = r[:upvotes]
|
40
|
+
downvotes = r[:downvotes]
|
41
|
+
|
42
|
+
if (color)
|
43
|
+
word = word.bold
|
44
|
+
upvotes = upvotes.to_s.green
|
45
|
+
downvotes = downvotes.to_s.red
|
46
|
+
end
|
47
|
+
|
48
|
+
votes = "#{upvotes}/#{downvotes}"
|
49
|
+
definition = tab(fit(r[:definition], 75)).join("\n")
|
50
|
+
example = tab(fit(r[:example], 75)).join("\n")
|
51
|
+
|
52
|
+
s = ''
|
53
|
+
|
54
|
+
s << "* #{word} (#{votes}):\n"
|
55
|
+
s << "\n"
|
56
|
+
s << definition
|
57
|
+
s << "\n\n Example:\n"
|
58
|
+
s << example
|
59
|
+
s << "\n\n"
|
60
|
+
|
61
|
+
end.join("\n")
|
12
62
|
end
|
13
63
|
|
14
64
|
end
|
data/tests/formatting_tests.rb
CHANGED
@@ -60,14 +60,54 @@ class UD_Formatting_test < Test::Unit::TestCase
|
|
60
60
|
expected = <<EOS
|
61
61
|
* XYZ (42/78):
|
62
62
|
|
63
|
-
|
63
|
+
xyz
|
64
64
|
|
65
65
|
Example:
|
66
|
-
|
66
|
+
zyx
|
67
67
|
EOS
|
68
68
|
|
69
69
|
assert_equal(expected.strip, output)
|
70
70
|
|
71
71
|
end
|
72
72
|
|
73
|
+
# == UD::Formatting#fit == #
|
74
|
+
|
75
|
+
def test_fit_0_width
|
76
|
+
assert_equal([], UD::Formatting.fit('foo', 0))
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_fit_negative_width
|
80
|
+
assert_equal([], UD::Formatting.fit('foo', -1))
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_fit_right_width
|
84
|
+
assert_equal(['foo'], UD::Formatting.fit('foo', 3))
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_fit_larger_width
|
88
|
+
assert_equal(['foo'], UD::Formatting.fit('foo', 4))
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_fit_smaller_width
|
92
|
+
assert_equal(['a', 'b'], UD::Formatting.fit('a b', 2))
|
93
|
+
end
|
94
|
+
|
95
|
+
# == UD::Formatting#tab == #
|
96
|
+
|
97
|
+
def test_tab_0_width
|
98
|
+
assert_equal('foo', UD::Formatting.tab('foo', 0))
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_tab_negative_width
|
102
|
+
assert_equal('foo', UD::Formatting.tab('foo', -1))
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_tab_2_width
|
106
|
+
assert_equal(' foo', UD::Formatting.tab('foo', 2))
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_tab_array
|
110
|
+
assert_equal([' a', ' b'], UD::Formatting.tab(['a', 'b'], 1))
|
111
|
+
end
|
112
|
+
|
73
113
|
end
|
data/tests/query_tests.rb
CHANGED
@@ -74,7 +74,7 @@ class UD_Formatting_test < Test::Unit::TestCase
|
|
74
74
|
}
|
75
75
|
]
|
76
76
|
|
77
|
-
assert_equal(expected, UD.query('two'))
|
77
|
+
assert_equal(expected, UD.query('two', :count => 2))
|
78
78
|
end
|
79
79
|
|
80
80
|
def test_query_count
|
@@ -104,7 +104,7 @@ class UD_Formatting_test < Test::Unit::TestCase
|
|
104
104
|
}
|
105
105
|
]
|
106
106
|
|
107
|
-
assert_equal(expected, UD.query('two', :ratio => 1.5))
|
107
|
+
assert_equal(expected, UD.query('two', :count => 10, :ratio => 1.5))
|
108
108
|
end
|
109
109
|
|
110
110
|
end
|
metadata
CHANGED
@@ -1,142 +1,125 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Baptiste Fontaine
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-10-11 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: nokogiri
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- - ~>
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 1.5.9
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- - ~>
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 1.5.9
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: json
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ">="
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: 1.8.0
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ">="
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: 1.8.0
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: trollop
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- - ~>
|
45
|
+
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '2.0'
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- - ~>
|
52
|
+
- - "~>"
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '2.0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: colored
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- - ~>
|
59
|
+
- - "~>"
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '1.2'
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- - ~>
|
66
|
+
- - "~>"
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '1.2'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: simplecov
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - ">="
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - ">="
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: rake
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - ">="
|
100
88
|
- !ruby/object:Gem::Version
|
101
89
|
version: '0'
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - ">="
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: '0'
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: test-unit
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
|
-
- -
|
101
|
+
- - ">="
|
116
102
|
- !ruby/object:Gem::Version
|
117
103
|
version: '0'
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
|
-
- -
|
108
|
+
- - ">="
|
124
109
|
- !ruby/object:Gem::Version
|
125
110
|
version: '0'
|
126
111
|
- !ruby/object:Gem::Dependency
|
127
112
|
name: fakeweb
|
128
113
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
114
|
requirements:
|
131
|
-
- -
|
115
|
+
- - ">="
|
132
116
|
- !ruby/object:Gem::Version
|
133
117
|
version: '0'
|
134
118
|
type: :development
|
135
119
|
prerelease: false
|
136
120
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
121
|
requirements:
|
139
|
-
- -
|
122
|
+
- - ">="
|
140
123
|
- !ruby/object:Gem::Version
|
141
124
|
version: '0'
|
142
125
|
description: Get words' definitions from Urban Dictionary on the command-line.
|
@@ -148,36 +131,35 @@ extra_rdoc_files: []
|
|
148
131
|
files:
|
149
132
|
- lib/ud.rb
|
150
133
|
- lib/ud/formatting.rb
|
151
|
-
- tests/tests.rb
|
152
|
-
- tests/query_tests.rb
|
153
134
|
- tests/formatting_tests.rb
|
135
|
+
- tests/query_tests.rb
|
136
|
+
- tests/tests.rb
|
154
137
|
- bin/ud
|
155
138
|
homepage: https://github.com/bfontaine/ud
|
156
139
|
licenses:
|
157
140
|
- MIT
|
141
|
+
metadata: {}
|
158
142
|
post_install_message:
|
159
143
|
rdoc_options: []
|
160
144
|
require_paths:
|
161
145
|
- lib
|
162
146
|
required_ruby_version: !ruby/object:Gem::Requirement
|
163
|
-
none: false
|
164
147
|
requirements:
|
165
|
-
- -
|
148
|
+
- - ">="
|
166
149
|
- !ruby/object:Gem::Version
|
167
150
|
version: '0'
|
168
151
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
152
|
requirements:
|
171
|
-
- -
|
153
|
+
- - ">="
|
172
154
|
- !ruby/object:Gem::Version
|
173
155
|
version: '0'
|
174
156
|
requirements: []
|
175
157
|
rubyforge_project:
|
176
|
-
rubygems_version: 1.
|
158
|
+
rubygems_version: 2.1.6
|
177
159
|
signing_key:
|
178
|
-
specification_version:
|
160
|
+
specification_version: 4
|
179
161
|
summary: Urban Dictionary unofficial scrapper
|
180
162
|
test_files:
|
181
|
-
- tests/tests.rb
|
182
|
-
- tests/query_tests.rb
|
183
163
|
- tests/formatting_tests.rb
|
164
|
+
- tests/query_tests.rb
|
165
|
+
- tests/tests.rb
|