site_hook 0.8.2 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.rspec +0 -2
  4. data/.rubocop.yml +2 -0
  5. data/Gemfile +1 -5
  6. data/Rakefile +35 -3
  7. data/bin/site_hook +5 -1
  8. data/features/get_help.feature +3 -0
  9. data/features/step_definitions/get_help_step_definition.rb +1 -0
  10. data/features/step_definitions/my_steps.rb +3 -0
  11. data/features/support/env.rb +1 -0
  12. data/lib/site_hook.rb +2 -28
  13. data/lib/site_hook/cli.rb +22 -39
  14. data/lib/site_hook/commands/config_class.rb +22 -68
  15. data/lib/site_hook/commands/jekyll_class.rb +38 -0
  16. data/lib/site_hook/commands/server_class.rb +38 -34
  17. data/lib/site_hook/config.rb +390 -14
  18. data/lib/site_hook/config_sections.rb +60 -9
  19. data/lib/site_hook/deprecate.rb +34 -11
  20. data/lib/site_hook/env/env.rb +2 -0
  21. data/lib/site_hook/exceptions.rb +26 -2
  22. data/lib/site_hook/log.rb +20 -15
  23. data/lib/site_hook/logger.rb +94 -173
  24. data/lib/site_hook/loggers.rb +10 -0
  25. data/lib/site_hook/loggers/access.rb +20 -0
  26. data/lib/site_hook/loggers/app.rb +78 -0
  27. data/lib/site_hook/loggers/build.rb +77 -0
  28. data/lib/site_hook/loggers/fake.rb +52 -0
  29. data/lib/site_hook/loggers/git.rb +81 -0
  30. data/lib/site_hook/loggers/hook.rb +74 -0
  31. data/lib/site_hook/methods.rb +26 -0
  32. data/lib/site_hook/paths.rb +65 -2
  33. data/lib/site_hook/prelogger.rb +88 -0
  34. data/lib/site_hook/prompt.rb +14 -0
  35. data/lib/site_hook/prompts/prompt_project.rb +48 -0
  36. data/lib/site_hook/runner.rb +36 -0
  37. data/lib/site_hook/sender.rb +4 -9
  38. data/lib/site_hook/string_ext.rb +57 -0
  39. data/lib/site_hook/version.rb +2 -2
  40. data/lib/site_hook/webhook.rb +120 -129
  41. data/site_hook.gemspec +39 -22
  42. data/spec/spec_helper.rb +13 -0
  43. data/spec/string_ext_spec.rb +10 -0
  44. metadata +87 -85
  45. data/CODE_OF_CONDUCT.md +0 -74
  46. data/bin/console +0 -14
  47. data/lib/site_hook/assets/css/styles.css +0 -26
  48. data/lib/site_hook/commands/debug_class.rb +0 -29
  49. data/lib/site_hook/config_sections/cli.rb +0 -24
  50. data/lib/site_hook/config_sections/log_levels.rb +0 -15
  51. data/lib/site_hook/config_sections/projects.rb +0 -22
  52. data/lib/site_hook/const.rb +0 -10
  53. data/lib/site_hook/gem.rb +0 -26
  54. data/lib/site_hook/persist.rb +0 -14
  55. data/lib/site_hook/prompts/gen_config.rb +0 -48
  56. data/lib/site_hook/spinner.rb +0 -19
  57. data/lib/site_hook/views/layout.haml +0 -24
  58. data/lib/site_hook/views/webhooks.haml +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 844ddfd7d31478570b837f2de7e706734af8e27dfa5d84b0d8a2d76e81a02507
4
- data.tar.gz: 565cb3b88ee38759021e97d971f930294372fcb2f0cfaf7cb299fde0083d12b3
3
+ metadata.gz: 841978508b6330f36437b9ac39b99ed2eb0c94492838bc748bb870688c4cb203
4
+ data.tar.gz: 387b84aaab26fda6cdb6459f181b0e2346ca89b36d474b18a8be0319d05cf16b
5
5
  SHA512:
