dugway 1.0.6 → 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9b9aebab8254f2fde9e8d76861a518a9732344e71cf6cca8ee936e5aba942ea4
4
- data.tar.gz: 21bb8d6c9afe28bb55c657611be93ffe022ef9f1ffb57ac8a588203b03b5df05
3
+ metadata.gz: 8390ef193bc160dedfcd4745df7b5b96e2bb702b10bd3cd9794cd7f951edc03d
4
+ data.tar.gz: bbba535b7d2c34823c50bdac3f83418ad74091063fc3cd6957fe1f70a36a0145
5
5
  SHA512:
6
- metadata.gz: 2a1b8d896e55523ac33f0bc89b79beaa7dc41cde66035d30e924df536fadd2126ec9a8f657032850fe05f580d7d5cf221cb61a3520b5c58d35fcb6046a543c33
7
- data.tar.gz: 997bfb03509c4c315bc56d619a5deba8135e1e4e6a5cb68a75b7233f91f6c6061f1c86bb2230522a657d609240ca8810971f1a795b383924ae0a72d06ca8b8a2
6
+ metadata.gz: ecc5b434330a537eba7f403815975fbff7fbec5d1ab3256fc324392fdde90bd8228cd741897517ba92464a0a2023cf870d579ddd2fd192a27667b5d3d4098c9a
7
+ data.tar.gz: 2557195c107df99b5ae72cfd027d6a4c43463b4d2c39b8a2d5022ddf4bdeab5d2c3fe34efdba8fff6bb5b5777fcdc39cf0ba5f14ff7c9f0c31dda507d081ab01
data/lib/dugway/theme.rb CHANGED
@@ -98,13 +98,82 @@ module Dugway
98
98
 
99
99
  @errors << 'Missing theme name in source/settings.json' if name.blank?
100
100
  @errors << 'Invalid theme version in source/settings.json (ex: 1.0.3)' unless !!(version =~ /\d+\.\d+\.\d+/)
101
- @errors << 'Missing images in source/images' if image_files.empty?
101
+
102
+ if settings['preset_styles']
103
+ validate_preview
104
+ if settings['preset_styles']['presets']
105
+ settings['preset_styles']['presets'].each do |preset|
106
+ validate_preset_styles(preset)
107
+ validate_style_references(preset)
108
+ end
109
+ else
110
+ @errors << "Missing presets"
111
+ end
112
+ end
102
113
 
103
114
  @errors.empty?
104
115
  end
105
116
 
106
117
  private
107
118
 
119
+ def validate_preview
120
+ preview = settings['preset_styles']['preview']
121
+ if preview
122
+ %w[title_font body_font text_color background_color].each do |key|
123
+ @errors << "Missing #{key} in preview" unless preview[key]
124
+ end
125
+ else
126
+ @errors << "Missing preview in preset_styles"
127
+ end
128
+ end
129
+
130
+ def validate_preset_styles(preset)
131
+ @errors << 'Preset is missing group_name' unless preset['group_name'].is_a?(String)
132
+ @errors << 'Preset is missing styles' unless preset['styles'].is_a?(Array)
133
+
134
+ preset['styles'].each do |style|
135
+ @errors << 'Style is missing style_name' unless style['style_name'].is_a?(String)
136
+
137
+ if style['fonts'].is_a?(Hash) && !style['fonts'].empty?
138
+ style['fonts'].each_value do |font|
139
+ @errors << 'Font value should be a string' unless font.is_a?(String)
140
+ end
141
+ else
142
+ @errors << 'Style is missing fonts'
143
+ end
144
+
145
+ if style['colors'].is_a?(Hash) && !style['colors'].empty?
146
+ style['colors'].each do |key, color|
147
+ @errors << 'Invalid color format' unless color =~ /^#[0-9A-Fa-f]{6}$/
148
+ end
149
+ else
150
+ @errors << 'Style is missing colors'
151
+ end
152
+ end
153
+
154
+ @errors << 'Style names should be unique' unless preset['styles'].map { |style| style['style_name'] }.uniq.length == preset['styles'].length
155
+ end
156
+
157
+ def validate_style_references(preset)
158
+ ['fonts', 'colors'].each do |key_type|
159
+ validate_keys(preset, settings[key_type], key_type)
160
+ end
161
+ end
162
+
163
+ def validate_keys(preset, settings, key_type)
164
+ variables = settings.map { |item| item['variable'] }
165
+
166
+ preset['styles'].each do |style|
167
+ style_keys = style[key_type].keys
168
+
169
+ extra_keys = style_keys - variables
170
+ missing_keys = variables - style_keys
171
+
172
+ @errors << "Extra #{key_type} keys: #{extra_keys.join(', ')}" unless extra_keys.empty?
173
+ @errors << "Missing #{key_type} keys: #{missing_keys.join(', ')}" unless missing_keys.empty?
174
+ end
175
+ end
176
+
108
177
  def source_dir
109
178
  Dugway.source_dir
110
179
  end
@@ -1,3 +1,3 @@
1
1
  module Dugway
2
- VERSION = "1.0.6"
2
+ VERSION = "1.0.7"
3
3
  end
@@ -38,13 +38,50 @@
38
38
  "variable": "header_font",
39
39
  "label": "Header Font",
40
40
  "default": "Helvetica"
41
- },
41
+ },
42
42
  {
43
43
  "variable": "font",
44
44
  "label": "Font",
45
45
  "default": "Georgia"
46
46
  }
47
47
  ],
48
+ "preset_styles": {
49
+ "preview": {
50
+ "title_font": "header_font",
51
+ "body_font": "font",
52
+ "text_color": "link_color",
53
+ "background_color": "background_color"
54
+ },
55
+ "presets": [
56
+ {
57
+ "group_name": "Classic",
58
+ "styles": [
59
+ {
60
+ "style_name": "Classic #1",
61
+ "fonts": {
62
+ "header_font": "DM Sans",
63
+ "font": "DM Sans"
64
+ },
65
+ "colors": {
66
+ "background_color": "#FFFFFF",
67
+ "link_color": "#111111"
68
+ }
69
+ },
70
+ {
71
+ "style_name": "Classic #2",
72
+ "fonts": {
73
+ "header_font": "Lora",
74
+ "font": "Roboto"
75
+ },
76
+ "colors": {
77
+ "background_color": "#F7F7F7",
78
+ "link_color": "#222222"
79
+ }
80
+ }
81
+ ]
82
+ }
83
+ ]
84
+ },
48
85
  "colors": [
49
86
  {
50
87
  "variable": "background_color",
@@ -151,7 +151,7 @@ describe Dugway::Theme do
151
151
  end
152
152
 
153
153
  describe "#font_files" do
154
- it "shoud return an array of all font files" do
154
+ it "should return an array of all font files" do
155
155
  theme.font_files.should include("fonts/icons.ttf", "fonts/icons.woff")
156
156
  end
157
157
  end
@@ -210,28 +210,15 @@ describe Dugway::Theme do
210
210
  end
211
211
  end
212
212
 
213
- describe "when missing at least one image" do
214
- before(:each) do
215
- theme.stub(:image_files) { [] }
216
- end
217
-
218
- it "should not be valid" do
219
- theme.valid?.should be(false)
220
- theme.errors.size.should == 1
221
- theme.errors.first.should == 'Missing images in source/images'
222
- end
223
- end
224
-
225
213
  describe "when there are several errors" do
226
214
  before(:each) do
227
215
  theme.stub(:name) { nil }
228
216
  theme.stub(:version) { nil }
229
- theme.stub(:image_files) { [] }
230
217
  end
231
218
 
232
219
  it "should return all of them" do
233
220
  theme.valid?.should be(false)
234
- theme.errors.size.should == 3
221
+ theme.errors.size.should == 2
235
222
  end
236
223
  end
237
224
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dugway
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Big Cartel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-12 00:00:00.000000000 Z
11
+ date: 2024-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -577,7 +577,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
577
577
  - !ruby/object:Gem::Version
578
578
  version: '0'
579
579
  requirements: []
580
- rubygems_version: 3.0.3.1
580
+ rubygems_version: 3.2.3
581
581
  signing_key:
582
582
  specification_version: 4
583
583
  summary: Easily build and test Big Cartel themes.