critical-path-css-rails 3.0.2 → 3.0.3

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
  SHA1:
3
- metadata.gz: e8a5eefb2a42d4644343a59f2ee368e226c3b8dd
4
- data.tar.gz: 2bff7d859b2f724812835870aa6a6cc5eb3e3135
3
+ metadata.gz: 3e92d5a4e4eb1085188e1dca05213f8504ce59f0
4
+ data.tar.gz: 0f1062681151f332c692501e502de54132639706
5
5
  SHA512:
6
- metadata.gz: bf88d891b4fa2f7ffb6cef4d68aa412a1d31b0cd258030deff4f2be39a97255ff96fa3f3b1015ef398c7add71c98405b8a1eb9bd621a11cad83effcf7845b792
7
- data.tar.gz: 1f34e4d3f2f70e2114b433a574b095b1b6727777eff49cdbf4e1b2b75a974fb738ef64c8f7957f477f29ecc084e6047a470677dd59a40fb7de64d34af827fc29
6
+ metadata.gz: 3fad3f39638e25d2877acc81e8ebf9e6a486d80314426c7dc1a7020a4d12a23b1fc5461d83a4faa7bbf406e7804d06dbd28f1830a60e6c756d6e7088f0c4bf39
7
+ data.tar.gz: 37d31f7976f968c21eb433aaada848e2d64f35fa48d9ea27caa0b1e368922a7dd994966a4e0361a30d0f723fe8f1dda3006cc73e49d459bc969c36649f8dfbe7
@@ -9,12 +9,13 @@ Gem::Specification.new do |gem|
9
9
  gem.summary = 'Critical Path CSS for Rails!'
10
10
  gem.description = 'Only load the CSS you need for the initial viewport in Rails!'
11
11
  gem.license = 'MIT'
12
+ gem.homepage = 'https://rubygems.org/gems/critical-path-css-rails'
12
13
 
13
14
  gem.files = `git ls-files`.split("\n")
14
15
  gem.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
15
16
  gem.require_path = 'lib'
16
17
 
17
- gem.add_development_dependency 'combustion', '~> 1.1.0'
18
+ gem.add_development_dependency 'combustion', '~> 1.1', '>= 1.1.0'
18
19
 
19
20
  gem.extensions = ['ext/npm/extconf.rb']
20
21
  end
@@ -9,10 +9,6 @@ module CriticalPathCss
9
9
  @config['base_url']
10
10
  end
11
11
 
12
- def css_path
13
- @config['css_path']
14
- end
15
-
16
12
  def css_paths
17
13
  @config['css_paths']
18
14
  end
@@ -28,5 +24,9 @@ module CriticalPathCss
28
24
  def penthouse_options
29
25
  @config['penthouse_options'] || {}
30
26
  end
27
+
28
+ def path_for_route(route)
29
+ css_paths[routes.index(route)] || css_paths.first
30
+ end
31
31
  end
32
32
  end
@@ -16,7 +16,7 @@ module CriticalPathCss
16
16
  def fetch_route(route)
