alfi 0.3.8 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b3e2999c283e8ccb7bebb4ab63755f1eee31bc84
4
- data.tar.gz: 950251eb9dac804fcb0b7a12893881b9e229eca5
3
+ metadata.gz: 2238e66c04bcf94075bdb3e52d5baf5fe43e9ca0
4
+ data.tar.gz: f3cf2058e9bdd64d92a218da57846e56eaf93c2a
5
5
  SHA512:
6
- metadata.gz: f275eb5b72d07edbf85b79772fc7fd59409be95d830c5a5a71f631b0dd5a494c7549a1a1ab8a4150d0a8ea616d26bedf3175634514d64180fd49d8a75f9c8721
7
- data.tar.gz: 26e735b20f31339ea2080b949a3b06f02e1a422587fccd9d40154214fd4f8e2e6e1651f03cc1b36e25d3c3d873781b15dbc7c43fdbfb5f64f5b81abba5a864bc
6
+ metadata.gz: aa308295578ad68226007c0fa24c8ab2cf12d9daa8425aa198924fb3ba70072ce5f0a719d96fb60adbb6d478388b26228422bc811b3e2f98049f98e516472be6
7
+ data.tar.gz: a5bd08adf5efb90c0d9ec36713affe3833089aeb2acfa11c71112a3ace8f28c7f758a43a6044b28a596c549947659cb3893bbea6b11cefc61b9bf28b4fff22fc
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # alfi
2
2
 
