trello2wr 1.0.2
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 +7 -0
- data/bin/trello2wr +7 -0
- data/lib/trello2wr.rb +119 -0
- metadata +60 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5e156c9a390fea6dbc9bee88f6f63771a78df91d
|
4
|
+
data.tar.gz: 64db4c05cbded8f29c12d4a3adacfcf8285a459b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: eecd37d0bde6b33b9e91dfe743f962b2b3e59f84901026110b678cfb76cbfc3cdeab781b9f01e32e97a66415e6a9c3f9b42647c1b207900cc86a49cf13a57faf
|
7
|
+
data.tar.gz: 19c13de1bcaaeb12ddc8e68ec16b2065d73a3923751acaa9c5ef98eb6cb6a9f72ccafda0b94029c1f8423c47b58b98e1ef8a5ee33a0b6f1a41cb379571899ec7
|
data/bin/trello2wr
ADDED
data/lib/trello2wr.rb
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'trello'
|
2
|
+
require 'yaml'
|
3
|
+
require 'uri'
|
4
|
+
|
5
|
+
if File.exist? File.expand_path("~/.trello2wr/config.yml")
|
6
|
+
CONFIG = YAML.load_file(File.expand_path("~/.trello2wr/config.yml"))
|
7
|
+
else
|
8
|
+
raise "ERROR: Config file not found!"
|
9
|
+
end
|
10
|
+
|
11
|
+
class Trello2WR
|
12
|
+
include Trello
|
13
|
+
include Trello::Authorization
|
14
|
+
|
15
|
+
attr_reader :user, :board, :year, :week
|
16
|
+
@@debug = true
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
Trello::Authorization.const_set :AuthPolicy, OAuthPolicy
|
20
|
+
|
21
|
+
# Read keys from ~/trello2wr/config.yml
|
22
|
+
key = CONFIG['trello']['developer_public_key']
|
23
|
+
secret = CONFIG['trello']['developer_secret']
|
24
|
+
token = CONFIG['trello']['member_token']
|
25
|
+
|
26
|
+
OAuthPolicy.consumer_credential = OAuthCredential.new key, secret
|
27
|
+
OAuthPolicy.token = OAuthCredential.new token, nil
|
28
|
+
|
29
|
+
self.log("*** Searching for user '#{CONFIG['trello']['username']}'")
|
30
|
+
|
31
|
+
begin
|
32
|
+
@user = Member.find(CONFIG['trello']['username'])
|
33
|
+
rescue Trello::Error
|
34
|
+
raise "ERROR: user '#{CONFIG['trello']['username']}' not found!}"
|
35
|
+
end
|
36
|
+
|
37
|
+
@year = Date.today.year
|
38
|
+
@week = Date.today.cweek
|
39
|
+
|
40
|
+
# FIXME: Allow more than one board
|
41
|
+
# self.log("*** Getting lists for '#{CONFIG['trello']['boards'].first}' board")
|
42
|
+
@board = @user.boards.find{|b| b.name == CONFIG['trello']['boards'].first}
|
43
|
+
end
|
44
|
+
|
45
|
+
def cards(board, list_name)
|
46
|
+
self.log("*** Getting cards for '#{list_name}' list")
|
47
|
+
|
48
|
+
if board
|
49
|
+
if list_name == 'Done'
|
50
|
+
list = board.lists.select{|l| l.name.include?('Done') && l.name.include?((self.week-1).to_s) }.first
|
51
|
+
else
|
52
|
+
list = board.lists.find{|l| l.name == list_name}
|
53
|
+
end
|
54
|
+
|
55
|
+
cards = list.cards.select{|c| c.member_ids.include? self.user.id}
|
56
|
+
|
57
|
+
return cards
|
58
|
+
else
|
59
|
+
raise "ERROR: Board '#{list_name}' not found!"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Prepare mail header
|
64
|
+
def subject
|
65
|
+
self.escape("A&O Week ##{self.week} #{self.user.username}")
|
66
|
+
end
|
67
|
+
|
68
|
+
# Prepare mail body
|
69
|
+
def body
|
70
|
+
body = ''
|
71
|
+
['Done', 'In review', 'To Do', 'Doing'].each do |list_name|
|
72
|
+
if list_name.downcase.include? 'done'
|
73
|
+
body += "Accomplishments:\n"
|
74
|
+
elsif list_name.downcase.include? 'review'
|
75
|
+
body += "\nIn review:\n"
|
76
|
+
elsif list_name.downcase.include? 'to do'
|
77
|
+
body += "\nObjectives:\n" if list_name.downcase.include? 'to do'
|
78
|
+
end
|
79
|
+
|
80
|
+
self.cards(self.board, list_name).each do |card|
|
81
|
+
if list_name.downcase.include? 'doing'
|
82
|
+
body += "- #{card.name} (##{card.short_id}) [WIP]\n"
|
83
|
+
elsif list_name.downcase.include? 'review'
|
84
|
+
body += "- #{card.name} (##{card.short_id}) [REVIEW]\n"
|
85
|
+
else
|
86
|
+
body += "- #{card.name} (##{card.short_id})\n"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
body += "\n\nNOTE: (#<number>) are Trello board card IDs"
|
92
|
+
self.escape(body)
|
93
|
+
end
|
94
|
+
|
95
|
+
def construct_mail_to_url(recipient, subject, body)
|
96
|
+
if CONFIG['email'].has_key?('cc') && CONFIG['email']['cc'].present?
|
97
|
+
URI::MailTo.build({:to => recipient, :headers => {"cc" => CONFIG['email']['cc'], "subject" => subject, "body" => body}}).to_s.inspect
|
98
|
+
else
|
99
|
+
URI::MailTo.build({:to => recipient, :headers => {"subject" => subject, "body" => body}}).to_s.inspect
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def escape(string)
|
104
|
+
URI.escape(string, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
|
105
|
+
end
|
106
|
+
|
107
|
+
def export
|
108
|
+
mailto = self.construct_mail_to_url(CONFIG['email']['recipient'], self.subject, self.body)
|
109
|
+
self.log("*** Preparing email, please wait ...")
|
110
|
+
|
111
|
+
system("#{CONFIG['email']['client']} #{mailto}")
|
112
|
+
|
113
|
+
self.log("*** DONE")
|
114
|
+
end
|
115
|
+
|
116
|
+
def log(message)
|
117
|
+
puts message if @@debug
|
118
|
+
end
|
119
|
+
end
|
metadata
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: trello2wr
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Vladislav Lewin
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-01-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: ruby-trello
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: Generates weekly work report (A&O) from Trello board
|
28
|
+
email: vlewin@suse.de
|
29
|
+
executables:
|
30
|
+
- trello2wr
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- lib/trello2wr.rb
|
35
|
+
- bin/trello2wr
|
36
|
+
homepage: https://github.com/vlewin/trello2wr
|
37
|
+
licenses: []
|
38
|
+
metadata: {}
|
39
|
+
post_install_message:
|
40
|
+
rdoc_options: []
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
requirements: []
|
54
|
+
rubyforge_project:
|
55
|
+
rubygems_version: 2.1.11
|
56
|
+
signing_key:
|
57
|
+
specification_version: 4
|
58
|
+
summary: A&O from Trello
|
59
|
+
test_files: []
|
60
|
+
has_rdoc:
|