ll 0.0.3 → 0.0.4
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/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
|