class VueApp::Core::Builders::JsBuilder

Build one javascript file

Public Class Methods

new(env = :development) click to toggle source

Create a JS builder for a specific environment @param [Symbol] env @raise [VueApp::Errors::InvalidENV]

# File lib/vueapp/core/builders/js_builder.rb, line 17
def initialize(env = :development)
  init_env(env)
end

Private Instance Methods

all_js_into_one_file() click to toggle source

Merge all *.js files into one file

# File lib/vueapp/core/builders/js_builder.rb, line 118
def all_js_into_one_file
  File.open(base_js_file, 'w') do |file|
    js_files.each do |js_file|
      file.write('/* file: ' + js_file + " */\n") if development?
      file.write(File.read(js_file))
    end
  end
end
base_js_file() click to toggle source

Base js filename @return [Pathname]

# File lib/vueapp/core/builders/js_builder.rb, line 101
def base_js_file
  build_path.join('scripts.js')
end
build_dev() click to toggle source

Build dev js file

# File lib/vueapp/core/builders/js_builder.rb, line 24
def build_dev
  timer_block(
    'Start [development] build for *.js files',
    'JS time: ') do
    all_js_into_one_file
  end
end
build_production() click to toggle source
# File lib/vueapp/core/builders/js_builder.rb, line 32
def build_production
  timer_block(
    'Start [production] build for *.js files',
    'JS time: ') do
    all_js_into_one_file
    compress_min_js
  end
end
components_js() click to toggle source

All *.js files from [components] folder @return [Array<String>]

# File lib/vueapp/core/builders/js_builder.rb, line 70
def components_js
  Dir[src_path.join('components', '**', '*.js').to_s]
end
compress_min_js() click to toggle source

Compress and minify js file

# File lib/vueapp/core/builders/js_builder.rb, line 128
def compress_min_js
  File.open(min_js_file, 'w') do |file|
    file.write(
      compressor.compile(File.read(base_js_file))
    )
  end
  FileUtils.mv(min_js_file, base_js_file)
  FileUtils.remove_file(min_js_file, true)
end
compressor() click to toggle source

Get compressor object @return [Uglifier]

# File lib/vueapp/core/builders/js_builder.rb, line 113
def compressor
  Uglifier.new(harmony: true)
end
config_js() click to toggle source

All *.js files from [config] folder @return [Array<String>]

# File lib/vueapp/core/builders/js_builder.rb, line 82
def config_js
  [
    src_config_path.join('routes.js').to_s,
    src_config_path.join('router.js').to_s,
    src_config_path.join('app.js').to_s
  ]
end
filters_js() click to toggle source

All *.js files from [filters] folder @return [Array<String>]

# File lib/vueapp/core/builders/js_builder.rb, line 64
def filters_js
  Dir[src_path.join('filters', '**', '*.js').to_s]
end
js_files() click to toggle source

Get all [*.js] file in the app path (ordered) @return [Array<String>] all [*.js] files

# File lib/vueapp/core/builders/js_builder.rb, line 92
def js_files
  [
    vue_lib_js, mixins_js, filters_js, components_js,
    pages_js, config_js
  ].flatten!
end
min_js_file() click to toggle source

Minified base js filename @return [Pathname]

# File lib/vueapp/core/builders/js_builder.rb, line 107
def min_js_file
  build_path.join('scripts.min.js')
end
mixins_js() click to toggle source

All *.js files from [mixins] folder @return [Array<String>]

# File lib/vueapp/core/builders/js_builder.rb, line 58
def mixins_js
  Dir[src_path.join('mixins', '**', '*.js').to_s]
end
pages_js() click to toggle source

All *.js files from [pages] folder @return [Array<String>]

# File lib/vueapp/core/builders/js_builder.rb, line 76
def pages_js
  Dir[src_path.join('pages', '**', '*.js').to_s]
end
vue_js() click to toggle source

Vue.js

# File lib/vueapp/core/builders/js_builder.rb, line 42
def vue_js
  if development?
    src_vendor_path.join('vue.dev.js').to_s
  else
    src_vendor_path.join('vue.js').to_s
  end
end
vue_lib_js() click to toggle source

Vue.js and required libs @return [Array<String>]

# File lib/vueapp/core/builders/js_builder.rb, line 52
def vue_lib_js
  [vue_js, src_vendor_path.join('vue_router.js').to_s]
end