ll 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ll.rb +9 -0
- data/lib/ll/checklist.rb +132 -8
- data/lib/ll/step.rb +19 -2
- data/lib/ll/version.rb +19 -1
- data/test/fixtures/checklists/v0.0.2.json +6 -3
- data/test/test_checklist.rb +68 -0
- data/test/test_helper.rb +20 -0
- data/test/test_ll.rb +11 -0
- data/test/test_step.rb +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 88c6d3677c49c8b6f9977add7a3716bedaae5d2b9b802cc695bdb84312b2069e
|
4
|
+
data.tar.gz: 30b346cce42bce4ad8a63f441be831abb838363ad4ddf9b001cd2f91d1090295
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 85b41f41dcd5e55cfa489302082d8ebe075f6e46a9e29c42dd17f5627a2350783efea37cdb91313ccbef41bb6c226c59e164deeb0d905a0c6c07e2951d79d4bf
|
7
|
+
data.tar.gz: e17e043551d74fe86613b18077a5b89c3ef43a4ec7b39def328c6d886cadd9c090bc05580ab585759b09294666a9890fa1581c8941a8e2793970fb536dcca9c1
|
data/lib/ll.rb
CHANGED
data/lib/ll/checklist.rb
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
class LL::Checklist
|
2
2
|
|
3
|
-
attr_reader :name
|
3
|
+
attr_reader :name,
|
4
|
+
:authority,
|
5
|
+
:title,
|
6
|
+
:description,
|
7
|
+
:identifier,
|
8
|
+
:action_at,
|
9
|
+
:steps,
|
10
|
+
:document_version,
|
11
|
+
:serialization_identifier
|
4
12
|
|
5
13
|
def self.load( dir: )
|
6
14
|
filepaths = Dir.glob(File.join dir, "checklists/*")
|
@@ -9,14 +17,111 @@ class LL::Checklist
|
|
9
17
|
end
|
10
18
|
end
|
11
19
|
|
12
|
-
|
13
|
-
|
20
|
+
# Maybe abstract the versioning here into VV?
|
21
|
+
def initialize document: nil,
|
22
|
+
name: nil,
|
23
|
+
authority: nil
|
14
24
|
@name = name
|
15
25
|
@name ||= "Prototypical"
|
26
|
+
|
27
|
+
@authority = authority
|
28
|
+
@authority ||= LL.default_authority
|
29
|
+
|
30
|
+
@document_version = nil
|
31
|
+
|
32
|
+
self.parse_document! document if document
|
33
|
+
|
34
|
+
yield self if block_given?
|
35
|
+
|
36
|
+
self.reformat! unless self.document_current?
|
37
|
+
end
|
38
|
+
|
39
|
+
def reformat!
|
40
|
+
@document_version = self.current_version
|
41
|
+
|
42
|
+
# Because the same checklist may be serialized multiple times,
|
43
|
+
# by different clients it will get tricky tracing problems, so
|
44
|
+
# we include an identifier that clients should generate, but never
|
45
|
+
# manipulate.
|
46
|
+
@serialization_identifier = Random.identifier
|
47
|
+
|
48
|
+
self.steps
|
49
|
+
end
|
50
|
+
|
51
|
+
def document_current?
|
52
|
+
return nil if @document_version.nil?
|
53
|
+
|
54
|
+
@document_version == self.current_version
|
55
|
+
end
|
56
|
+
|
57
|
+
def parse_document! document
|
58
|
+
if document.is_a? String
|
59
|
+
document = document.parse_json
|
60
|
+
elsif document.is_a? Hash
|
61
|
+
else
|
62
|
+
fail TypeError, "Checklist expects string or hash document"
|
63
|
+
end
|
64
|
+
|
65
|
+
document.symbolize_keys!
|
66
|
+
|
67
|
+
attrs = %i[ meta
|
68
|
+
title
|
69
|
+
description
|
70
|
+
identifier
|
71
|
+
serialization_identifier
|
72
|
+
action_at
|
73
|
+
steps ]
|
74
|
+
|
75
|
+
self.set_attrs_via attrs, document: document
|
76
|
+
end
|
77
|
+
|
78
|
+
def current_version
|
79
|
+
LL::VERSION
|
80
|
+
end
|
81
|
+
|
82
|
+
def supported_versions
|
83
|
+
%w[ 0.0.2
|
84
|
+
0.0.3 ]
|
16
85
|
end
|
17
86
|
|
18
|
-
def
|
19
|
-
|
87
|
+
def kind
|
88
|
+
"checklist"
|
89
|
+
end
|
90
|
+
|
91
|
+
def meta= meta
|
92
|
+
meta.symbolize_keys!
|
93
|
+
meta_authority = meta.fetch :authority
|
94
|
+
meta_version = meta.fetch :version
|
95
|
+
meta_kind = meta.fetch :kind
|
96
|
+
meta_format = meta.fetch :format
|
97
|
+
|
98
|
+
authority_ok = meta_authority == self.authority
|
99
|
+
message = "Document authority `#{meta_authority}` unknown."
|
100
|
+
fail message unless authority_ok
|
101
|
+
|
102
|
+
format_ok = meta_format == "json"
|
103
|
+
message = \
|
104
|
+
"Document format `#{meta_format}` not supported, must be `json`."
|
105
|
+
fail message unless format_ok
|
106
|
+
|
107
|
+
version_ok = meta_version.one_of?( *supported_versions )
|
108
|
+
message = "Document version `#{meta_version}` not supported."
|
109
|
+
fail message unless version_ok
|
110
|
+
|
111
|
+
kind_ok = meta_kind == "checklist"
|
112
|
+
message = \
|
113
|
+
"Document kind `#{meta_kind}` not supported, must be `checklist`."
|
114
|
+
fail message unless kind_ok
|
115
|
+
|
116
|
+
@document_version = meta_version
|
117
|
+
end
|
118
|
+
|
119
|
+
def steps= steps
|
120
|
+
fail "Expecting steps to be an array." unless steps.is_a? Array
|
121
|
+
@steps = steps.map do |step|
|
122
|
+
fail "Expecting step to be a hash." unless step.is_a? Hash
|
123
|
+
LL::Step.new step, document_version: @document_version
|
124
|
+
end
|
20
125
|
end
|
21
126
|
|
22
127
|
def to_s
|
@@ -24,11 +129,30 @@ class LL::Checklist
|
|
24
129
|
end
|
25
130
|
|
26
131
|
def to_h
|
27
|
-
|
132
|
+
message = \
|
133
|
+
"Checklist in indeterminate state. This should never happen."
|
134
|
+
fail message unless self.document_current?
|
135
|
+
|
136
|
+
format = "hash"
|
137
|
+
meta = { version: self.current_version,
|
138
|
+
kind: self.kind,
|
139
|
+
authority: self.authority,
|
140
|
+
format: format }
|
141
|
+
|
142
|
+
{ meta: meta,
|
143
|
+
title: self.title,
|
144
|
+
description: self.description,
|
145
|
+
identifier: self.identifier,
|
146
|
+
serialization_identifier: self.serialization_identifier,
|
147
|
+
action_at: self.action_at,
|
148
|
+
steps: self.steps }
|
28
149
|
end
|
29
150
|
|
30
|
-
def
|
31
|
-
|
151
|
+
def vv_json
|
152
|
+
format = "json"
|
153
|
+
response = self.to_h
|
154
|
+
response[:meta][:format] = format
|
155
|
+
response.vv_json
|
32
156
|
end
|
33
157
|
|
34
158
|
end
|
data/lib/ll/step.rb
CHANGED
@@ -12,10 +12,12 @@ class LL::Step
|
|
12
12
|
:action_at,
|
13
13
|
:version
|
14
14
|
|
15
|
-
def initialize json_document
|
15
|
+
def initialize json_document, document_version:
|
16
16
|
# TODO: Auto convert dasherized to underscore
|
17
17
|
data = json_document.to_h.symbolize_keys
|
18
18
|
|
19
|
+
@document_version = document_version || LL::VERSION
|
20
|
+
|
19
21
|
@title = data[:title]
|
20
22
|
@description = data[:description]
|
21
23
|
@action = data[:action]
|
@@ -27,7 +29,6 @@ class LL::Step
|
|
27
29
|
@via = data[:via]
|
28
30
|
@os = data[:via]
|
29
31
|
@with = data[:via]
|
30
|
-
@doc_version = data[:doc_version]
|
31
32
|
@action_at = data[:action_at]
|
32
33
|
end
|
33
34
|
|
@@ -36,4 +37,20 @@ class LL::Step
|
|
36
37
|
raise NotImplementedError
|
37
38
|
end
|
38
39
|
|
40
|
+
def to_h
|
41
|
+
{ title: title,
|
42
|
+
description: description,
|
43
|
+
action: action,
|
44
|
+
kind: kind,
|
45
|
+
status: status,
|
46
|
+
identifier: identifier,
|
47
|
+
by: by,
|
48
|
+
via: via,
|
49
|
+
action_at: action_at }
|
50
|
+
end
|
51
|
+
|
52
|
+
def vv_json
|
53
|
+
self.to_h.vv_json
|
54
|
+
end
|
55
|
+
|
39
56
|
end
|
data/lib/ll/version.rb
CHANGED
@@ -1,3 +1,21 @@
|
|
1
1
|
module LL
|
2
|
-
|
2
|
+
|
3
|
+
VERSION = '0.0.4'
|
4
|
+
Version = VERSION
|
5
|
+
|
6
|
+
def version
|
7
|
+
LL::VERSION
|
8
|
+
end
|
9
|
+
module_function :version
|
10
|
+
|
11
|
+
def Version
|
12
|
+
LL::VERSION
|
13
|
+
end
|
14
|
+
module_function :Version
|
15
|
+
|
16
|
+
def VERSION
|
17
|
+
LL::VERSION
|
18
|
+
end
|
19
|
+
module_function :VERSION
|
20
|
+
|
3
21
|
end
|
@@ -1,10 +1,13 @@
|
|
1
|
-
{"
|
1
|
+
{"meta": { "authority": "github.com/zachaysan/ll",
|
2
|
+
"kind": "checklist",
|
3
|
+
"format": "json",
|
4
|
+
"version": "0.0.2" },
|
5
|
+
"title": "Gem Tasks",
|
2
6
|
"description": "Finicky gem build details",
|
3
7
|
"action": "create",
|
4
|
-
"kind": "checklist",
|
5
8
|
"identifier": "vux25anby00000000000000000",
|
9
|
+
"serialization_identifier": "zcte2zaw23xkyvcbpz2vc94i9qbi3xnkgtfxzvld",
|
6
10
|
"action_at": "2019-02-21T19:42:06Z",
|
7
|
-
"format": "json-v0.0.2",
|
8
11
|
"steps": [ { "title": "Bump version",
|
9
12
|
"description": null,
|
10
13
|
"action": "create",
|
data/test/test_checklist.rb
CHANGED
@@ -9,4 +9,72 @@ class ChecklistTest < Minitest::Test
|
|
9
9
|
assert_equal expected_string, checklist.to_s
|
10
10
|
end
|
11
11
|
|
12
|
+
def test_current_version_is_supported
|
13
|
+
checklist = LL::Checklist.new
|
14
|
+
assert_includes checklist.supported_versions,
|
15
|
+
checklist.current_version
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_loads_latest_checklist
|
19
|
+
fixture = LL::Fixtures.previous_checklist
|
20
|
+
|
21
|
+
former_serialization_identifier = serialization_identifier = \
|
22
|
+
"zcte2zaw23xkyvcbpz2vc94i9qbi3xnkgtfxzvld"
|
23
|
+
|
24
|
+
checklist = LL::Checklist.new document: fixture do | checklist |
|
25
|
+
refute checklist.document_current?
|
26
|
+
expected_version = "0.0.2"
|
27
|
+
assert_equal expected_version, checklist.document_version
|
28
|
+
assert_equal serialization_identifier,
|
29
|
+
checklist.serialization_identifier
|
30
|
+
end
|
31
|
+
|
32
|
+
expected_version = LL::VERSION
|
33
|
+
assert_equal expected_version, checklist.document_version
|
34
|
+
|
35
|
+
json = checklist.vv_json
|
36
|
+
parsed_json = JSON.parse json
|
37
|
+
|
38
|
+
|
39
|
+
expected_authority = "github.com/zachaysan/ll"
|
40
|
+
expected_kind = "checklist"
|
41
|
+
expected_format = "json"
|
42
|
+
expected_version = LL::VERSION
|
43
|
+
|
44
|
+
assert_includes parsed_json, "meta"
|
45
|
+
meta = parsed_json["meta"]
|
46
|
+
|
47
|
+
assert_equal expected_authority, meta["authority"]
|
48
|
+
assert_equal expected_kind, meta["kind"]
|
49
|
+
assert_equal expected_format, meta["format"]
|
50
|
+
assert_equal expected_version, meta["version"]
|
51
|
+
|
52
|
+
expected_title = "Gem Tasks"
|
53
|
+
expected_description = "Finicky gem build details"
|
54
|
+
expected_identifier = "vux25anby00000000000000000"
|
55
|
+
expected_action_at = "2019-02-21T19:42:06Z"
|
56
|
+
|
57
|
+
assert_equal expected_title, parsed_json["title"]
|
58
|
+
assert_equal expected_description, parsed_json["description"]
|
59
|
+
assert_equal expected_identifier, parsed_json["identifier"]
|
60
|
+
assert_equal expected_action_at, parsed_json["action_at"]
|
61
|
+
|
62
|
+
refute_equal former_serialization_identifier,
|
63
|
+
parsed_json["serialization_identifier"]
|
64
|
+
|
65
|
+
assert_includes parsed_json, "steps"
|
66
|
+
steps = parsed_json["steps"]
|
67
|
+
|
68
|
+
expected_count = 3
|
69
|
+
assert_equal expected_count, steps.count
|
70
|
+
|
71
|
+
expected_title = "Bump version"
|
72
|
+
assert_equal expected_title, steps.first["title"]
|
73
|
+
|
74
|
+
expected_title = "Tweet about upcoming release"
|
75
|
+
assert_equal expected_title, steps.second["title"]
|
76
|
+
|
77
|
+
assert_nil steps.third["title"]
|
78
|
+
end
|
79
|
+
|
12
80
|
end
|
data/test/test_helper.rb
CHANGED
@@ -5,3 +5,23 @@ begin
|
|
5
5
|
require "pry"
|
6
6
|
rescue LoadError
|
7
7
|
end
|
8
|
+
|
9
|
+
class LL::Fixtures
|
10
|
+
|
11
|
+
def self.read_checklist version
|
12
|
+
File.read File.join("test", "fixtures", "checklists", version)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Keep these staggered
|
16
|
+
def self.checklist
|
17
|
+
self.read_checklist "v0.0.2.json"
|
18
|
+
end
|
19
|
+
def self.previous_checklist
|
20
|
+
self.read_checklist "v0.0.2.json"
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.latest_checklist
|
24
|
+
self.checklist
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
data/test/test_ll.rb
CHANGED
@@ -14,4 +14,15 @@ class LLTest < Minitest::Test
|
|
14
14
|
assert String.vv_included?
|
15
15
|
end
|
16
16
|
|
17
|
+
def test_version
|
18
|
+
refute_nil LL::VERSION
|
19
|
+
|
20
|
+
assert_equal LL::VERSION, LL::Version
|
21
|
+
assert_equal LL::VERSION, LL::version
|
22
|
+
|
23
|
+
assert_equal LL::VERSION, LL.VERSION
|
24
|
+
assert_equal LL::VERSION, LL.Version
|
25
|
+
assert_equal LL::VERSION, LL.version
|
26
|
+
end
|
27
|
+
|
17
28
|
end
|
data/test/test_step.rb
CHANGED
@@ -17,7 +17,7 @@ class StepTest < Minitest::Test
|
|
17
17
|
"doc_version": "0.0.2",
|
18
18
|
"action_at": "2019-02-21T19:41:06Z"}.to_json
|
19
19
|
|
20
|
-
step = LL::Step.new step_input
|
20
|
+
step = LL::Step.new step_input, document_version: nil
|
21
21
|
expected_status = "boot"
|
22
22
|
assert_equal expected_status, step.status
|
23
23
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ll
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zach Aysan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: vv
|
@@ -106,8 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
106
|
- !ruby/object:Gem::Version
|
107
107
|
version: '0'
|
108
108
|
requirements: []
|
109
|
-
|
110
|
-
rubygems_version: 2.7.7
|
109
|
+
rubygems_version: 3.0.3
|
111
110
|
signing_key:
|
112
111
|
specification_version: 4
|
113
112
|
summary: Listy List
|