easol-canvas 0.1.1 → 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.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/lib/canvas/checks/valid_block_schemas_check.rb +72 -0
  3. data/lib/canvas/checks/valid_footer_schema_check.rb +81 -0
  4. data/lib/canvas/checks/valid_json_check.rb +24 -0
  5. data/lib/canvas/checks/valid_liquid_check.rb +1 -1
  6. data/lib/canvas/checks/valid_menu_schema_check.rb +81 -0
  7. data/lib/canvas/constants.rb +12 -0
  8. data/lib/canvas/services/expand_attributes.rb +40 -0
  9. data/lib/canvas/services/fetch_custom_types.rb +27 -0
  10. data/lib/canvas/validators/block_schema.rb +86 -0
  11. data/lib/canvas/validators/footer_schema.rb +29 -0
  12. data/lib/canvas/validators/html.rb +2 -2
  13. data/lib/canvas/validators/json.rb +21 -0
  14. data/lib/canvas/validators/liquid.rb +1 -1
  15. data/lib/canvas/validators/menu_schema.rb +95 -0
  16. data/lib/canvas/validators/schema_attribute.rb +147 -0
  17. data/lib/canvas/validators/schema_attributes/base.rb +104 -0
  18. data/lib/canvas/validators/schema_attributes/color.rb +81 -0
  19. data/lib/canvas/validators/schema_attributes/image.rb +45 -0
  20. data/lib/canvas/validators/schema_attributes/link.rb +51 -0
  21. data/lib/canvas/validators/schema_attributes/number.rb +17 -0
  22. data/lib/canvas/validators/schema_attributes/page.rb +49 -0
  23. data/lib/canvas/validators/schema_attributes/post.rb +49 -0
  24. data/lib/canvas/validators/schema_attributes/product.rb +49 -0
  25. data/lib/canvas/validators/schema_attributes/radio.rb +55 -0
  26. data/lib/canvas/validators/schema_attributes/range.rb +24 -0
  27. data/lib/canvas/validators/schema_attributes/select.rb +59 -0
  28. data/lib/canvas/validators/schema_attributes/variant.rb +49 -0
  29. data/lib/canvas/version.rb +1 -1
  30. data/lib/canvas.rb +14 -3
  31. metadata +43 -19
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+
5
+ module Canvas
6
+ module Validator
7
+ class SchemaAttribute
8
+ # :documented:
9
+ # Attribute validations specific to select-type variables.
10
+ class Select < Base
11
+ def validate
12
+ super &&
13
+ ensure_at_least_one_option &&
14
+ ensure_options_are_valid
15
+ end
16
+
17
+ private
18
+
19
+ def permitted_values_for_default_key
20
+ if attribute["options"].is_a?(Array)
21
+ attribute["options"].map { |option|
22
+ option["value"] if option.is_a?(Hash)
23
+ }
24
+ else
25
+ []
26
+ end
27
+ end
28
+
29
+ def required_keys
30
+ super.merge(
31
+ "options" => Array
32
+ )
33
+ end
34
+
35
+ def ensure_at_least_one_option
36
+ return true if attribute["options"].length.positive?
37
+
38
+ @errors << "Must provide at least 1 option for select type variable"
39
+ false
40
+ end
41
+
42
+ def select_option_validate(option)
43
+ option.is_a?(Hash) &&
44
+ option.key?("value") &&
45
+ option.key?("label")
46
+ end
47
+
48
+ def ensure_options_are_valid
49
+ return true if attribute["options"].all? { |option|
50
+ select_option_validate(option)
51
+ }
52
+
53
+ @errors << "All options for select type variable must specify a label and value"
54
+ false
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Canvas
4
+ module Validator
5
+ class SchemaAttribute
6
+ # :documented:
7
+ # Attribute validations specific to variant-type variables.
8
+ class Variant < Base
9
+ ALLOWED_DEFAULT_VALUES = %w[random].freeze
10
+
11
+ def validate
12
+ super &&
13
+ ensure_default_values_are_valid
14
+ end
15
+
16
+ private
17
+
18
+ def permitted_values_for_default_key
19
+ if attribute["array"]
20
+ Array
21
+ else
22
+ String
23
+ end
24
+ end
25
+
26
+ def ensure_default_values_are_valid
27
+ return true unless attribute.key?("default")
28
+
29
+ if attribute["array"]
30
+ attribute["default"].all? { |value| default_value_is_valid?(value) }
31
+ else
32
+ default_value_is_valid?(attribute["default"])
33
+ end
34
+ end
35
+
36
+ def default_value_is_valid?(value)
37
+ value = value.downcase
38
+ if !ALLOWED_DEFAULT_VALUES.include?(value)
39
+ @errors << "\"default\" for variant-type variables must be "\
40
+ "one of: #{ALLOWED_DEFAULT_VALUES.join(', ')}"
41
+ false
42
+ else
43
+ true
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,3 +1,3 @@
1
1
  module Canvas
2
- VERSION = "0.1.1"
2
+ VERSION = "1.0.0"
3
3
  end
