lolcommits 0.8.0 → 0.8.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.
- checksums.yaml +8 -8
- data/CHANGELOG.md +8 -1
- data/lib/lolcommits.rb +2 -0
- data/lib/lolcommits/backends/installation_git.rb +1 -1
- data/lib/lolcommits/plugins/lol_flowdock.rb +70 -0
- data/lib/lolcommits/plugins/lol_hipchat.rb +125 -0
- data/lib/lolcommits/version.rb +1 -1
- data/lolcommits.gemspec +3 -1
- metadata +32 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MmQ3ODk4ZDY4MWJmN2Y4MWIyMDA0MTM5ZWMyOTUyODNhN2UxNmQwNA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NGM2ZDNkZmRlN2NkY2I1NTA4MTYyYWIwNzBjNzg4NjI0OTVkODVhNw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MWVmNTA1OThmMDg4MTBjNWMyNjA2NDk0MDU1NDM0NDZjYzE4N2NiOWFiZjNm
|
10
|
+
MTFlZGIxYzU1MWIzZjA2YmNmZTBhZGRlNDI1OGVkMzlhNTg3OGI4ZTRiMjJl
|
11
|
+
MzJkNTU3MjlmZmRhNDkwMmNiODFkMDMxYmNlNTE2NGY5MWZjMjg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NGE5M2IxYzZiZmVhMDE3MmE3YTJiY2VlODA1ZDE0NDhkZGNhMDlmZTA3NDAz
|
14
|
+
Yjg2OWU0ZjNmZWQ4ODQ2ZWQ2YTgwYTAxN2FhYjMzNjNhYjIyOGEyYTkwMTU0
|
15
|
+
ZTdkYzUxMGY1ZmU1NzViNWI4ZDQxNTcxYzNjZGY2OTZjZGY3ZDY=
|
data/CHANGELOG.md
CHANGED
@@ -8,6 +8,12 @@ project adheres to [Semantic Versioning][Semver].
|
|
8
8
|
* WIP - extract plugins to separate gems ...
|
9
9
|
* Your contribution here!
|
10
10
|
|
11
|
+
## [0.8.1][] (11 October 2016)
|
12
|
+
* shebang fix in installer (@matthutchinson #317)
|
13
|
+
* FlowDock plugin (@mikecrittenden #318)
|
14
|
+
* HipChat plugin (@Salzig #320)
|
15
|
+
* peg gems for legacy ruby 1.9.3 (@matthutchinson #321)
|
16
|
+
|
11
17
|
## [0.8.0][] (13 July 2016)
|
12
18
|
* New release requires Ruby 1.9.3+ minimum (@matthutchinson #313)
|
13
19
|
* All gems upgraded to latest versions (6 held back, see lolcommits.gemspec)
|
@@ -249,7 +255,8 @@ project adheres to [Semantic Versioning][Semver].
|
|
249
255
|
instead of compositing multiply image Caption objects (this seems to be more
|
250
256
|
reliable to not glitch.)
|
251
257
|
|
252
|
-
[Unreleased]: https://github.com/mroth/lolcommits/compare/v0.8.
|
258
|
+
[Unreleased]: https://github.com/mroth/lolcommits/compare/v0.8.1...HEAD
|
259
|
+
[0.8.1]: https://github.com/mroth/lolcommits/compare/v0.8.0...v0.8.1
|
253
260
|
[0.8.0]: https://github.com/mroth/lolcommits/compare/v0.7.0...v0.8.0
|
254
261
|
[0.7.0]: https://github.com/mroth/lolcommits/compare/v0.6.7...v0.7.0
|
255
262
|
[0.6.7]: https://github.com/mroth/lolcommits/compare/v0.6.6...v0.6.7
|
data/lib/lolcommits.rb
CHANGED
@@ -39,6 +39,8 @@ require 'lolcommits/plugins/lol_yammer'
|
|
39
39
|
require 'lolcommits/plugins/lol_protonet'
|
40
40
|
require 'lolcommits/plugins/lol_tumblr'
|
41
41
|
require 'lolcommits/plugins/lol_slack'
|
42
|
+
require 'lolcommits/plugins/lol_flowdock'
|
43
|
+
require 'lolcommits/plugins/lol_hipchat'
|
42
44
|
|
43
45
|
# require runner after all the plugins have been required
|
44
46
|
require 'lolcommits/runner'
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'rest_client'
|
3
|
+
|
4
|
+
module Lolcommits
|
5
|
+
class LolFlowdock < Plugin
|
6
|
+
ENDPOINT_URL = 'api.flowdock.com/flows/'.freeze
|
7
|
+
RETRY_COUNT = 2
|
8
|
+
|
9
|
+
def self.name
|
10
|
+
'flowdock'
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.runner_order
|
14
|
+
:postcapture
|
15
|
+
end
|
16
|
+
|
17
|
+
def configured?
|
18
|
+
!configuration['access_token'].nil?
|
19
|
+
end
|
20
|
+
|
21
|
+
def configure
|
22
|
+
print "Open the URL below and issue a token for your user (Personal API token):\n"
|
23
|
+
print "https://flowdock.com/account/tokens\n"
|
24
|
+
print "Enter the generated token below, then press enter: \n"
|
25
|
+
code = STDIN.gets.to_s.strip
|
26
|
+
print "Enter the machine name of the flow you want to post to from this repo.\n"
|
27
|
+
print "Go to https://www.flowdock.com/account and click Flows, then click the flow, then get the machine name from the URL:\n"
|
28
|
+
flow = STDIN.gets.to_s.strip.downcase
|
29
|
+
print "Enter the name of the organization for this Flowdock account.\n"
|
30
|
+
organization = STDIN.gets.to_s.strip.downcase
|
31
|
+
|
32
|
+
{
|
33
|
+
'access_token' => code,
|
34
|
+
'flow' => flow,
|
35
|
+
'organization' => organization
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
def configure_options!
|
40
|
+
options = super
|
41
|
+
if options['enabled']
|
42
|
+
config = configure
|
43
|
+
options.merge!(config)
|
44
|
+
end
|
45
|
+
options
|
46
|
+
end
|
47
|
+
|
48
|
+
def run_postcapture
|
49
|
+
return unless valid_configuration?
|
50
|
+
|
51
|
+
retries = RETRY_COUNT
|
52
|
+
begin
|
53
|
+
|
54
|
+
endpoint = 'https://' + configuration['access_token'] + '@' + ENDPOINT_URL + configuration['organization'] + '/' + configuration['flow'] + '/messages'
|
55
|
+
response = RestClient.post(
|
56
|
+
endpoint,
|
57
|
+
:event => 'file',
|
58
|
+
:content => File.new(runner.main_image)
|
59
|
+
)
|
60
|
+
debug response
|
61
|
+
rescue => e
|
62
|
+
retries -= 1
|
63
|
+
retry if retries > 0
|
64
|
+
puts "Posting to flowdock failed - #{e.message}"
|
65
|
+
puts 'Try running config again:'
|
66
|
+
puts "\tlolcommits --config --plugin flowdock"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Lolcommits
|
3
|
+
class LolHipchat < Plugin
|
4
|
+
def configure_options!
|
5
|
+
options = super
|
6
|
+
options.merge! configure_auth_options if options['enabled']
|
7
|
+
options
|
8
|
+
end
|
9
|
+
|
10
|
+
def configure_auth_options
|
11
|
+
puts '-' * 50
|
12
|
+
puts ' Lolcommits HipChat Plugin Configuration'
|
13
|
+
puts '-' * 50
|
14
|
+
|
15
|
+
puts '1.) I need your Team Name '
|
16
|
+
puts 'teamname as in teamname.hipchat.com, without .hipchat.com'
|
17
|
+
print 'Your Teamname: '
|
18
|
+
teamname = STDIN.gets.to_s.strip
|
19
|
+
puts "2.) We need a Authentication Token, get yours at https://#{teamname}.hipchat.com/account/api"
|
20
|
+
puts 'make sure to select scope "Send Message"'
|
21
|
+
print 'Your auth_token: '
|
22
|
+
token = STDIN.gets.to_s.strip
|
23
|
+
puts '3.) Which Room should be we post to?'
|
24
|
+
puts 'can be a id or name'
|
25
|
+
print 'Your Room: '
|
26
|
+
room = STDIN.gets.to_s.strip
|
27
|
+
|
28
|
+
{
|
29
|
+
'api_token' => token,
|
30
|
+
'api_team' => teamname,
|
31
|
+
'api_room' => room
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
def run_postcapture
|
36
|
+
return unless valid_configuration?
|
37
|
+
|
38
|
+
http = Net::HTTP.new(api_url.host, api_url.port)
|
39
|
+
# http.set_debug_output $stderr # nice for debugging, never ever release with it
|
40
|
+
http.start do |connection|
|
41
|
+
header = { 'Content-Type' => 'multipart/related; boundary=0123456789ABLEWASIEREISAWELBA9876543210' }
|
42
|
+
data = [message_part, picture_part].map do |part|
|
43
|
+
"--0123456789ABLEWASIEREISAWELBA9876543210\r\n#{part}"
|
44
|
+
end.join('') << '--0123456789ABLEWASIEREISAWELBA9876543210--'
|
45
|
+
connection.post("#{api_url.path}?#{api_url.query}", data, header)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def message_part
|
50
|
+
[
|
51
|
+
'Content-Type: application/json; charset=UTF-8',
|
52
|
+
'Content-Disposition: attachment; name="metadata"',
|
53
|
+
'',
|
54
|
+
message_json,
|
55
|
+
''
|
56
|
+
].join "\r\n"
|
57
|
+
end
|
58
|
+
|
59
|
+
def message_json
|
60
|
+
{ :message => message }.to_json.force_encoding('utf-8')
|
61
|
+
end
|
62
|
+
|
63
|
+
def picture_part
|
64
|
+
mime_type = MIME::Types.type_for(picture.path)[0] || MIME::Types['application/octet-stream'][0]
|
65
|
+
[
|
66
|
+
format('Content-Type: %s', mime_type.simplified),
|
67
|
+
format('Content-Disposition: attachment; name="file"; filename="%s"', picture.path),
|
68
|
+
'',
|
69
|
+
"#{picture.read} ",
|
70
|
+
''
|
71
|
+
].join "\r\n"
|
72
|
+
end
|
73
|
+
|
74
|
+
def picture
|
75
|
+
@picture ||= File.new(runner.main_image)
|
76
|
+
end
|
77
|
+
|
78
|
+
def api_url
|
79
|
+
URI(format('http://%{api_team}.hipchat.com/v2/room/%{api_room}/share/file?auth_token=%{api_token}', symbolized_configuration))
|
80
|
+
end
|
81
|
+
|
82
|
+
def symbolized_configuration
|
83
|
+
@symbolized_configuration ||= configuration.each_with_object({}) { |(k, v), obj| obj[k.to_sym] = v }
|
84
|
+
end
|
85
|
+
|
86
|
+
def message
|
87
|
+
"commited some #{random_adjective} #{random_object} to #{runner.vcs_info.repo}@#{runner.sha} (#{runner.vcs_info.branch}) "
|
88
|
+
end
|
89
|
+
|
90
|
+
def random_object
|
91
|
+
objects = %w(screws bolts exceptions errors cookies)
|
92
|
+
|
93
|
+
objects.sample
|
94
|
+
end
|
95
|
+
|
96
|
+
def random_adjective
|
97
|
+
adjectives = %w(adaptable adventurous affable affectionate agreeable ambitious amiable amicable amusing brave \
|
98
|
+
bright broad-minded calm careful charming communicative compassionate conscientious considerate \
|
99
|
+
convivial courageous courteous creative decisive determined diligent diplomatic discreet dynamic \
|
100
|
+
easygoing emotional energetic enthusiastic exuberant fair-minded faithful fearless forceful \
|
101
|
+
frank friendly funny generous gentle good gregarious hard-working helpful honest humorous \
|
102
|
+
imaginative impartial independent intellectual intelligent intuitive inventive kind loving loyal \
|
103
|
+
modest neat nice optimistic passionate patient persistent pioneering philosophical placid plucky \
|
104
|
+
polite powerful practical pro-active quick-witted quiet rational reliable reserved resourceful \
|
105
|
+
romantic self-confident self-disciplined sensible sensitive shy sincere sociable straightforward \
|
106
|
+
sympathetic thoughtful tidy tough unassuming understanding versatile warmhearted willing witty)
|
107
|
+
adjectives.sample
|
108
|
+
end
|
109
|
+
|
110
|
+
def configured?
|
111
|
+
super &&
|
112
|
+
configuration['api_token'] &&
|
113
|
+
configuration['api_team'] &&
|
114
|
+
configuration['api_room']
|
115
|
+
end
|
116
|
+
|
117
|
+
def self.name
|
118
|
+
'hipchat'
|
119
|
+
end
|
120
|
+
|
121
|
+
def self.runner_order
|
122
|
+
:postcapture
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
data/lib/lolcommits/version.rb
CHANGED
data/lolcommits.gemspec
CHANGED
@@ -5,7 +5,7 @@ require 'lolcommits/version'
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = 'lolcommits'
|
8
|
-
s.version = Lolcommits::VERSION
|
8
|
+
s.version = Lolcommits::VERSION.dup
|
9
9
|
s.authors = ['Matthew Rothenberg', 'Matthew Hutchinson']
|
10
10
|
s.email = ['mrothenberg@gmail.com', 'matt@hiddenloop.com']
|
11
11
|
s.homepage = 'http://mroth.github.com/lolcommits/'
|
@@ -35,6 +35,8 @@ Gem::Specification.new do |s|
|
|
35
35
|
s.add_development_dependency('tins', '=1.6.0') # ~> 1.7.0+ requires Ruby >= 2.0
|
36
36
|
s.add_development_dependency('aruba', '=0.6.2') # upgrading requires a lot of test code changes
|
37
37
|
s.add_development_dependency('rake', '=10.5.0') # ~> 11+ introduces lots of warnings from other deps
|
38
|
+
s.add_runtime_dependency('term-ansicolor', '=1.3.2') # ~> 1.4+ requires Ruby >= 2.0
|
39
|
+
s.add_runtime_dependency('net-http-persistent', '=2.9.4') # ~> 3.0+ requires Ruby >= 2.1
|
38
40
|
|
39
41
|
# core
|
40
42
|
s.add_runtime_dependency('methadone', '~> 1.9.2')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lolcommits
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Rothenberg
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-10-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
@@ -95,6 +95,34 @@ dependencies:
|
|
95
95
|
- - '='
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: 10.5.0
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: term-ansicolor
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - '='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: 1.3.2
|
105
|
+
type: :runtime
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - '='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: 1.3.2
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: net-http-persistent
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - '='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: 2.9.4
|
119
|
+
type: :runtime
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - '='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 2.9.4
|
98
126
|
- !ruby/object:Gem::Dependency
|
99
127
|
name: methadone
|
100
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -408,6 +436,8 @@ files:
|
|
408
436
|
- lib/lolcommits/platform.rb
|
409
437
|
- lib/lolcommits/plugin.rb
|
410
438
|
- lib/lolcommits/plugins/dot_com.rb
|
439
|
+
- lib/lolcommits/plugins/lol_flowdock.rb
|
440
|
+
- lib/lolcommits/plugins/lol_hipchat.rb
|
411
441
|
- lib/lolcommits/plugins/lol_protonet.rb
|
412
442
|
- lib/lolcommits/plugins/lol_slack.rb
|
413
443
|
- lib/lolcommits/plugins/lol_tumblr.rb
|