taskit 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: ''