spregen 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4b346f981e5128b6fbebf2915b0b9797d11d017f
4
+ data.tar.gz: 946e15ecdfca9b41f640da83b26527d3bed450dd
5
+ SHA512:
6
+ metadata.gz: 7a7071e893db51495390c0e1ee261e08ea44b2cc9eb4ce4ed1ab5573e03c8fcd42b7299c7b924d732451f69468402ca9ecf831c12da52b8083f8c4e3785299ac
7
+ data.tar.gz: 3bcf78c790bccdece2621037eb3f00738ad26a39dfcc950f2f2401674ca2c77b1f5c5915ef13f0bd6ca7728ea62ef4cba113348823f1fd852b189cd695884eaf
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'commander/import'
4
+ require 'spregen'
5
+
6
+ program :name, 'Spregen'
7
+ program :version, '0.0.1'
8
+ program :description, 'Generate Sprint Reports from your Trello board.'
9
+
10
+ command :generate do |c|
11
+ c.syntax = 'spregen generate <board-name>'
12
+ c.description = 'Generate the report'
13
+ c.action do |args, _|
14
+ fail 'You have to specify the board name' unless args.first
15
+ Spregen::Config.configure_trello_client
16
+ Spregen::Report.new(board_name: args.first).generate
17
+ end
18
+ end
19
+
20
+ command :configure do |c|
21
+ c.syntax = 'spregen configure'
22
+ c.description = 'Generate the spregen config file'
23
+ c.action do |_, _|
24
+ apikey = ask('Apikey: ')
25
+ member_token = ask('Member token: ')
26
+ Spregen::Config.create_config_file(apikey, member_token)
27
+ puts 'Config file generated at ~/.spregen-config.yml'
28
+ end
29
+ end
@@ -0,0 +1,2 @@
1
+ require_relative 'spregen/report.rb'
2
+ require_relative 'spregen/config.rb'
@@ -0,0 +1,47 @@
1
+ module Spregen
2
+ class Board
3
+ attr_accessor :name
4
+
5
+ def initialize(configuration)
6
+ self.name = configuration[:board_name]
7
+ end
8
+
9
+ def lists
10
+ @lists ||= board.lists
11
+ end
12
+
13
+ def board
14
+ @board ||= Trello::Board.all.find { |x| x.name == self.name }
15
+ end
16
+
17
+ def bug_cards
18
+ @bug_cards ||= done_cards.find_all { |card| card.name =~ /\[BUG\]/i } if done_cards
19
+ end
20
+
21
+ def done_cards
22
+ @done_cards ||= get_cards(/^\[DONE\]/i)
23
+ end
24
+
25
+ def qa_cards
26
+ @qa_cards ||= get_cards(/^\[Q\.A\.\]/i)
27
+ end
28
+
29
+ def doing_cards
30
+ @doing_cards ||= get_cards(/^\[DOING\]/i)
31
+ end
32
+
33
+ def todo_cards
34
+ @todo_cards ||= get_cards(/^\[TODO\]/i)
35
+ end
36
+
37
+ private
38
+
39
+ def get_cards(list_name)
40
+ card_list = lists.detect { |list| list.name =~ list_name }
41
+ return unless card_list.present?
42
+ card_list.cards.reject do |card|
43
+ card.labels.find { |label| label.name == 'Skip Report' }
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,14 @@
1
+ module Spregen
2
+ class Burndown
3
+
4
+ def initialize(params)
5
+
6
+ end
7
+
8
+ def generate
9
+
10
+ end
11
+
12
+ end
13
+
14
+ end
@@ -0,0 +1,24 @@
1
+ require 'yaml'
2
+ require 'trello'
3
+
4
+ module Spregen
5
+ module Config
6
+ CONFIG_PATH = '~/.spregen-config.yml'
7
+
8
+ module_function
9
+
10
+ def configure_trello_client
11
+ trello_config = YAML.load_file(File.expand_path(CONFIG_PATH))['trello']
12
+ Trello.configure do |config|
13
+ config.developer_public_key = trello_config['api_key']
14
+ config.member_token = trello_config['member_token']
15
+ end
16
+ end
17
+
18
+ def create_config_file(api_key, member_token)
19
+ template = File.read(File.expand_path('../../templates/spregen-config.yml.erb', __FILE__))
20
+ result = ERB.new(template).result(binding)
21
+ File.open(File.expand_path('~/.spregen-config.yml'), 'w') { |file| file.write(result) }
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,30 @@
1
+ module Spregen
2
+ module Helpers
3
+
4
+ ESTIMATE_POINTS_PATTERN = /[\(\[]\d(.\d)?[\)\]]/
5
+
6
+ def file
7
+ @file ||= File.open("#{@source.name}-report-#{today}.md", "w")
8
+ end
9
+
10
+ def rprint(cards, buffer = "")
11
+ return unless cards
12
+ cards.each do |card|
13
+ link = card.desc.split("\n").first || card.url
14
+ card_name = remove_estimate_points(card.name)
15
+ buffer << "\n" unless buffer.blank?
16
+ buffer << " - [#{card_name}](#{link})"
17
+ end
18
+ buffer
19
+ end
20
+
21
+ def today
22
+ Time.now.strftime("%d-%m-%Y-%M%S")
23
+ end
24
+
25
+ private
26
+ def remove_estimate_points(card_title)
27
+ card_title.gsub(ESTIMATE_POINTS_PATTERN, '')
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,56 @@
1
+ require_relative 'board'
2
+ require_relative 'burndown'
3
+ require_relative 'helpers'
4
+ require_relative 'template'
5
+
6
+ module Spregen
7
+ class Report
8
+ include Spregen::Helpers
9
+
10
+ attr_accessor :report
11
+
12
+ def initialize(configuration = {})
13
+ @source = Spregen::Board.new(configuration)
14
+ end
15
+
16
+ def generate
17
+ file.write print_report
18
+ file.close
19
+ end
20
+
21
+ def generate_burndown
22
+ burndown = Spregen::Burndown.new({})
23
+ burndown.generate
24
+ end
25
+
26
+ def print_report
27
+ Spregen::Template.build(binding)
28
+ end
29
+
30
+ def source
31
+ self
32
+ end
33
+
34
+ def title
35
+ "Report #{@source.name}"
36
+ end
37
+
38
+ def not_done
39
+ buffer = ''
40
+ rprint @source.doing_cards, buffer
41
+ rprint @source.todo_cards, buffer
42
+ end
43
+
44
+ def done
45
+ rprint @source.done_cards
46
+ end
47
+
48
+ def bugs
49
+ rprint @source.bug_cards
50
+ end
51
+
52
+ def qa
53
+ rprint @source.qa_cards
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,11 @@
1
+
2
+ module Spregen
3
+ module Template
4
+ module_function
5
+
6
+ def build(binding)
7
+ template = File.read(File.expand_path('../../templates/default.erb', __FILE__))
8
+ ERB.new(template).result(binding)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,24 @@
1
+ ### <%= source.title %>
2
+ ### Sprint Burndown
3
+ <%= source.generate_burndown %>
4
+ ### Release Burndown
5
+
6
+ ### Overview
7
+
8
+ ### Not Done
9
+ <%= source.not_done %>
10
+
11
+ ### QA
12
+ <%= source.qa %>
13
+
14
+ ### Done
15
+ <%= source.done %>
16
+
17
+ ### Bugs
18
+ <%= source.bugs %>
19
+
20
+ #### Retrospective
21
+
22
+ **Negatives**
23
+
24
+ **Positives**
@@ -0,0 +1,12 @@
1
+ # Get your API keys from http://trello.com/app-key
2
+ # To get your member token, visit the URL [trello.com/1/authorize], with GET parameters as explained here https://trello.com/docs/gettingstarted/authorize.html
3
+ # Example: https://trello.com/1/authorize?key=YOURAPIKEY&response_type=token&expiration=never
4
+ # You should see a page asking you to authorize your Trello application. Click "allow" and you should see a second page with a long alphanumeric string. This is your member token.
5
+
6
+ trello:
7
+ api_key: <%= api_key %>
8
+ member_token: <%= member_token %>
9
+
10
+ source: trello
11
+ template: default
12
+ board_name: <%= ENV['BOARD'] %>
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spregen
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Pedro Vitti
8
+ - Geison Biazus
9
+ - Murillo Flores
10
+ - Luciano Medeiros
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2015-09-15 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: commander
18
+ requirement: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - '='
21
+ - !ruby/object:Gem::Version
22
+ version: 4.3.4
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - '='
28
+ - !ruby/object:Gem::Version
29
+ version: 4.3.4
30
+ - !ruby/object:Gem::Dependency
31
+ name: ruby-trello
32
+ requirement: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - '='
35
+ - !ruby/object:Gem::Version
36
+ version: 1.2.1
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - '='
42
+ - !ruby/object:Gem::Version
43
+ version: 1.2.1
44
+ description: A simple trello report generation gem
45
+ email:
46
+ executables:
47
+ - spregen
48
+ extensions: []
49
+ extra_rdoc_files: []
50
+ files:
51
+ - bin/spregen
52
+ - lib/spregen.rb
53
+ - lib/spregen/board.rb
54
+ - lib/spregen/burndown.rb
55
+ - lib/spregen/config.rb
56
+ - lib/spregen/helpers.rb
57
+ - lib/spregen/report.rb
58
+ - lib/spregen/template.rb
59
+ - lib/templates/default.erb
60
+ - lib/templates/spregen-config.yml.erb
61
+ homepage: https://github.com/pedrovitti/spregen
62
+ licenses:
63
+ - MIT
64
+ metadata: {}
65
+ post_install_message:
66
+ rdoc_options: []
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ requirements: []
80
+ rubyforge_project:
81
+ rubygems_version: 2.4.8
82
+ signing_key:
83
+ specification_version: 4
84
+ summary: Spregen!
85
+ test_files: []
86
+ has_rdoc: