lux_assets 0.2.2 → 0.2.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 881393b401a0889dc9f796b8188981bd46a32fdeecd24331b1968d7b800e73d4
4
- data.tar.gz: af21cd349f444ecac98faf88ed2bba53a9a20bd80c3292093ee7828d07dd84b0
3
+ metadata.gz: 4ba2b3c00e281b88fce7778d3625bfb78039d023ad288945a5835b0878721e40
4
+ data.tar.gz: ca4bf2c15022da0ed16e3662aeb0a6509ff9d76e6d64941a9788f3c51e9e7297
5
5
  SHA512:
6
- metadata.gz: c0215e85dc0f841a4598ab95ab76f159a39c2a34a0fdbca5e97891b9bec3c9c245d7dbd40e507f5019ae16d2a6f84e4b38dbec91a3d3bbf3fbc80fee81531e62
7
- data.tar.gz: 5895c5a63c3a2b6f9ab556c3d1345983a7bfb05aa4dfbe0b98d67d64d67c3729af3b481a26b5402bd122f93b7c59c8b84c06874f99a12ec55bea394cd94afd1b
6
+ metadata.gz: 8bddce098f693c140b676bfaf4d276758ee2d1d90819be1f3ef64d61596336b56390ade0def18cd4c68a5ac465fe84516de66e5d5f8738dc8f343f632c04e0ed
7
+ data.tar.gz: 628c3d656ac78aae471a951d9ea338bedf7c5b48a697280e1a56929375ab44d9c8221f1eb8d2242365f1774deee63bdec9326af8e4e85c2af538d06aae83ee6b
data/README.md CHANGED
@@ -41,6 +41,7 @@ Commands:
41
41
  lux_assets compile # Compile assets for production
42
42
  lux_assets help [COMMAND] # Describe available commands or one specific command
43
43
  lux_assets install # Install all needed packages via yarn
44
+ lux_assets monitor # Montitor and compile changed files
44
45
  lux_assets show # Show all files/data in manifest
45
46
  ```
46
47
 
data/bin/lux_assets CHANGED
@@ -88,6 +88,11 @@ class AssetsCli < Thor
88
88
  Cli.run 'rm ./public/manifest.json'
89
89
  end
90
90
 
91
+ desc :monitor, 'Montitor and compile changed files'
92
+ def monitor
93
+ LuxAssets::Cli.monitor
94
+ end
95
+
91
96
  end
92
97
 
93
98
  AssetsCli.start ARGV
@@ -20,7 +20,7 @@ class LuxAssets::Asset
20
20
  def compile
21
21
  @data = []
22
22
 
23
- die "No files found for [#{@ext}/#{@name}]" unless @files[0]
23
+ LuxAssets::Cli.die "No files found for [#{@ext}/#{@name}]" unless @files[0]
24
24
 
25
25
  for file in @files
26
26
  if file.is_a?(Proc)
@@ -47,15 +47,18 @@ class LuxAssets::Asset
47
47
  def tag_public_assets
48
48
  data = @asset_path.read
49
49
  data = data.gsub(/url\(([^\)]+)\)/) do
50
- if $1.include?('data:') || $1.include?('#') || $1.include?('?')
50
+ if $1.include?('data:') || $1.include?('#') || $1.include?('?') || $1.include?('::')
51
51
  'url(%s)' % $1
52
52
  else
53
53
  path = $1.gsub(/^['"]|['"]$/, '')
54
54
  path = path[0,1] == '/' ? Pathname.new('./public%s' % path) : Pathname.new('./public/assets').join(path)
55
55
 
56
- LuxAssets.die 'Resource "%s" referenced in "%s/%s" but not found' % [path, @ext, @name] unless path.exist?
57
-
58
- 'url("%s?%s")' % [path.to_s.sub('./public', ''), Digest::SHA1.hexdigest(path.read)[0, 6]]
56
+ if path.exist?
57
+ 'url("%s?%s")' % [path.to_s.sub('./public', ''), Digest::SHA1.hexdigest(path.read)[0, 6]]
58
+ else
59
+ LuxAssets::Cli.warn 'Resource "%s" referenced in "%s/%s" but not found' % [path, @ext, @name]
60
+ 'url("%s")' % path
61
+ end
59
62
  end
60
63
  end
61
64
 
@@ -75,7 +78,7 @@ class LuxAssets::Asset
75
78
  def compile_js
76
79
  save_data @data.join(";\n") do
77
80
  # babel fix and minify
78
- LuxAssets.run 'node_modules/babel-cli/.bin/babel --minified --no-comments --compact true -o "%{file}" "%{file}"' % { file: @asset_path }
81
+ LuxAssets::Cli.run 'node_modules/babel-cli/.bin/babel --minified --no-comments --compact true -o "%{file}" "%{file}"' % { file: @asset_path }
79
82
  end
80
83
  end
81
84
 
@@ -84,7 +87,7 @@ class LuxAssets::Asset
84
87
  tag_public_assets
85
88
 
86
89
  #autoprefixer
87
- LuxAssets.run './node_modules/.bin/autoprefixer-cli %s' % @asset_path
90
+ LuxAssets::Cli.run './node_modules/.bin/autoprefixer-cli %s' % @asset_path
88
91
  end
89
92
  end
90
93
  end
@@ -18,11 +18,6 @@ module LuxAssets
18
18
  @relative_root
19
19
  end
20
20
 
21
- def die text
22
- puts text.try(:red)
23
- exit
24
- end
25
-
26
21
  def asset name
27
22
  @name = name.to_s
28
23
  yield
@@ -73,7 +68,7 @@ module LuxAssets
73
68
  if files[0]
74
69
  add_local_files files
75
70
  else
76
- die 'No files found in "%s -> :%s" (%s)'.red % [@ext, @name, added]
71
+ LuxAssets::Cli.die 'No files found in "%s -> :%s" (%s)'.red % [@ext, @name, added]
77
72
  end
78
73
  end
79
74
  end
@@ -106,7 +101,7 @@ module LuxAssets
106
101
  # gzip if needed
107
102
  files = Dir['./public/assets/*.css'] + Dir['./public/assets/*.js']
108
103
  files.each do |file|
109
- LuxAssets.run 'gzip -k %s' % file unless File.exist?('%s.gz' % file)
104
+ LuxAssets::Cli.run 'gzip -k %s' % file unless File.exist?('%s.gz' % file)
110
105
  end
111
106
 
112
107
  # touch all files and reset the timestamp
@@ -117,7 +112,7 @@ module LuxAssets
117
112
  # get all files as a hash
118
113
  def to_h
119
114
  unless @assets_loaded
120
- die 'Assets file not found in %s' % CONFIG_PATH unless CONFIG_PATH.exist?
115
+ LuxAssets::Cli.die 'Assets rb config file not found in %s' % CONFIG_PATH unless CONFIG_PATH.exist?
121
116
  @assets_loaded = true
122
117
  eval CONFIG_PATH.read
123
118
  end
@@ -151,26 +146,6 @@ module LuxAssets
151
146
  end
152
147
  end
153
148
 
154
- def run what, cache_file=nil
155
- puts what.yellow
156
-
157
- stdin, stdout, stderr, wait_thread = Open3.popen3(what)
158
-
159
- error = stderr.gets
160
- while line = stderr.gets do
161
- error += line
162
- end
163
-
164
- # node-sass prints to stderror on complete
165
- error = nil if error && error.index('Rendering Complete, saving .css file...')
166
-
167
- if error
168
- cache_file.unlink if cache_file && cache_file.exist?
169
-
170
- puts error.red
171
- end
172
- end
173
-
174
149
  private
175
150
 
176
151
  def add_local_files files
@@ -0,0 +1,55 @@
1
+ # command line helpers
2
+
3
+ module LuxAssets::Cli
4
+ extend self
5
+
6
+ def die text
7
+ text = text.red if text.respond_to?(:red)
8
+ puts text
9
+ puts caller.slice(0, 10)
10
+ exit
11
+ end
12
+
13
+ def warn text
14
+ text = text.magenta if text.respond_to?(:magenta)
15
+ puts text
16
+ end
17
+
18
+ def run what, cache_file=nil
19
+ puts what.yellow
20
+
21
+ stdin, stdout, stderr, wait_thread = Open3.popen3(what)
22
+
23
+ error = stderr.gets
24
+ while line = stderr.gets do
25
+ error += line
26
+ end
27
+
28
+ # node-sass prints to stderror on complete
29
+ error = nil if error && error.include?('Rendering Complete, saving .css file...')
30
+
31
+ if error
32
+ cache_file.unlink if cache_file && cache_file.exist?
33
+ warn error
34
+ end
35
+ end
36
+
37
+ # monitor for file changes
38
+ def monitor
39
+ puts 'Lux assets - looking for file changes'
40
+
41
+ files = LuxAssets.to_h.values.map(&:values).flatten.map { |it| Pathname.new it }
42
+ last_change = Time.now
43
+
44
+ while true
45
+ for file in files
46
+ if file.mtime > last_change
47
+ last_change = Time.now
48
+ LuxAssets.compile file.to_s
49
+ end
50
+ end
51
+
52
+ sleep 2
53
+ end
54
+ end
55
+ end
@@ -1,4 +1,5 @@
1
1
  # One file that can be scss, js, coffee, ts, etc...
2
+
2
3
  class LuxAssets::Element
3
4
  def initialize source
4
5
  @source = Pathname.new source
@@ -38,7 +39,7 @@ class LuxAssets::Element
38
39
  coffee_path = './node_modules/coffee-script/bin/coffee'
39
40
  coffee_opts = production? ? '-cp' : '-Mcp --no-header'
40
41
 
41
- LuxAssets.run "#{coffee_path} #{coffee_opts} '#{@source}' > '#{@cache}'", @cache
42
+ LuxAssets::Cli.run "#{coffee_path} #{coffee_opts} '#{@source}' > '#{@cache}'", @cache
42
43
 
43
44
  data = @cache.read
44
45
  data = data.gsub(%r{//#\ssourceURL=[\w\-\.\/]+/app/assets/}, '//# sourceURL=/raw_asset/')
@@ -51,7 +52,7 @@ class LuxAssets::Element
51
52
  def compile_scss
52
53
  node_sass = './node_modules/node-sass/bin/node-sass'
53
54
  node_opts = production? ? '--output-style compressed' : '--source-comments'
54
- LuxAssets.run "#{node_sass} #{node_opts} '#{@source}' '#{@cache}'", @cache
55
+ LuxAssets::Cli.run "#{node_sass} #{node_opts} '#{@source}' '#{@cache}'", @cache
55
56
  @cache.read
56
57
  end
57
58
  alias :compile_sass :compile_scss
@@ -62,7 +63,7 @@ class LuxAssets::Element
62
63
  end
63
64
 
64
65
  def compile_ts
65
- LuxAssets.run "node_modules/typescript/.bin/tsc --outFile '#{@cache}' '#{@source}'"
66
+ LuxAssets::Cli.run "node_modules/typescript/.bin/tsc --outFile '#{@cache}' '#{@source}'"
66
67
  end
67
68
 
68
69
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  module LuxAssets::Manifest
4
4
  MANIFEST = Pathname.new(ENV.fetch('ASSETS_MANIFEST') { './public/manifest.json' })
5
+ MANIFEST.write '{"files":{}}' unless MANIFEST.exist?
5
6
 
6
7
  extend self
7
8
 
@@ -20,10 +21,6 @@ module LuxAssets::Manifest
20
21
  json = JSON.load MANIFEST.read
21
22
  json['files'][name]
22
23
  end
23
-
24
- ###
25
-
26
- MANIFEST.write '{"files":{}}' unless MANIFEST.exist?
27
24
  end
28
25
 
29
26
 
data/lib/lux_assets.rb CHANGED
@@ -7,6 +7,7 @@ require 'open3'
7
7
  # gem files
8
8
  require_relative './lux_assets/base'
9
9
  require_relative './lux_assets/asset'
10
+ require_relative './lux_assets/cli'
10
11
  require_relative './lux_assets/element'
11
12
  require_relative './lux_assets/manifest'
12
13
 
@@ -1,7 +1,6 @@
1
1
  # /compiled_asset/www/js/pjax.coffee
2
2
  # /raw_asset/www/js/pjax.coffee
3
3
  Lux.app.before do
4
- # skip /favicon.ico that forces refresh
5
4
  next unless nav.path[1]
6
5
  next unless Lux.config(:compile_assets)
7
6
 
data/lib/vendor/tasks.rb CHANGED
@@ -28,6 +28,11 @@ namespace :assets do
28
28
  LuxAssets.examine
29
29
  end
30
30
 
31
+ desc 'Monitor for file changes'
32
+ task monitor: :env do
33
+ LuxAssets::Cli.monitor
34
+ end
35
+
31
36
  desc 'Upload assets to S3'
32
37
  task :s3_upload do
33
38
  puts 'aws s3 sync ./public s3://bucket.location --cache-control "max-age=31536000, public"'
@@ -0,0 +1 @@
1
+ {"files":{}}
@@ -1 +1,2 @@
1
- alert 123
1
+ alert 123
2
+
@@ -32,8 +32,15 @@ describe LuxAssets do
32
32
  expect(css).to include('-webkit')
33
33
 
34
34
  expect(Dir.entries('./public/assets').length > 8).to be true
35
+ end
36
+
37
+ it 'deletes folders and files' do
35
38
  `rm -rf ./public/assets`
36
39
  Dir.rmdir('./public') if Dir.entries('./public').length == 2
40
+
41
+ if LuxAssets::Manifest::MANIFEST.exist?
42
+ LuxAssets::Manifest::MANIFEST.delete
43
+ end
37
44
  end
38
45
  end
39
46
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lux_assets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dino Reic
@@ -66,6 +66,7 @@ files:
66
66
  - "./lib/lux_assets.rb"
67
67
  - "./lib/lux_assets/asset.rb"
68
68
  - "./lib/lux_assets/base.rb"
69
+ - "./lib/lux_assets/cli.rb"
69
70
  - "./lib/lux_assets/element.rb"
70
71
  - "./lib/lux_assets/manifest.rb"
71
72
  - "./lib/vendor/lux/assets_helper.rb"
@@ -7355,6 +7356,7 @@ files:
7355
7356
  - "./node_modules/yargs/package.json"
7356
7357
  - "./node_modules/yargs/yargs.js"
7357
7358
  - "./package.json"
7359
+ - "./public/manifest.json"
7358
7360
  - "./spec/assets/assets.rb"
7359
7361
  - "./spec/assets/css/test.css"
7360
7362
  - "./spec/assets/css/test.scss"