ana 0.9.3 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ana/command.rb +72 -27
- data/lib/ana/constants.rb +3 -2
- data/lib/ana/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bd6dc3594ee445bfef54767794e7bb1eaf5b668f
|
4
|
+
data.tar.gz: 2b8b041844620b803938dd359d1f7bc110ce2017
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6dd7b5db308bc2003a246bd33fa3c817178e55cc04ccaa15068c8b5c2e093b3a4d61cb3ea785b89bfe3b95298fd29725f4f9b8338b6ba03b1c8219e7767fcb00
|
7
|
+
data.tar.gz: e92dc593ae148b8458b0f523e982173ca654499576ffe25fdf690aba3667c54ee9e7a4ef39533aa1274a110460c35a3feb17570c16851eabe0ffa9a9d44120b2
|
data/lib/ana/command.rb
CHANGED
@@ -41,7 +41,8 @@ module Ana
|
|
41
41
|
# author(s), and license information.
|
42
42
|
desc 'gem_infos (info)', 'Print Gem Informations'
|
43
43
|
def gem_infos(gem)
|
44
|
-
|
44
|
+
return if gem_does_not_exist?(gem)
|
45
|
+
gem_hash = get_gem_json!(gem, type: 'gems')
|
45
46
|
say gem_hash['info']
|
46
47
|
say "Has been downloaded for #{colorize(gem_hash['downloads'], RED)} times!"
|
47
48
|
say "The Latest version is #{colorize(gem_hash['version'], BLUE)}."
|
@@ -58,7 +59,8 @@ module Ana
|
|
58
59
|
# type: 'runtime', 'development'
|
59
60
|
desc 'gem_dependencies (deps)', 'Print Gem Dependencies (runtime / development).'
|
60
61
|
def gem_dependencies(gem, type='runtime')
|
61
|
-
|
62
|
+
return if gem_does_not_exist?(gem)
|
63
|
+
gem_hash = get_gem_json!(gem, type: 'gems')
|
62
64
|
gem_hash['dependencies'][type].each do |arr|
|
63
65
|
puts "#{arr['name'].ljust(20)} #{arr['requirements']}"
|
64
66
|
end
|
@@ -67,15 +69,21 @@ module Ana
|
|
67
69
|
# Return latest version of given gem.
|
68
70
|
desc 'latest_version (v)', 'latest version of a gem.'
|
69
71
|
def latest_version(gem)
|
70
|
-
|
71
|
-
|
72
|
+
return if gem_does_not_exist?(gem)
|
73
|
+
gem_hash = get_gem_json!(gem, type: 'gems')
|
74
|
+
say("Latest version is #{gem_hash['version']}.", :blue) if gem_hash
|
72
75
|
end
|
73
76
|
|
74
77
|
# List versions of a given Gem, default will only list last 10 versions.
|
75
78
|
# You can pass all or a fairly large number to display all versions.
|
76
79
|
desc 'versions (vs)', 'List versions of a gem.'
|
77
80
|
def versions(gem, count=10)
|
78
|
-
|
81
|
+
if number?(count.to_s) == false
|
82
|
+
say "#{count} is not a number :("
|
83
|
+
return
|
84
|
+
end
|
85
|
+
return if gem_does_not_exist?(gem)
|
86
|
+
gem_hash = get_gem_json!(gem, type: 'versions')
|
79
87
|
if count == 'all' || count.to_i > gem_hash.count
|
80
88
|
count = gem_hash.count
|
81
89
|
end
|
@@ -85,10 +93,16 @@ module Ana
|
|
85
93
|
end
|
86
94
|
end
|
87
95
|
|
96
|
+
# FIXME should print info related to that version
|
88
97
|
# Find if a given version of Gem exists.
|
89
98
|
desc 'version exist?', 'Find if a given version exists.'
|
90
|
-
def find_version(gem, ver)
|
91
|
-
|
99
|
+
def find_version(gem, ver='no-input')
|
100
|
+
return if gem_does_not_exist?(gem)
|
101
|
+
if ver == 'no-input'
|
102
|
+
say 'Please specify a version'
|
103
|
+
return
|
104
|
+
end
|
105
|
+
gem_hash = get_gem_json!(gem, type: 'versions')
|
92
106
|
versions = gem_hash.collect { |x| x['number'] }
|
93
107
|
if versions.include? ver
|
94
108
|
gem_infos gem
|
@@ -100,12 +114,14 @@ module Ana
|
|
100
114
|
# Search if a given Gem exists? If exists, return the latest version of it.
|
101
115
|
desc 'search (s)', '(Exact) Search for a gem.'
|
102
116
|
def search(gem)
|
103
|
-
|
117
|
+
return if gem_does_not_exist?(gem)
|
118
|
+
latest_version(gem)
|
104
119
|
end
|
105
120
|
|
106
121
|
# Invoke system `gem search -r`
|
107
122
|
desc 'fuzzy_search (fs)', 'Fuzzy search for a Gem'
|
108
123
|
def fuzzy_search(gem)
|
124
|
+
return if gem_does_not_exist?(gem)
|
109
125
|
system("gem search -r #{Shellwords.escape gem}")
|
110
126
|
end
|
111
127
|
|
@@ -113,7 +129,8 @@ module Ana
|
|
113
129
|
# Available URI types could be found in Ana::Scalars::URI_TYPE.
|
114
130
|
desc 'open (o)', 'Open gem doc directly via open command.'
|
115
131
|
def open(gem, open_type='doc')
|
116
|
-
|
132
|
+
return if gem_does_not_exist?(gem)
|
133
|
+
gem_hash = get_gem_json!(gem, type: 'gems')
|
117
134
|
url = if URI_TYPE.keys.include? open_type
|
118
135
|
skip = false
|
119
136
|
gem_hash[URI_TYPE[open_type]]
|
@@ -129,6 +146,7 @@ module Ana
|
|
129
146
|
# Download a given Gem.
|
130
147
|
desc 'download (dl)', 'Download a Gem'
|
131
148
|
def download(gem)
|
149
|
+
return if gem_does_not_exist?(gem)
|
132
150
|
open gem, 'lib'
|
133
151
|
end
|
134
152
|
|
@@ -151,28 +169,55 @@ module Ana
|
|
151
169
|
print "\n"
|
152
170
|
end
|
153
171
|
|
154
|
-
#
|
155
|
-
#
|
156
|
-
#
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
gem_json_file_path
|
162
|
-
|
172
|
+
# Download json if it hasn't been downloaded
|
173
|
+
# or older than 900s.
|
174
|
+
# return Hash parsed from gem's (gems / version) json
|
175
|
+
def get_gem_json!(gem, type: 'versions')
|
176
|
+
gem_json_file_path = full_path("~/.gemjsons/#{gem}/#{type}.json")
|
177
|
+
gem_uri = URI.parse(URI.encode("https://rubygems.org/api/v1/#{type}/#{gem}.json", "[]"))
|
178
|
+
if !File.exist?(gem_json_file_path)
|
179
|
+
create_file(gem_json_file_path, Net::HTTP.get(gem_uri), verbose: false)
|
180
|
+
else
|
181
|
+
if not_fresh?(gem_json_file_path)
|
163
182
|
remove_and_create_file!(gem_json_file_path, Net::HTTP.get(gem_uri))
|
164
183
|
end
|
165
|
-
else
|
166
|
-
print_gem_not_found!
|
167
184
|
end
|
168
|
-
return JSON.parse(IO.read(gem_json_file_path))
|
185
|
+
return JSON.parse(IO.read(gem_json_file_path)) || nil
|
169
186
|
end
|
170
187
|
|
171
|
-
#
|
188
|
+
# Returns true if given gem exists.
|
172
189
|
def gem_exist?(gem)
|
173
|
-
uri = URI
|
174
|
-
|
175
|
-
|
190
|
+
uri = URI.parse(URI.encode("https://rubygems.org/api/v1/gems/#{gem}.json", "[]"))
|
191
|
+
response = Net::HTTP.get(uri)
|
192
|
+
if response.include? 'page not found'
|
193
|
+
say "#{gem}, typo?"
|
194
|
+
return false
|
195
|
+
end
|
196
|
+
case response
|
197
|
+
when GEM_NOT_FOUND
|
198
|
+
print_gem_not_found!
|
199
|
+
return false
|
200
|
+
when GEM_DOES_NOT_EXIST
|
201
|
+
print_gem_does_not_exist!
|
202
|
+
return false
|
203
|
+
else
|
204
|
+
return true
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
# Returns true if given gem does not exist
|
209
|
+
def gem_does_not_exist?(gem)
|
210
|
+
!gem_exist?(gem)
|
211
|
+
end
|
212
|
+
|
213
|
+
def number?(str)
|
214
|
+
return false if(str =~ /\A[-+]?[0-9]*\.?[0-9]+\z/).nil?
|
215
|
+
true
|
216
|
+
end
|
217
|
+
|
218
|
+
# Print Gem does not exist message.
|
219
|
+
def print_gem_does_not_exist!
|
220
|
+
say(GEM_DOES_NOT_EXIST, :red)
|
176
221
|
end
|
177
222
|
|
178
223
|
# Print Gem version not found message.
|
@@ -201,8 +246,8 @@ module Ana
|
|
201
246
|
end
|
202
247
|
|
203
248
|
# Check if a file is has been changed within 900s?
|
204
|
-
def
|
205
|
-
access_time(file_path)
|
249
|
+
def not_fresh?(file_path)
|
250
|
+
access_time(file_path) > TTL
|
206
251
|
end
|
207
252
|
|
208
253
|
# Return a file's change time with respect to current time.
|
data/lib/ana/constants.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
module Ana
|
2
2
|
module Scalars
|
3
3
|
TTL = 900 # Every 900s updates the json.
|
4
|
-
GEM_NOT_FOUND
|
5
|
-
|
4
|
+
GEM_NOT_FOUND = 'This rubygem could not be found.'
|
5
|
+
GEM_DOES_NOT_EXIST = 'This gem does not exist.'
|
6
|
+
GEM_VER_NOT_FOUND = 'This version could not be found.'
|
6
7
|
|
7
8
|
# Terminal Colour Codes
|
8
9
|
# http://en.wikipedia.org/wiki/ANSI_escape_code
|
data/lib/ana/version.rb
CHANGED