taskit 0.0.1 → 0.0.3

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: 60b72c3ee14a6743ba6c8bd4dc6c69456eacf847
4
- data.tar.gz: 3d9d2ad77068b65f290f980e902cc11a9d2a31af
3
+ metadata.gz: 5287fb5999ebf27285c816e8e7bee9cea066fbb3
4
+ data.tar.gz: 430bdec0a935bf0a9048950a7030171892acfbee
5
5
  SHA512:
6
- metadata.gz: 1d620d08a8986b10b70e6065b823c01a24cad8bc5ec02d3a75aa481388f8ec96b8f52f19796cd2686141384925c0686bc407da46ac56b0741d61d6391fe3af01
7
- data.tar.gz: ffad05d257fbb12f4008a7df60734ed5fa0244ae68779cefb823f858a5eaf7d7a4e224bde1f3d9e28a232f057a0d3b993fb741af8f80251022ac4a27e50a35cf
6
+ metadata.gz: 0e24a2b2833cd70025cb1a3b645d9d515451adcc91623c0882ab9f1814b281a2a6e4a8e8fb9fead30f72fe492bd90c29e8b1e1f95bda471e9a8562647ad65f5b
7
+ data.tar.gz: 1e8bb5628dd9fbea040351bdabffe3e95490ea6151b5cc5ce01bf77af73aa3b77aec87636e04fdbffe1a4478bd8efc0d3c5c9684676b86fe30ae29b5b3b1ba3f
@@ -1,13 +1,15 @@
1
1
  language: ruby
2
2
  cache: bundler
3
+ sudo: false
3
4
  rvm:
4
- - 2.1.0
5
- - 2.0.0
6
- - 1.9.3
5
+ - 2.2.0
6
+ - 2.1.5
7
+ - 2.0.0-p598
8
+ - 1.9.3-p551
7
9
  notifications:
8
10
  email: false
9
11
  irc:
10
12
  template:
11
13
  - '%{repository}/%{branch}/%{build_number}: %{message} -- %{build_url}'
12
14
  channels:
13
- secure: feDemyPPr4HWGAoUHPkl2zyomwhJqoQRtWGnHoN97fS8RYD5y8Z7EPTYXl8dlKajdDMlq5stKQ89JqbRNUC/Vt6jUDLkxXHt83We5JG85eUpBzju8iMR+21RI/e7i9w/bNOuMFxeLxSueHENIezd8gZW0atrGmivcmlYl0oKeXE=
15
+ - irc.oftc.net#akerl
data/Rakefile CHANGED
@@ -6,8 +6,8 @@ desc 'Run tests'
6
6
  RSpec::Core::RakeTask.new(:spec)
7
7
 
8
8
  desc 'Run Rubocop on the gem'
9
- Rubocop::RakeTask.new(:rubocop) do |task|
10
- task.patterns = ['lib/**/*.rb', 'spec/**/*.rb']
9
+ RuboCop::RakeTask.new(:rubocop) do |task|
10
+ task.patterns = ['lib/**/*.rb', 'spec/**/*.rb', 'bin/*']
11
11
  task.fail_on_error = true
12
12
  end
13
13
 
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'taskit'
4
+
5
+ tasks = Taskit.new
6
+ p tasks.issues
@@ -0,0 +1,16 @@
1
+ ##
2
+ # Taskit parses GitHub issues
3
+ module Taskit
4
+ class << self
5
+ ##
6
+ # Insert a helper .new() method for creating a new Tasks object
7
+ def new(*args)
8
+ self::Tasks.new(*args)
9
+ end
10
+ end
11
+ end
12
+
13
+ require 'taskit/issue'
14
+ require 'taskit/filters'
15
+ require 'taskit/display'
16
+ require 'taskit/tasks'
@@ -0,0 +1,6 @@
1
+ module Taskit
2
+ ##
3
+ # Formatting methods for displaying issues
4
+ module Display
5
+ end
6
+ end
@@ -0,0 +1,36 @@
1
+ module Taskit
2
+ ##
3
+ # Define filters for selecting issues
4
+ module Filters
5
+ def select(&block)
6
+ Taskit::Tasks.new(
7
+ client: @client,
8
+ issues: @issues.select(&block)
9
+ )
10
+ end
11
+
12
+ def by_label(input)
13
+ select { |issue| issue.labels.any? { |label| label.name.match input } }
14
+ end
15
+
16
+ def respond_to?(method, include_private = false)
17
+ var = parse_var method
18
+ return true if var && @issues.first.respond_to?(var)
19
+ super
20
+ end
21
+
22
+ private
23
+
24
+ def parse_var(string)
25
+ match = /^by_(?<var>[a-z]+)$/.match(string)
26
+ match ? match[:var] : nil
27
+ end
28
+
29
+ def method_missing(method, *args, &block)
30
+ var = parse_var method
31
+ return super unless var && @issues.first.respond_to?(var)
32
+ define_singleton_method(method) { |x| select { |i| i.send(var).match x } }
33
+ send(method, *args, &block)
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,38 @@
1
+ ##
2
+ # Definitions for issue objects
3
+ module Taskit
4
+ Label = Struct.new(:name, :color)
5
+
6
+ ##
7
+ # An issue object, used to normalize the GitHub API response
8
+ class Issue
9
+ attr_reader :repo, :repo_url, :owner,
10
+ :url, :id, :number, :title, :body, :reporter,
11
+ :labels, :state
12
+
13
+ def initialize(data)
14
+ load_repo_info data
15
+ load_issue_info data
16
+ load_state_info data
17
+ end
18
+
19
+ def load_repo_info(data)
20
+ repo_info = data[:repository]
21
+ @repo = repo_info[:name]
22
+ @repo_url = repo_info[:html_url]
23
+ @owner = repo_info[:owner][:login]
24
+ end
25
+
26
+ def load_issue_info(data)
27
+ @url, @id, @number, @title, @body = data.to_h.values_at(
28
+ :html_url, :id, :number, :title, :body
29
+ )
30
+ @reporter = data[:user][:login]
31
+ end
32
+
33
+ def load_state_info(data)
34
+ @state = data[:state]
35
+ @labels = data[:labels].map { |x| Label.new(x[:name], x[:color]) }
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,62 @@
1
+ require 'octoauth'
2
+ require 'octokit'
3
+ require 'faraday-http-cache'
4
+
5
+ ##
6
+ # Define Tasks and related objects for Taskit
7
+ module Taskit
8
+ ##
9
+ # Cache layer for GitHub API
10
+ API_CACHE = Faraday::RackBuilder.new do |builder|
11
+ builder.use Faraday::HttpCache
12
+ builder.use Octokit::Response::RaiseError
13
+ builder.adapter Faraday.default_adapter
14
+ end
15
+
16
+ ##
17
+ # Tasks object holds and returns information on open issues
18
+ class Tasks
19
+ include Taskit::Filters
20
+ include Taskit::Display
21
+
22
+ attr_reader :issues
23
+
24
+ def initialize(params = {})
25
+ @options = params
26
+ @client = params[:client]
27
+ @issues = params[:issues]
28
+ end
29
+
30
+ def issues
31
+ @issues ||= client.issues(nil, filter: :all).map do |issue|
32
+ Taskit::Issue.new issue
33
+ end
34
+ end
35
+
36
+ def to_s
37
+ "<Taskit::Tasks for #{client.login}>"
38
+ end
39
+ alias_method :inspect, :to_s
40
+
41
+ private
42
+
43
+ def token
44
+ @token ||= Octoauth.new(
45
+ note: 'Taskit',
46
+ api_endpoint: @options[:api_endpoint],
47
+ file: :default,
48
+ autosave: true,
49
+ scopes: ['repo']
50
+ ).token
51
+ end
52
+
53
+ def client
54
+ @client ||= Octokit::Client.new(
55
+ access_token: token,
56
+ api_endpoint: @options[:api_endpoint],
57
+ web_endpoint: @options[:api_endpoint],
58
+ auto_paginate: true
59
+ )
60
+ end
61
+ end
62
+ end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'taskit'
3
- s.version = '0.0.1'
3
+ s.version = '0.0.3'
4
4
  s.date = Time.now.strftime("%Y-%m-%d")
5
5
 
6
6
  s.summary = ''
@@ -12,12 +12,15 @@ Gem::Specification.new do |s|
12
12
 
13
13
  s.files = `git ls-files`.split
14
14
  s.test_files = `git ls-files spec/*`.split
15
+ s.executables = ['taskit']
15
16
 
16
- s.add_dependency 'octokit', '~> 2.0'
17
+ s.add_dependency 'octokit', '~> 3.8.0'
18
+ s.add_dependency 'octoauth', '~> 1.0.1'
19
+ s.add_dependency 'faraday-http-cache', '~> 1.1.0'
17
20
 
18
- s.add_development_dependency 'rubocop', '~> 0.19.0'
19
- s.add_development_dependency 'rake', '~> 10.1.1'
20
- s.add_development_dependency 'coveralls', '~> 0.7.0'
21
- s.add_development_dependency 'rspec', '~> 2.14.1'
22
- s.add_development_dependency 'fuubar', '~> 1.3.2'
21
+ s.add_development_dependency 'rubocop', '~> 0.30.0'
22
+ s.add_development_dependency 'rake', '~> 10.4.0'
23
+ s.add_development_dependency 'coveralls', '~> 0.8.0'
24
+ s.add_development_dependency 'rspec', '~> 3.2.0'
25
+ s.add_development_dependency 'fuubar', '~> 2.0.0'
23
26
  end
metadata CHANGED
@@ -1,114 +1,148 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: taskit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Les Aker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-23 00:00:00.000000000 Z
11
+ date: 2015-05-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: octokit
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: 3.8.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.0'
26
+ version: 3.8.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: octoauth
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: faraday-http-cache
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.1.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.1.0
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: rubocop
29
57
  requirement: !ruby/object:Gem::Requirement
30
58
  requirements:
31
- - - ~>
59
+ - - "~>"
32
60
  - !ruby/object:Gem::Version
33
- version: 0.19.0
61
+ version: 0.30.0
34
62
  type: :development
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
- - - ~>
66
+ - - "~>"
39
67
  - !ruby/object:Gem::Version
40
- version: 0.19.0
68
+ version: 0.30.0
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: rake
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
- - - ~>
73
+ - - "~>"
46
74
  - !ruby/object:Gem::Version
47
- version: 10.1.1
75
+ version: 10.4.0
48
76
  type: :development
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
- - - ~>
80
+ - - "~>"
53
81
  - !ruby/object:Gem::Version
54
- version: 10.1.1
82
+ version: 10.4.0
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: coveralls
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
- - - ~>
87
+ - - "~>"
60
88
  - !ruby/object:Gem::Version
61
- version: 0.7.0
89
+ version: 0.8.0
62
90
  type: :development
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
- - - ~>
94
+ - - "~>"
67
95
  - !ruby/object:Gem::Version
68
- version: 0.7.0
96
+ version: 0.8.0
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: rspec
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
- - - ~>
101
+ - - "~>"
74
102
  - !ruby/object:Gem::Version
75
- version: 2.14.1
103
+ version: 3.2.0
76
104
  type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
- - - ~>
108
+ - - "~>"
81
109
  - !ruby/object:Gem::Version
82
- version: 2.14.1
110
+ version: 3.2.0
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: fuubar
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
- - - ~>
115
+ - - "~>"
88
116
  - !ruby/object:Gem::Version
89
- version: 1.3.2
117
+ version: 2.0.0
90
118
  type: :development
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
- - - ~>
122
+ - - "~>"
95
123
  - !ruby/object:Gem::Version
96
- version: 1.3.2
124
+ version: 2.0.0
97
125
  description: ''
98
126
  email: me@lesaker.org
99
- executables: []
127
+ executables:
128
+ - taskit
100
129
  extensions: []
101
130
  extra_rdoc_files: []
102
131
  files:
103
- - .gitignore
104
- - .rspec
105
- - .rubocop.yml
106
- - .travis.yml
132
+ - ".gitignore"
133
+ - ".rspec"
134
+ - ".rubocop.yml"
135
+ - ".travis.yml"
107
136
  - Gemfile
108
137
  - LICENSE
109
138
  - README.md
110
139
  - Rakefile
140
+ - bin/taskit
111
141
  - lib/taskit.rb
142
+ - lib/taskit/display.rb
143
+ - lib/taskit/filters.rb
144
+ - lib/taskit/issue.rb
145
+ - lib/taskit/tasks.rb
112
146
  - spec/spec_helper.rb
113
147
  - spec/taskit_spec.rb
114
148
  - taskit.gemspec
@@ -122,17 +156,17 @@ require_paths:
122
156
  - lib
123
157
  required_ruby_version: !ruby/object:Gem::Requirement
124
158
  requirements:
125
- - - '>='
159
+ - - ">="
126
160
  - !ruby/object:Gem::Version
127
161
  version: '0'
128
162
  required_rubygems_version: !ruby/object:Gem::Requirement
129
163
  requirements:
130
- - - '>='
164
+ - - ">="
131
165
  - !ruby/object:Gem::Version
132
166
  version: '0'
133
167
  requirements: []
134
168
  rubyforge_project:
135
- rubygems_version: 2.0.14
169
+ rubygems_version: 2.4.5
136
170
  signing_key:
137
171
  specification_version: 4
138
172
  summary: ''