site_hook 0.6.4 → 0.6.7

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
  SHA256:
3
- metadata.gz: 313fb393858e54d90a95cfad5a6d5cf577319ccdfffe5c5bc6fd8cb60fa66045
4
- data.tar.gz: 68405227e7a93d44b2079159615f7e06fb0b0e2ad91610c33c4c88fe4e2c6e2b
3
+ metadata.gz: 894eccca5e1a471622a696b1d21dcf7dc5e9e63db95bd231eb8bc5a08c85c9aa
4
+ data.tar.gz: c00227aa2150784d22cfcf96c5d65ad266241437a6c110438607295eddc33a11
5
5
  SHA512:
6
- metadata.gz: 22ec4c48b7c3f61705c952e7cd084a7d7a6035a8ce20087731562000a900b54f6994f5dc7250958c2e4001fa6f55f069a3ea90b35e2a455bd1d493683e228a71
7
- data.tar.gz: 60b165417628e451e1cdebd236487bf4dc0d25cf37fb97816ec576c778f09c66247e98ce7e784c6cee288a8f00e856b3b777d731c1a959036ce80fdb1cabe830
6
+ metadata.gz: 5dedcb8d502b4194a02dfb682f57c7dfe3896b0d435a25d504a4bcb7d2ca955d4850685e0ed46c2327d48019f77e8b951563a472fc9ac00c9d40d82202b06994
7
+ data.tar.gz: 5e2c253d3ed5701d98e654c2b709321893b4c489684f0bbc053674ff7524e1ac9de9fdb92105045bedf18e39333c380cb3b31ad2fd1de582e234a5795aed310e
@@ -0,0 +1,12 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.5.1
3
+ Metrics/BlockLength:
4
+ Enabled: false
5
+ Metrics/MethodLength:
6
+ Enabled: false
7
+ Metrics/ClassLength:
8
+ Enabled: false
9
+ Metrics/AbcSize:
10
+ Enabled: false
11
+ Metrics/LineLength:
12
+ Enabled: false
@@ -1,40 +1,43 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- site_hook (0.5.0)
4
+ site_hook (0.6.5)
5
5
  activesupport (~> 5.1)
6
6
  git (~> 1.3)
7
7
  haml (~> 5.0)
8
+ highline (~> 2.0, >= 2.0.0)
8
9
  logging (~> 2.2)
9
10
  paint (~> 2.0)
10
11
  pry (~> 0.11)
12
+ random_password (~> 0.1.1)
11
13
  recursive-open-struct (~> 1.1)
12
14
  sass (~> 3.5)
13
- sinatra (~> 2.0)
14
- sinatra-contrib (~> 2.0)
15
+ sinatra (~> 2.0, >= 2.0.2)
16
+ sinatra-contrib (~> 2.0, >= 2.0.2)
15
17
  thin (~> 1.7)
16
18
  thor (~> 0.20)
17
19
 
18
20
  GEM
19
21
  remote: https://rubygems.org/
20
22
  specs:
21
- activesupport (5.2.0)
23
+ activesupport (5.2.1)
22
24
  concurrent-ruby (~> 1.0, >= 1.0.2)
23
25
  i18n (>= 0.7, < 2)
24
26
  minitest (~> 5.1)
25
27
  tzinfo (~> 1.1)
26
- backports (3.11.2)
28
+ backports (3.11.4)
27
29
  coderay (1.1.2)
28
30
  concurrent-ruby (1.0.5)
29
31
  daemons (1.2.6)
30
32
  diff-lcs (1.3)
31
- eventmachine (1.2.5)
32
- ffi (1.9.23)
33
- git (1.3.0)
33
+ eventmachine (1.2.7)
34
+ ffi (1.9.25)
35
+ git (1.5.0)
34
36
  haml (5.0.4)
35
37
  temple (>= 0.8.0)
36
38
  tilt
37
- i18n (1.0.0)
39
+ highline (2.0.0)
40
+ i18n (1.1.0)
38
41
  concurrent-ruby (~> 1.0)
39
42
  little-plugger (1.1.4)
40
43
  logging (2.2.2)
@@ -43,15 +46,16 @@ GEM
43
46
  method_source (0.9.0)
44
47
  minitest (5.11.3)
45
48
  multi_json (1.13.1)
46
- mustermann (1.0.2)
49
+ mustermann (1.0.3)
47
50
  paint (2.0.1)
48
51
  pry (0.11.3)
49
52
  coderay (~> 1.1.0)
50
53
  method_source (~> 0.9.0)
51
- rack (2.0.4)
52
- rack-protection (2.0.1)
54
+ rack (2.0.5)
55
+ rack-protection (2.0.4)
53
56
  rack
54
57
  rake (10.5.0)
58
+ random_password (0.1.1)
55
59
  rb-fsevent (0.10.3)
56
60
  rb-inotify (0.9.10)
57
61
  ffi (>= 0.5.0, < 2)
@@ -69,22 +73,23 @@ GEM
69
73
  diff-lcs (>= 1.2.0, < 2.0)
70
74
  rspec-support (~> 3.7.0)
71
75
  rspec-support (3.7.1)
72
- sass (3.5.6)
76
+ sass (3.6.0)
73
77
  sass-listen (~> 4.0.0)
74
78
  sass-listen (4.0.0)
75
79
  rb-fsevent (~> 0.9, >= 0.9.4)
76
80
  rb-inotify (~> 0.9, >= 0.9.7)
77
- sinatra (2.0.1)
81
+ sinatra (2.0.4)
78
82
  mustermann (~> 1.0)
79
83
  rack (~> 2.0)
80
- rack-protection (= 2.0.1)
84
+ rack-protection (= 2.0.4)
81
85
  tilt (~> 2.0)
82
- sinatra-contrib (2.0.1)
83
- backports (>= 2.0)
86
+ sinatra-contrib (2.0.4)
87
+ activesupport (>= 4.0.0)
88
+ backports (>= 2.8.2)
84
89
  multi_json
85
90
  mustermann (~> 1.0)
86
- rack-protection (= 2.0.1)
87
- sinatra (= 2.0.1)
91
+ rack-protection (= 2.0.4)
92
+ sinatra (= 2.0.4)
88
93
  tilt (>= 1.3, < 3)
89
94
  temple (0.8.0)
90
95
  thin (1.7.2)
@@ -107,4 +112,4 @@ DEPENDENCIES
107
112
  site_hook!
108
113
 
109
114
  BUNDLED WITH
110
- 1.16.1
115
+ 1.16.4
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'site_hook/version'
2
4
  require 'site_hook/sender'
3
5
  require 'site_hook/logger'
@@ -10,7 +12,9 @@ require 'json'
10
12
  require 'sinatra/json'
11
13
  require 'yaml'
12
14
  module SiteHook
15
+ # rubocop:disable Metrics/ClassLength, Metrics/LineLength, MethodLength, BlockLength
13
16
  module Gem
17
+ # class Info
14
18
  class Info
15
19
  def self.name
16
20
  'site_hook'
@@ -21,10 +25,22 @@ module SiteHook
21
25
  end
22
26
 
23
27
  def self.author
24
- %q(Ken Spencer <me@iotaspencer.me>)
28
+ 'Ken Spencer <me@iotaspencer.me>'
29
+ end
30
+ end
31
+
32
+ # Paths: Paths to gem resources and things
33
+ class Paths
34
+ def self.config
35
+ Pathname(Dir.home).join('.jph', 'config').to_s
36
+ end
37
+
38
+ def self.logs
39
+ Pathname(Dir.home).join('.jph', 'logs')
25
40
  end
26
41
  end
27
42
  end
43
+ # class SassHandler (inherits from Sinatra::Base)
28
44
  class SassHandler < Sinatra::Base
29
45
  set :views, Pathname(app_file).dirname.join('site_hook', 'static', 'sass').to_s
30
46
  get '/css/*.css' do
@@ -32,6 +48,7 @@ module SiteHook
32
48
  scss filename.to_sym, cache: false
33
49
  end
34
50
  end
51
+ # class CoffeeHandler (inherits from Sinatra::Base)
35
52
  class CoffeeHandler < Sinatra::Base
36
53
  set :views, Pathname(app_file).dirname.join('site_hook', 'static', 'coffee').to_s
37
54
  get '/js/*.js' do
@@ -39,6 +56,7 @@ module SiteHook
39
56
  coffee filename.to_sym
40
57
  end
41
58
  end
59
+ # class Webhook (inherits from Sinatra::Base)
42
60
  class Webhook < Sinatra::Base
43
61
  HOOKLOG = SiteHook::HookLogger::HookLog.new(SiteHook.log_levels['hook']).log
44
62
  BUILDLOG = SiteHook::HookLogger::BuildLog.new(SiteHook.log_levels['build']).log
@@ -46,24 +64,22 @@ module SiteHook
46
64
  JPHRC = YAML.load_file(Pathname(Dir.home).join('.jph-rc'))
47
65
  set port: JPHRC.fetch('port', 9090)
48
66
  set bind: '127.0.0.1'
49
- set server: %w(thin)
67
+ set server: %w[thin]
50
68
  set quiet: true
51
69
  set raise_errors: true
52
70
  set views: Pathname(app_file).dirname.join('site_hook', 'views')
53
71
  set :public_folder, Pathname(app_file).dirname.join('site_hook', 'static')
54
72
  use SassHandler
55
73
  use CoffeeHandler
74
+
75
+ #
56
76
  # @param [String] body JSON String of body
57
77
  # @param [String] sig Signature or token from git service
58
78
  # @param [String] secret User-defined verification token
59
79
  # @param [Boolean] plaintext Whether the verification is plaintext
60
- def Webhook.verified?(body, sig, secret, plaintext:, service:)
80
+ def self.verified?(body, sig, secret, plaintext:, service:)
61
81
  if plaintext
62
- if sig === secret
63
- true
64
- else
65
- false
66
- end
82
+ sig == secret
67
83
  else
68
84
  case service
69
85
  when 'gogs'
@@ -82,13 +98,13 @@ module SiteHook
82
98
  end
83
99
 
84
100
  get '/' do
85
- halt 403, {'Content-Type' => 'text/html'}, "<h1>See <a href=\"/webhooks/\">here</a> for the active webhooks</h1>"
101
+ halt 403, { 'Content-Type' => 'text/html' }, '<h1>See <a href="/webhooks/">here</a> for the active webhooks</h1>'
86
102
  end
87
103
 
88
104
  get '/webhooks.json', provides: :json do
89
105
  content_type 'application/json'
90
- public_projects = JPHRC['projects'].select do |project, hsh|
91
- hsh.fetch('private', nil) == false or hsh.fetch('private', nil).nil?
106
+ public_projects = JPHRC['projects'].select do |_project, hsh|
107
+ (hsh.fetch('private', nil) == false) || hsh.fetch('private', nil).nil?
92
108
  end
93
109
  result = {}
94
110
  public_projects.each do |project, hsh|
@@ -98,20 +114,18 @@ module SiteHook
98
114
  end
99
115
  headers 'Content-Type' => 'application/json', 'Accept' => 'application/json'
100
116
  json result, layout: false
101
-
102
117
  end
103
118
 
104
119
  get '/webhooks/?' do
105
- haml :webhooks, locals: {'projects' => JPHRC['projects']}
120
+ haml :webhooks, locals: { 'projects' => JPHRC['projects'] }
106
121
  end
107
122
 
108
123
  get '/webhook/*' do
109
124
  if params[:splat]
110
125
  pass
111
126
  else
112
- halt 405, {'Content-Type' => 'application/json'}, {message: 'GET not allowed'}.to_json
127
+ halt 405, { 'Content-Type' => 'application/json' }, { message: 'GET not allowed' }.to_json
113
128
  end
114
-
115
129
  end
116
130
  post '/webhook/:hook_name/?' do
117
131
  service = nil
@@ -123,48 +137,40 @@ module SiteHook
123
137
  begin
124
138
  project = projects.fetch(params[:hook_name])
125
139
  rescue KeyError => e
126
- halt 404, {'Content-Type' => 'application/json'}, {message: 'no such project', status: 1}.to_json
140
+ halt 404, { 'Content-Type' => 'application/json' }, { message: 'no such project', status: 1 }.to_json
127
141
  end
128
142
  plaintext = false
129
143
  signature = nil
130
144
  event = nil
131
145
  github = request.env.fetch('HTTP_X_GITHUB_EVENT', nil)
132
146
  unless github.nil?
133
- if github == 'push'
134
- event = 'push'
135
- end
147
+ event = 'push' if github == 'push'
136
148
  end
137
149
  gitlab = request.env.fetch('HTTP_X_GITLAB_EVENT', nil)
138
150
  unless gitlab.nil?
139
- if gitlab == 'push'
140
- event = 'push'
141
- end
151
+ event = 'push' if gitlab == 'push'
142
152
  end
143
153
  gogs = request.env.fetch('HTTP_X_GOGS_EVENT', nil)
144
154
  unless gogs.nil?
145
- if gogs == 'push'
146
- event = 'push'
147
-
148
- end
155
+ event = 'push' if gogs == 'push'
149
156
  end
150
- events = {'github' => github, 'gitlab' => gitlab, 'gogs' => gogs
151
- }
157
+ events = { 'github' => github, 'gitlab' => gitlab, 'gogs' => gogs }
152
158
  events_m_e = events.values.one?
153
159
  case events_m_e
154
160
  when true
155
161
  event = 'push'
156
- service = events.select { |key, value| value }.keys.first
162
+ service = events.select { |_key, value| value }.keys.first
157
163
  when false
158
- halt 400, {'Content-Type' => 'application/json'}, {message: 'events are mutually exclusive', status: 'failure'
159
- }.to_json
164
+ halt 400, { 'Content-Type': 'application/json' }, { message: 'events are mutually exclusive', status: 'failure' }.to_json
160
165
 
161
166
  else
162
- halt 400, {'Content-Type' => 'application/json'}, {'status': 'failure', 'message': 'something weird happened'
163
- }
167
+ halt 400,
168
+ { 'Content-Type': 'application/json' },
169
+ 'status': 'failure', 'message': 'something weird happened'
164
170
  end
165
171
  if event != 'push'
166
172
  if event.nil?
167
- halt 400, {'Content-Type' => 'application/json'}, {message: 'no event header'}.to_json
173
+ halt 400, { 'Content-Type': 'application/json' }, { message: 'no event header' }.to_json
168
174
  end
169
175
  end
170
176
  case service
@@ -172,9 +178,7 @@ module SiteHook
172
178
  signature = request.env.fetch('HTTP_X_GITLAB_TOKEN', '')
173
179
  plaintext = true
174
180
  when 'github'
175
- signature = request.env.fetch('HTTP_X_HUB_SIGNATURE', ''
176
- ).sub!(/^sha1=/, ''
177
- )
181
+ signature = request.env.fetch('HTTP_X_HUB_SIGNATURE', '').sub!(/^sha1=/, '')
178
182
  plaintext = false
179
183
 
180
184
  when 'gogs'
@@ -191,22 +195,22 @@ module SiteHook
191
195
  when 0
192
196
  status 200
193
197
  headers 'Content-Type' => 'application/json'
194
- body { {'status': 'success'}.to_json
195
- }
198
+ body { { 'status': 'success' }.to_json }
196
199
  when -1, -2, -3
197
200
  status 400
198
201
  headers 'Content-Type' => 'application/json'
199
- body { {'status': 'exception', error: "#{jekyll_status.fetch(:message)}"}
200
- }
202
+ body do
203
+ { 'status': 'exception', error: jekyll_status.fetch(:message).to_s }
204
+ end
201
205
  end
202
206
 
203
207
  else
204
- halt 403, {'Content-Type' => 'application/json'}, {message: 'incorrect secret', 'status': 'failure'}.to_json
208
+ halt 403, { 'Content-Type' => 'application/json' }, { message: 'incorrect secret', 'status': 'failure' }.to_json
205
209
  end
206
210
  end
207
211
  post '/webhook/?' do
208
- halt 403, {'Content-Type' => 'application/json'}, {message: 'pick a hook', error: 'root webhook hit', 'status': 'failure'
209
- }.to_json
212
+ halt 403, { 'Content-Type' => 'application/json' }, { message: 'pick a hook', error: 'root webhook hit', 'status': 'failure' }.to_json
210
213
  end
211
214
  end
215
+ # rubocop:enable Metrics/ClassLength, Metrics/LineLength, MethodLength, BlockLength
212
216
  end
@@ -41,15 +41,12 @@ module SiteHook
41
41
  end
42
42
 
43
43
  method_option(:log_levels, type: :hash, banner: 'LEVELS', default: SiteHook.log_levels)
44
-
45
44
  desc 'start', 'Start SiteHook'
46
-
47
45
  def start
48
46
 
49
- SiteHook.mklogdir unless Pathname(Dir.home).join('.jph', 'logs').exist?
47
+ SiteHook.mklogdir unless SiteHook::Gem::Paths.logs.exist?
50
48
  SiteHook::Webhook.run!
51
49
  end
52
-
53
50
  desc 'config SUBCOMMAND [OPTIONS]', 'Configure site_hook options'
54
51
  subcommand('config', SiteHook::ConfigClass)
55
52
  end
@@ -1,60 +1,92 @@
1
1
  require 'thor'
2
+ require 'highline'
3
+ require 'random_password'
2
4
  require 'yaml'
3
5
  require 'recursive-open-struct'
4
6
  module SiteHook
5
7
  class FileExistsError < Exception
6
8
  end
7
- class ConfigClass < Thor
8
- YML = open(Pathname(Dir.home).join('.jph-rc'), 'r')
9
9
 
10
- desc 'list QUERY [options]', 'List configured options'
10
+ # *ConfigClass*
11
+ #
12
+ # Holds all of the commands for the config subcommand
13
+ class ConfigClass < Thor
11
14
 
12
- def list
13
- puts YML.read
14
- end
15
- method_option :file, type: :boolean, banner: 'FILE', default: false, aliases: %w(-f)
16
15
  desc 'gen [options]', "Generate a example config file if one doesn't exist"
16
+ # rubocop:disable Metrics/AbcSize
17
17
  def gen
18
18
  yaml = [
19
- "# fatal, error, warn, info, debug",
20
- "log_levels:",
21
- " hook: info",
22
- " build: info",
23
- " git: info",
24
- " app: info",
25
- "projects:",
26
- " PROJECT.NAME: # Use the name you put as your webhook url",
27
- " # https://jekyllhook.example.com/webhook/PROJECT.NAME",
28
- " src: /path/2/site/source # Directory you 'git pull' into",
29
- " dst: /path/2/destination/ # The web root will be this folder",
30
- " host: git*.com # The git service you're using for vcs",
31
- " repo: USER/REPO # The repo path on the git service",
32
- " hookpass: SOMERANDOMSTRING # Gitlab-Token or GitHub secret, etc.",
33
- " private: true/false # hidden from the public list",
34
- "",
19
+ '# fatal, error, warn, info, debug',
20
+ 'log_levels:',
21
+ ' hook: info',
22
+ ' build: info',
23
+ ' git: info',
24
+ ' app: info',
25
+ 'projects:',
26
+ ' PROJECT.NAME: # Use the name you put as your webhook url',
27
+ ' # https://jekyllhook.example.com/webhook/PROJECT.NAME',
28
+ " src: /path/2/site/source # Directory you 'git pull' into",
29
+ ' dst: /path/2/destination/ # The web root will be this folder',
30
+ " host: git*.com # The git service you're using for vcs",
31
+ ' repo: USER/REPO # The repo path on the git service',
32
+ ' hookpass: SOMERANDOMSTRING # Gitlab-Token or GitHub secret, etc.',
33
+ ' private: true/false # hidden from the public list',
34
+ ''
35
35
  ]
36
- if options[:file]
37
- jphrc = Pathname(Dir.home).join('.jph-rc')
38
- begin
39
- if jphrc.exist?
40
- raise SiteHook::FileExistsError "#{jphrc} exists. Will not overwrite."
41
- else
42
- open(jphrc, 'w') do |f|
43
- yaml.each do |line|
44
- f.puts line
45
- end
46
- end
47
- say "Created #{jphrc}"
48
- say "You can now edit #{jphrc} and add your projects."
36
+ jphrc = SiteHook::Gem::Paths.config
37
+ if jphrc.exist?
38
+ puts "#{jphrc} exists. Will not overwrite."
39
+ else
40
+ File.open(jphrc, 'w') do |f|
41
+ yaml.each do |line|
42
+ f.puts line
49
43
  end
50
- rescue SiteHook::FileExistsError => e
51
- puts e
52
44
  end
53
-
54
- else
55
- puts yaml
45
+ say "Created #{jphrc}"
46
+ say "You can now edit #{jphrc} and add your projects."
56
47
  end
48
+ end
49
+ desc 'gen-project [options]', 'generates a project block'
50
+ def gen_project
51
+ hl = HighLine.new
52
+ hl.say "First What's the name of the project?"
53
+ project_name = hl.ask('> ')
57
54
 
55
+ hl.say "What's the source path? e.g. /home/#{ENV['USER']}/sites/site.tld"
56
+ source_path = hl.ask('> ')
57
+
58
+ hl.say 'Where is the web root? e.g. /var/www/sites/site.tld'
59
+ dest_path = hl.ask('> ')
60
+
61
+ hl.say 'The next things are for the public webhook list.'
62
+ hl.say "\n"
63
+ hl.say "\n"
64
+ hl.say "What's the hostname of the git service? e.g. github.com,"
65
+ hl.say "gitlab.com, git.domain.tld"
66
+ git_host = hl.ask('> ')
67
+
68
+ hl.say "What's the repo path? e.g. UserName/SiteName, UserName/site, etc."
69
+ repo_path = hl.ask('> ')
70
+
71
+ hl.say 'Is this repo allowed to be shown publically?'
72
+ is_private = hl.agree('> ', true) ? true : false
73
+
74
+ hl.say "Generating a hook password for you. If this one isn't wanted"
75
+ hl.say 'then just change it afterwards.'
76
+ hook_pass = RandomPassword.new(length: 20, symbols: 0).generate
77
+ hl.say 'Done.'
78
+ hl.say 'Outputting...'
79
+ tpl = [
80
+ " #{project_name}:",
81
+ " src: #{source_path}",
82
+ " dst: #{dest_path}",
83
+ " hookpass: #{hook_pass}",
84
+ " host: #{git_host}",
85
+ " repo: #{repo_path}",
86
+ " private: #{is_private}"
87
+ ]
88
+ puts tpl
58
89
  end
59
90
  end
60
91
  end
92
+ # rubocop:enable Metrics/AbcSize
@@ -25,11 +25,11 @@ module SiteHook
25
25
  fakelog = SiteHook::HookLogger::FakeLog.new
26
26
  reallog = SiteHook::HookLogger::GitLog.new(SiteHook.log_levels['git']).log
