cocoapods-sorted-search 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +58 -0
- data/.travis.yml +15 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +39 -1
- data/README.md +20 -3
- data/Rakefile +35 -0
- data/cocoapods-sorted-search.gemspec +6 -1
- data/example.gif +0 -0
- data/lib/cocoapods_plugin.rb +2 -1
- data/lib/pod/command/search/sorted.rb +79 -0
- data/lib/pod/command/setup/github.rb +47 -0
- data/lib/sorted_search/credentials.rb +22 -0
- data/lib/sorted_search/github.rb +38 -0
- data/lib/sorted_search/printers/github_printer.rb +63 -0
- data/lib/sorted_search/printers/pods_printer.rb +30 -0
- data/lib/sorted_search/printers/printer.rb +11 -0
- data/lib/sorted_search/providers/cocoapods_provider.rb +38 -0
- data/lib/sorted_search/providers/github_provider.rb +63 -0
- data/lib/sorted_search/providers/provider.rb +39 -0
- data/spec/fixtures/dttableviewmanager.json +89 -0
- data/spec/spec_helper.rb +44 -3
- data/spec/unit/github_spec.rb +31 -0
- data/spec/unit/pod/command/github_setup_spec.rb +23 -0
- data/spec/unit/pod/command/sorted_search_spec.rb +39 -0
- data/spec/unit/sorted_search/printers/printer_spec.rb +17 -0
- data/token_example.png +0 -0
- metadata +81 -3
- data/lib/pod/command/search_sort.rb +0 -114
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4971bd047baa1b6a42cfa3fff5da31eb2750a845
|
4
|
+
data.tar.gz: df3e1b4a5a8f7eafa1c634686fa8bb5f667155f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cd780ed6c5660afa31f987f12f9da2676871dda97f7b6b18b4198b93161f854a304e317356d1b4ec7afaf217b0657e98e16669ae148de8186604aeea6a7bd526
|
7
|
+
data.tar.gz: 5936efe925a153f0a0d69b2a42a90b0a0d9949717475a67f66640876ea2bcb2f58ffce1a06fcd43f9a3af7d244e53d40e87b4fbee1b1ba5a8782495ead1f6a49
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
HashSyntax:
|
2
|
+
EnforcedStyle: ruby19
|
3
|
+
SupportedStyles:
|
4
|
+
- ruby19
|
5
|
+
- hash_rockets
|
6
|
+
|
7
|
+
CaseIndentation:
|
8
|
+
SupportedStyles:
|
9
|
+
- case
|
10
|
+
- end
|
11
|
+
IndentOneStep: true
|
12
|
+
|
13
|
+
StringLiterals:
|
14
|
+
Enabled: false
|
15
|
+
EnforcedStyle: double_quotes
|
16
|
+
|
17
|
+
SignalException:
|
18
|
+
EnforcedStyle: only_raise
|
19
|
+
|
20
|
+
ConstantName:
|
21
|
+
Enabled: false
|
22
|
+
|
23
|
+
IfUnlessModifier:
|
24
|
+
Enabled: false
|
25
|
+
|
26
|
+
EmptyLinesAroundBody:
|
27
|
+
Enabled: false
|
28
|
+
|
29
|
+
AsciiComments:
|
30
|
+
Enabled: false
|
31
|
+
|
32
|
+
Proc:
|
33
|
+
Enabled: false
|
34
|
+
|
35
|
+
BracesAroundHashParameters:
|
36
|
+
Enabled: false
|
37
|
+
|
38
|
+
Encoding:
|
39
|
+
Enabled: false
|
40
|
+
|
41
|
+
TrailingComma:
|
42
|
+
EnforcedStyleForMultiline: comma
|
43
|
+
|
44
|
+
FileName:
|
45
|
+
Enabled: false
|
46
|
+
|
47
|
+
ClassLength:
|
48
|
+
Max: 200
|
49
|
+
|
50
|
+
MethodLength:
|
51
|
+
Max: 30
|
52
|
+
|
53
|
+
CyclomaticComplexity:
|
54
|
+
Max: 7
|
55
|
+
|
56
|
+
LineLength:
|
57
|
+
Enabled: false
|
58
|
+
|
data/.travis.yml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
language: objective-c
|
2
|
+
|
3
|
+
env:
|
4
|
+
- RVM_RUBY_VERSION=2.1.1
|
5
|
+
|
6
|
+
before_install:
|
7
|
+
- curl http://curl.haxx.se/ca/cacert.pem -o /usr/local/share/cacert.pem
|
8
|
+
- source ~/.rvm/scripts/rvm
|
9
|
+
- rvm install $RVM_RUBY_VERSION
|
10
|
+
- rvm use $RVM_RUBY_VERSION
|
11
|
+
|
12
|
+
install:
|
13
|
+
- bundle install --without=documentation --path ./travis_bundle_dir
|
14
|
+
|
15
|
+
script: rake spec
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,16 +1,24 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cocoapods-sorted-search (0.
|
4
|
+
cocoapods-sorted-search (0.2.0)
|
5
5
|
cocoapods (~> 0.28)
|
6
|
+
hashie
|
7
|
+
osx_keychain
|
6
8
|
ruby-progressbar
|
9
|
+
typhoeus
|
7
10
|
|
8
11
|
GEM
|
9
12
|
remote: https://rubygems.org/
|
10
13
|
specs:
|
14
|
+
RubyInline (3.12.2)
|
15
|
+
ZenTest (~> 4.3)
|
16
|
+
ZenTest (4.9.5)
|
11
17
|
activesupport (3.2.17)
|
12
18
|
i18n (~> 0.6, >= 0.6.4)
|
13
19
|
multi_json (~> 1.0)
|
20
|
+
addressable (2.3.6)
|
21
|
+
ast (1.1.0)
|
14
22
|
claide (0.5.0)
|
15
23
|
cocoapods (0.31.1)
|
16
24
|
activesupport (>= 3.2.15, < 4)
|
@@ -32,14 +40,28 @@ GEM
|
|
32
40
|
cocoapods-downloader (0.4.1)
|
33
41
|
cocoapods-try (0.2.0)
|
34
42
|
colored (1.2)
|
43
|
+
crack (0.4.2)
|
44
|
+
safe_yaml (~> 1.0.0)
|
35
45
|
diff-lcs (1.2.5)
|
36
46
|
escape (0.0.4)
|
47
|
+
ethon (0.7.0)
|
48
|
+
ffi (>= 1.3.0)
|
49
|
+
ffi (1.9.3)
|
37
50
|
fuzzy_match (2.0.4)
|
51
|
+
hashie (2.1.1)
|
38
52
|
i18n (0.6.9)
|
53
|
+
json (1.8.1)
|
39
54
|
json_pure (1.8.1)
|
40
55
|
multi_json (1.9.2)
|
41
56
|
nap (0.7.0)
|
42
57
|
open4 (1.3.3)
|
58
|
+
osx_keychain (1.0.0)
|
59
|
+
RubyInline (~> 3)
|
60
|
+
parser (2.1.7)
|
61
|
+
ast (~> 1.1)
|
62
|
+
slop (~> 3.4, >= 3.4.5)
|
63
|
+
powerpack (0.0.9)
|
64
|
+
rainbow (2.0.0)
|
43
65
|
rake (10.2.2)
|
44
66
|
rspec (2.14.1)
|
45
67
|
rspec-core (~> 2.14.0)
|
@@ -49,7 +71,20 @@ GEM
|
|
49
71
|
rspec-expectations (2.14.5)
|
50
72
|
diff-lcs (>= 1.1.3, < 2.0)
|
51
73
|
rspec-mocks (2.14.6)
|
74
|
+
rubocop (0.20.1)
|
75
|
+
json (>= 1.7.7, < 2)
|
76
|
+
parser (~> 2.1.7)
|
77
|
+
powerpack (~> 0.0.6)
|
78
|
+
rainbow (>= 1.99.1, < 3.0)
|
79
|
+
ruby-progressbar (~> 1.4)
|
52
80
|
ruby-progressbar (1.4.2)
|
81
|
+
safe_yaml (1.0.2)
|
82
|
+
slop (3.5.0)
|
83
|
+
typhoeus (0.6.8)
|
84
|
+
ethon (>= 0.7.0)
|
85
|
+
webmock (1.17.4)
|
86
|
+
addressable (>= 2.2.7)
|
87
|
+
crack (>= 0.3.2)
|
53
88
|
xcodeproj (0.16.0)
|
54
89
|
activesupport (~> 3.0)
|
55
90
|
colored (~> 1.2)
|
@@ -59,6 +94,9 @@ PLATFORMS
|
|
59
94
|
|
60
95
|
DEPENDENCIES
|
61
96
|
bundler
|
97
|
+
cocoapods
|
62
98
|
cocoapods-sorted-search!
|
63
99
|
rake
|
64
100
|
rspec
|
101
|
+
rubocop
|
102
|
+
webmock
|
data/README.md
CHANGED
@@ -1,9 +1,12 @@
|
|
1
|
+
[![Build Status](http://img.shields.io/travis/DenHeadless/cocoapods-sorted-search/master.svg)](https://travis-ci.org/DenHeadless/cocoapods-sorted-search)
|
2
|
+
[![Gem Version](http://img.shields.io/gem/v/cocoapods-sorted-search.svg)](http://badge.fury.io/rb/cocoapods-sorted-search)
|
3
|
+
|
1
4
|
CocoaPods sorted search
|
2
5
|
==============
|
3
6
|
|
4
7
|
CocoaPods plugin which adds a `sort` subcommand for `pod search` to sort search results by amount of stars, forks, or github activity.
|
5
8
|
|
6
|
-
##Usage
|
9
|
+
## Usage
|
7
10
|
|
8
11
|
pod search sort POD_NAME
|
9
12
|
|
@@ -17,10 +20,24 @@ CocoaPods plugin which adds a `sort` subcommand for `pod search` to sort search
|
|
17
20
|
|
18
21
|
[sudo] gem install cocoapods-sorted-search
|
19
22
|
|
20
|
-
##
|
23
|
+
## Unleash the ~~hounds~~ pods!
|
24
|
+
|
25
|
+
Plugin uses GitHub anonymous requests by default, that have rate limit of 60 requests per hour.
|
26
|
+
|
27
|
+
Feed plugin with GitHub OAuth token, and raise the limit to **5000** requests per hour! Not only that, if provided with token, plugin starts to fetch GitHub info in parallel, making sorting incredibly fast.
|
28
|
+
|
29
|
+
Steps for token configuration:
|
30
|
+
1. Go to GitHub settings -> Applications -> Personal Access Tokens
|
31
|
+
2. Generate new one and **uncheck** all scopes. It should look [like this](https://raw.githubusercontent.com/DenHeadless/cocoapods-sorted-search/master/token_example.png).
|
32
|
+
3. Run ``` pod setup github --token=MyToken ```
|
21
33
|
|
22
|
-
|
34
|
+
Your token will be stored in OS X Keychain and used automatically for fetching GitHub info for repositories.
|
23
35
|
|
24
36
|
## Example
|
25
37
|
|
26
38
|
![](example.gif)
|
39
|
+
|
40
|
+
## Requirements
|
41
|
+
|
42
|
+
- CocoaPods 0.28 and higher
|
43
|
+
- Ruby 1.9.3 and higher
|
data/Rakefile
CHANGED
@@ -1,2 +1,37 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
|
3
|
+
task :default => "spec"
|
4
|
+
|
5
|
+
# Bootstrap
|
6
|
+
#-----------------------------------------------------------------------------#
|
7
|
+
|
8
|
+
task :bootstrap, :use_bundle_dir? do |t, args|
|
9
|
+
if args[:use_bundle_dir?]
|
10
|
+
sh "bundle install --path ./travis_bundle_dir"
|
11
|
+
else
|
12
|
+
sh "bundle install"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# Spec
|
17
|
+
#-----------------------------------------------------------------------------#
|
18
|
+
|
19
|
+
desc "Runs all the specs"
|
20
|
+
task :spec do
|
21
|
+
start_time = Time.now
|
22
|
+
sh "bundle exec rspec spec"
|
23
|
+
duration = Time.now - start_time
|
24
|
+
puts "Tests completed in #{duration}s"
|
25
|
+
Rake::Task["rubocop"].invoke
|
26
|
+
end
|
27
|
+
|
28
|
+
# Rubocop
|
29
|
+
#-----------------------------------------------------------------------------#
|
30
|
+
|
31
|
+
desc 'Checks code style'
|
32
|
+
task :rubocop do
|
33
|
+
require 'rubocop'
|
34
|
+
cli = Rubocop::CLI.new
|
35
|
+
result = cli.run(FileList['{spec,lib}/**/*.rb'])
|
36
|
+
abort('RuboCop failed!') unless result == 0
|
37
|
+
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
|
2
3
|
lib = File.expand_path('../lib', __FILE__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
|
5
6
|
Gem::Specification.new do |spec|
|
6
7
|
spec.name = "cocoapods-sorted-search"
|
7
|
-
spec.version = '0.
|
8
|
+
spec.version = '0.2.0'
|
8
9
|
spec.authors = ["Denys Telezhkin"]
|
9
10
|
spec.email = ["strangervir@gmail.com"]
|
10
11
|
spec.summary = %q{CocoaPods plugin for sorted searching amongst CocoaPods.}
|
@@ -18,8 +19,12 @@ Gem::Specification.new do |spec|
|
|
18
19
|
|
19
20
|
spec.add_runtime_dependency 'cocoapods', '~> 0.28'
|
20
21
|
spec.add_dependency 'ruby-progressbar'
|
22
|
+
spec.add_dependency "typhoeus"
|
23
|
+
spec.add_dependency "hashie"
|
24
|
+
spec.add_dependency "osx_keychain"
|
21
25
|
|
22
26
|
spec.add_development_dependency "bundler"
|
23
27
|
spec.add_development_dependency "rake"
|
24
28
|
spec.add_development_dependency "rspec"
|
29
|
+
spec.add_development_dependency "webmock"
|
25
30
|
end
|
data/example.gif
CHANGED
Binary file
|
data/lib/cocoapods_plugin.rb
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
require 'pod/command/
|
1
|
+
require 'pod/command/search/sorted'
|
2
|
+
require 'pod/command/setup/github'
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'cocoapods'
|
2
|
+
require 'sorted_search/printers/pods_printer'
|
3
|
+
require 'sorted_search/providers/cocoapods_provider'
|
4
|
+
require 'sorted_search/credentials'
|
5
|
+
require 'sorted_search/providers/github_provider'
|
6
|
+
require 'sorted_search/printers/github_printer'
|
7
|
+
|
8
|
+
module Pod
|
9
|
+
class Command
|
10
|
+
class Search
|
11
|
+
|
12
|
+
# The pod search sort subcommand
|
13
|
+
#
|
14
|
+
class Sorted < Search
|
15
|
+
|
16
|
+
attr_reader :sorting_criteria
|
17
|
+
|
18
|
+
self.summary = 'Sort pod search results easily!'
|
19
|
+
|
20
|
+
self.description = <<-DESC
|
21
|
+
Sort CocoaPods search results by stars, forks, or repo activity.
|
22
|
+
DESC
|
23
|
+
|
24
|
+
self.command = "sort"
|
25
|
+
|
26
|
+
def initialize(argv)
|
27
|
+
super
|
28
|
+
@sorting_criteria = argv.flag?('stars') ? :stars : nil
|
29
|
+
@sorting_criteria ||= argv.flag?('forks') ? :forks : nil
|
30
|
+
@sorting_criteria ||= argv.flag?('activity') ? :activity : nil
|
31
|
+
|
32
|
+
unless @sorting_criteria
|
33
|
+
@sorting_criteria = :stars
|
34
|
+
end
|
35
|
+
|
36
|
+
if SortedSearch::Credentials.token
|
37
|
+
@provider_klass = SortedSearch::GithubProvider
|
38
|
+
@printer_klass = SortedSearch::GitHubPrinter
|
39
|
+
else
|
40
|
+
UI.warn "Using anonymous requests. GitHub rate limit 60 requests per hour."
|
41
|
+
@provider_klass = SortedSearch::CocoapodsProvider
|
42
|
+
@printer_klass = SortedSearch::CocoapodsPrinter
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.options
|
48
|
+
[
|
49
|
+
["--stars", "Sort by stars"],
|
50
|
+
["--activity", "Sort by most recently changed repo"],
|
51
|
+
["--forks", "Sort by amount of forks"],
|
52
|
+
].concat(super)
|
53
|
+
end
|
54
|
+
|
55
|
+
def run
|
56
|
+
specs = find_specs(@query)
|
57
|
+
|
58
|
+
provider = @provider_klass.new(specs, @sorting_criteria)
|
59
|
+
sorted_pods = provider.provide_sorted_specs
|
60
|
+
|
61
|
+
printer = @printer_klass.new
|
62
|
+
printer.print(sorted_pods)
|
63
|
+
end
|
64
|
+
|
65
|
+
def find_specs(query)
|
66
|
+
sets = SourcesManager.search_by_name(query.join(' ').strip, @full_text_search)
|
67
|
+
if @supported_on_ios
|
68
|
+
sets.reject! { |set| !set.specification.available_platforms.map(&:name).include?(:ios) }
|
69
|
+
end
|
70
|
+
if @supported_on_osx
|
71
|
+
sets.reject! { |set| !set.specification.available_platforms.map(&:name).include?(:osx) }
|
72
|
+
end
|
73
|
+
|
74
|
+
sets
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'ruby-progressbar'
|
2
|
+
require 'cocoapods'
|
3
|
+
require 'sorted_search/github'
|
4
|
+
require 'sorted_search/credentials'
|
5
|
+
|
6
|
+
module Pod
|
7
|
+
class Command
|
8
|
+
class Setup
|
9
|
+
|
10
|
+
# The pod search sort subcommand
|
11
|
+
#
|
12
|
+
class GitHub < Setup
|
13
|
+
self.summary = 'Sort pod search results easily!'
|
14
|
+
|
15
|
+
self.description = <<-DESC
|
16
|
+
Add GitHub token to use authenticated requests for pod search sort command.
|
17
|
+
Send up to 1000 requests per hour!
|
18
|
+
DESC
|
19
|
+
|
20
|
+
self.command = "github"
|
21
|
+
|
22
|
+
def initialize(argv)
|
23
|
+
super
|
24
|
+
@token = argv.option('token')
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.options
|
28
|
+
[
|
29
|
+
["--token", "GitHub OAuth token"],
|
30
|
+
]
|
31
|
+
end
|
32
|
+
|
33
|
+
def validate!
|
34
|
+
help! "GitHub token is required" unless @token
|
35
|
+
super
|
36
|
+
end
|
37
|
+
|
38
|
+
def run
|
39
|
+
SortedSearch::Credentials.token = @token
|
40
|
+
puts
|
41
|
+
puts SortedSearch::Credentials.token.green + " token saved to OS X keychain".green
|
42
|
+
puts
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'osx_keychain'
|
2
|
+
|
3
|
+
module SortedSearch
|
4
|
+
|
5
|
+
# Module for saving github token to Mac OS X keychain
|
6
|
+
#
|
7
|
+
module Credentials
|
8
|
+
|
9
|
+
GITHUB_TOKEN_KEY = "GitHub token key"
|
10
|
+
|
11
|
+
def self.token
|
12
|
+
keychain = OSXKeychain.new
|
13
|
+
keychain["GitHub CocoaPods OAuth token", GITHUB_TOKEN_KEY]
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.token=(token)
|
17
|
+
keychain = OSXKeychain.new
|
18
|
+
keychain["GitHub CocoaPods OAuth token", GITHUB_TOKEN_KEY] = token
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'typhoeus'
|
2
|
+
require 'json'
|
3
|
+
require 'hashie'
|
4
|
+
require 'sorted_search/credentials'
|
5
|
+
|
6
|
+
module SortedSearch
|
7
|
+
|
8
|
+
# Github API client
|
9
|
+
#
|
10
|
+
module GitHub
|
11
|
+
|
12
|
+
HOSTNAME = "api.github.com"
|
13
|
+
|
14
|
+
# returns Typhoeus::Request object, that can be added to Hydra
|
15
|
+
# completion block will be called with parsed response, or nil if request failed
|
16
|
+
def self.get_repo(owner, repo, &completion)
|
17
|
+
token = SortedSearch::Credentials.token
|
18
|
+
request = Typhoeus::Request.new("https://#{HOSTNAME}/repos/#{owner}/#{repo}", headers: { Authorization: "token #{token}" })
|
19
|
+
request.on_complete(&self.parse_block(&completion))
|
20
|
+
request
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def self.parse_block(&completion)
|
26
|
+
lambda do |response|
|
27
|
+
if response.success?
|
28
|
+
parsed_body = JSON.parse response.body
|
29
|
+
parsed_object = Hashie::Mash.new(parsed_body)
|
30
|
+
completion.call(parsed_object) if completion
|
31
|
+
else
|
32
|
+
completion.call(nil)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'sorted_search/printers/printer'
|
2
|
+
require 'cocoapods'
|
3
|
+
|
4
|
+
module SortedSearch
|
5
|
+
|
6
|
+
# Printer for pods specification
|
7
|
+
#
|
8
|
+
class GitHubPrinter < Printer
|
9
|
+
|
10
|
+
def print(pods)
|
11
|
+
|
12
|
+
pods.each do |array|
|
13
|
+
pod = array[0]
|
14
|
+
mash = array[1]
|
15
|
+
|
16
|
+
Pod::UI.title("-> #{pod.name} (#{pod.version})".green, '', 1) do
|
17
|
+
stars = [0x2605].pack('U') + ' '
|
18
|
+
forks = [0x2442].pack('U') + ' '
|
19
|
+
commit = 'Last commit: '
|
20
|
+
|
21
|
+
if mash.name
|
22
|
+
stars += mash.stargazers_count.to_s + ' '
|
23
|
+
forks += mash.forks.to_s + ' '
|
24
|
+
commit += distance_from_now_in_words(mash.pushed_at)
|
25
|
+
else
|
26
|
+
stars += "Unknown "
|
27
|
+
forks += "Unknown "
|
28
|
+
commit += "Unknown "
|
29
|
+
end
|
30
|
+
|
31
|
+
Pod::UI.puts_indented pod.summary
|
32
|
+
Pod::UI.puts_indented "pod '#{pod.name}', '~> #{pod.version}'"
|
33
|
+
Pod::UI.puts_indented stars.yellow + forks.yellow
|
34
|
+
Pod::UI.puts_indented commit.yellow
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
Pod::UI.puts
|
39
|
+
end
|
40
|
+
|
41
|
+
def distance_from_now_in_words(from_time)
|
42
|
+
return nil unless from_time
|
43
|
+
from_time = Time.parse(from_time) unless from_time.is_a?(Time)
|
44
|
+
to_time = Time.now
|
45
|
+
distance_in_days = (((to_time - from_time).abs) / 60 / 60 / 24).round
|
46
|
+
|
47
|
+
case distance_in_days
|
48
|
+
when 0..7
|
49
|
+
"less than a week ago"
|
50
|
+
when 8..29
|
51
|
+
"#{distance_in_days} days ago"
|
52
|
+
when 30..45
|
53
|
+
"1 month ago"
|
54
|
+
when 46..365
|
55
|
+
"#{(distance_in_days.to_f / 30).round} months ago"
|
56
|
+
else
|
57
|
+
"more than a year ago"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'sorted_search/printers/printer'
|
2
|
+
require 'cocoapods'
|
3
|
+
|
4
|
+
module SortedSearch
|
5
|
+
|
6
|
+
# Printer for pods specification
|
7
|
+
#
|
8
|
+
class CocoapodsPrinter < Printer
|
9
|
+
|
10
|
+
def print(pods)
|
11
|
+
pods.each do |pod|
|
12
|
+
Pod::UI.title("-> #{pod.name} (#{pod.version})".green, '', 1) do
|
13
|
+
next unless pod.github_last_activity
|
14
|
+
stars = [0x2605].pack('U') + ' ' + pod.github_watchers.to_s + ' '
|
15
|
+
forks = [0x2442].pack('U') + ' ' + pod.github_forks.to_s + ' '
|
16
|
+
commit = 'Last commit: ' + pod.github_last_activity
|
17
|
+
|
18
|
+
Pod::UI.puts_indented pod.summary
|
19
|
+
Pod::UI.puts_indented "pod '#{pod.name}', '~> #{pod.version}'"
|
20
|
+
Pod::UI.puts_indented stars.yellow + forks.yellow
|
21
|
+
Pod::UI.puts_indented commit.yellow
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
Pod::UI.puts
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'sorted_search/providers/provider'
|
2
|
+
|
3
|
+
module SortedSearch
|
4
|
+
|
5
|
+
# base class for printers
|
6
|
+
#
|
7
|
+
class CocoapodsProvider < Provider
|
8
|
+
|
9
|
+
def fetch_data
|
10
|
+
super
|
11
|
+
@specs.each do |spec|
|
12
|
+
pod = pod_from_spec(spec)
|
13
|
+
pod.github_watchers # This will force statistics provider to fetch github info unless it is already cached
|
14
|
+
@progress_bar.increment
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def sort_specs
|
19
|
+
pods = @specs.map { |spec| pod_from_spec(spec) }
|
20
|
+
|
21
|
+
pods.sort do |x, y|
|
22
|
+
case @sorting_criteria
|
23
|
+
|
24
|
+
when :stars
|
25
|
+
x.github_watchers.to_i <=> y.github_watchers.to_i
|
26
|
+
|
27
|
+
when :forks
|
28
|
+
x.github_forks.to_i <=> y.github_forks.to_i
|
29
|
+
|
30
|
+
when :activity
|
31
|
+
x.statistics_provider.github_pushed_at(y.set).to_i <=> y.statistics_provider.github_pushed_at(x.set).to_i
|
32
|
+
else
|
33
|
+
nil
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'sorted_search/providers/provider'
|
2
|
+
require 'sorted_search/github'
|
3
|
+
|
4
|
+
module SortedSearch
|
5
|
+
|
6
|
+
# base class for printers
|
7
|
+
#
|
8
|
+
class GithubProvider < Provider
|
9
|
+
|
10
|
+
def fetch_data
|
11
|
+
super
|
12
|
+
pods = []
|
13
|
+
@specs.each do |spec|
|
14
|
+
pods << pod_from_spec(spec)
|
15
|
+
end
|
16
|
+
|
17
|
+
hydra = Typhoeus::Hydra.hydra
|
18
|
+
|
19
|
+
@github_repos = {}
|
20
|
+
pods.each do |pod|
|
21
|
+
|
22
|
+
_, username, reponame = *(pod.source_url.match(%r{[:/]([\w\-]+)/([\w\-]+)\.git}))
|
23
|
+
|
24
|
+
request = SortedSearch::GitHub.get_repo(username, reponame) do |response_object|
|
25
|
+
@progress_bar.increment
|
26
|
+
|
27
|
+
if response_object
|
28
|
+
@github_repos[pod] = response_object
|
29
|
+
else
|
30
|
+
mash = Hashie::Mash.new
|
31
|
+
mash.stargazers_count = 0
|
32
|
+
mash.forks = 0
|
33
|
+
mash.pushed_at = 0
|
34
|
+
@github_repos[pod] = mash
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
hydra.queue request
|
39
|
+
end
|
40
|
+
|
41
|
+
hydra.run
|
42
|
+
end
|
43
|
+
|
44
|
+
def sort_specs
|
45
|
+
@github_repos.sort_by do |key, value|
|
46
|
+
case @sorting_criteria
|
47
|
+
|
48
|
+
when :stars
|
49
|
+
value.stargazers_count.to_i
|
50
|
+
|
51
|
+
when :forks
|
52
|
+
value.forks.to_i
|
53
|
+
|
54
|
+
when :activity
|
55
|
+
value.pushed_at
|
56
|
+
|
57
|
+
else
|
58
|
+
nil
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'ruby-progressbar'
|
2
|
+
|
3
|
+
module SortedSearch
|
4
|
+
|
5
|
+
# base class for printers
|
6
|
+
#
|
7
|
+
class Provider
|
8
|
+
|
9
|
+
attr_reader :sorting_criteria
|
10
|
+
|
11
|
+
def initialize(specs, sorting_criteria)
|
12
|
+
@specs = specs
|
13
|
+
@sorting_criteria = sorting_criteria
|
14
|
+
end
|
15
|
+
|
16
|
+
def provide_sorted_specs
|
17
|
+
fetch_data
|
18
|
+
sort_specs
|
19
|
+
end
|
20
|
+
|
21
|
+
# private
|
22
|
+
|
23
|
+
def fetch_data
|
24
|
+
found = "\nFound " + @specs.count.to_s + " specs. Fetching GitHub info, wait a moment please.\n"
|
25
|
+
Pod::UI.puts found.green
|
26
|
+
|
27
|
+
@progress_bar = ProgressBar.create(total: @specs.count, length: 60)
|
28
|
+
end
|
29
|
+
|
30
|
+
def sort_specs
|
31
|
+
end
|
32
|
+
|
33
|
+
def pod_from_spec(spec)
|
34
|
+
statistics_provider = Pod::Config.instance.spec_statistics_provider
|
35
|
+
Pod::Specification::Set::Presenter.new(spec, statistics_provider)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
{
|
2
|
+
"id": 5998758,
|
3
|
+
"name": "DTTableViewManager",
|
4
|
+
"full_name": "DenHeadless/DTTableViewManager",
|
5
|
+
"owner": {
|
6
|
+
"login": "DenHeadless",
|
7
|
+
"id": 853604,
|
8
|
+
"avatar_url": "https://avatars.githubusercontent.com/u/853604?",
|
9
|
+
"gravatar_id": "5d7040ac544974637e38e6525b644694",
|
10
|
+
"url": "https://api.github.com/users/DenHeadless",
|
11
|
+
"html_url": "https://github.com/DenHeadless",
|
12
|
+
"followers_url": "https://api.github.com/users/DenHeadless/followers",
|
13
|
+
"following_url": "https://api.github.com/users/DenHeadless/following{/other_user}",
|
14
|
+
"gists_url": "https://api.github.com/users/DenHeadless/gists{/gist_id}",
|
15
|
+
"starred_url": "https://api.github.com/users/DenHeadless/starred{/owner}{/repo}",
|
16
|
+
"subscriptions_url": "https://api.github.com/users/DenHeadless/subscriptions",
|
17
|
+
"organizations_url": "https://api.github.com/users/DenHeadless/orgs",
|
18
|
+
"repos_url": "https://api.github.com/users/DenHeadless/repos",
|
19
|
+
"events_url": "https://api.github.com/users/DenHeadless/events{/privacy}",
|
20
|
+
"received_events_url": "https://api.github.com/users/DenHeadless/received_events",
|
21
|
+
"type": "User",
|
22
|
+
"site_admin": false
|
23
|
+
},
|
24
|
+
"private": false,
|
25
|
+
"html_url": "https://github.com/DenHeadless/DTTableViewManager",
|
26
|
+
"description": "The most simple and robust way to manage UITableView",
|
27
|
+
"fork": false,
|
28
|
+
"url": "https://api.github.com/repos/DenHeadless/DTTableViewManager",
|
29
|
+
"forks_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/forks",
|
30
|
+
"keys_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/keys{/key_id}",
|
31
|
+
"collaborators_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/collaborators{/collaborator}",
|
32
|
+
"teams_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/teams",
|
33
|
+
"hooks_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/hooks",
|
34
|
+
"issue_events_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/issues/events{/number}",
|
35
|
+
"events_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/events",
|
36
|
+
"assignees_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/assignees{/user}",
|
37
|
+
"branches_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/branches{/branch}",
|
38
|
+
"tags_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/tags",
|
39
|
+
"blobs_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/git/blobs{/sha}",
|
40
|
+
"git_tags_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/git/tags{/sha}",
|
41
|
+
"git_refs_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/git/refs{/sha}",
|
42
|
+
"trees_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/git/trees{/sha}",
|
43
|
+
"statuses_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/statuses/{sha}",
|
44
|
+
"languages_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/languages",
|
45
|
+
"stargazers_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/stargazers",
|
46
|
+
"contributors_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/contributors",
|
47
|
+
"subscribers_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/subscribers",
|
48
|
+
"subscription_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/subscription",
|
49
|
+
"commits_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/commits{/sha}",
|
50
|
+
"git_commits_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/git/commits{/sha}",
|
51
|
+
"comments_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/comments{/number}",
|
52
|
+
"issue_comment_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/issues/comments/{number}",
|
53
|
+
"contents_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/contents/{+path}",
|
54
|
+
"compare_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/compare/{base}...{head}",
|
55
|
+
"merges_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/merges",
|
56
|
+
"archive_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/{archive_format}{/ref}",
|
57
|
+
"downloads_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/downloads",
|
58
|
+
"issues_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/issues{/number}",
|
59
|
+
"pulls_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/pulls{/number}",
|
60
|
+
"milestones_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/milestones{/number}",
|
61
|
+
"notifications_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/notifications{?since,all,participating}",
|
62
|
+
"labels_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/labels{/name}",
|
63
|
+
"releases_url": "https://api.github.com/repos/DenHeadless/DTTableViewManager/releases{/id}",
|
64
|
+
"created_at": "2012-09-28T14:56:08Z",
|
65
|
+
"updated_at": "2014-03-28T15:13:30Z",
|
66
|
+
"pushed_at": "2014-03-28T15:13:32Z",
|
67
|
+
"git_url": "git://github.com/DenHeadless/DTTableViewManager.git",
|
68
|
+
"ssh_url": "git@github.com:DenHeadless/DTTableViewManager.git",
|
69
|
+
"clone_url": "https://github.com/DenHeadless/DTTableViewManager.git",
|
70
|
+
"svn_url": "https://github.com/DenHeadless/DTTableViewManager",
|
71
|
+
"homepage": "",
|
72
|
+
"size": 3168,
|
73
|
+
"stargazers_count": 59,
|
74
|
+
"watchers_count": 59,
|
75
|
+
"language": "Objective-C",
|
76
|
+
"has_issues": true,
|
77
|
+
"has_downloads": true,
|
78
|
+
"has_wiki": true,
|
79
|
+
"forks_count": 6,
|
80
|
+
"mirror_url": null,
|
81
|
+
"open_issues_count": 0,
|
82
|
+
"forks": 6,
|
83
|
+
"open_issues": 0,
|
84
|
+
"watchers": 59,
|
85
|
+
"default_branch": "master",
|
86
|
+
"master_branch": "master",
|
87
|
+
"network_count": 6,
|
88
|
+
"subscribers_count": 7
|
89
|
+
}
|
data/spec/spec_helper.rb
CHANGED
@@ -1,8 +1,49 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'pathname'
|
2
|
+
ROOT = Pathname.new(File.expand_path('../../', __FILE__))
|
3
|
+
$LOAD_PATH.unshift((ROOT + 'lib').to_s)
|
4
|
+
$LOAD_PATH.unshift((ROOT + 'spec').to_s)
|
3
5
|
|
4
|
-
require '
|
6
|
+
require 'bundler/setup'
|
7
|
+
require 'cocoapods'
|
8
|
+
require 'cocoapods_plugin'
|
5
9
|
|
6
10
|
def fixture(name)
|
7
11
|
File.read(File.dirname(__FILE__) + "/fixtures/#{name}")
|
8
12
|
end
|
13
|
+
|
14
|
+
#-----------------------------------------------------------------------------#
|
15
|
+
|
16
|
+
# The CocoaPods namespace
|
17
|
+
#
|
18
|
+
module Pod
|
19
|
+
|
20
|
+
# Disable the wrapping so the output is deterministic in the tests.
|
21
|
+
#
|
22
|
+
UI.disable_wrap = true
|
23
|
+
|
24
|
+
# Redirects the messages to an internal store.
|
25
|
+
#
|
26
|
+
module UI
|
27
|
+
@output = ''
|
28
|
+
@warnings = ''
|
29
|
+
|
30
|
+
class << self
|
31
|
+
attr_accessor :output
|
32
|
+
attr_accessor :warnings
|
33
|
+
|
34
|
+
def puts(message = '')
|
35
|
+
@output << "#{message}\n"
|
36
|
+
end
|
37
|
+
|
38
|
+
def warn(message = '', actions = [])
|
39
|
+
@warnings << "#{message}\n"
|
40
|
+
end
|
41
|
+
|
42
|
+
def print(message)
|
43
|
+
@output << message
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
#-----------------------------------------------------------------------------#
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
2
|
+
require 'sorted_search/github'
|
3
|
+
require 'webmock/rspec'
|
4
|
+
require 'sorted_search/credentials'
|
5
|
+
|
6
|
+
# Sorted Search Github API fetcher tests
|
7
|
+
#
|
8
|
+
module SortedSearch
|
9
|
+
#
|
10
|
+
module Github
|
11
|
+
describe "fetch repo info" do
|
12
|
+
before do
|
13
|
+
stub_request(:get, "https://api.github.com/repos/foo/bar")
|
14
|
+
.with(headers: { Authorization: "token foo" })
|
15
|
+
.to_return(body: fixture('dttableviewmanager.json'))
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should receive github repo info" do
|
19
|
+
allow(SortedSearch::Credentials).to receive(:token).and_return("foo")
|
20
|
+
|
21
|
+
repo = nil
|
22
|
+
request = SortedSearch::GitHub.get_repo('foo', 'bar') do |parsed_response|
|
23
|
+
repo = parsed_response
|
24
|
+
end
|
25
|
+
request.run
|
26
|
+
|
27
|
+
repo.name.should eql('DTTableViewManager')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.expand_path('../../../../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
# CocoaPods namespace
|
4
|
+
#
|
5
|
+
module Pod
|
6
|
+
describe Command::Setup do
|
7
|
+
|
8
|
+
describe "setup github" do
|
9
|
+
|
10
|
+
it "registers itself" do
|
11
|
+
expect(Command.parse(%w(setup github))).to be_instance_of(Command::Setup::GitHub)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "presents the help if no name is provided" do
|
15
|
+
command = Pod::Command.parse(['setup github'])
|
16
|
+
expect { command.validate! }.to raise_error(CLAide::Help)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.expand_path('../../../../spec_helper', __FILE__)
|
2
|
+
# CocoaPods namespace
|
3
|
+
#
|
4
|
+
module Pod
|
5
|
+
|
6
|
+
describe "command" do
|
7
|
+
|
8
|
+
it "registers itself" do
|
9
|
+
expect(Command.parse(%w(search sort))).to be_instance_of(Command::Search::Sorted)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should correctly set stars sort order" do
|
13
|
+
command = Command.parse(%w(search sort))
|
14
|
+
expect(command.sorting_criteria).to equal(:stars)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should correctly set stars sort order" do
|
18
|
+
command = Command.parse(%w(search sort --stars))
|
19
|
+
expect(command.sorting_criteria).to equal(:stars)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should correctly set stars sort order" do
|
23
|
+
command = Command.parse(%w(search sort --forks))
|
24
|
+
expect(command.sorting_criteria).to equal(:forks)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should correctly set stars sort order" do
|
28
|
+
command = Command.parse(%w(search sort --activity))
|
29
|
+
expect(command.sorting_criteria).to equal(:activity)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should correctly set stars sort order" do
|
33
|
+
command = Command.parse(%w(search sort --stars --forks --activity))
|
34
|
+
expect(command.sorting_criteria).to equal(:stars)
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.expand_path('../../../../spec_helper', __FILE__)
|
2
|
+
require 'sorted_search/printers/printer'
|
3
|
+
|
4
|
+
#
|
5
|
+
module SortedSearch
|
6
|
+
|
7
|
+
describe Printer do
|
8
|
+
|
9
|
+
it "should raise if print method invoked" do
|
10
|
+
printer = SortedSearch::Printer.new
|
11
|
+
|
12
|
+
expect { printer.print([]) }.to raise_exception
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
data/token_example.png
ADDED
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods-sorted-search
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denys Telezhkin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-04-
|
11
|
+
date: 2014-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cocoapods
|
@@ -38,6 +38,48 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: typhoeus
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: hashie
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: osx_keychain
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
41
83
|
- !ruby/object:Gem::Dependency
|
42
84
|
name: bundler
|
43
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +122,20 @@ dependencies:
|
|
80
122
|
- - ">="
|
81
123
|
- !ruby/object:Gem::Version
|
82
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: webmock
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
83
139
|
description: Sort CocoaPods search results by amount of stars, forks, or commit activity!
|
84
140
|
email:
|
85
141
|
- strangervir@gmail.com
|
@@ -88,6 +144,8 @@ extensions: []
|
|
88
144
|
extra_rdoc_files: []
|
89
145
|
files:
|
90
146
|
- ".gitignore"
|
147
|
+
- ".rubocop.yml"
|
148
|
+
- ".travis.yml"
|
91
149
|
- Gemfile
|
92
150
|
- Gemfile.lock
|
93
151
|
- LICENSE
|
@@ -96,8 +154,23 @@ files:
|
|
96
154
|
- cocoapods-sorted-search.gemspec
|
97
155
|
- example.gif
|
98
156
|
- lib/cocoapods_plugin.rb
|
99
|
-
- lib/pod/command/
|
157
|
+
- lib/pod/command/search/sorted.rb
|
158
|
+
- lib/pod/command/setup/github.rb
|
159
|
+
- lib/sorted_search/credentials.rb
|
160
|
+
- lib/sorted_search/github.rb
|
161
|
+
- lib/sorted_search/printers/github_printer.rb
|
162
|
+
- lib/sorted_search/printers/pods_printer.rb
|
163
|
+
- lib/sorted_search/printers/printer.rb
|
164
|
+
- lib/sorted_search/providers/cocoapods_provider.rb
|
165
|
+
- lib/sorted_search/providers/github_provider.rb
|
166
|
+
- lib/sorted_search/providers/provider.rb
|
167
|
+
- spec/fixtures/dttableviewmanager.json
|
100
168
|
- spec/spec_helper.rb
|
169
|
+
- spec/unit/github_spec.rb
|
170
|
+
- spec/unit/pod/command/github_setup_spec.rb
|
171
|
+
- spec/unit/pod/command/sorted_search_spec.rb
|
172
|
+
- spec/unit/sorted_search/printers/printer_spec.rb
|
173
|
+
- token_example.png
|
101
174
|
homepage: https://github.com/DenHeadless/cocoapods-sorted-search
|
102
175
|
licenses:
|
103
176
|
- MIT
|
@@ -123,5 +196,10 @@ signing_key:
|
|
123
196
|
specification_version: 4
|
124
197
|
summary: CocoaPods plugin for sorted searching amongst CocoaPods.
|
125
198
|
test_files:
|
199
|
+
- spec/fixtures/dttableviewmanager.json
|
126
200
|
- spec/spec_helper.rb
|
201
|
+
- spec/unit/github_spec.rb
|
202
|
+
- spec/unit/pod/command/github_setup_spec.rb
|
203
|
+
- spec/unit/pod/command/sorted_search_spec.rb
|
204
|
+
- spec/unit/sorted_search/printers/printer_spec.rb
|
127
205
|
has_rdoc:
|
@@ -1,114 +0,0 @@
|
|
1
|
-
require 'ruby-progressbar'
|
2
|
-
|
3
|
-
module Pod
|
4
|
-
class Command
|
5
|
-
class Search
|
6
|
-
class Sorted < Search
|
7
|
-
self.summary = 'Sort pod search results easily!'
|
8
|
-
|
9
|
-
self.description = <<-DESC
|
10
|
-
Sort CocoaPods search results by stars, forks, or repo activity.
|
11
|
-
DESC
|
12
|
-
|
13
|
-
self.command = "sort"
|
14
|
-
|
15
|
-
def initialize(argv)
|
16
|
-
super
|
17
|
-
@sort_by_stars = argv.flag?('stars')
|
18
|
-
@sort_by_commits = argv.flag?('activity')
|
19
|
-
@sort_by_forks = argv.flag?('forks')
|
20
|
-
|
21
|
-
if !@sort_by_forks && !@sort_by_commits
|
22
|
-
@sort_by_stars = true
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.options
|
27
|
-
[
|
28
|
-
["--stars", "Sort by stars"],
|
29
|
-
["--activity", "Sort by most recently changed repo"],
|
30
|
-
["--forks", "Sort by amount of forks"]
|
31
|
-
].concat(super)
|
32
|
-
end
|
33
|
-
|
34
|
-
def run
|
35
|
-
specs = find_specs(@query)
|
36
|
-
fetch_github_info(specs)
|
37
|
-
sorted_pods = sort_specs(specs)
|
38
|
-
print_specs(sorted_pods)
|
39
|
-
end
|
40
|
-
|
41
|
-
def fetch_github_info(specs)
|
42
|
-
found = "\nFound " + specs.count.to_s + " specs. Fetching GitHub info, wait a moment please.\n"
|
43
|
-
UI.puts found.green
|
44
|
-
|
45
|
-
progress_bar = ProgressBar.create(total: specs.count, length: 60)
|
46
|
-
specs.each do |spec|
|
47
|
-
pod = pod_from_spec(spec)
|
48
|
-
pod.github_watchers # This will force statistics provider to fetch github info unless it is already cached
|
49
|
-
progress_bar.increment
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def pod_from_spec(spec)
|
54
|
-
statistics_provider = Config.instance.spec_statistics_provider
|
55
|
-
Specification::Set::Presenter.new(spec, statistics_provider)
|
56
|
-
end
|
57
|
-
|
58
|
-
def print_specs(sorted_pods)
|
59
|
-
sorted_pods.each do |pod|
|
60
|
-
UI.title("-> #{pod.name} (#{pod.version})".green, '', 1) do
|
61
|
-
next unless pod.github_last_activity
|
62
|
-
stars = [0x2605].pack("U") + " " + pod.github_watchers.to_s + " "
|
63
|
-
forks = [0x2442].pack("U") + " " + pod.github_forks.to_s + " "
|
64
|
-
commit = "Last commit: "+ pod.github_last_activity
|
65
|
-
|
66
|
-
UI.puts_indented pod.summary
|
67
|
-
UI.puts_indented "pod '#{pod.name}', '~> #{pod.version}'"
|
68
|
-
UI.puts_indented stars.yellow + forks.yellow
|
69
|
-
UI.puts_indented commit.yellow
|
70
|
-
end
|
71
|
-
|
72
|
-
end
|
73
|
-
|
74
|
-
UI.puts
|
75
|
-
|
76
|
-
end
|
77
|
-
|
78
|
-
def sort_specs(specs)
|
79
|
-
pods = specs.map { |spec| pod_from_spec(spec) }
|
80
|
-
|
81
|
-
if @sort_by_stars
|
82
|
-
return pods.sort do |x,y|
|
83
|
-
y.github_watchers.to_i <=> x.github_watchers.to_i
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
if @sort_by_commits
|
88
|
-
return pods.sort do |x,y|
|
89
|
-
y.statistics_provider.github_pushed_at(y.set).to_i <=> x.statistics_provider.github_pushed_at(x.set).to_i
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
if @sort_by_forks
|
94
|
-
return pods.sort do |x,y|
|
95
|
-
y.github_forks.to_i <=> x.github_forks.to_i
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
def find_specs(query)
|
101
|
-
sets = SourcesManager.search_by_name(query.join(' ').strip, @full_text_search)
|
102
|
-
if @supported_on_ios
|
103
|
-
sets.reject!{ |set| !set.specification.available_platforms.map(&:name).include?(:ios) }
|
104
|
-
end
|
105
|
-
if @supported_on_osx
|
106
|
-
sets.reject!{ |set| !set.specification.available_platforms.map(&:name).include?(:osx) }
|
107
|
-
end
|
108
|
-
|
109
|
-
sets
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|