kamaze-project 1.0.0
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/.yardopts +18 -0
- data/bin/plop +5 -0
- data/lib/kamaze-project.rb +39 -0
- data/lib/kamaze/project.rb +155 -0
- data/lib/kamaze/project/boot/core_ext.rb +16 -0
- data/lib/kamaze/project/boot/listen.rb +38 -0
- data/lib/kamaze/project/concern.rb +13 -0
- data/lib/kamaze/project/concern/cli.rb +53 -0
- data/lib/kamaze/project/concern/cli/with_exit_on_failure.rb +36 -0
- data/lib/kamaze/project/concern/env.rb +63 -0
- data/lib/kamaze/project/concern/helper.rb +20 -0
- data/lib/kamaze/project/concern/mode.rb +19 -0
- data/lib/kamaze/project/concern/observable.rb +132 -0
- data/lib/kamaze/project/concern/sh.rb +91 -0
- data/lib/kamaze/project/concern/tasks.rb +55 -0
- data/lib/kamaze/project/concern/tools.rb +27 -0
- data/lib/kamaze/project/config.rb +58 -0
- data/lib/kamaze/project/core_ext/object.rb +27 -0
- data/lib/kamaze/project/core_ext/pp.rb +28 -0
- data/lib/kamaze/project/debug.rb +136 -0
- data/lib/kamaze/project/dsl.rb +16 -0
- data/lib/kamaze/project/dsl/definition.rb +43 -0
- data/lib/kamaze/project/dsl/setup.rb +11 -0
- data/lib/kamaze/project/helper.rb +63 -0
- data/lib/kamaze/project/helper/inflector.rb +44 -0
- data/lib/kamaze/project/helper/project.rb +34 -0
- data/lib/kamaze/project/helper/project/config.rb +25 -0
- data/lib/kamaze/project/observable.rb +20 -0
- data/lib/kamaze/project/observer.rb +37 -0
- data/lib/kamaze/project/resources/Vagrantfile +128 -0
- data/lib/kamaze/project/resources/config/tools.yml +15 -0
- data/lib/kamaze/project/struct.rb +34 -0
- data/lib/kamaze/project/tasks/cs.rb +23 -0
- data/lib/kamaze/project/tasks/cs/control.rb +17 -0
- data/lib/kamaze/project/tasks/cs/correct.rb +17 -0
- data/lib/kamaze/project/tasks/cs/pre_commit.rb +66 -0
- data/lib/kamaze/project/tasks/doc.rb +21 -0
- data/lib/kamaze/project/tasks/doc/watch.rb +41 -0
- data/lib/kamaze/project/tasks/gem.rb +14 -0
- data/lib/kamaze/project/tasks/gem/build.rb +34 -0
- data/lib/kamaze/project/tasks/gem/compile.rb +30 -0
- data/lib/kamaze/project/tasks/gem/gemspec.rb +20 -0
- data/lib/kamaze/project/tasks/gem/install.rb +32 -0
- data/lib/kamaze/project/tasks/gem/push.rb +27 -0
- data/lib/kamaze/project/tasks/misc/gitignore.rb +29 -0
- data/lib/kamaze/project/tasks/shell.rb +17 -0
- data/lib/kamaze/project/tasks/sources.rb +6 -0
- data/lib/kamaze/project/tasks/sources/license.rb +35 -0
- data/lib/kamaze/project/tasks/test.rb +16 -0
- data/lib/kamaze/project/tasks/vagrant.rb +71 -0
- data/lib/kamaze/project/tasks/version/edit.rb +16 -0
- data/lib/kamaze/project/tools.rb +18 -0
- data/lib/kamaze/project/tools/base_tool.rb +55 -0
- data/lib/kamaze/project/tools/console.rb +48 -0
- data/lib/kamaze/project/tools/console/output.rb +120 -0
- data/lib/kamaze/project/tools/console/output/buffer.rb +48 -0
- data/lib/kamaze/project/tools/gemspec.rb +33 -0
- data/lib/kamaze/project/tools/gemspec/builder.rb +99 -0
- data/lib/kamaze/project/tools/gemspec/concern.rb +13 -0
- data/lib/kamaze/project/tools/gemspec/concern/reading.rb +49 -0
- data/lib/kamaze/project/tools/gemspec/packager.rb +67 -0
- data/lib/kamaze/project/tools/gemspec/packer.rb +89 -0
- data/lib/kamaze/project/tools/gemspec/packer/command.rb +143 -0
- data/lib/kamaze/project/tools/gemspec/reader.rb +70 -0
- data/lib/kamaze/project/tools/gemspec/reader/decorator.rb +78 -0
- data/lib/kamaze/project/tools/gemspec/writer.rb +127 -0
- data/lib/kamaze/project/tools/gemspec/writer/dep_gen.rb +61 -0
- data/lib/kamaze/project/tools/gemspec/writer/dependency.rb +104 -0
- data/lib/kamaze/project/tools/git.rb +95 -0
- data/lib/kamaze/project/tools/git/hooks.rb +66 -0
- data/lib/kamaze/project/tools/git/hooks/base_hook.rb +33 -0
- data/lib/kamaze/project/tools/git/hooks/pre_commit.rb +81 -0
- data/lib/kamaze/project/tools/git/status.rb +101 -0
- data/lib/kamaze/project/tools/git/status/decorator.rb +39 -0
- data/lib/kamaze/project/tools/git/status/file.rb +180 -0
- data/lib/kamaze/project/tools/git/status/files_array.rb +39 -0
- data/lib/kamaze/project/tools/git/status/index.rb +77 -0
- data/lib/kamaze/project/tools/git/status/worktree.rb +19 -0
- data/lib/kamaze/project/tools/git/util.rb +35 -0
- data/lib/kamaze/project/tools/licenser.rb +197 -0
- data/lib/kamaze/project/tools/packager.rb +86 -0
- data/lib/kamaze/project/tools/packager/filesystem.rb +178 -0
- data/lib/kamaze/project/tools/packager/filesystem/operator.rb +83 -0
- data/lib/kamaze/project/tools/packager/filesystem/operator/utils.rb +77 -0
- data/lib/kamaze/project/tools/process_locker.rb +106 -0
- data/lib/kamaze/project/tools/rspec.rb +115 -0
- data/lib/kamaze/project/tools/rubocop.rb +128 -0
- data/lib/kamaze/project/tools/rubocop/arguments.rb +19 -0
- data/lib/kamaze/project/tools/rubocop/config.rb +43 -0
- data/lib/kamaze/project/tools/shell.rb +85 -0
- data/lib/kamaze/project/tools/vagrant.rb +182 -0
- data/lib/kamaze/project/tools/vagrant/composer.rb +88 -0
- data/lib/kamaze/project/tools/vagrant/composer/file.rb +79 -0
- data/lib/kamaze/project/tools/vagrant/remote.rb +79 -0
- data/lib/kamaze/project/tools/vagrant/shell.rb +102 -0
- data/lib/kamaze/project/tools/vagrant/writer.rb +81 -0
- data/lib/kamaze/project/tools/yardoc.rb +75 -0
- data/lib/kamaze/project/tools/yardoc/file.rb +55 -0
- data/lib/kamaze/project/tools/yardoc/watchable.rb +70 -0
- data/lib/kamaze/project/tools/yardoc/watcher.rb +106 -0
- data/lib/kamaze/project/tools_provider.rb +161 -0
- data/lib/kamaze/project/tools_provider/resolver.rb +42 -0
- data/lib/kamaze/project/version.rb +104 -0
- data/lib/kamaze/project/version.yml +17 -0
- metadata +321 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: d3d3de9a01cef1fcc14728ff56abe9d82b60d7e6039e5610c1e043fcf653b2e9
|
|
4
|
+
data.tar.gz: 28434374dfe48306f3c76ba3ddbe2ebb6e4cee676296eabc5d4622953ff20acc
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 3f02d01bd1800a1eb8bd6b2da00739039963e132237c1ab18fd5d37286f5a420527c334b038674f94984bbab41b4d6984524343e9b364dcbdfbbaac03f91f531
|
|
7
|
+
data.tar.gz: ffc864e04d8bd36bf4b145f9c643dec12bee52f2361faacbc137210c9659e9dbbd40934611f4a42f7a65e04061eb03d45a0e0399968a576a388d96a5c8ba17f4
|
data/.yardopts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# vim: ft=sh
|
|
2
|
+
|
|
3
|
+
lib/**/*.rb \
|
|
4
|
+
--no-progress \
|
|
5
|
+
--markup-provider 'redcarpet' \
|
|
6
|
+
--markup 'markdown' \
|
|
7
|
+
--charset 'utf-8' \
|
|
8
|
+
--protected --private --embed-mixins \
|
|
9
|
+
--tag type:'type' --hide-tag 'type' \
|
|
10
|
+
--readme README.md \
|
|
11
|
+
--exclude 'lib/kamaze/project/tasks/.*' \
|
|
12
|
+
--exclude 'lib/kamaze/project/boot/.*' \
|
|
13
|
+
--exclude '_flymake\\.rb$' \
|
|
14
|
+
--exclude '/\\.#'
|
|
15
|
+
|
|
16
|
+
# Local Variables:
|
|
17
|
+
# mode: sh
|
|
18
|
+
# End:
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
|
|
4
|
+
# License GPLv3+: GNU GPL version 3 or later
|
|
5
|
+
# <http://www.gnu.org/licenses/gpl.html>.
|
|
6
|
+
# This is free software: you are free to change and redistribute it.
|
|
7
|
+
# There is NO WARRANTY, to the extent permitted by law.
|
|
8
|
+
|
|
9
|
+
$LOAD_PATH.unshift(__dir__)
|
|
10
|
+
|
|
11
|
+
lock = Dir.chdir("#{__dir__}/..") do
|
|
12
|
+
[['gems.rb', 'gems.locked'], ['Gemfile', 'Gemfile.lock']]
|
|
13
|
+
.map { |m| Dir.glob(m).size >= 2 }
|
|
14
|
+
.include?(true)
|
|
15
|
+
end
|
|
16
|
+
mode = (ENV['PROJECT_MODE'] || lock ? 'development' : 'production').to_sym
|
|
17
|
+
|
|
18
|
+
if lock
|
|
19
|
+
require 'rubygems'
|
|
20
|
+
require 'bundler/setup'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
if lock and :development == mode
|
|
24
|
+
require 'yaml'
|
|
25
|
+
|
|
26
|
+
unless YAML.safe_load(ENV['BOOTSNAP_DISABLE'].to_s)
|
|
27
|
+
require 'bootsnap'
|
|
28
|
+
|
|
29
|
+
Bootsnap.setup(
|
|
30
|
+
cache_dir: "#{__dir__}/../cache",
|
|
31
|
+
development_mode: true,
|
|
32
|
+
load_path_cache: true,
|
|
33
|
+
autoload_paths_cache: false,
|
|
34
|
+
disable_trace: true,
|
|
35
|
+
compile_cache_iseq: true,
|
|
36
|
+
compile_cache_yaml: true
|
|
37
|
+
)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
|
|
4
|
+
# License GPLv3+: GNU GPL version 3 or later
|
|
5
|
+
# <http://www.gnu.org/licenses/gpl.html>.
|
|
6
|
+
# This is free software: you are free to change and redistribute it.
|
|
7
|
+
# There is NO WARRANTY, to the extent permitted by law.
|
|
8
|
+
|
|
9
|
+
require 'pathname'
|
|
10
|
+
|
|
11
|
+
# Base module (almost a namespace)
|
|
12
|
+
module Kamaze
|
|
13
|
+
# rubocop:disable Style/Documentation
|
|
14
|
+
|
|
15
|
+
class Project
|
|
16
|
+
module Concern
|
|
17
|
+
[nil, :env, :mode, :helper,
|
|
18
|
+
:tasks, :tools].each do |req|
|
|
19
|
+
require_relative "project/concern/#{req}".gsub(%r{/$}, '')
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
require_relative 'project/version'
|
|
24
|
+
|
|
25
|
+
VERSION = Version.new.freeze
|
|
26
|
+
|
|
27
|
+
# @see Kamaze::Project::Version
|
|
28
|
+
# @return [Object]
|
|
29
|
+
def version
|
|
30
|
+
subject.const_get('VERSION')
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# rubocop:enable Style/Documentation
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Base namespace
|
|
38
|
+
module Kamaze
|
|
39
|
+
class << self
|
|
40
|
+
include Project::Concern::Helper
|
|
41
|
+
|
|
42
|
+
# Get an instance of project
|
|
43
|
+
#
|
|
44
|
+
# @return [Kamaze::Project]
|
|
45
|
+
def project(&block)
|
|
46
|
+
helper.get(:project).setup(&block)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Represent a project
|
|
52
|
+
#
|
|
53
|
+
# Sample of use:
|
|
54
|
+
#
|
|
55
|
+
# ```ruby
|
|
56
|
+
# Kamaze.project do |c|
|
|
57
|
+
# c.subject = Kamaze::Project
|
|
58
|
+
# c.name = :'kamaze-project'
|
|
59
|
+
# c.tasks = [ :doc, :gem ]
|
|
60
|
+
# end
|
|
61
|
+
# ```
|
|
62
|
+
class Kamaze::Project
|
|
63
|
+
include Concern::Mode
|
|
64
|
+
include Concern::Helper
|
|
65
|
+
include Concern::Tasks
|
|
66
|
+
include Concern::Tools
|
|
67
|
+
|
|
68
|
+
# Project name
|
|
69
|
+
#
|
|
70
|
+
# @return [Symbol]
|
|
71
|
+
attr_reader :name
|
|
72
|
+
|
|
73
|
+
# Project subject, main class
|
|
74
|
+
#
|
|
75
|
+
# @return [Class]
|
|
76
|
+
attr_reader :subject
|
|
77
|
+
|
|
78
|
+
class << self
|
|
79
|
+
include Concern::Env
|
|
80
|
+
|
|
81
|
+
# Load "env file" + ruby files from ``boot`` directory
|
|
82
|
+
#
|
|
83
|
+
# @return [self]
|
|
84
|
+
def boot
|
|
85
|
+
env_load
|
|
86
|
+
|
|
87
|
+
Dir.glob("#{__dir__}/project/boot/*.rb").each do |bootable|
|
|
88
|
+
require_relative bootable
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
self
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def initialize(&block)
|
|
96
|
+
self.class.boot
|
|
97
|
+
|
|
98
|
+
if block
|
|
99
|
+
config = helper.get('project/config')
|
|
100
|
+
yield(config)
|
|
101
|
+
config.configure(self)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
self.name ||= ENV.fetch('PROJECT_NAME')
|
|
105
|
+
self.subject ||= subject!
|
|
106
|
+
|
|
107
|
+
self.tools.freeze
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# @return [Pathname]
|
|
111
|
+
def path(*args)
|
|
112
|
+
pwd.join(*args)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Load project
|
|
116
|
+
#
|
|
117
|
+
# @return [self]
|
|
118
|
+
def load!
|
|
119
|
+
tasks_load!
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# @return [Pathname]
|
|
123
|
+
def pwd
|
|
124
|
+
::Pathname.new(Dir.pwd)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
protected
|
|
128
|
+
|
|
129
|
+
alias gem_name name
|
|
130
|
+
|
|
131
|
+
# Set name
|
|
132
|
+
def name=(name)
|
|
133
|
+
@name = name.to_s.empty? ? nil : name.to_s.to_sym
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# Set subject
|
|
137
|
+
#
|
|
138
|
+
# @param [Class] subject
|
|
139
|
+
def subject=(subject)
|
|
140
|
+
unless subject.is_a?(Class)
|
|
141
|
+
# @todo raise error
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
@subject = subject
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Main class (subject of project)
|
|
148
|
+
#
|
|
149
|
+
# @return [Class]
|
|
150
|
+
def subject!
|
|
151
|
+
resolvable = name.to_s.tr('-', '/')
|
|
152
|
+
|
|
153
|
+
helper.get(:inflector).resolve(resolvable)
|
|
154
|
+
end
|
|
155
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
|
|
4
|
+
# License GPLv3+: GNU GPL version 3 or later
|
|
5
|
+
# <http://www.gnu.org/licenses/gpl.html>.
|
|
6
|
+
# This is free software: you are free to change and redistribute it.
|
|
7
|
+
# There is NO WARRANTY, to the extent permitted by law.
|
|
8
|
+
|
|
9
|
+
{
|
|
10
|
+
pp: proc { ENV['PROJECT_MODE'] == 'development' },
|
|
11
|
+
object: proc { true },
|
|
12
|
+
}.each do |requirement, conditionner|
|
|
13
|
+
next unless conditionner.call
|
|
14
|
+
|
|
15
|
+
require_relative "../core_ext/#{requirement}"
|
|
16
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
|
|
4
|
+
# License GPLv3+: GNU GPL version 3 or later
|
|
5
|
+
# <http://www.gnu.org/licenses/gpl.html>.
|
|
6
|
+
# This is free software: you are free to change and redistribute it.
|
|
7
|
+
# There is NO WARRANTY, to the extent permitted by law.
|
|
8
|
+
|
|
9
|
+
patchable = lambda do
|
|
10
|
+
if Gem::Specification.find_all_by_name('listen').any?
|
|
11
|
+
require 'listen'
|
|
12
|
+
return YAML.safe_load(ENV['SILENCE_DUPLICATE_DIRECTORY_ERRORS'].to_s)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
false
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# rubocop:disable all
|
|
19
|
+
|
|
20
|
+
# @see https://github.com/guard/listen/wiki/Duplicate-directory-errors
|
|
21
|
+
#
|
|
22
|
+
# Listen >=2.8
|
|
23
|
+
# patch to silence duplicate directory errors. USE AT YOUR OWN RISK
|
|
24
|
+
if patchable.call
|
|
25
|
+
if Gem::Version.new(Listen::VERSION) >= Gem::Version.new('2.8.0')
|
|
26
|
+
module Listen
|
|
27
|
+
class Record
|
|
28
|
+
class SymlinkDetector
|
|
29
|
+
def _fail(_, _)
|
|
30
|
+
fail Error, "Don't watch locally-symlinked directory twice"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# rubocop:enable all
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
|
|
4
|
+
# License GPLv3+: GNU GPL version 3 or later
|
|
5
|
+
# <http://www.gnu.org/licenses/gpl.html>.
|
|
6
|
+
# This is free software: you are free to change and redistribute it.
|
|
7
|
+
# There is NO WARRANTY, to the extent permitted by law.
|
|
8
|
+
|
|
9
|
+
require 'kamaze/project'
|
|
10
|
+
|
|
11
|
+
# Namespace for ``Concern``
|
|
12
|
+
module Kamaze::Project::Concern
|
|
13
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
|
|
4
|
+
# License GPLv3+: GNU GPL version 3 or later
|
|
5
|
+
# <http://www.gnu.org/licenses/gpl.html>.
|
|
6
|
+
# This is free software: you are free to change and redistribute it.
|
|
7
|
+
# There is NO WARRANTY, to the extent permitted by law.
|
|
8
|
+
|
|
9
|
+
require_relative '../concern'
|
|
10
|
+
|
|
11
|
+
# Concern for CLI
|
|
12
|
+
#
|
|
13
|
+
# This module provides base methods focused on ``retcode``.
|
|
14
|
+
module Kamaze::Project::Concern::Cli
|
|
15
|
+
|
|
16
|
+
# @!attribute [r] retcode
|
|
17
|
+
# @return [Fixnum] retcode
|
|
18
|
+
|
|
19
|
+
class << self
|
|
20
|
+
def included(base)
|
|
21
|
+
base.class_eval <<-"ACCESSORS", __FILE__, __LINE__ + 1
|
|
22
|
+
protected
|
|
23
|
+
|
|
24
|
+
attr_writer :retcode
|
|
25
|
+
ACCESSORS
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Status code usable to eventually initiates the termination.
|
|
30
|
+
#
|
|
31
|
+
# @return [Fixnum]
|
|
32
|
+
def retcode
|
|
33
|
+
@retcode || Errno::NOERROR::Errno
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Denote execution is a success.
|
|
37
|
+
#
|
|
38
|
+
# @return [Boolean]
|
|
39
|
+
def success?
|
|
40
|
+
Errno::NOERROR::Errno == retcode
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Denote execution is a failure.
|
|
44
|
+
#
|
|
45
|
+
# @return [Boolean]
|
|
46
|
+
def failure?
|
|
47
|
+
!success?
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
alias failed? failure?
|
|
51
|
+
|
|
52
|
+
alias successful? success?
|
|
53
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
|
|
4
|
+
# License GPLv3+: GNU GPL version 3 or later
|
|
5
|
+
# <http://www.gnu.org/licenses/gpl.html>.
|
|
6
|
+
# This is free software: you are free to change and redistribute it.
|
|
7
|
+
# There is NO WARRANTY, to the extent permitted by law.
|
|
8
|
+
|
|
9
|
+
require_relative '../cli'
|
|
10
|
+
|
|
11
|
+
# Concern exit on failure
|
|
12
|
+
#
|
|
13
|
+
# Use ``retcode`` to exit in ``with_exit_on_failure`` blocks.
|
|
14
|
+
#
|
|
15
|
+
# @todo Add (rspec) test and examples
|
|
16
|
+
module Kamaze::Project::Concern::Cli::WithExitOnFailure
|
|
17
|
+
include Kamaze::Project::Concern::Cli
|
|
18
|
+
|
|
19
|
+
protected
|
|
20
|
+
|
|
21
|
+
# Initiates termination by raising ``SystemExit`` exception
|
|
22
|
+
# depending on ``success`` of given block.
|
|
23
|
+
#
|
|
24
|
+
# @yield [Object]
|
|
25
|
+
# @yieldparam [self]
|
|
26
|
+
#
|
|
27
|
+
# @raise [SystemExit]
|
|
28
|
+
# @return [Object]
|
|
29
|
+
def with_exit_on_failure
|
|
30
|
+
result = yield(self)
|
|
31
|
+
|
|
32
|
+
exit(retcode) if failure?
|
|
33
|
+
|
|
34
|
+
result
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
|
|
4
|
+
# License GPLv3+: GNU GPL version 3 or later
|
|
5
|
+
# <http://www.gnu.org/licenses/gpl.html>.
|
|
6
|
+
# This is free software: you are free to change and redistribute it.
|
|
7
|
+
# There is NO WARRANTY, to the extent permitted by law.
|
|
8
|
+
|
|
9
|
+
require_relative '../concern'
|
|
10
|
+
require 'dotenv'
|
|
11
|
+
require 'pathname'
|
|
12
|
+
|
|
13
|
+
# Load dotenv file
|
|
14
|
+
#
|
|
15
|
+
# Storing configuration in the environment is one of the tenets of a
|
|
16
|
+
# twelve-factor app. Anything that is likely to change between
|
|
17
|
+
# deployment environments, such as resource handles for databases or
|
|
18
|
+
# credentials for external services should be extracted
|
|
19
|
+
# from the code into environment variables.
|
|
20
|
+
#
|
|
21
|
+
# @see https://github.com/bkeepers/dotenv
|
|
22
|
+
# @see http://12factor.net/config
|
|
23
|
+
module Kamaze::Project::Concern::Env
|
|
24
|
+
# @!attribute [r] env_loaded
|
|
25
|
+
# @return [Hash] loaded environment
|
|
26
|
+
|
|
27
|
+
class << self
|
|
28
|
+
def included(base)
|
|
29
|
+
base.class_eval <<-"ACCESSORS", __FILE__, __LINE__ + 1
|
|
30
|
+
protected
|
|
31
|
+
|
|
32
|
+
attr_writer :env_loaded
|
|
33
|
+
ACCESSORS
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Loaded environment
|
|
38
|
+
#
|
|
39
|
+
# @return [Hash]
|
|
40
|
+
def env_loaded
|
|
41
|
+
@env_loaded ||= {}
|
|
42
|
+
|
|
43
|
+
@env_loaded
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
protected
|
|
47
|
+
|
|
48
|
+
# Load ``.env`` file (and store result)
|
|
49
|
+
#
|
|
50
|
+
# @todo load different (or additionnal) files depending on env/mode
|
|
51
|
+
#
|
|
52
|
+
# @return [self]
|
|
53
|
+
def env_load(options = {})
|
|
54
|
+
options[:pwd] = ::Pathname.new(options[:pwd] || Dir.pwd).realpath
|
|
55
|
+
options[:file] ||= '.env'
|
|
56
|
+
|
|
57
|
+
[options.fetch(:pwd).join(options.fetch(:file))].each do |file|
|
|
58
|
+
env_loaded.merge!(::Dotenv.load(file))
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
self
|
|
62
|
+
end
|
|
63
|
+
end
|