job_spec 0.1.0 → 0.2.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 +4 -4
- data/README.md +1 -1
- data/lib/job_spec/cli.rb +35 -6
- data/lib/job_spec/render_as_markdown.rb +22 -0
- data/lib/job_spec/role.rb +53 -0
- data/lib/job_spec/version.rb +1 -1
- data/lib/job_spec.rb +2 -45
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f22f45a0f55d70cc8e2654637dd04c308373118
|
4
|
+
data.tar.gz: c9f013e894133a601a24ec387aa7e2c5fb4ea0ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df1d6ddf2fa1dfff30e7bc6d0ce272a48e4bca7f445b0b88e86fec78d4bb5809201a82ba6635c715234cfd68af04c16f5131387e724e4280e8da69daffcd7b84
|
7
|
+
data.tar.gz: b339882289260efc2e022c32a1c6673be2f29d0f21a1e55902bd4dacf521857ca6d47ed4ea34560b60b40f51784a7a3241597db5505db4764fb9df83125c4c0c
|
data/README.md
CHANGED
@@ -23,7 +23,7 @@ end
|
|
23
23
|
Save that into a file `roles/engineer.rb`. Now from the command line in the directory that contains the `roles/` directory:
|
24
24
|
|
25
25
|
```
|
26
|
-
jobspec build roles
|
26
|
+
jobspec build --in=roles --out=dist
|
27
27
|
```
|
28
28
|
|
29
29
|
And you will see your job roles printed out.
|
data/lib/job_spec/cli.rb
CHANGED
@@ -3,12 +3,21 @@ require 'job_spec'
|
|
3
3
|
|
4
4
|
module JobSpec
|
5
5
|
class CLI < Thor
|
6
|
-
desc 'build
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
puts '
|
11
|
-
|
6
|
+
desc 'build', 'build roles in DIR out to DIR'
|
7
|
+
option :in, required: true
|
8
|
+
option :out, required: true
|
9
|
+
def build
|
10
|
+
puts "Looking in '#{options[:in]}' for roles... "
|
11
|
+
role_files(options[:in]).each do |f|
|
12
|
+
require f
|
13
|
+
end
|
14
|
+
|
15
|
+
FileUtils.mkdir_p(path_relative_to_pwd(options[:out]))
|
16
|
+
Role.definitions.each do |role|
|
17
|
+
puts "Saving #{role.name} to #{safe_role_out_path(role)}..."
|
18
|
+
File.write(safe_role_out_path(role), RenderAsMarkdown.new(role).render)
|
19
|
+
end
|
20
|
+
puts 'Finished.'
|
12
21
|
end
|
13
22
|
|
14
23
|
map %w(--version -v) => :version
|
@@ -19,3 +28,23 @@ module JobSpec
|
|
19
28
|
end
|
20
29
|
end
|
21
30
|
end
|
31
|
+
|
32
|
+
def path_relative_to_pwd(path)
|
33
|
+
File.expand_path(path, Dir.pwd)
|
34
|
+
end
|
35
|
+
|
36
|
+
def path_glob(dir)
|
37
|
+
path_relative_to_pwd(File.join(dir, '**/*.rb'))
|
38
|
+
end
|
39
|
+
|
40
|
+
def role_files(dir)
|
41
|
+
Dir[path_glob(dir)]
|
42
|
+
end
|
43
|
+
|
44
|
+
def safe_role_name(role)
|
45
|
+
"#{role.name.downcase.gsub(/[^a-z]+/, '')}.md"
|
46
|
+
end
|
47
|
+
|
48
|
+
def safe_role_out_path(role)
|
49
|
+
File.join(path_relative_to_pwd(options[:out]), safe_role_name(role))
|
50
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module JobSpec
|
2
|
+
class RenderAsMarkdown
|
3
|
+
attr_reader :role
|
4
|
+
|
5
|
+
def initialize(role)
|
6
|
+
@role = role
|
7
|
+
end
|
8
|
+
|
9
|
+
def render
|
10
|
+
markdown = []
|
11
|
+
markdown << "# #{role.name}"
|
12
|
+
markdown << role.description unless role.description.nil?
|
13
|
+
|
14
|
+
role.expectations.map(&:values).each do |(expectation, description)|
|
15
|
+
markdown << "## #{expectation.capitalize}"
|
16
|
+
markdown << description.capitalize unless description.nil?
|
17
|
+
end
|
18
|
+
|
19
|
+
markdown.join("\n\n")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module JobSpec
|
2
|
+
class Role
|
3
|
+
def self.definition(name, &block)
|
4
|
+
@definitions ||= []
|
5
|
+
@definitions << new(name, &block)
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.definitions
|
9
|
+
@definitions
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(name, &block)
|
13
|
+
@name = name
|
14
|
+
@expectations = []
|
15
|
+
instance_eval(&block) if block_given?
|
16
|
+
end
|
17
|
+
|
18
|
+
def name
|
19
|
+
@name
|
20
|
+
end
|
21
|
+
|
22
|
+
def description(description = nil)
|
23
|
+
@description = @description || description
|
24
|
+
end
|
25
|
+
|
26
|
+
def salary(range = nil)
|
27
|
+
@salary = @salary || range
|
28
|
+
end
|
29
|
+
|
30
|
+
def include(role_expectations)
|
31
|
+
@expectations.concat(role_expectations.to_a)
|
32
|
+
end
|
33
|
+
|
34
|
+
def expected(expectation, description = nil)
|
35
|
+
@expectations << { expectation: expectation, description: description }
|
36
|
+
end
|
37
|
+
|
38
|
+
def expectations
|
39
|
+
@expectations
|
40
|
+
end
|
41
|
+
|
42
|
+
class Expectations
|
43
|
+
def self.expected(expectation)
|
44
|
+
@role ||= Role.new(self.class.name)
|
45
|
+
@role.expected(expectation)
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.to_a
|
49
|
+
@role.expectations
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/job_spec/version.rb
CHANGED
data/lib/job_spec.rb
CHANGED
@@ -1,45 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
def self.definition(name, &block)
|
4
|
-
@definitions ||= []
|
5
|
-
@definitions << new(name, &block)
|
6
|
-
end
|
7
|
-
|
8
|
-
def self.definitions
|
9
|
-
@definitions
|
10
|
-
end
|
11
|
-
|
12
|
-
def initialize(name, &block)
|
13
|
-
@name = name
|
14
|
-
@expectations = []
|
15
|
-
instance_eval(&block) if block_given?
|
16
|
-
end
|
17
|
-
|
18
|
-
def salary(range = nil)
|
19
|
-
@salary = @salary || range
|
20
|
-
end
|
21
|
-
|
22
|
-
def include(role_expectations)
|
23
|
-
@expectations.concat(role_expectations.to_a)
|
24
|
-
end
|
25
|
-
|
26
|
-
def expected(expectation)
|
27
|
-
@expectations << expectation
|
28
|
-
end
|
29
|
-
|
30
|
-
def to_a
|
31
|
-
@expectations
|
32
|
-
end
|
33
|
-
|
34
|
-
class Expectations
|
35
|
-
def self.expected(expectation)
|
36
|
-
@role ||= Role.new(self.class.name)
|
37
|
-
@role.expected(expectation)
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.to_a
|
41
|
-
@role.to_a
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
1
|
+
require 'job_spec/role'
|
2
|
+
require 'job_spec/render_as_markdown'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: job_spec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luke Morton
|
@@ -83,6 +83,8 @@ files:
|
|
83
83
|
- job_spec.gemspec
|
84
84
|
- lib/job_spec.rb
|
85
85
|
- lib/job_spec/cli.rb
|
86
|
+
- lib/job_spec/render_as_markdown.rb
|
87
|
+
- lib/job_spec/role.rb
|
86
88
|
- lib/job_spec/version.rb
|
87
89
|
homepage: https://github.com/madetech/job_spec
|
88
90
|
licenses:
|