dugway 0.12.1 → 1.0.2

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: 027c6ffe1a9e8833dc30179327049c7aa2607712df02610c5a2667828432a84b
4
- data.tar.gz: b2c2e63788189f94637c8d977e969337b31b5922728e3119c522a39ae4f10002
3
+ metadata.gz: 3abee167dcd274b478a4e4b968547a267d43d02e61738e157dc15f90a8df7c78
4
+ data.tar.gz: 72c64774f1783f2c545570a44affe4a58592b92486b4c66d242d390239eee8ca
5
5
  SHA512:
6
- metadata.gz: 6ef192dcc976bf691486856528970cfee3e746aa82086730ee7104ce0abd5174f574a8dd199cf20cd1f72943c524ac0dba26f894c21946f051e4783f94402c64
7
- data.tar.gz: df22ae822edb930f937152806a74389ccd253ec7902834101c42cd8996822ab61bdd12f86dcb3c16d47efb5d91060a459dccb9ae33cbf5ea6c829da6406d3c89
6
+ metadata.gz: 95c00a871fdb4e1d8c66b51a14378bdd93e03b28a92a610f26858116918168c53c0af1963228a5c8dae5de7bbe618f11136b6744da392020fc9e6cd5d1617790
7
+ data.tar.gz: 1f5081eb808765394c6e4e1dfd285adab2a966cee94554f1bddcb2495cdc5f5d1d639396aa314da122d8343475e061e5a36c63c8c7e509b61d8efd8823cb9d61
data/README.md CHANGED
@@ -182,7 +182,7 @@ Run your theme in any browser by starting the Dugway server:
182
182
  dugway server