27
27
  jekyll_source = Jekyll.instance_variable_get('@jekyll_source')
28
- build_dest = Jekyll.instance_variable_get('@build_dest')
29
- g = Git.open(jekyll_source, :log => fakelog)
28
+ # build_dest = Jekyll.instance_variable_get('@build_dest')
29
+ g = Git.open(jekyll_source, log: fakelog)
30
30
  g.pull
31
31
  fakelog.entries.each do |level, entries|
32
- entries.each { |entry| reallog.send("#{level}", entry) }
32
+ entries.each { |entry| reallog.send(level.to_s, entry) }
33
33
  end
34
34
  end
35
35
 
@@ -38,7 +38,7 @@ module SiteHook
38
38
  build_dest = Jekyll.instance_variable_get('@build_dest')
39
39
  log = Jekyll.instance_variable_get('@log')
40
40
  Open3.popen2e({'BUNDLE_GEMFILE' => Pathname(jekyll_source).join('Gemfile').to_path}, "bundle exec jekyll build --source #{Pathname(jekyll_source).realdirpath.to_path} --destination #{Pathname(build_dest).to_path}") { |in_io, outerr_io, thr|
41
- pid = thr.pid
41
+ # pid = thr.pid
42
42
 
43
43
  outerr = outerr_io.read.lines
44
44
  outerr.each do |line|
@@ -49,7 +49,8 @@ module SiteHook
49
49
  # Destination: /var/www/iotaspencer.me
50
50
  # Incremental build: disabled. Enable with --incremental
51
51
  # Generating...
52
- # GitHub Metadata: No GitHub API authentication could be found. Some fields may be missing or have incorrect data.
52
+ # GitHub Metadata: No GitHub API authentication could be found.
53
+ # Some fields may be missing or have incorrect data.
53
54
  # done in 6.847 seconds.
54
55
  # Auto-regeneration: disabled. Use --watch to enable.
55
56
  case
@@ -1,3 +1,3 @@
1
1
  module SiteHook
2
- VERSION = "0.6.4"
2
+ VERSION = "0.6.7"
3
3
  end
@@ -1,6 +1,6 @@
1
1
  #webhook-list.list-group
2
2
  - projects.each do |name, hsh|
3
3
  - if hsh.fetch('private', nil).nil? or hsh.fetch('private', nil)
4
- %a{id: "#{hsh['repo'].sub(/\./, '-').sub(/\//, '-')}", class: "list-group-item",href: "https://#{hsh['host']}/#{hsh['repo']}"}
4
+ %a.list-group-item{id: "#{hsh['repo'].sub(/\./, '-').sub(/\//, '-')}", href: "https://#{hsh['host']}/#{hsh['repo']}"}
5
5
  #{name}
6
- %span{class: "badge badge-pill badge-dark"} https://#{hsh['host']}/#{hsh['repo']}
6
+ %span.badge.badge-pill.badge-dark "https://#{hsh['host']}/#{hsh['repo']}"
@@ -16,6 +16,7 @@ Gem::Specification.new do |spec|
16
16
  # to allow pushing to a single host or delete this section to allow pushing to any host.
17
17
  if spec.respond_to?(:metadata)
18
18
  spec.metadata['source_uri'] = 'https://github.com/IotaSpencer/site_hook'
19
+ spec.metadata['tutorial'] = 'https://iotaspencer.me/projects/site_hook/'
19
20
  end
20
21
 
21
22
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
@@ -24,20 +25,21 @@ Gem::Specification.new do |spec|
24
25
  spec.bindir = 'bin'
25
26
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
26
27
  spec.require_paths = ['lib']
27
- spec.add_runtime_dependency 'sinatra', '~> 2.0', '>= 2.0.2'
28
- spec.add_runtime_dependency 'sinatra-contrib', '~> 2.0', '>= 2.0.2'
29
- spec.add_runtime_dependency 'thor', '~> 0.20'
30
- spec.add_runtime_dependency 'paint', '~> 2.0'
28
+ spec.add_runtime_dependency 'activesupport', '~> 5.1'
31
29
  spec.add_runtime_dependency 'git', '~> 1.3'
30
+ spec.add_runtime_dependency 'haml', '~> 5.0'
31
+ spec.add_runtime_dependency 'highline', '~> 2.0', '>= 2.0.0'
32
32
  spec.add_runtime_dependency 'logging', '~> 2.2'
33
+ spec.add_runtime_dependency 'paint', '~> 2.0'
33
34
  spec.add_runtime_dependency 'pry', '~> 0.11'
34
- spec.add_runtime_dependency 'thin', '~> 1.7'
35
- spec.add_runtime_dependency 'activesupport', '~> 5.1'
35
+ spec.add_runtime_dependency 'random_password', '~> 0.1.1'
36
36
  spec.add_runtime_dependency 'recursive-open-struct', '~> 1.1'
37
- spec.add_runtime_dependency 'haml', '~> 5.0'
38
37
  spec.add_runtime_dependency 'sass', '~> 3.5'
38
+ spec.add_runtime_dependency 'sinatra', '~> 2.0', '>= 2.0.2'
39
+ spec.add_runtime_dependency 'sinatra-contrib', '~> 2.0', '>= 2.0.2'
40
+ spec.add_runtime_dependency 'thin', '~> 1.7'
41
+ spec.add_runtime_dependency 'thor', '~> 0.20'
39
42
  spec.add_development_dependency 'bundler', '~> 1.16'
40
43
  spec.add_development_dependency 'rake', '~> 10.0'
41
44
  spec.add_development_dependency 'rspec', '~> 3.0'
42
-
43
45
  end
metadata CHANGED
@@ -1,37 +1,59 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: site_hook
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4
4
+ version: 0.6.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ken Spencer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-21 00:00:00.000000000 Z
11
+ date: 2018-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: sinatra
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
20
- - - ">="
19
+ version: '5.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
21
25
  - !ruby/object:Gem::Version
22
- version: 2.0.2
26
+ version: '5.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: git
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
23
34
  type: :runtime
24
35
  prerelease: false
25
36
  version_requirements: !ruby/object:Gem::Requirement
26
37
  requirements:
27
38
  - - "~>"
28
39
  - !ruby/object:Gem::Version
29
- version: '2.0'
30
- - - ">="
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: haml
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
31
46
  - !ruby/object:Gem::Version
32
- version: 2.0.2
47
+ version: '5.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
33
55
  - !ruby/object:Gem::Dependency
34
- name: sinatra-contrib
56
+ name: highline
35
57
  requirement: !ruby/object:Gem::Requirement
36
58
  requirements:
37
59
  - - "~>"
@@ -39,7 +61,7 @@ dependencies:
39
61
  version: '2.0'
40
62
  - - ">="
41
63
  - !ruby/object:Gem::Version
42
- version: 2.0.2
64
+ version: 2.0.0
43
65
  type: :runtime
44
66
  prerelease: false
45
67
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,21 +71,21 @@ dependencies:
49
71
  version: '2.0'
50
72
  - - ">="
51
73
  - !ruby/object:Gem::Version
52
- version: 2.0.2
74
+ version: 2.0.0
53
75
  - !ruby/object:Gem::Dependency
54
- name: thor
76
+ name: logging
55
77
  requirement: !ruby/object:Gem::Requirement
56
78
  requirements:
57
79
  - - "~>"
58
80
  - !ruby/object:Gem::Version
59
- version: '0.20'
81
+ version: '2.2'
60
82
  type: :runtime
61
83
  prerelease: false
62
84
  version_requirements: !ruby/object:Gem::Requirement
63
85
  requirements:
64
86
  - - "~>"
65
87
  - !ruby/object:Gem::Version
66
- version: '0.20'
88
+ version: '2.2'
67
89
  - !ruby/object:Gem::Dependency
68
90
  name: paint
69
91
  requirement: !ruby/object:Gem::Requirement
@@ -79,117 +101,129 @@ dependencies:
79
101
  - !ruby/object:Gem::Version
80
102
  version: '2.0'
81
103
  - !ruby/object:Gem::Dependency
82
- name: git
104
+ name: pry
83
105
  requirement: !ruby/object:Gem::Requirement
84
106
  requirements:
85
107
  - - "~>"
86
108
  - !ruby/object:Gem::Version
87
- version: '1.3'
109
+ version: '0.11'
88
110
  type: :runtime
89
111
  prerelease: false
90
112
  version_requirements: !ruby/object:Gem::Requirement
91
113
  requirements:
92
114
  - - "~>"
93
115
  - !ruby/object:Gem::Version
94
- version: '1.3'
116
+ version: '0.11'
95
117
  - !ruby/object:Gem::Dependency
96
- name: logging
118
+ name: random_password
97
119
  requirement: !ruby/object:Gem::Requirement
98
120
  requirements:
99
121
  - - "~>"
100
122
  - !ruby/object:Gem::Version
101
- version: '2.2'
123
+ version: 0.1.1
102
124
  type: :runtime
103
125
  prerelease: false
104
126
  version_requirements: !ruby/object:Gem::Requirement
105
127
  requirements:
106
128
  - - "~>"
107
129
  - !ruby/object:Gem::Version
108
- version: '2.2'
130
+ version: 0.1.1
109
131
  - !ruby/object:Gem::Dependency
110
- name: pry
132
+ name: recursive-open-struct
111
133
  requirement: !ruby/object:Gem::Requirement
112
134
  requirements:
113
135
  - - "~>"
114
136
  - !ruby/object:Gem::Version
115
- version: '0.11'
137
+ version: '1.1'
116
138
  type: :runtime
117
139
  prerelease: false
118
140
  version_requirements: !ruby/object:Gem::Requirement
119
141
  requirements:
120
142
  - - "~>"
121
143
  - !ruby/object:Gem::Version
122
- version: '0.11'
144
+ version: '1.1'
123
145
  - !ruby/object:Gem::Dependency
124
- name: thin
146
+ name: sass
125
147
  requirement: !ruby/object:Gem::Requirement
126
148
  requirements:
127
149
  - - "~>"
128
150
  - !ruby/object:Gem::Version
129
- version: '1.7'
151
+ version: '3.5'
130
152
  type: :runtime
131
153
  prerelease: false
132
154
  version_requirements: !ruby/object:Gem::Requirement
133
155
  requirements:
134
156
  - - "~>"
135
157
  - !ruby/object:Gem::Version
136
- version: '1.7'
158
+ version: '3.5'
137
159
  - !ruby/object:Gem::Dependency
138
- name: activesupport
160
+ name: sinatra
139
161
  requirement: !ruby/object:Gem::Requirement
140
162
  requirements:
141
163
  - - "~>"
142
164
  - !ruby/object:Gem::Version
143
- version: '5.1'
165
+ version: '2.0'
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: 2.0.2
144
169
  type: :runtime
145
170
  prerelease: false
146
171
  version_requirements: !ruby/object:Gem::Requirement
147
172
  requirements:
148
173
  - - "~>"
149
174
  - !ruby/object:Gem::Version
150
- version: '5.1'
175
+ version: '2.0'
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: 2.0.2
151
179
  - !ruby/object:Gem::Dependency
152
- name: recursive-open-struct
180
+ name: sinatra-contrib
153
181
  requirement: !ruby/object:Gem::Requirement
154
182
  requirements:
155
183
  - - "~>"
156
184
  - !ruby/object:Gem::Version
157
- version: '1.1'
185
+ version: '2.0'
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: 2.0.2
158
189
  type: :runtime
159
190
  prerelease: false
160
191
  version_requirements: !ruby/object:Gem::Requirement
161
192
  requirements:
162
193
  - - "~>"
163
194
  - !ruby/object:Gem::Version
164
- version: '1.1'
195
+ version: '2.0'
196
+ - - ">="
197
+ - !ruby/object:Gem::Version
198
+ version: 2.0.2
165
199
  - !ruby/object:Gem::Dependency
166
- name: haml
200
+ name: thin
167
201
  requirement: !ruby/object:Gem::Requirement
168
202
  requirements:
169
203
  - - "~>"
170
204
  - !ruby/object:Gem::Version
171
- version: '5.0'
205
+ version: '1.7'
172
206
  type: :runtime
173
207
  prerelease: false
174
208
  version_requirements: !ruby/object:Gem::Requirement
175
209
  requirements:
176
210
  - - "~>"
177
211
  - !ruby/object:Gem::Version
178
- version: '5.0'
212
+ version: '1.7'
179
213
  - !ruby/object:Gem::Dependency
180
- name: sass
214
+ name: thor
181
215
  requirement: !ruby/object:Gem::Requirement
182
216
  requirements:
183
217
  - - "~>"
184
218
  - !ruby/object:Gem::Version
185
- version: '3.5'
219
+ version: '0.20'
186
220
  type: :runtime
187
221
  prerelease: false
188
222
  version_requirements: !ruby/object:Gem::Requirement
189
223
  requirements:
190
224
  - - "~>"
191
225
  - !ruby/object:Gem::Version
192
- version: '3.5'
226
+ version: '0.20'
193
227
  - !ruby/object:Gem::Dependency
194
228
  name: bundler
195
229
  requirement: !ruby/object:Gem::Requirement
@@ -243,6 +277,7 @@ extra_rdoc_files: []
243
277
  files:
244
278
  - ".gitignore"
245
279
  - ".rspec"
280
+ - ".rubocop.yml"
246
281
  - ".travis.yml"
247
282
  - CODE_OF_CONDUCT.md
248
283
  - Gemfile
@@ -268,6 +303,7 @@ licenses:
268
303
  - MIT
269
304
  metadata:
270
305
  source_uri: https://github.com/IotaSpencer/site_hook
306
+ tutorial: https://iotaspencer.me/projects/site_hook/
271
307
  post_install_message:
272
308
  rdoc_options: []
273
309
  require_paths: