dugway 1.0.6 → 1.0.8
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/dugway/liquid/filters/instant_checkout_filter.rb +67 -0
- data/lib/dugway/liquifier.rb +2 -0
- data/lib/dugway/store.rb +4 -0
- data/lib/dugway/theme.rb +70 -1
- data/lib/dugway/version.rb +1 -1
- data/spec/fixtures/theme/settings.json +38 -1
- data/spec/units/dugway/theme_spec.rb +2 -15
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4c29856362aa6781513881924c2ffdab292d4a1a3a401c91d11e4ef1f7389a43
|
4
|
+
data.tar.gz: 8676516fc4b26c415f78e31558f1df5814dddb55c80221e0507f5793343f8d2e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7ffa6f534fcb3d51f14de4168906a2b7dbfab08689ac8d61136df08ffa848458d94fdbdacf17db43611d40c3ebf208759d3ca49a10781d58e02b53c740f295c
|
7
|
+
data.tar.gz: 32186c12dd6696cf6b41904c253a414cb25a7af2f19f0ff45e29c5dbc7212bb09703bac52b0ba9e9216bce4b645af30a62d77de9d96e3c0b5f075758425d5b45
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Dugway
|
2
|
+
module Filters
|
3
|
+
module InstantCheckoutFilter
|
4
|
+
DIV_STYLES = [
|
5
|
+
"border-radius: 4px",
|
6
|
+
"font-size: 20px",
|
7
|
+
"font-weight: bold"
|
8
|
+
].freeze
|
9
|
+
|
10
|
+
LINK_STYLES = [
|
11
|
+
"border-radius: 4px",
|
12
|
+
"height: 100%",
|
13
|
+
"display: flex",
|
14
|
+
"padding: 10px",
|
15
|
+
"align-items: center",
|
16
|
+
"justify-content: center"
|
17
|
+
].freeze
|
18
|
+
|
19
|
+
def instant_checkout_button(account, a=nil, b=nil)
|
20
|
+
account = @context.registers[:account]
|
21
|
+
theme, height = sanitize_options(a, b)
|
22
|
+
|
23
|
+
return nil unless account.instant_checkout?
|
24
|
+
|
25
|
+
div_styles = generate_div_styles(theme, height)
|
26
|
+
link_styles = generate_link_styles(theme)
|
27
|
+
|
28
|
+
%(<div id="instant-checkout-button" style="#{ div_styles }"><a href="https://www.bigcartel.com/resources/help/article/apple-pay" style="#{ link_styles }">Instant Checkout</a></div>)
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def sanitize_options(a, b)
|
34
|
+
theme = height = nil
|
35
|
+
|
36
|
+
[a, b].each do |value|
|
37
|
+
theme = value if /\A(dark|light(?:-outline)?)\z/.match(value)
|
38
|
+
height = value if /\A\d+(px|em|\%)\z/.match(value)
|
39
|
+
end
|
40
|
+
|
41
|
+
return theme, height
|
42
|
+
end
|
43
|
+
|
44
|
+
def generate_div_styles(theme, height)
|
45
|
+
styles = DIV_STYLES.dup
|
46
|
+
styles << "border: 1px solid black" if theme == "light-outline"
|
47
|
+
styles << "height: #{ height }" if height
|
48
|
+
styles << colors(theme)
|
49
|
+
styles.join("; ")
|
50
|
+
end
|
51
|
+
|
52
|
+
def generate_link_styles(theme)
|
53
|
+
styles = LINK_STYLES.dup
|
54
|
+
styles << colors(theme)
|
55
|
+
styles.join("; ")
|
56
|
+
end
|
57
|
+
|
58
|
+
def colors(theme)
|
59
|
+
if theme =~ /\Alight/
|
60
|
+
"background-color: white; color: black"
|
61
|
+
else
|
62
|
+
"background-color: black; color: white"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
data/lib/dugway/liquifier.rb
CHANGED
@@ -7,6 +7,7 @@ Liquid::Template.register_filter(Dugway::Filters::CoreFilters)
|
|
7
7
|
Liquid::Template.register_filter(Dugway::Filters::DefaultPagination)
|
8
8
|
Liquid::Template.register_filter(Dugway::Filters::UrlFilters)
|
9
9
|
Liquid::Template.register_filter(Dugway::Filters::FontFilters)
|
10
|
+
Liquid::Template.register_filter(Dugway::Filters::InstantCheckoutFilter)
|
10
11
|
|
11
12
|
Liquid::Template.register_tag(:get, Dugway::Tags::Get)
|
12
13
|
Liquid::Template.register_tag(:paginate, Dugway::Tags::Paginate)
|
@@ -28,6 +29,7 @@ module Dugway
|
|
28
29
|
registers = shared_registers
|
29
30
|
registers[:category] = variables[:category]
|
30
31
|
registers[:artist] = variables[:artist]
|
32
|
+
registers[:account] = Dugway.store
|
31
33
|
|
32
34
|
if errors = variables.delete(:errors)
|
33
35
|
shared_context['errors'] << errors
|
data/lib/dugway/store.rb
CHANGED
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
|
-
|
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
|
data/lib/dugway/version.rb
CHANGED
@@ -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 "
|
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 ==
|
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.
|
4
|
+
version: 1.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Big Cartel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-02-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -482,6 +482,7 @@ files:
|
|
482
482
|
- lib/dugway/liquid/filters/core_filters.rb
|
483
483
|
- lib/dugway/liquid/filters/default_pagination.rb
|
484
484
|
- lib/dugway/liquid/filters/font_filters.rb
|
485
|
+
- lib/dugway/liquid/filters/instant_checkout_filter.rb
|
485
486
|
- lib/dugway/liquid/filters/url_filters.rb
|
486
487
|
- lib/dugway/liquid/filters/util_filters.rb
|
487
488
|
- lib/dugway/liquid/tags/get.rb
|
@@ -577,7 +578,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
577
578
|
- !ruby/object:Gem::Version
|
578
579
|
version: '0'
|
579
580
|
requirements: []
|
580
|
-
rubygems_version: 3.
|
581
|
+
rubygems_version: 3.2.3
|
581
582
|
signing_key:
|
582
583
|
specification_version: 4
|
583
584
|
summary: Easily build and test Big Cartel themes.
|