3
- ![Header](https://travis-ci.org/cesarferreira/alfi.svg?branch=master) [![Gem Version](http://img.shields.io/gem/v/alfi.svg?style=flat)](http://badge.fury.io/rb/alfi) [![Dependency Status](https://gemnasium.com/cesarferreira/alfi.svg)](https://gemnasium.com/cesarferreira/alfi)
3
+ [![Build Status](https://travis-ci.org/cesarferreira/alfi.svg?branch=master)](https://travis-ci.org/cesarferreira/alfi) [![Gem Version](http://img.shields.io/gem/v/alfi.svg?style=flat)](http://badge.fury.io/rb/alfi) [![Dependency Status](https://gemnasium.com/cesarferreira/alfi.svg)](https://gemnasium.com/cesarferreira/alfi)
4
4
 
5
5
 
6
6
  **A**ndroid **L**ibrary **Fi**nder
@@ -27,9 +27,8 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency 'webmock', '~> 1.21'
28
28
  spec.add_development_dependency 'rspec', '~> 3.2'
29
29
  spec.add_development_dependency 'vcr', '~> 2.9'
30
- #spec.add_development_dependency 'pry-byebug', '~> 3.1'
30
+ spec.add_development_dependency 'pry', '~> 0.10.1'
31
31
  spec.add_dependency 'bundler', '~> 1.7'
32
32
  spec.add_dependency 'json', '~> 1.8'
33
33
  spec.add_dependency 'colorize', '~> 0.7'
34
-
35
34
  end
data/bin/alfi CHANGED
@@ -2,4 +2,4 @@
2
2
  require 'bundler/setup'
3
3
  require 'alfi'
4
4
 
5
- Alfi::SearchModel.initialize(ARGV[0])
5
+ Alfi::Cli.new.call(ARGV)
@@ -1,136 +1,10 @@
1
+ module Alfi
2
+ end
3
+
1
4
  require 'json'
2
5
  require 'net/http'
3
6
  require 'uri'
4
7
  require 'colorize'
8
+ require 'alfi/providers'
5
9
 
6
- module Alfi
7
-
8
- class SearchModel
9
-
10
- def self.query_url (query)
11
- "http://search.maven.org/solrsearch/select?q=#{query}&rows=350&wt=json"
12
- end
13
-
14
- def self.fetch_results(query)
15
- uri = URI.parse(query_url(query))
16
-
17
- http = Net::HTTP.new(uri.host, uri.port)
18
- request = Net::HTTP::Get.new(uri.request_uri)
19
-
20
- begin
21
- response = http.request(request)
22
- rescue SocketError
23
- puts "Internet Connection not available".red
24
- exit 1
25
- end
26
-
27
- if response.code == '200'
28
- result = JSON.parse(response.body)
29
-
30
- # Amount of results
31
- num_results = result['response']['numFound']
32
-
33
- suggestions = nil
34
-
35
- # Possible suggestions
36
- if num_results==0
37
- suggestions = (result['spellcheck']['suggestions'].last || {})['suggestion']
38
- end
39
-
40
- # Init the result list
41
- result_list = Array.new
42
-
43
- # query google reps
44
- result_list = query_offline_reps(query)
45
-
46
- # Iterate the libraries
47
- result['response']['docs'].each do |doc|
48
- output = " compile '#{doc['id']}:#{doc['latestVersion']}'"
49
- result_list << output
50
- end
51
-
52
- return num_results, result_list, suggestions
53
- else
54
- puts "Error: #{response.code}\n#{response}".red
55
- exit 1
56
- end
57
- end
58
-
59
- # QUERY OFFLINE REPOSITORIES (google)
60
- def self.query_offline_reps(query)
61
-
62
- google_libs = Array.new
63
- google_libs << 'com.android.support:appcompat-v7'
64
- google_libs << 'com.android.support:cardview-v7'
65
- google_libs << 'com.android.support:gridlayout-v7'
66
- google_libs << 'com.android.support:leanback-v17'
67
- google_libs << 'com.android.support:mediarouter-v7'
68
- google_libs << 'com.android.support:palette-v7'
69
- google_libs << 'com.android.support:support-annotations'
70
- google_libs << 'com.android.support:support-v4'
71
- google_libs << 'com.android.support:support-v13'
72
- google_libs << 'com.google.android.gms:play-services-wearable'
73
- google_libs << 'com.google.android.gms:play-services'
74
- google_libs << 'com.android.support:recyclerview-v7'
75
-
76
- found_libs = Array.new
77
-
78
- # is there anything?
79
- google_libs.each do |lib|
80
-
81
- if lib.include?(query)
82
- found_libs << " compile '#{lib}:+'"
83
- end
84
- end
85
-
86
- return found_libs
87
-
88
- end
89
-
90
- # INIT
91
- def self.initialize (param)
92
-
93
- if param == nil
94
- puts "Missing query parameter".red
95
- puts "\tusage: alfi SEARCH_QUERY".yellow
96
- else
97
- if param.size>=3
98
-
99
- puts "Searching...\n"
100
-
101
- num_results, result_list, suggestions = fetch_results(param)
102
-
103
- if !result_list
104
- puts 'Something went wrong with your search'.red
105
- exit 1
106
- end
107
-
108
- puts "\ndependencies {\n" if num_results>0
109
- # Iterate to print results
110
- result_list.each do |result|
111
- puts result.green
112
- end
113
- puts "}\n" if num_results>0
114
-
115
- puts "\nFound: #{num_results} result#{num_results>1?'s':''} for '#{param}'"
116
-
117
-
118
- # handle the suggestions
119
- if suggestions!=nil
120
-
121
- output = ''
122
-
123
- # iterate the suggestions
124
- suggestions.each do |suggestion|
125
- output += "#{suggestion} ".yellow
126
- end
127
- puts "Did you mean: #{output}"
128
- end
129
- else
130
- puts 'The search needs 3+ characters'.red
131
-
132
- end
133
- end
134
- end
135
- end
136
- end
10
+ Dir["#{File.dirname(__FILE__)}/alfi/**/*.rb"].each { |file| require file }
@@ -0,0 +1,75 @@
1
+ class Alfi::Cli
2
+ BINTRAY_OPTIONS_FILE_NAME = File.expand_path('~/.alfi_bintray.json')
3
+
4
+ def exit_with(message)
5
+ puts message
6
+ exit 1
7
+ end
8
+
9
+ def call(arguments)
10
+ create_options_parser
11
+ search_param = @all_defined_arguments.include?(arguments.first) ? nil : arguments.shift
12
+ @bintray_username = nil
13
+ @bintray_key = nil
14
+ @opt_parser.parse!(arguments)
15
+
16
+ parse_bintray_auth
17
+
18
+ exit_with("Missing query parameter\n".red + @opt_parser.help) unless search_param
19
+
20
+ Alfi::Search.new.call(search_param)
21
+ end
22
+
23
+ def create_options_parser
24
+ @all_defined_arguments = [
25
+ '-u',
26
+ '--user',
27
+ '-k',
28
+ '--key',
29
+ '-h',
30
+ '--help',
31
+ '-v',
32
+ '--version'
33
+ ]
34
+ @opt_parser = OptionParser.new do |opts|
35
+ opts.banner = "Usage: alfi SEARCH_QUERY [OPTIONS]"
36
+ opts.separator ''
37
+ opts.separator 'Options'
38
+
39
+ opts.on('-u BINTRAY_USER_NAME', '--user BINTRAY_USER_NAME', 'your binray user name') do |bintray_username|
40
+ @bintray_username = bintray_username
41
+ end
42
+ opts.on('-k BINTRAY_KEY', '--key BINTRAY_KEY', 'your binray api key') do |bintray_key|
43
+ @bintray_key = bintray_key
44
+ end
45
+ opts.on('-h', '--help', 'Displays help') do
46
+ puts opts.help
47
+ exit
48
+ end
49
+ opts.on('-v', '--version', 'Displays version') do
50
+ puts Alfi::VERSION
51
+ exit
52
+ end
53
+
54
+ opts.separator "\nNow you are using alfi credentials for Bintray".yellow
55
+ opts.separator "But you also could enter your authentication data if you want. "\
56
+ "It will be saved once you provided it\n".green unless @bintray_username
57
+ end
58
+ end
59
+
60
+ def parse_bintray_auth
61
+ $bintray_auth = if @bintray_username && @bintray_key
62
+ # write new auth data
63
+ new_data = { user_name: @bintray_username, api_key: @bintray_key }
64
+ File.open(BINTRAY_OPTIONS_FILE_NAME, 'w+') do |f|
65
+ f.puts new_data.to_json
66
+ end
67
+ new_data
68
+ else
69
+ # read old auth data
70
+ return unless File.exist?(BINTRAY_OPTIONS_FILE_NAME)
71
+ auth_data = JSON.parse(File.read(BINTRAY_OPTIONS_FILE_NAME) || '{}', symbolize_names: true)
72
+ auth_data if auth_data[:user_name] && auth_data[:api_key]
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,6 @@
1
+ module Alfi::Providers
2
+ # To get all defined providers
3
+ def self.all
4
+ (Alfi::Providers.constants - [:Base]).map { |class_name| const_get "Alfi::Providers::#{class_name}" }
5
+ end
6
+ end
@@ -0,0 +1,29 @@
1
+ class Alfi::Providers::Base
2
+ def initialize(query)
3
+ @query = query
4
+ @uri = URI.parse(query_url(query))
5
+ @http = Net::HTTP.new(@uri.host, @uri.port)
6
+ @request = Net::HTTP::Get.new(@uri.request_uri)
7
+ request_extensions if self.class.method_defined?(:request_extensions)
8
+ end
9
+
10
+ def query_url
11
+ fail NotImplementedError
12
+ end
13
+
14
+ def call
15
+ fail NotImplementedError
16
+ end
17
+
18
+ def add_to_list(helper_string)
19
+ $result_list << helper_string
20
+ end
21
+
22
+ def add_suggestions(suggestions)
23
+ $suggestions += Array(suggestions)
24
+ end
25
+
26
+ def add_repo_to_list(package)
27
+ $result_list << " compile '#{package}'".green
28
+ end
29
+ end
@@ -0,0 +1,58 @@
1
+ class Alfi::Providers::Bintray < Alfi::Providers::Base
2
+ PROVIDERS_TEXTS = {
3
+ 'maven' => 'mavenCentral()',
4
+ 'jcenter' => 'jcenter()'
5
+ }
6
+ ALFI_BINTRAY_CREDS = [
7
+ {
8
+ user_name: 'alfi',
9
+ api_key: '5bfa2bedc8d2f5abb8a3fdff49a8599d6ebe7bef'
10
+ },
11
+ {
12
+ user_name: 'alfi2',
13
+ api_key: '98ebb0e5c0fb45c03a1d747da5532b294e01f77e'
14
+ },
15
+ {
16
+ user_name: 'alfi3',
17
+ api_key: 'd506539a493ede165e6497269bea4b0f822fdb6a'
18
+ },
19
+ {
20
+ user_name: 'alfi4',
21
+ api_key: '3da11d361aa52d5d46ee5fd320838f7a5592d9e1'
22
+ }
23
+ ]
24
+
25
+ def query_url(query)
26
+ "https://api.bintray.com/search/packages?name=#{query}"
27
+ end
28
+
29
+ def request_extensions
30
+ unless $bintray_auth
31
+ puts " # Bintray using random credentials".yellow
32
+ $bintray_auth = ALFI_BINTRAY_CREDS.sample
33
+ end
34
+ @http.use_ssl = true
35
+ @request.basic_auth $bintray_auth[:user_name], $bintray_auth[:api_key]
36
+ end
37
+
38
+ def call
39
+ begin
40
+ response = @http.request(@request)
41
+ rescue SocketError
42
+ puts "Internet Connection not available".red
43
+ exit 1
44
+ end
45
+
46
+ return if response.code != '200'
47
+ response_json = JSON.parse(response.body || '{}')
48
+
49
+ add_to_list " # #{'-'*20}Bintray#{'-'*20}" if response_json.size > 0
50
+
51
+ response_json.group_by { |package| package['repo'] }.each do |provider, repositories|
52
+ add_to_list " # #{PROVIDERS_TEXTS[provider]}"
53
+ repositories.each do |repo|
54
+ add_repo_to_list "#{repo['system_ids'][0]}:#{repo['latest_version']}" if repo['system_ids'].size > 0
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,32 @@
1
+ class Alfi::Providers::Maven < Alfi::Providers::Base
2
+ def query_url(query)
3
+ "http://search.maven.org/solrsearch/select?q=#{query}&rows=350&wt=json"
4
+ end
5
+
6
+ def call
7
+ begin
8
+ response = @http.request(@request)
9
+ rescue SocketError
10
+ puts "Internet Connection not available".red
11
+ exit 1
12
+ end
13
+
14
+ if response.code == '200'
15
+ result = JSON.parse(response.body)
16
+
17
+ num_results = result['response']['numFound']
18
+
19
+ if num_results == 0
20
+ suggestions = (result['spellcheck']['suggestions'].last || {})['suggestion']
21
+ add_suggestions(suggestions) if suggestions
22
+ else
23
+ add_to_list " # #{'-'*20}Maven.org#{'-'*20}"
24
+ add_to_list ' # mavenCentral()'
25
+ end
26
+ result['response']['docs'].each { |doc| add_repo_to_list "#{doc['id']}:#{doc['latestVersion']}" }
27
+ else
28
+ puts "Error: #{response.code}\n#{response}".red
29
+ exit 1
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,27 @@
1
+ # require 'alfi/providers/base'
2
+ class Alfi::Providers::Offline < Alfi::Providers::Base
3
+ def initialize(query)
4
+ @query = query
5
+ end
6
+
7
+ def call
8
+ google_libs = [
9
+ 'com.android.support:appcompat-v7',
10
+ 'com.android.support:cardview-v7',
11
+ 'com.android.support:gridlayout-v7',
12
+ 'com.android.support:leanback-v17',
13
+ 'com.android.support:mediarouter-v7',
14
+ 'com.android.support:palette-v7',
15
+ 'com.android.support:support-annotations',
16
+ 'com.android.support:support-v4',
17
+ 'com.android.support:support-v13',
18
+ 'com.google.android.gms:play-services-wearable',
19
+ 'com.google.android.gms:play-services',
20
+ 'com.android.support:recyclerview-v7'
21
+ ]
22
+ results = google_libs.map { |lib| "#{lib}:+" if lib.include?(@query) }.compact
23
+ return unless results.size > 0
24
+ add_to_list ' # Google'
25
+ results.each { |library| add_repo_to_list(library) }
26
+ end
27
+ end
@@ -0,0 +1,32 @@
1
+ class Alfi::Search
2
+ def initialize
3
+ $result_list = []
4
+ $suggestions = []
5
+ end
6
+
7
+ def exit_with(message)
8
+ puts message
9
+ exit 1
10
+ end
11
+
12
+ def call(search_param)
13
+ return puts 'The search needs 3+ characters'.red if search_param.size < 3
14
+ puts "Searching...\n"
15
+
16
+ Alfi::Providers.all.each { |cc| cc.new(search_param).call }
17
+
18
+ exit_with('No results'.red) if $result_list.empty? && $suggestions.empty?
19
+ num_results = $result_list.count { |r| r.strip[0] != '#' }
20
+
21
+ if num_results > 0
22
+ puts "\ndependencies {\n"
23
+ $result_list.each { |result| puts result }
24
+ puts "}\n"
25
+ end
26
+
27
+ puts "\nFound: #{num_results} result#{num_results > 1?'s':''} for '#{search_param.yellow}'"
28
+
29
+ return if $suggestions.empty?
30
+ puts "Did you mean: #{$suggestions.join(', ').yellow}"
31
+ end
32
+ end
@@ -1,3 +1,3 @@
1
1
  module Alfi
2
- VERSION = '0.3.8'
2
+ VERSION = '0.4.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alfi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - cesar ferreira
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-26 00:00:00.000000000 Z
11
+ date: 2015-11-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '2.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.10.1
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.10.1
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: bundler
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -131,6 +145,13 @@ files:
131
145
  - extras/images/terminal01.gif
132
146
  - extras/images/wide-logo.png
133
147
  - lib/alfi.rb
148
+ - lib/alfi/cli.rb
149
+ - lib/alfi/providers.rb
150
+ - lib/alfi/providers/base.rb
151
+ - lib/alfi/providers/bintray.rb
152
+ - lib/alfi/providers/maven.rb
153
+ - lib/alfi/providers/offline.rb
154
+ - lib/alfi/search.rb
134
155
  - lib/alfi/version.rb
135
156
  homepage: https://github.com/cesarferreira/alfi
136
157
  licenses:
@@ -152,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
173
  version: '0'
153
174
  requirements: []
154
175
  rubyforge_project:
155
- rubygems_version: 2.4.7
176
+ rubygems_version: 2.4.8
156
177
  signing_key:
157
178
  specification_version: 4
158
179
  summary: Android Library Finder