17
17
  options = {
18
18
  'url' => @config.base_url + route,
19
- 'css' => fetch_css_path_for_route(route),
19
+ 'css' => @config.path_for_route(route),
20
20
  'width' => 1300,
21
21
  'height' => 900,
22
22
  'timeout' => 30_000,
@@ -51,17 +51,5 @@ module CriticalPathCss
51
51
  end
52
52
  out
53
53
  end
54
-
55
- private
56
-
57
- def fetch_css_path_for_route(route)
58
- index_for_route = @config.routes.index(route)
59
-
60
- if index_for_route && @config.css_paths[index_for_route]
61
- @config.css_paths[index_for_route]
62
- else
63
- @config.css_path
64
- end
65
- end
66
54
  end
67
55
  end
@@ -19,15 +19,12 @@ module CriticalPathCss
19
19
  end
20
20
 
21
21
  def format_css_paths
22
- if config['css_path']
23
- config['css_path'] = format_path(config['css_path'])
24
- config['css_paths'] = []
25
- elsif config['css_paths']
26
- config['css_path'] = ''
27
- config['css_paths'] = config['css_paths'].collect { |path| format_path(path) }
22
+ config['css_paths'] = [config['css_path']] if config['css_path']
23
+
24
+ if config['css_paths']
25
+ config['css_paths'].map! { |path| format_path(path) }
28
26
  else
29
- config['css_path'] = ActionController::Base.helpers.stylesheet_path(config['manifest_name'], host: '')
30
- config['css_paths'] = []
27
+ config['css_paths'] = [ActionController::Base.helpers.stylesheet_path(config['manifest_name'], host: '')]
31
28
  end
32
29
  end
33
30
 
@@ -1,5 +1,5 @@
1
1
  module CriticalPathCSS
2
2
  module Rails
3
- VERSION = '3.0.2'.freeze
3
+ VERSION = '3.0.3'.freeze
4
4
  end
5
5
  end
@@ -0,0 +1,14 @@
1
+ defaults: &defaults
2
+ base_url: http://0.0.0.0:9292
3
+ css_paths:
4
+ - /test.css
5
+ - /test2.css
6
+ routes:
7
+ - /
8
+ - /new_route
9
+
10
+ development:
11
+ <<: *defaults
12
+
13
+ test:
14
+ <<: *defaults
@@ -0,0 +1,11 @@
1
+ defaults: &defaults
2
+ base_url: http://0.0.0.0:9292
3
+ manifest_name: application
4
+ routes:
5
+ - /
6
+
7
+ development:
8
+ <<: *defaults
9
+
10
+ test:
11
+ <<: *defaults
@@ -0,0 +1,15 @@
1
+ defaults: &defaults
2
+ base_url: http://0.0.0.0:9292
3
+ css_paths:
4
+ - /test.css
5
+ - /test2.css
6
+ routes:
7
+ - /
8
+ - /new_route
9
+ - /newer_route
10
+
11
+ development:
12
+ <<: *defaults
13
+
14
+ test:
15
+ <<: *defaults
@@ -0,0 +1,15 @@
1
+ defaults: &defaults
2
+ base_url: http://0.0.0.0:9292
3
+ css_path: /test.css
4
+ css_paths:
5
+ - /test.css
6
+ - /test2.css
7
+ routes:
8
+ - /
9
+ - /new_route
10
+
11
+ development:
12
+ <<: *defaults
13
+
14
+ test:
15
+ <<: *defaults
@@ -0,0 +1,11 @@
1
+ defaults: &defaults
2
+ base_url: http://0.0.0.0:9292
3
+ css_path: /test.css
4
+ routes:
5
+ - /
6
+
7
+ development:
8
+ <<: *defaults
9
+
10
+ test:
11
+ <<: *defaults
@@ -1,27 +1,30 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  RSpec.describe 'CssFetcher' do
4
- let(:subject) { CriticalPathCss::CssFetcher.new(config) }
4
+ subject { CriticalPathCss::CssFetcher.new(config) }
5
+
6
+ let(:base_url) { 'http://0.0.0.0:9292' }
5
7
  let(:response) { ['foo','', OpenStruct.new(exitstatus: 0)] }
6
- let(:routes) { ['/', '/new_route'] }
8
+ let(:routes) { ['/', '/new_route'] }
7
9
  let(:config) do
8
- OpenStruct.new(
9
- base_url: 'http://0.0.0.0:9292',
10
- css_path: css_path,
11
- css_paths: css_paths,
12
- penthouse_options: {},
13
- routes: routes
10
+ CriticalPathCss::Configuration.new(
11
+ OpenStruct.new(
12
+ base_url: base_url,
13
+ css_paths: css_paths,
14
+ penthouse_options: {},
15
+ routes: routes
16
+ )
14
17
  )
15
18
  end
16
19
 
17
20
  describe '#fetch_route' do
18
21
  context 'when a single css_path is configured' do
19
- let(:css_path) { '/test.css' }
20
- let(:css_paths) { [] }
22
+ let(:css_paths) { ['/test.css'] }
21
23
 
22
24
  it 'generates css for the single route' do
23
25
  expect(Open3).to receive(:capture3) do |arg1, arg2, arg3|
24
26
  options = JSON.parse(arg3)
27
+
25
28
  expect(options['css']).to eq '/test.css'
26
29
  end.once.and_return(response)
27
30
 
@@ -32,44 +35,48 @@ RSpec.describe 'CssFetcher' do
32
35
 
33
36
  describe '#fetch' do
34
37
  context 'when a single css_path is configured' do
35
- let(:css_path) { '/test.css' }
36
- let(:css_paths) { [] }
38
+ let(:css_paths) { ['/test.css'] }
37
39
 
38
40
  it 'generates css for each route from the same file' do
39
41
  expect(Open3).to receive(:capture3) do |arg1, arg2, arg3|
40
42
  options = JSON.parse(arg3)
43
+
41
44
  expect(options['css']).to eq '/test.css'
42
45
  end.twice.and_return(response)
46
+
43
47
  subject.fetch
44
48
  end
45
49
  end
46
50
 
47
51
  context 'when multiple css_paths are configured' do
48
- let(:css_path) { '' }
49
52
  let(:css_paths) { ['/test.css', '/test2.css'] }
50
53
 
51
54
  it 'generates css for each route from the respective file' do
52
55
  expect(Open3).to receive(:capture3) do |arg1, arg2, arg3|
53
56
  options = JSON.parse(arg3)
54
- expect(options['css']).to eq '/test.css' if options['url'] == 'http://0.0.0.0:9292/'
55
- expect(options['css']).to eq '/test2.css' if options['url'] == 'http://0.0.0.0:9292/new_route'
57
+
58
+ css_paths.each_with_index do |path, index|
59
+ expect(options['css']).to eq path if options['url'] == "#{base_url}/#{routes[index]}"
60
+ end
56
61
  end.twice.and_return(response)
62
+
57
63
  subject.fetch
58
64
  end
59
65
  end
60
66
 
61
67
  context 'when same css file applies to multiple routes' do
62
- let(:css_path) { '' }
63
68
  let(:css_paths) { ['/test.css', '/test2.css', '/test.css'] }
64
69
  let(:routes) { ['/', '/new_route', '/newer_route'] }
65
70
 
66
71
  it 'generates css for each route from the respective file' do
67
72
  expect(Open3).to receive(:capture3) do |arg1, arg2, arg3|
68
73
  options = JSON.parse(arg3)
69
- expect(options['css']).to eq '/test.css' if options['url'] == 'http://0.0.0.0:9292/'
70
- expect(options['css']).to eq '/test2.css' if options['url'] == 'http://0.0.0.0:9292/new_route'
71
- expect(options['css']).to eq '/test.css' if options['url'] == 'http://0.0.0.0:9292/newer_route'
74
+
75
+ css_paths.each_with_index do |path, index|
76
+ expect(options['css']).to eq path if options['url'] == "#{base_url}/#{routes[index]}"
77
+ end
72
78
  end.thrice.and_return(response)
79
+
73
80
  subject.fetch
74
81
  end
75
82
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  RSpec.describe 'ConfigLoader' do
4
- let(:subject) { CriticalPathCss::Rails::ConfigLoader.new }
4
+ subject { CriticalPathCss::Rails::ConfigLoader.new }
5
5
 
6
6
  describe '#load' do
7
7
  before do
@@ -9,54 +9,15 @@ RSpec.describe 'ConfigLoader' do
9
9
  end
10
10
 
11
11
  context 'when single css_path is specified' do
12
- let(:config_file) {
13
- <<~CONFIG
14
- defaults: &defaults
15
- base_url: http://0.0.0.0:9292
16
- css_path: /test.css
17
- routes:
18
- - /
12
+ let(:config_file) { file_fixture('config/single-css-path.yml').read }
19
13
 
20
- development:
21
- <<: *defaults
22
-
23
- test:
24
- <<: *defaults
25
- CONFIG
26
- }
27
-
28
- it 'sets css_path with the path' do
29
- expect(subject.config['css_path']).to eq '/app/spec/internal/public/test.css'
30
- end
31
-
32
- it 'leaves css_paths empty' do
33
- expect(subject.config['css_paths']).to eq []
14
+ it 'sets css_paths with the lone path' do
15
+ expect(subject.config['css_paths']).to eq ['/app/spec/internal/public/test.css']
34
16
  end
35
17
  end
36
18
 
37
19
  context 'when multiple css_paths are specified' do
38
- let(:config_file) {
39
- <<~CONFIG
40
- defaults: &defaults
41
- base_url: http://0.0.0.0:9292
42
- css_paths:
43
- - /test.css
44
- - /test2.css
45
- routes:
46
- - /
47
- - /new_route
48
-
49
- development:
50
- <<: *defaults
51
-
52
- test:
53
- <<: *defaults
54
- CONFIG
55
- }
56
-
57
- it 'sets css_path to empty string' do
58
- expect(subject.config['css_path']).to eq ''
59
- end
20
+ let(:config_file) { file_fixture('config/mutliple-css-paths.yml').read }
60
21
 
61
22
  it 'leaves css_paths to an array of paths' do
62
23
  expect(subject.config['css_paths']).to eq ['/app/spec/internal/public/test.css','/app/spec/internal/public/test2.css']
@@ -64,51 +25,15 @@ RSpec.describe 'ConfigLoader' do
64
25
  end
65
26
 
66
27
  context 'when no paths are specified' do
67
- let(:config_file) {
68
- <<~CONFIG
69
- defaults: &defaults
70
- base_url: http://0.0.0.0:9292
71
- manifest_name: application
72
- routes:
73
- - /
28
+ let(:config_file) { file_fixture('config/no-paths-specified.yml').read }
74
29
 
75
- development:
76
- <<: *defaults
77
-
78
- test:
79
- <<: *defaults
80
- CONFIG
81
- }
82
-
83
- it 'sets css_path with the path' do
84
- expect(subject.config['css_path']).to eq '/stylesheets/application.css'
85
- end
86
-
87
- it 'leaves css_paths empty' do
88
- expect(subject.config['css_paths']).to eq []
30
+ it 'sets css_paths with the lone manifest path' do
31
+ expect(subject.config['css_paths']).to eq ['/stylesheets/application.css']
89
32
  end
90
33
  end
91
34
 
92
35
  context 'when single css_path and multiple css_paths are both specified' do
93
- let(:config_file) {
94
- <<~CONFIG
95
- defaults: &defaults
96
- base_url: http://0.0.0.0:9292
97
- css_path: /test.css
98
- css_paths:
99
- - /test.css
100
- - /test2.css
101
- routes:
102
- - /
103
- - /new_route
104
-
105
- development:
106
- <<: *defaults
107
-
108
- test:
109
- <<: *defaults
110
- CONFIG
111
- }
36
+ let(:config_file) { file_fixture('config/paths-both-specified.yml').read }
112
37
 
113
38
  it 'raises an error' do
114
39
  expect { subject }.to raise_error LoadError, 'Cannot specify both css_path and css_paths'
@@ -116,25 +41,7 @@ RSpec.describe 'ConfigLoader' do
116
41
  end
117
42
 
118
43
  context 'when css_paths and routes are not the same length' do
119
- let(:config_file) {
120
- <<~CONFIG
121
- defaults: &defaults
122
- base_url: http://0.0.0.0:9292
123
- css_paths:
124
- - /test.css
125
- - /test2.css
126
- routes:
127
- - /
128
- - /new_route
129
- - /newer_route
130
-
131
- development:
132
- <<: *defaults
133
-
134
- test:
135
- <<: *defaults
136
- CONFIG
137
- }
44
+ let(:config_file) { file_fixture('config/paths-and-routes-not-same-length.yml').read }
138
45
 
139
46
  it 'raises an error' do
140
47
  expect { subject }.to raise_error LoadError, 'Must specify css_paths for each route'
metadata CHANGED
@@ -1,20 +1,23 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: critical-path-css-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.2
4
+ version: 3.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Misshore
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-02 00:00:00.000000000 Z
11
+ date: 2019-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: combustion
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.1'
20
+ - - ">="
18
21
  - !ruby/object:Gem::Version
19
22
  version: 1.1.0
20
23
  type: :development
@@ -22,6 +25,9 @@ dependencies:
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.1'
30
+ - - ">="
25
31
  - !ruby/object:Gem::Version
26
32
  version: 1.1.0
27
33
  description: Only load the CSS you need for the initial viewport in Rails!
@@ -62,6 +68,11 @@ files:
62
68
  - package-lock.json
63
69
  - package.json
64
70
  - spec/features/generate_and_fetch_critical_css_spec.rb
71
+ - spec/fixtures/files/config/mutliple-css-paths.yml
72
+ - spec/fixtures/files/config/no-paths-specified.yml
73
+ - spec/fixtures/files/config/paths-and-routes-not-same-length.yml
74
+ - spec/fixtures/files/config/paths-both-specified.yml
75
+ - spec/fixtures/files/config/single-css-path.yml
65
76
  - spec/internal/app/controllers/root_controller.rb
66
77
  - spec/internal/app/views/layouts/application.html.erb
67
78
  - spec/internal/app/views/root/index.html.erb
@@ -75,7 +86,7 @@ files:
75
86
  - spec/lib/critical_path_css/css_fetcher_spec.rb
76
87
  - spec/lib/critical_path_css/rails/config_loader_spec.rb
77
88
  - spec/spec_helper.rb
78
- homepage:
89
+ homepage: https://rubygems.org/gems/critical-path-css-rails
79
90
  licenses:
80
91
  - MIT
81
92
  metadata: {}