glom 0.0.6 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +22 -7
- data/lib/glom.rb +41 -24
- data/lib/glom/registries/bower.rb +4 -3
- data/lib/glom/registries/npm.rb +4 -3
- data/lib/glom/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ba416ce4cedbcf60698ce8a0cf6274c42e36df50
|
4
|
+
data.tar.gz: 3a505f25c45a0196d791754b7a145dcf3d5ed26f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a875112507a53c6343ac5b51b965d191e34769e6b873b70214a0118328c9ca4bae91b2dcd727100760741904fbcd3eafa688179f2aa7ed52a50b7572e412929c
|
7
|
+
data.tar.gz: 60ddaf79f122cccdd53b7448b9eeda4db0559089f3131bfc8a8356c44cd3543e060f47bfecb3877490908f84a0815040b87461b86e81188b48e4c935916388ea
|
data/README.md
CHANGED
@@ -9,7 +9,6 @@ _To find a package for templating my new js project, I must open github.com and
|
|
9
9
|
$ glom 'javascript templating'
|
10
10
|
|
11
11
|
Searching `https://bower-component-list.herokuapp.com` for `templating`...
|
12
|
-
|
13
12
|
Searching `http://jiyinyiyong.github.io/nipster/packages.json` for `templating`...
|
14
13
|
|
15
14
|
+-----------------+-------------------------+---------------+-------+----------------+----------+
|
@@ -29,23 +28,39 @@ _To find a package for templating my new js project, I must open github.com and
|
|
29
28
|
|
30
29
|
## Contributing
|
31
30
|
|
32
|
-
Support for APIs can be added easily by adding `[
|
31
|
+
Support for APIs can be added easily by adding `[Registry].rb` to the `lib/glom/registries` directory.
|
32
|
+
|
33
|
+
`[Registry].rb` should be a module with:
|
33
34
|
|
34
|
-
|
35
|
+
- a `KEYWORDS` array
|
36
|
+
- a `NAME` string
|
37
|
+
- a `URL` string
|
38
|
+
- a `BLACKLIST` array (containing package names to exclude)
|
39
|
+
- a `standardize()` method that converts `URL` into an array of packages
|
35
40
|
|
36
41
|
Example:
|
37
42
|
|
38
43
|
# npm.rb
|
39
44
|
|
40
|
-
module
|
41
|
-
KEYWORDS = ['
|
45
|
+
module Bower
|
46
|
+
KEYWORDS = ['bower', 'font-end', 'frontend', 'js', 'javascript']
|
42
47
|
|
43
48
|
def get
|
44
|
-
|
49
|
+
return [
|
50
|
+
['mustache', 'Minimal templating with {{mustaches}}', 'janl', 5457, '3 months', 'bower'],
|
51
|
+
['hogan', 'A compiler for the mustache templating language', 'twitter', 2912, '25 days', 'bower']
|
52
|
+
]
|
45
53
|
end
|
46
54
|
end
|
47
55
|
|
48
|
-
|
56
|
+
##### Glom helpers
|
57
|
+
|
58
|
+
The `Glom` module comes with two built-in helper methods that make standardizing APIs easier:
|
59
|
+
|
60
|
+
- Glom.get() - Gets a JSON file from the web and caches it, or pulls it from the cache if it exists
|
61
|
+
- Glom.match() - Breaks the package description and user's query into array of words and returns a boolean
|
62
|
+
|
63
|
+
##### Git for ~~losers~~ dummies
|
49
64
|
|
50
65
|
1. Fork it
|
51
66
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
data/lib/glom.rb
CHANGED
@@ -3,6 +3,7 @@ require 'rubygems'
|
|
3
3
|
require 'net/http'
|
4
4
|
require 'json'
|
5
5
|
require 'tmpdir'
|
6
|
+
require 'time'
|
6
7
|
|
7
8
|
# Require individual registry logic
|
8
9
|
Dir["#{File.dirname __FILE__}/glom/registries/*.rb"].each do |file|
|
@@ -21,7 +22,7 @@ module Glom
|
|
21
22
|
@@registries_all.each do |registry|
|
22
23
|
registry::KEYWORDS.each do |keyword|
|
23
24
|
if query.include? keyword
|
24
|
-
(@registries ||= []) << registry
|
25
|
+
(@registries ||= []) << registry unless defined? @registries and @registries.include? registry
|
25
26
|
@query.slice! keyword
|
26
27
|
@query.strip!
|
27
28
|
end
|
@@ -32,10 +33,12 @@ module Glom
|
|
32
33
|
end
|
33
34
|
|
34
35
|
def search
|
36
|
+
puts ""
|
37
|
+
|
35
38
|
@registries.each do |registry|
|
36
39
|
include registry
|
37
40
|
|
38
|
-
puts "
|
41
|
+
puts "Searching '#{registry::URL}' for '#{@query}'..."
|
39
42
|
|
40
43
|
(@packages ||= []).concat registry.standardize(@query)
|
41
44
|
end
|
@@ -43,36 +46,41 @@ module Glom
|
|
43
46
|
|
44
47
|
def sort
|
45
48
|
@packages = @packages.sort_by do |package|
|
46
|
-
-package[3]
|
49
|
+
rating = -(package[3] * package.last**3)
|
50
|
+
package.pop
|
51
|
+
rating
|
47
52
|
end
|
48
53
|
end
|
49
54
|
|
50
55
|
def display
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
56
|
+
if @packages.size > 0
|
57
|
+
# Require terminal-table
|
58
|
+
require 'glom/terminal-table/cell.rb'
|
59
|
+
require 'glom/terminal-table/core_ext.rb'
|
60
|
+
require 'glom/terminal-table/row.rb'
|
61
|
+
require 'glom/terminal-table/separator.rb'
|
62
|
+
require 'glom/terminal-table/style.rb'
|
63
|
+
require 'glom/terminal-table/table_helper.rb'
|
64
|
+
require 'glom/terminal-table/table.rb'
|
65
|
+
require 'glom/terminal-table/version.rb'
|
66
|
+
|
67
|
+
table = Terminal::Table.new
|
68
|
+
table.headings = ['Name', 'Description', 'Author', 'Stars', 'Last Updated', 'Registry']
|
69
|
+
table.rows = @packages[0..20]
|
70
|
+
table.style = {
|
71
|
+
:width => `/usr/bin/env tput cols`.to_i
|
72
|
+
}
|
73
|
+
|
74
|
+
puts "\n#{table}\n\n"
|
75
|
+
else
|
76
|
+
puts "\nNo packages for that query.\n\n"
|
77
|
+
end
|
70
78
|
end
|
71
79
|
|
72
80
|
def get(address)
|
73
81
|
cache = "#{Dir.tmpdir}/#{address.gsub(/[\x00\/\\:\*\?\"<>\|]/, '_').gsub('.json', '')}.json"
|
74
82
|
|
75
|
-
if File.exist? cache
|
83
|
+
if File.exist?(cache) and File.mtime(cache) > (Time.now - 86400) # there are 86400 seconds in a day
|
76
84
|
json = IO.read(cache)
|
77
85
|
else
|
78
86
|
url = URI.parse(address)
|
@@ -95,4 +103,13 @@ module Glom
|
|
95
103
|
|
96
104
|
return json
|
97
105
|
end
|
98
|
-
|
106
|
+
|
107
|
+
def match(name, description, query, keywords = [])
|
108
|
+
keywords.concat(description.split(/\W+/)).concat(name.split(/-|_/))
|
109
|
+
keywords.each(&:downcase!)
|
110
|
+
|
111
|
+
query = query.downcase.split(/\W+/)
|
112
|
+
puts "#{name}: #{(keywords & query).size}" if name == "express" or name == "web-builder"
|
113
|
+
(keywords & query).size
|
114
|
+
end
|
115
|
+
end
|
@@ -3,19 +3,20 @@ require 'time'
|
|
3
3
|
require 'glom/time/time_ago_in_words'
|
4
4
|
|
5
5
|
module Glom::Bower
|
6
|
-
KEYWORDS = ['bower', 'front-end', 'frontend', 'js', 'javascript']
|
6
|
+
KEYWORDS = ['bower', 'front-end', 'frontend', 'js', 'javascript', 'client-side', 'clientside']
|
7
7
|
NAME = 'bower'
|
8
8
|
URL = 'https://bower-component-list.herokuapp.com'
|
9
|
+
BLACKLIST = []
|
9
10
|
|
10
11
|
def standardize(query)
|
11
12
|
json = Glom.get(URL)
|
12
13
|
|
13
14
|
packages = JSON.parse(json).select do |package|
|
14
|
-
package['description'].include?
|
15
|
+
Glom.match(package['name'], package['description'], query) > 0 and !BLACKLIST.include?(package['name'].downcase) if package['description'].is_a? String
|
15
16
|
end
|
16
17
|
|
17
18
|
packages.map do |package|
|
18
|
-
[package['name'], package['description'], package['owner'], package['stars'], Time.parse(package['updated']).time_ago_in_words, NAME]
|
19
|
+
[package['name'], package['description'], package['owner'], package['stars'], Time.parse(package['updated']).time_ago_in_words, NAME, Glom.match(package['name'], package['description'], query)]
|
19
20
|
end
|
20
21
|
end
|
21
22
|
end
|
data/lib/glom/registries/npm.rb
CHANGED
@@ -3,19 +3,20 @@ require 'time'
|
|
3
3
|
require 'glom/time/time_ago_in_words'
|
4
4
|
|
5
5
|
module Glom::Npm
|
6
|
-
KEYWORDS = ['npm', 'node', 'nodejs', 'js', 'javascript']
|
6
|
+
KEYWORDS = ['npm', 'node', 'nodejs', 'js', 'javascript', 'server-side', 'serverside', 'back-end']
|
7
7
|
NAME = 'npm'
|
8
8
|
URL = 'http://jiyinyiyong.github.io/nipster/packages.json'
|
9
|
+
BLACKLIST = ['jinja.js', 'joyentexpress']
|
9
10
|
|
10
11
|
def standardize(query)
|
11
12
|
json = Glom.get(URL)
|
12
13
|
|
13
14
|
packages = JSON.parse(json)['packages'].select do |package|
|
14
|
-
package[1].
|
15
|
+
Glom.match(package[0], package[1], query) > 0 and !BLACKLIST.include?(package[0].downcase) if package[1].is_a? String and package[3].is_a? String and !package[5].nil?
|
15
16
|
end
|
16
17
|
|
17
18
|
packages.map do |package|
|
18
|
-
[package[0], package[1], package[2], package[5], Time.parse(package[3]).time_ago_in_words, NAME]
|
19
|
+
[package[0], package[1], package[2], package[5], Time.parse(package[3]).time_ago_in_words, NAME, Glom.match(package[0], package[1], query) + 1]
|
19
20
|
end
|
20
21
|
end
|
21
22
|
end
|
data/lib/glom/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jackson Gariety
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-09-
|
11
|
+
date: 2013-09-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|