data/lib/canvas.rb CHANGED
@@ -1,17 +1,28 @@
1
1
  require_relative "canvas/version"
2
+ require_relative "canvas/constants"
2
3
  require_relative "canvas/cli"
3
4
  require_relative "canvas/lint"
4
- require_relative "canvas/validators/html"
5
- require_relative "canvas/validators/liquid"
6
5
  require_relative "canvas/check"
7
6
  require_relative "canvas/offense"
8
7
  require_relative "canvas/checks"
9
8
 
10
- Dir[__dir__ + "/canvas/{checks,services}/*.rb"].each { |file| require file }
9
+ # We need to ensure Canvas::Validator::SchemaAttribute::Base is required first
10
+ require_relative "canvas/validators/schema_attributes/base"
11
+
12
+ # The attribute validators need to be required before Canvas::Validator::SchemaAttribute
13
+ attribute_validators = Dir["#{__dir__}/canvas/validators/schema_attributes/*.rb"]
14
+ attribute_validators.each { |file| require file }
15
+
16
+ files = Dir["#{__dir__}/canvas/{checks,services,validators}/*.rb"]
17
+ files.each { |file| require file }
11
18
 
12
19
  Canvas::Checks.register(Canvas::RequiredFilesCheck)
13
20
  Canvas::Checks.register(Canvas::ValidHtmlCheck)
14
21
  Canvas::Checks.register(Canvas::ValidLiquidCheck)
22
+ Canvas::Checks.register(Canvas::ValidBlockSchemasCheck)
23
+ Canvas::Checks.register(Canvas::ValidMenuSchemaCheck)
24
+ Canvas::Checks.register(Canvas::ValidFooterSchemaCheck)
25
+ Canvas::Checks.register(Canvas::ValidJsonCheck)
15
26
 
16
27
  module Canvas
17
28
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easol-canvas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kyle Byrne
@@ -9,64 +9,64 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-05-20 00:00:00.000000000 Z
12
+ date: 2022-05-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ">="
18
+ - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '0'
20
+ version: '1.2'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ">="
25
+ - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '0'
27
+ version: '1.2'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: nokogiri
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - ">="
32
+ - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '0'
34
+ version: '1.13'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ">="
39
+ - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '0'
41
+ version: '1.13'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: cli-ui
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ">="
46
+ - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '0'
48
+ version: '1.5'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ">="
53
+ - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '0'
55
+ version: '1.5'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: liquid
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - ">="
60
+ - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '0'
62
+ version: '5.3'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - ">="
67
+ - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '0'
69
+ version: '5.3'
70
70
  description: |
71
71
  Canvas is a command line tool to help with building themes for Easol.
72
72
  It provides tooling to check theme directories for errors and to make sure
@@ -83,16 +83,40 @@ files:
83
83
  - lib/canvas/check.rb
84
84
  - lib/canvas/checks.rb
85
85
  - lib/canvas/checks/required_files_check.rb
86
+ - lib/canvas/checks/valid_block_schemas_check.rb
87
+ - lib/canvas/checks/valid_footer_schema_check.rb
86
88
  - lib/canvas/checks/valid_html_check.rb
89
+ - lib/canvas/checks/valid_json_check.rb
87
90
  - lib/canvas/checks/valid_liquid_check.rb
91
+ - lib/canvas/checks/valid_menu_schema_check.rb
88
92
  - lib/canvas/cli.rb
93
+ - lib/canvas/constants.rb
89
94
  - lib/canvas/lint.rb
90
95
  - lib/canvas/offense.rb
96
+ - lib/canvas/services/expand_attributes.rb
97
+ - lib/canvas/services/fetch_custom_types.rb
91
98
  - lib/canvas/services/front_matter_extractor.rb
99
+ - lib/canvas/validators/block_schema.rb
100
+ - lib/canvas/validators/footer_schema.rb
92
101
  - lib/canvas/validators/html.rb
102
+ - lib/canvas/validators/json.rb
93
103
  - lib/canvas/validators/liquid.rb
104
+ - lib/canvas/validators/menu_schema.rb
105
+ - lib/canvas/validators/schema_attribute.rb
106
+ - lib/canvas/validators/schema_attributes/base.rb
107
+ - lib/canvas/validators/schema_attributes/color.rb
108
+ - lib/canvas/validators/schema_attributes/image.rb
109
+ - lib/canvas/validators/schema_attributes/link.rb
110
+ - lib/canvas/validators/schema_attributes/number.rb
111
+ - lib/canvas/validators/schema_attributes/page.rb
112
+ - lib/canvas/validators/schema_attributes/post.rb
113
+ - lib/canvas/validators/schema_attributes/product.rb
114
+ - lib/canvas/validators/schema_attributes/radio.rb
115
+ - lib/canvas/validators/schema_attributes/range.rb
116
+ - lib/canvas/validators/schema_attributes/select.rb
117
+ - lib/canvas/validators/schema_attributes/variant.rb
94
118
  - lib/canvas/version.rb
95
- homepage:
119
+ homepage: https://rubygems.org/gems/easol-canvas
96
120
  licenses:
97
121
  - MIT
98
122
  metadata: {}