6
- metadata.gz: 7c4aa23aaa6c362d0729dfe0ff516298576c595392cc45ba71f1008c121e5bea73209f2af9fd7c481bfad13174bab82782803f41cdb9984b0171fac3a72609e8
7
- data.tar.gz: ef40727c70ca067f8b7c3fd5eb16cbf7c1fe38f7eecc8051b247dc4b9e676c8bfb024f5e204249eae06c05b6dc984698374d574c0728f0748511df40ecd99e62
6
+ metadata.gz: f50358cdb39cec2d31904cf59d710814c776e810e71b6a30e8fdf880a0a92edc37a1c9f484d3ed207c97e6367f72ebaedb0e5bfa3b5f2cd77d679b0ef94b0c31
7
+ data.tar.gz: '04987f3d4c2f78d5f0cd42711bd1da021a87017e532c5225a6b8c170a3160a1f44ab233d0f8202e5261023e29f6ec7634a028cfba0f7d30ddda3e1f8c5dfcf2c'
data/.gitignore CHANGED
@@ -11,6 +11,6 @@
11
11
  /vendor
12
12
  # rspec failure tracking
13
13
  .rspec_status
14
- Gemfile.lock
14
+ /Gemfile.lock
15
15
  vendor/
16
16
  /.scannerwork
data/.rspec CHANGED
@@ -1,3 +1 @@
1
1
  --format documentation
2
- --color
3
- --require spec_helper
@@ -9,4 +9,6 @@ Metrics/ClassLength:
9
9
  Metrics/AbcSize:
10
10
  Enabled: false
11
11
  Metrics/LineLength:
12
+ Enabled: false
13
+ Lint/HandleExceptions:
12
14
  Enabled: false
data/Gemfile CHANGED
@@ -1,8 +1,4 @@
1
1
  source "https://rubygems.org"
2
-
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
- group :dev do
5
- gem 'pry', '~> 0.12.2'
6
- end
2
+ # git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
7
3
  # Specify your gem's dependencies in site_hook.gemspec
8
4
  gemspec
data/Rakefile CHANGED
@@ -1,6 +1,38 @@
1
1
  require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
2
+ require 'rake/testtask'
3
3
 
4
- RSpec::Core::RakeTask.new(:test)
4
+ begin
5
+ require 'cucumber/rake/task'
6
+ Cucumber::Rake::Task.new(:cucumber, 'cucumber features')
7
+ rescue LoadError
8
+ # Don't worry about empty rescue
9
+ end
5
10
 
6
- task :default => :test
11
+
12
+ begin
13
+ require 'rspec/core/rake_task'
14
+ RSpec::Core::RakeTask.new(:spec) do |t|
15
+ t.pattern = 'spec/**/*_spec.rb'
16
+ end
17
+ rescue LoadError
18
+ # Don't worry about empty rescue
19
+ end
20
+
21
+ require 'rake'
22
+ require 'bundler'
23
+ Bundler.setup
24
+ require 'grape-route-helpers'
25
+ require 'grape-route-helpers/tasks'
26
+ require 'grape-raketasks'
27
+ require 'grape-raketasks/tasks'
28
+
29
+ desc 'load the Rake environment.'
30
+ task :environment do
31
+ require File.expand_path('lib/site_hook/env/env.rb', File.dirname(__FILE__))
32
+ end
33
+
34
+ desc "Run tests and setup"
35
+ tasks = %i[spec cucumber]
36
+ task default: tasks
37
+ desc 'run tests'
38
+ task tests: %i[spec cucumber]
@@ -1,3 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
+ require 'site_hook/runner'
2
3
  require 'site_hook'
3
- exit SiteHook::App.run(ARGV)
4
+ $threads = []
5
+
6
+ app = SiteHook::Runner.new(ARGV, STDIN, STDOUT, STDERR, Kernel)
7
+ app.execute!
@@ -0,0 +1,3 @@
1
+ Feature: Get help via the command line
2
+ Scenario: Get Help
3
+ When I run the following commands with `bundle exec bin\/site_hook`
@@ -0,0 +1,3 @@
1
+ Given(/^I run the following commands with `bundle exec bin\/site_hook`$/) do
2
+
3
+ end
@@ -0,0 +1 @@
1
+ require 'aruba/cucumber'
@@ -1,29 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
- require 'site_hook/version'
4
- require 'site_hook/sender'
5
- require 'site_hook/gem'
6
- require 'site_hook/log'
7
- require 'site_hook/logger'
8
- require 'site_hook/spinner'
9
- require 'recursive-open-struct'
10
1
  require 'site_hook/cli'
11
- require 'sinatra'
12
- require 'haml'
13
- require 'json'
14
- require 'sinatra/json'
15
- require 'yaml'
16
-
17
- module SiteHook
18
- autoload :Logs, 'site_hook/log'
19
- autoload :Gem, 'site_hook/gem'
20
- autoload :Paths, 'site_hook/paths'
21
- # class CoffeeHandler (inherits from Sinatra::Base)
22
- class CoffeeHandler < Sinatra::Base
23
- set :views, Pathname(app_file).dirname.join('site_hook', 'static', 'coffee').to_s
24
- get '/js/*.js' do
25
- filename = params[:splat].first
26
- coffee filename.to_sym
27
- end
28
- end
29
- end
2
+ require 'highline'
3
+ HighLine::Menu.index_color = :rgb_84DE02
@@ -1,48 +1,31 @@
1
- require 'gli'
1
+ require 'thor'
2
2
  require 'highline'
3
3
  require 'paint'
4
4
  require 'pathname'
5
+ require 'site_hook/paths'
5
6
  require 'site_hook/exceptions'
6
7
  require 'site_hook/deprecate'
8
+ commands = SiteHook::Paths.lib_dir.join('site_hook/commands').children
9
+ commands.each do |filename|
10
+ next if filename == '.' or filename == '..'
11
+ f = filename.dirname
12
+ require "#{f + filename.basename('.*')}"
13
+ end
14
+
7
15
  module SiteHook
8
- class App
9
- extend GLI::App
10
- version SiteHook::VERSION
11
- # don't use config_file just use ~/.shrc/config's cli:...
12
- # projects are in .shrc/config
13
- commands_from 'site_hook/commands'
14
- desc 'Print info on the gem.'
15
- command 'gem-info' do |c|
16
- c.action do |global_options, options, arguments|
17
- @hl.say "Gem Name: #{SiteHook::Gem::Info.name}"
18
- @hl.say "Gem Constant: #{SiteHook::Gem::Info.constant_name}"
19
- @hl.say "Gem Author: #{SiteHook::Gem::Info.author}"
20
- @hl.say "Gem Version: v#{SiteHook::VERSION}"
21
- end
22
- end
23
- around do |global_options, command, options, args, code|
24
- @config_hash = YAML.load_file(SiteHook::Paths.config) || YAML.load_file(SiteHook::Paths.old_config)
25
- @hl = HighLine.new(STDIN, STDOUT, 80, 1, 2, 0)
26
- code.call
16
+ class CLI < Thor
17
+ desc '--version, -v', 'returns version and exits'
18
+ def __version
19
+ puts SiteHook::VERSION
27
20
  end
28
- pre do |global_options, command, options, args|
29
- if SiteHook::Paths.old_config.exist?
30
- continue = SiteHook::Deprecation.deprecate(
31
- "#{SiteHook::Paths.old_config.to_s} is deprecated in favor of #{SiteHook::Paths.config}",
32
- <<~INSTRUCT,
33
- Please run `#{exe_name} config upgrade-shrc` to rectify this.
34
- Once version 1.0.0 is released, #{SiteHook::Paths.config} will
35
- be the only config file option, and #{SiteHook::Paths.old_config} will not be allowed.
36
- any existance of ~/.jph after the 1.0.0 release will result in an Exception being raised.
37
- Once the exception is raised, site_hook will exit and return a 99 status code.
38
- INSTRUCT
39
- true
21
+ map ['-v', '--version'] => :__version
22
+
23
+ desc 'config [subcommand] [options]', 'configure site_hook'
24
+ subcommand('config', SiteHook::Commands::ConfigClass)
25
+ desc 'server [subcommand] [options]', 'run server actions'
26
+ subcommand('server', SiteHook::Commands::ServerClass)
27
+ desc 'jekyll [subcommand] [options]', 'run jekyll actions'
28
+ subcommand('jekyll', SiteHook::Commands::JekyllClass)
40
29
 
41
- )
42
- continue
43
- else
44
- # don't do anything
45
- end
46
- end
47
30
  end
48
- end
31
+ end
@@ -1,81 +1,35 @@
1
- require 'gli'
2
- require 'highline'
1
+ require 'thor'
3
2
  require 'random_password'
4
- require 'yaml'
5
- require 'site_hook/config'
3
+ require 'site_hook/config_sections'
6
4
  module SiteHook
5
+ module Commands
7
6
 
7
+ class ConfigClass < Thor
8
+ # def __version
9
+ # puts SiteHook::VERSION
10
+ # end
11
+ # map ['-v', '--version'] => __version
8
12
 
9
- # *ConfigClass*
10
- #
11
- # Holds all of the commands for the config subcommand
12
- class App
13
- extend GLI::App
13
+ desc 'gen [options]', 'generate a sample config'
14
14
 
15
- desc 'Configure site_hook options'
15
+ def gen
16
+ if SiteHook::Paths.default_config.exist?
17
+ puts SiteHook::ConfigSections.all_samples
18
+ end
16
19
 
17
- # rubocop:disable Metrics/AbcSize
18
- command 'config' do |c|
19
- c.command 'gen' do |gen|
20
- gen.desc "Generate a example config file if one doesn't exist"
21
- gen.action do |global_options, options, arguments|
20
+ end
22
21
 
23
- yaml = [
24
- '# fatal, error, warn, info, debug',
25
- 'log_levels:',
26
- ' hook: info',
27
- ' build: info',
28
- ' git: info',
29
- ' app: info',
22
+ desc 'mkpass [options]', 'create a hook password'
23
+ method_option(:length, type: :numeric, banner: 'LENGTH', aliases: ['-l'], default: 20)
30
24
 
31
- ]
32
- shrc = SiteHook::Paths.config
33
- if shrc.exist?
34
- puts "#{shrc} exists. Will not overwrite."
35
- else
36
- File.open(shrc, 'w') do |f|
37
- yaml.each do |line|
38
- f.puts line
39
- end
40
- end
41
- say "Created #{shrc}"
42
- say "You can now edit #{shrc} and add your projects."
43
- end
44
- end
25
+ def mkpass
26
+ puts RandomPassword.new(length: options[:length]).generate
45
27
  end
46
- desc 'generates a project block'
47
- c.command 'gen-project' do |gen_project|
48
- gen_project.action do |global_options, options, arguments|
49
- SiteHook::NotImplemented.declare(gen_project)
50
- # puts tpl
51
- end
52
- end
53
- c.command 'add-project' do |add_project|
54
- add_project.action do |global_options, options, arguments|
55
- # @config_hash = SiteHook::Config::Set.new(SiteHook::Paths.config)
56
- SiteHook::NotImplemented.declare(add_project)
57
- end
58
- end
59
-
60
- c.command 'mkpass' do |mkpass|
61
- mkpass.flag('symbol-amt', arg_name: 'AMT', type: Integer, default_value: 0)
62
- mkpass.flag('length', arg_name: 'LENGTH', type: Integer, default_value: 10)
63
- mkpass.action do |global_options, options, arguments|
64
28
 
65
- if (8..255).include?(options[:length])
66
- if (0..128).member?(options[:'symbol-amt'])
67
- puts RandomPassword.generate(length: options[:length], symbols: options['symbol-amt'])
68
- else
69
- help_now! "Symbols amount must be between '0' and '128'."
70
- end
71
- else
72
- help_now! "Length must be a positive 'Integer' between '8' and '255'"
73
- end
74
- end
29
+ desc 'inspect [options]', 'output the configuration'
30
+ def inspect
31
+ puts SiteHook::Config.new.inspect
75
32
  end
76
33
  end
77
34
  end
78
- end
79
-
80
-
81
- # rubocop:enable Metrics/AbcSize
35
+ end
@@ -0,0 +1,38 @@
1
+ require 'thor'
2
+ require 'random_password'
3
+ require 'site_hook/config_sections'
4
+ require 'site_hook/sender'
5
+ module SiteHook
6
+ module Commands
7
+
8
+ class JekyllClass < Thor
9
+ # def __version
10
+ # puts SiteHook::VERSION
11
+ # end
12
+ # map ['-v', '--version'] => __version
13
+
14
+ desc 'build [options]', 'build sites'
15
+
16
+ def build(project_name)
17
+ if SiteHook::Paths.default_config.exist?
18
+ begin
19
+ project = SiteHook::Config.projects.send(StrExt.mkvar(project_name))
20
+ jekyll_status = SiteHook::Senders::Jekyll.build(project['src'], project['dst'], SiteHook::Log::Build, options: {config: project['config']})
21
+ end
22
+ end
23
+ end
24
+
25
+ desc 'mkpass [options]', 'create a hook password'
26
+ method_option(:length, type: :numeric, banner: 'LENGTH', aliases: ['-l'], default: 20)
27
+
28
+ def mkpass
29
+ puts RandomPassword.new(length: options[:length]).generate
30
+ end
31
+
32
+ desc 'inspect [options]', 'output the configuration'
33
+ def inspect
34
+ puts SiteHook::Config.new.inspect
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,39 +1,43 @@
1
- ##########
2
- # -> File: /home/ken/RubymineProjects/site_hook/lib/site_hook/config_class.1.rb
3
- # -> Project: site_hook
4
- # -> Author: Ken Spencer <me@iotaspencer.me>
5
- # -> Last Modified: 1/10/2018 21:45:36
6
- # -> Copyright (c) 2018 Ken Spencer
7
- # -> License: MIT
8
- ##########
9
- require 'site_hook/persist'
10
- require 'site_hook/paths'
11
- require 'site_hook/const'
12
- require 'gli'
1
+ require 'thor'
2
+ require 'grape'
3
+ require 'grape-route-helpers'
4
+ require 'site_hook/webhook'
5
+ require 'rack'
6
+ require 'site_hook/config'
7
+ SiteHook::Config.new
13
8
  module SiteHook
14
- autoload :Webhook, 'site_hook/webhook'
15
- SHRC = YAML.load_file(SiteHook::Paths.config) || YAML.load_file(SiteHook::Paths.old_config)
16
- # *ServerClass*
17
- #
18
- # Holds all of the commands for the config subcommand
19
- class App
20
- extend GLI::App
21
-
22
- command 'server' do |c|
23
- c.desc 'Start the server'
24
- c.command 'listen' do |listen|
25
- listen.desc 'Start SiteHook'
26
- listen.flag :log_levels, type: :hash, arg_name: 'LEVELS', default: SiteHook::Logs.log_levels
27
- listen.flag :host, type: :string, arg_name: 'BINDHOST', default: SHRC.fetch('host', '127.0.0.1')
28
- listen.flag :port, type: :numeric, arg_name: 'BINDPORT', default: SHRC.fetch('port', 9090)
29
- listen.action do |global_options, options, arguments|
30
- SiteHook::Webhook.set_options(options[:host], options[:port])
31
- SiteHook.mklogdir unless SiteHook::Paths.logs.exist?
32
- SiteHook::Webhook.run!
9
+ module Commands
10
+ class ServerClass < Thor
11
+ # def __version
12
+ # puts SiteHook::VERSION
13
+ # end
14
+ # map ['-v', '--version'] => __version
15
+ method_option(:host, banner: 'HOST', aliases: ['-h'], type: :string, default: SiteHook::Config.webhook.host)
16
+ method_option(:port, banner: 'PORT', aliases: ['-p'], type: :numeric, default: SiteHook::Config.webhook.port)
17
+ desc 'listen [options]', ''
18
+ def listen
19
+ $threads << Thread.new do
20
+ Rack::Server.start(
21
+ app: SiteHook::Server,
22
+ Host: options[:host],
23
+ Port: options[:port],
24
+ debug: true
25
+ )
33
26
  end
27
+ $threads << Thread.new do
28
+ loop do
29
+ case $stdin.gets
30
+ when "reload\n"
31
+ ::SiteHook::Config.reload!
32
+ when "quit\n"
33
+ $threads.each do |thr|
34
+ thr == Thread.current ? exit(0) : thr.exit
35
+ end
36
+ end
37
+ end
38
+ end
39
+ $threads.each(&:join)
34
40
  end
35
41
  end
36
-
37
42
  end
38
- end
39
- # rubocop:enable Metrics/AbcSize
43
+ end
@@ -1,23 +1,399 @@
1
1
  require 'site_hook/paths'
2
- require 'recursive_open_struct'
3
-
2
+ require 'yaml'
3
+ require 'site_hook/string_ext'
4
+ require 'site_hook/prelogger'
4
5
  module SiteHook
5
6
  class Config
6
- class Get
7
- attr_reader :raw_config, :parsed_config, :config
8
- def initialize(cfg_path = Pathname.new(SiteHook::Paths.config || SiteHook::Paths.old_config))
9
- @filename = cfg_path
10
- @raw_config = YAML.load_file(cfg_path)
11
- @parsed_config = RecursiveOpenStruct.new(@raw_config, recurse_over_arrays: true, preserve_original_keys: true)
12
- @config = @parsed_config
7
+ # def self.validate(config)
8
+ # config.each do |section, hsh|
9
+ # case section.to_s
10
+ # when 'webhook'
11
+ # if hsh['port']
12
+ # port_validity = [
13
+ # hsh['port'].respond_to?(:to_i),
14
+ # hsh['port'].is_a?(Integer)
15
+ # ].drop_while(&:!)
16
+ # SiteHook::PreLogger.debug port_validity
17
+ # else
18
+ # raise InvalidConfigError 'webhook', index
19
+ # end
20
+ # if hsh['host']
21
+ # host_validity = [
22
+ # hsh['host'].respond_to?(:to_s)
23
+ #
24
+ # ]
25
+ # end
26
+ # [port_validity]
27
+ # when 'log_levels'
28
+ #
29
+ # when 'cli'
30
+ # when 'projects'
31
+ # when 'out'
32
+ # if hsh['out'].keys
33
+ # hsh['out'].keys.each do |key|
34
+ # case key
35
+ # when 'discord'
36
+ # when 'irc'
37
+ # else
38
+ # raise InvalidConfigError 'out', "#{key} is an invalid out service"
39
+ # end
40
+ # end
41
+ # end
42
+ # else
43
+ # raise UnknownFieldError section
44
+ # end
45
+ # end
46
+ # end
47
+
48
+ def inspect
49
+ meths = %i[webhook log_levels cli projects]
50
+ sections = {}
51
+ meths.each do |m|
52
+ sections[m] = self.class.send(m).inspect
53
+ end
54
+ secs = []
55
+ sections.each { |name, instance| secs << "#{name}=#{instance}" }
56
+ "#<SiteHook::Config #{secs.join(' ')}>"
57
+ end
58
+
59
+ def self.reload!
60
+ @@config = YAML.load_file(@@filename)
61
+ end
62
+
63
+ def self.filename
64
+ @@filename
65
+ end
66
+
67
+ def self.config
68
+ self.new
69
+ end
70
+
71
+ def initialize
72
+ @@config = {}
73
+ @@filename = SiteHook::Paths.default_config
74
+ begin
75
+ @@config = YAML.load_file(@@filename)
76
+ rescue Errno::ENOENT
77
+ raise NoConfigError path
78
+ rescue NoMethodError
79
+ @@filename.empty?
80
+ end
81
+ end
82
+
83
+ # @return [Webhook]
84
+ def self.webhook
85
+ Webhook.new(@@config['webhook'])
86
+ end
87
+
88
+ # @return [Projects]
89
+ def self.projects
90
+ Projects.new(@@config['projects'])
91
+ end
92
+
93
+ # @return [Cli]
94
+ def self.cli
95
+ Cli.new(@@config['cli'])
96
+ end
97
+
98
+ # @return [LogLevels]
99
+ def self.log_levels
100
+ LogLevels.new(@@config['log_levels'])
101
+ end
102
+ end
103
+ class Webhook
104
+ def initialize(config)
105
+ config.each do |option, value|
106
+ sec = StrExt.mkatvar(option)
107
+ self.instance_variable_set(:"#{sec}", value)
108
+ end
109
+ end
110
+
111
+ def host
112
+ @host
113
+ end
114
+
115
+ def port
116
+ @port
117
+ end
118
+
119
+ def inspect
120
+ "#<SiteHook::Webhook host=#{host} port=#{port}>"
121
+ end
122
+
123
+ end
124
+ class Projects
125
+ def initialize(config)
126
+ config.each do |project, options|
127
+ instance_variable_set(StrExt.mkatvar(StrExt.mkvar(project)), Project.new(project, options))
128
+ end
129
+ end
130
+
131
+ def inspect
132
+
133
+ output = []
134
+ instance_variables.each do |project|
135
+ output << "#{StrExt.rematvar(project)}=#{instance_variable_get(project).inspect}"
13
136
  end
137
+ "#<SiteHook::Projects #{output.join(' ')}"
138
+ end
14
139
 
140
+ def find_project(name)
141
+ public_vars = instance_variables.reject do |project_var|
142
+ instance_variable_get(project_var).private
143
+ end
144
+ project_obj = public_vars.select do |project|
145
+ project == StrExt.mkatvar(StrExt.mkvar(name))
146
+ end
147
+ project_obj = project_obj.join
148
+ begin
149
+ instance_variable_get(project_obj)
150
+ rescue NameError
151
+ nil
152
+ end
153
+
154
+ end
155
+
156
+ def get(project)
157
+ if instance_variables.empty?
158
+ return :no_projects
159
+ end
160
+ vars = instance_variables.select do |name|
161
+ name == StrExt.mkatvar(StrExt.mkvar(project))
162
+ end
163
+ if vars.empty?
164
+ return :not_found
165
+ end
166
+ obj = vars.join
167
+ begin
168
+ instance_variable_get(obj)
169
+ rescue NameError => e
170
+ return :not_found
171
+ end
172
+ end
173
+
174
+ #
175
+ # Collect project names that meet certain criteria
176
+ def collect_public
177
+ public_vars = instance_variables.reject do |project_var|
178
+ instance_variable_get(project_var).private
179
+ end
180
+ public_projects = []
181
+ public_vars.each do |var|
182
+ public_projects << instance_variable_get(var)
183
+ end
184
+ public_projects
185
+ end
186
+
187
+ def to_h
188
+ projects = {}
189
+ each do |project|
190
+ projects[project.name] = {}
191
+ %i[src dst repo host].each do |option|
192
+ projects[project.name][option] = project.instance_variable_get(StrExt.mkatvar(option))
193
+ end
194
+
195
+ end
196
+ projects
197
+ end
198
+
199
+ def each(&block)
200
+ len1 = instance_variables.length
201
+ x = 0
202
+ while x < len1
203
+ base = self
204
+ yield instance_variable_get(instance_variables[x])
205
+ x += 1
206
+ end
207
+ end
208
+
209
+ def self.length
210
+ instance_variables.length
211
+ end
212
+ end
213
+ class LogLevels
214
+ attr :app, :hook, :build, :git
215
+
216
+ def initialize(config)
217
+
218
+ LogLevels.defaults.each do |type, level|
219
+ if config.fetch(type.to_s, nil)
220
+ level(type.to_s, config.fetch(type.to_s))
221
+ else
222
+ level(type.to_s, level)
223
+ end
224
+ end
225
+ end
226
+
227
+ def to_h
228
+ output_hash = {}
229
+ wanted = %i[app hook build git]
230
+ wanted.each do |logger|
231
+ output_hash.store(logger, instance_variable_get(StrExt.mkatvar(logger)))
232
+ end
233
+ output_hash
234
+ end
235
+
236
+ def inspect
237
+ levels = []
238
+ instance_variables.each do |var|
239
+ levels << "#{StrExt.rematvar(var)}=#{self.instance_variable_get(var)}"
240
+ end
241
+ "#<SiteHook::LogLevels #{levels.join(' ')}>"
242
+ end
243
+
244
+ def fetch(key)
245
+ instance_variable_get(:"@#{key}")
246
+ end
247
+
248
+ def self.defaults
249
+ {
250
+ app: 'info',
251
+ hook: 'info',
252
+ build: 'info',
253
+ git: 'info',
254
+ }
255
+ end
256
+
257
+ def level(type, level)
258
+ instance_variable_set(:"@#{type}", level)
259
+ end
260
+ end
261
+ class Cli
262
+ SECTIONS = {
263
+ config: {
264
+ mkpass: [:length, :symbols]
265
+ },
266
+ server: {
267
+ # no host or port since those are set via Webhook
268
+ # webhook:
269
+ # host: 127.0.0.1
270
+ # port: 9090
271
+ #
272
+ # TODO: Find options to put here
273
+ },
274
+ }
275
+
276
+ def initialize(config)
277
+ # super
278
+ config.each do |sec, values|
279
+ instance_variable_set(StrExt.mkatvar(sec), values) unless values.empty?
280
+ end
281
+ end
282
+
283
+ def server
284
+ CliClasses::Server.new(@server)
285
+ end
286
+
287
+ def config
288
+ CliClasses::Config.new(@config)
289
+ end
290
+
291
+ def inspect
292
+ wanted = instance_variables
293
+ outputs = []
294
+ wanted.each do |meth|
295
+ outputs << "#{StrExt.rematvar(meth)}=#{instance_variable_get(meth)}"
296
+ end
297
+ "#<SiteHook::Cli #{outputs.join(' ')}>"
298
+ end
299
+ end
300
+
301
+ ##
302
+ # Internal Classes for each section
303
+ #
304
+ # Projects:
305
+ # Project
306
+ # Cli:
307
+ # Command
308
+ #
309
+ class Project
310
+ attr_reader :name, :src, :dst, :host, :repo, :hookpass, :private, :config
311
+
312
+ def initialize(name, config)
313
+ @name = name.to_s
314
+ config.each do |option, value|
315
+ instance_variable_set(StrExt.mkatvar(option), value)
316
+ if instance_variable_get(StrExt.mkatvar(:config))
317
+ # variable exists in configuration
318
+ else
319
+ instance_variable_set(StrExt.mkatvar(:config), '_config.yml')
320
+ end
321
+ if config.fetch('private', nil)
322
+ instance_variable_set(StrExt.mkatvar(option), value) unless instance_variables.include?(:@private)
323
+ else
324
+ instance_variable_set(StrExt.mkatvar('private'), false)
325
+ end
326
+ end
327
+ end
328
+
329
+ def inspect
330
+ outputs = []
331
+ instance_variables.each do |sym|
332
+ outputs << "#{StrExt.rematvar(sym)}=#{instance_variable_get(sym)}"
333
+ end
334
+ "#<SiteHook::Project #{outputs.join(' ')}>"
335
+ end
336
+ end
337
+ class CliClasses
338
+ class Config
339
+ def initialize(config)
340
+ @configured_commands = {}
341
+ config.each do |command, values|
342
+ @configured_commands.store(command, values)
343
+ end
344
+ end
345
+
346
+ def mkpass
347
+ Command.new(:mkpass, @configured_commands[:mkpass])
348
+ end
349
+
350
+ def inspect
351
+ outputs = []
352
+ @configured_commands.each do |m, body|
353
+ outputs << "#{m}=#{body}"
354
+ end
355
+ "#<SiteHook::Cli::Config #{outputs.join(' ')}>"
356
+ end
357
+ end
358
+ class Server
359
+ def initialize(config)
360
+ @configured_commands = {}
361
+ config.each do |command, values|
362
+ @configured_commands.store(command, values)
363
+ end
364
+ end
365
+
366
+ def listen
367
+ Command.new(:listen, @configured_commands[:listen])
368
+ end
369
+
370
+ def inspect
371
+ outputs = []
372
+ @configured_commands.each do |m, body|
373
+ outputs << "#{m}=#{body}"
374
+ end
375
+ "#<SiteHook::Cli::Server #{outputs.join(' ')}>"
376
+ end
377
+ end
378
+ class Command
379
+ attr_reader :name
380
+
381
+ def initialize(name, options)
382
+ @name = name
383
+ options.each do |option, value|
384
+ self.class.define_method(option.to_sym) do
385
+ return value
386
+
387
+ end
388
+ end
389
+ end
390
+
391
+ def inspect
392
+ # Bleh
393
+ end
15
394
  end
16
- class Set
17
- attr_reader :filename
18
- def initialize(cfg_path)
19
- @filename = cfg_path
20
- @config = YAML.load_file(@filename)
395
+ class CommandOption
396
+ def initialize(option, value)
21
397
  end
22
398
  end
23
399
  end