183
183
  ```
184
184
 
185
- By default this will serve your theme at http://0.0.0.0:9292. You can then stop
185
+ By default this will serve your theme at http://127.0.0.1:9292/. You can then stop
186
186
  the server by hitting CTRL+C.
187
187
 
188
188
  ### Pow
@@ -36,7 +36,7 @@ Gem::Specification.new do |s|
36
36
  s.add_dependency('thor', '~> 0.20.3')
37
37
  s.add_dependency('rubyzip', '~> 0.9.9')
38
38
  s.add_dependency('uglifier', '~> 4.1')
39
- s.add_dependency('thin', '~> 1.7.2')
39
+ s.add_dependency('thin', '~> 1.8.0')
40
40
  s.add_dependency('bigcartel-theme-fonts')
41
41
  s.add_dependency('bigcartel-currency-locales')
42
42
 
@@ -31,7 +31,7 @@ module Dugway
31
31
  end
32
32
 
33
33
  def shipping
34
- {
34
+ {
35
35
  'enabled' => false,
36
36
  'amount' => 0.0,
37
37
  'strict' => false,
@@ -40,14 +40,14 @@ module Dugway
40
40
  end
41
41
 
42
42
  def tax
43
- {
43
+ {
44
44
  'enabled' => false,
45
45
  'amount' => 0.0
46
46
  }
47
47
  end
48
48
 
49
49
  def discount
50
- {
50
+ {
51
51
  'enabled' => false,
52
52
  'pending' => false,
53
53
  'amount' => 0.0
@@ -22,14 +22,9 @@
22
22
  <label for="message">Message</label>
23
23
  {{ contact | contact_input: 'message' }}
24
24
  </li>
25
- <li>
26
- <label for="captcha">Spam check</label>
27
- <p>Please enter the characters from the image.</p>
28
- <div>{{ contact.captcha }}</div>
29
- {{ contact | contact_input: 'captcha' }}
30
- </li>
31
25
  <li>
32
26
  <button type="submit" name="submit" title="Send us an email">Send</button>
27
+ <div>{{ contact.recaptcha }}</div>
33
28
  </li>
34
29
  </ul>
35
30
  </form>
@@ -12,25 +12,19 @@ module Dugway
12
12
  'All fields are required'
13
13
  elsif param_does_not_match(:email, email_format)
14
14
  'Invalid email address'
15
- elsif param_does_not_match(:captcha, captcha_format)
16
- 'Spam check was incorrect'
17
15
  end
18
16
  end
19
17
 
20
18
  private
21
19
 
22
20
  def required_fields
23
- [ :name, :email, :subject, :message, :captcha ]
21
+ [ :name, :email, :subject, :message ]
24
22
  end
25
23
 
26
24
  def email_format
27
25
  /^([^@\s]+)@((?:[-a-zA-Z0-9]+\.)+[a-zA-Z]{2,})$/
28
26
  end
29
27
 
30
- def captcha_format
31
- /^rQ9pC$/i
32
- end
33
-
34
28
  def param_does_not_match(param_name, regex)
35
29
  !(params[param_name.to_sym] =~ regex)
36
30
  end
@@ -42,7 +42,7 @@ module Dugway
42
42
 
43
43
  nil
44
44
  end
45
-
45
+
46
46
  def method_missing(method, *args, &block)
47
47
  before_method(method.to_s)
48
48
  end
@@ -21,6 +21,15 @@ module Dugway
21
21
  %{<img id="captcha_image" src="https://s3.amazonaws.com/bigcartel/captcha/28e3d1288cbc70c0cd1a2d10845f8e11e1a90d14.png">}
22
22
  end
23
23
 
24
+ def recaptcha
25
+ @recaptcha ||= begin
26
+ html = "This site is protected by reCAPTCHA and the Google "
27
+ html += '<a href="https://policies.google.com/privacy">Privacy Policy</a> and '
28
+ html += '<a href="https://policies.google.com/terms">Terms of Service</a> apply.'
29
+ html
30
+ end
31
+ end
32
+
24
33
  def sent
25
34
  request.path == '/contact' && request.post? && errors.blank?
26
35
  end
@@ -4,6 +4,10 @@ module Dugway
4
4
  def all
5
5
  @all ||= source.select { |page| page['category'] == 'custom' }
6
6
  end
7
+
8
+ def cart
9
+ @cart ||= source.find { |page| page['permalink'] == 'cart' }
10
+ end
7
11
  end
8
12
  end
9
13
  end
@@ -68,7 +68,7 @@ module Dugway
68
68
 
69
69
  def search_terms
70
70
  params[:search]
71
- end
71
+ end
72
72
 
73
73
  def page
74
74
  if @context['internal'].present? && @context['internal'].has_key?('page') # has_key? here because 'page' will be nil for get blocks
@@ -7,22 +7,22 @@ module Dugway
7
7
 
8
8
  prev_label = prev_label.blank? ? paginate['previous']['title'] : prev_label
9
9
  if paginate['previous']['is_link']
10
- html << %(<a class="previous" href="#{ paginate['previous']['url'] }">#{ prev_label }</a>)
10
+ html << %(<a class="previous" href="#{ paginate['previous']['url'] }" aria-label="Go to previous page">#{ prev_label }</a>)
11
11
  else
12
12
  html << %(<span class="previous disabled">#{ prev_label }</span>)
13
13
  end
14
14
 
15
15
  paginate['parts'].each do |part|
16
16
  if part['is_link']
17
- html << %(<a href="#{ part['url'] }">#{ part['title'] }</a>)
17
+ html << %(<a href="#{ part['url'] }" aria-label="Go to page #{part['title']}">#{ part['title'] }</a>)
18
18
  else
19
- html << %(<span class="#{ part['title'] == paginate['current_page'].to_s ? 'current' : 'gap' }">#{ part['title'] }</span>)
19
+ html << build_non_link_span(part, paginate)
20
20
  end
21
21
  end
22
22
 
23
23
  next_label = next_label.blank? ? paginate['next']['title'] : next_label
24
24
  if paginate['next']['is_link']
25
- html << %(<a class="next" href="#{ paginate['next']['url'] }">#{ next_label }</a>)
25
+ html << %(<a class="next" href="#{ paginate['next']['url'] }" aria-label="Go to next page">#{ next_label }</a>)
26
26
  else
27
27
  html << %(<span class="next disabled">#{ next_label }</span>)
28
28
  end
@@ -30,6 +30,24 @@ module Dugway
30
30
  html << %(</div>)
31
31
  }.join(' ')
32
32
  end
33
+
34
+ private
35
+
36
+ def build_non_link_span(part, paginate)
37
+ is_current = is_current_page?(part, paginate)
38
+ span_class = is_current ? 'current' : 'gap'
39
+
40
+ span = %(<span )
41
+ span << %(class="#{span_class}" )
42
+ span << %(aria-label="Current page, page #{part['title']}") if is_current
43
+ span << %(>)
44
+ span << %(#{ part['title'] }</span>)
45
+ span
46
+ end
47
+
48
+ def is_current_page?(part, paginate)
49
+ part['title'] == paginate['current_page'].to_s
50
+ end
33
51
  end
34
52
  end
35
53
  end
@@ -28,7 +28,7 @@ module Dugway
28
28
  if name.is_a?(Drops::ThemeDrop)
29
29
  '/theme.js'
30
30
  elsif name == 'api'
31
- 'http://cache0.bigcartel.com/api/1/api.usd.js'
31
+ 'http://cache0.bigcartel.com/api/5/api.usd.js'
32
32
  else
33
33
  name
34
34
  end
@@ -1,3 +1,3 @@
1
1
  module Dugway
2
- VERSION = "0.12.1"
2
+ VERSION = "1.0.2"
3
3
  end
@@ -16,18 +16,12 @@ feature 'Contact form' do
16
16
  expect(page).to have_content('Invalid email address')
17
17
  end
18
18
 
19
- scenario 'with an invalid captcha' do
20
- submit_contact_form(:captcha => 'blah')
21
- expect(page).to have_content('Spam check was incorrect')
22
- end
23
-
24
19
  def submit_contact_form(fields={})
25
20
  fields.reverse_merge!(
26
21
  :name => 'Joe',
27
22
  :email => 'joe@example.com',
28
23
  :subject => 'Testing',
29
24
  :message => 'Hi there',
30
- :captcha => 'rQ9pC'
31
25
  )
32
26
 
33
27
  visit '/contact'
@@ -36,7 +30,6 @@ feature 'Contact form' do
36
30
  fill_in 'Email', :with => fields[:email]
37
31
  fill_in 'Subject', :with => fields[:subject]
38
32
  fill_in 'Message', :with => fields[:message]
39
- fill_in 'Spam check', :with => fields[:captcha]
40
33
 
41
34
  click_button 'Send'
42
35
  end
@@ -50,7 +50,7 @@ feature 'Page rendering' do
50
50
  visit '/contact'
51
51
  expect(page).to have_content('Dugway') # layout.html
52
52
  expect(page).to have_content('Contact')
53
- expect(page).to have_content('Spam check')
53
+ expect(page).to have_content('protected by reCAPTCHA')
54
54
  end
55
55
 
56
56
  scenario 'maintenance.html' do
@@ -1 +1 @@
1
- {"category":"custom","content":"<p>We're really cool!</p>","permalink":"about-us","name":"About Us","id":95821979,"url":"/about-us"}
1
+ {"category":"custom","content":"<p>We're really cool!</p>","permalink":"about-us","name":"About Us","id":95821979,"url":"/about-us"}
@@ -22,14 +22,9 @@
22
22
  <label for="message">Message</label>
23
23
  {{ contact | contact_input: 'message' }}
24
24
  </li>
25
- <li>
26
- <label for="captcha">Spam check</label>
27
- <p>Please enter the characters from the image.</p>
28
- <div>{{ contact.captcha }}</div>
29
- {{ contact | contact_input: 'captcha' }}
30
- </li>
31
25
  <li>
32
26
  <button type="submit" name="submit" title="Send us an email">Send</button>
27
+ <div>{{ contact.recaptcha }}</div>
33
28
  </li>
34
29
  </ul>
35
30
  </form>
@@ -11,7 +11,6 @@ describe Dugway::ContactFormValidator do
11
11
  :email => "name@example.com",
12
12
  :subject => "subject",
13
13
  :message => "message",
14
- :captcha => "rQ9pc",
15
14
  }
16
15
  end
17
16
 
@@ -36,21 +35,11 @@ describe Dugway::ContactFormValidator do
36
35
  assert_required_fields_error
37
36
  end
38
37
 
39
- it "returns an error for a missing captcha" do
40
- validator.params[:captcha] = " "
41
- assert_required_fields_error
42
- end
43
-
44
38
  it "returns an error for invalid email format" do
45
39
  validator.params[:email] = "foo-at-foo-dot-net"
46
40
  expect(validator.error_message).to eq "Invalid email address"
47
41
  end
48
42
 
49
- it "returns an error for incorrect captcha" do
50
- validator.params[:captcha] = "oops"
51
- expect(validator.error_message).to eq "Spam check was incorrect"
52
- end
53
-
54
43
  def assert_required_fields_error
55
44
  expect(validator.error_message).to eql "All fields are required"
56
45
  end
@@ -13,7 +13,7 @@ describe Dugway::Drops::ContactDrop do
13
13
  Rack::MockRequest::DEFAULT_ENV.update({
14
14
  'PATH_INFO' => '/contact'
15
15
  })}
16
-
16
+
17
17
  let(:request) { Dugway::Request.new(env) }
18
18
 
19
19
  let(:errors) {
@@ -96,6 +96,12 @@ describe Dugway::Drops::ContactDrop do
96
96
  end
97
97
  end
98
98
 
99
+ describe "#recaptcha" do
100
+ it "returns the recaptcha branding text" do
101
+ contact.recaptcha.should == %{This site is protected by reCAPTCHA and the Google <a href="https://policies.google.com/privacy">Privacy Policy</a> and <a href="https://policies.google.com/terms">Terms of Service</a> apply.}
102
+ end
103
+ end
104
+
99
105
  describe "#sent" do
100
106
  it "should return false before the form has been sent" do
101
107
  contact.sent.should be(false)
@@ -1,7 +1,18 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Dugway::Drops::PagesDrop do
4
- let(:pages) { Dugway::Drops::PagesDrop.new(Dugway.store.pages.map { |p| Dugway::Drops::PageDrop.new(p) }) }
4
+ let(:pages) do
5
+ Dugway::Drops::PagesDrop.new(
6
+ Dugway.store.pages.map do |p|
7
+ case p["permalink"]
8
+ when "cart"
9
+ Dugway::Drops::CartDrop.new(p)
10
+ else
11
+ Dugway::Drops::PageDrop.new(p)
12
+ end
13
+ end
14
+ )
15
+ end
5
16
 
6
17
  describe "#all" do
7
18
  it "should return an array of all pages" do
@@ -15,6 +26,14 @@ describe Dugway::Drops::PagesDrop do
15
26
  end
16
27
  end
17
28
 
29
+ describe "#cart" do
30
+ it "returns the cart drop instead of the cart class instance" do
31
+ cart = pages.cart
32
+ cart.should be_an_instance_of(Dugway::Drops::CartDrop)
33
+ cart.name.should == 'Cart'
34
+ end
35
+ end
36
+
18
37
  describe "#permalink" do
19
38
  it "should return the page by permalink" do
20
39
  page = pages.contact
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: 0.12.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Big Cartel
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-06 00:00:00.000000000 Z
11
+ date: 2020-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -268,14 +268,14 @@ dependencies:
268
268
  requirements:
269
269
  - - "~>"
270
270
  - !ruby/object:Gem::Version
271
- version: 1.7.2
271
+ version: 1.8.0
272
272
  type: :runtime
273
273
  prerelease: false
274
274
  version_requirements: !ruby/object:Gem::Requirement
275
275
  requirements:
276
276
  - - "~>"
277
277
  - !ruby/object:Gem::Version
278
- version: 1.7.2
278
+ version: 1.8.0
279
279
  - !ruby/object:Gem::Dependency
280
280
  name: bigcartel-theme-fonts
281
281
  requirement: !ruby/object:Gem::Requirement
@@ -545,7 +545,7 @@ homepage: https://github.com/bigcartel/dugway
545
545
  licenses:
546
546
  - MIT
547
547
  metadata: {}
548
- post_install_message:
548
+ post_install_message:
549
549
  rdoc_options: []
550
550
  require_paths:
551
551
  - lib
@@ -560,8 +560,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
560
560
  - !ruby/object:Gem::Version
561
561
  version: '0'
562
562
  requirements: []
563
- rubygems_version: 3.0.1
564
- signing_key:
563
+ rubygems_version: 3.0.6
564
+ signing_key:
565
565
  specification_version: 4
566
566
  summary: Easily build and test Big Cartel themes.
567
567
  test_files: