vueapp 0.1.1
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 +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +43 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/bin/vueapp +7 -0
- data/lib/vueapp.rb +32 -0
- data/lib/vueapp/cli.rb +44 -0
- data/lib/vueapp/core/builder.rb +37 -0
- data/lib/vueapp/core/builders/js_builder.rb +140 -0
- data/lib/vueapp/core/builders/scss_builder.rb +114 -0
- data/lib/vueapp/core/builders/slim_builder.rb +94 -0
- data/lib/vueapp/core/cli/build_helper.rb +20 -0
- data/lib/vueapp/core/cli/generator_helper.rb +23 -0
- data/lib/vueapp/core/cli/init_helper.rb +81 -0
- data/lib/vueapp/core/helpers/build.rb +22 -0
- data/lib/vueapp/core/helpers/env.rb +47 -0
- data/lib/vueapp/core/helpers/log.rb +16 -0
- data/lib/vueapp/core/helpers/path.rb +49 -0
- data/lib/vueapp/core/helpers/timer.rb +19 -0
- data/lib/vueapp/core/listener.rb +64 -0
- data/lib/vueapp/errors.rb +8 -0
- data/lib/vueapp/templates/_core/vendor/vue.dev.js +11965 -0
- data/lib/vueapp/templates/_core/vendor/vue.js +6 -0
- data/lib/vueapp/templates/_core/vendor/vue_router.js +3061 -0
- data/lib/vueapp/templates/api/api.js +3 -0
- data/lib/vueapp/templates/api/api_client.js +131 -0
- data/lib/vueapp/templates/api/base_api.js +27 -0
- data/lib/vueapp/templates/config/app.js +17 -0
- data/lib/vueapp/templates/config/router.js +7 -0
- data/lib/vueapp/templates/config/routes.js +10 -0
- data/lib/vueapp/templates/filters/percentage.js +7 -0
- data/lib/vueapp/templates/generators/component/new.js +3 -0
- data/lib/vueapp/templates/generators/component/new.scss +0 -0
- data/lib/vueapp/templates/generators/component/new.slim +2 -0
- data/lib/vueapp/templates/index.slim +24 -0
- data/lib/vueapp/templates/mixins/base.js +10 -0
- data/lib/vueapp/templates/pages/about_us/about_us.js +3 -0
- data/lib/vueapp/templates/pages/about_us/about_us.scss +0 -0
- data/lib/vueapp/templates/pages/about_us/about_us.slim +2 -0
- data/lib/vueapp/templates/pages/home/home.js +3 -0
- data/lib/vueapp/templates/pages/home/home.scss +0 -0
- data/lib/vueapp/templates/pages/home/home.slim +2 -0
- data/lib/vueapp/templates/styles.scss +1 -0
- data/lib/vueapp/version.rb +5 -0
- metadata +228 -0
@@ -0,0 +1,94 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module VueApp
|
4
|
+
module Core
|
5
|
+
module Builders
|
6
|
+
# Slim builder
|
7
|
+
class SlimBuilder < VueApp::Core::Builder
|
8
|
+
include VueApp::Core::Helpers::Env
|
9
|
+
include VueApp::Core::Helpers::Timer
|
10
|
+
include VueApp::Core::Helpers::Path
|
11
|
+
include VueApp::Core::Helpers::Build
|
12
|
+
|
13
|
+
# Create a Slim builder for a specific environment
|
14
|
+
# @param [Symbol] env
|
15
|
+
# @raise [VueApp::Errors::InvalidENV]
|
16
|
+
def initialize(env = :development)
|
17
|
+
init_env(env)
|
18
|
+
end
|
19
|
+
|
20
|
+
# Render components slim template
|
21
|
+
# @return [String]
|
22
|
+
def render_components
|
23
|
+
components = ''
|
24
|
+
slim_files.each do |slim_file|
|
25
|
+
components += if development?
|
26
|
+
Slim::Template.new(slim_file, pretty: true).render
|
27
|
+
else
|
28
|
+
Slim::Template.new(slim_file).render
|
29
|
+
end
|
30
|
+
end
|
31
|
+
components
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def build_dev
|
37
|
+
timer_block(
|
38
|
+
'Start [development] build for *.slim files',
|
39
|
+
'SLIM time: '
|
40
|
+
) do
|
41
|
+
File.open(index_file, 'w') do |file|
|
42
|
+
file.write(
|
43
|
+
Slim::Template.new(base_layout, pretty: true).render(self)
|
44
|
+
)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def build_production
|
50
|
+
timer_block(
|
51
|
+
'Start [production] build for *.slim files',
|
52
|
+
'SLIM time: '
|
53
|
+
) do
|
54
|
+
File.open(index_file, 'w') do |file|
|
55
|
+
file.write(
|
56
|
+
Slim::Template.new(base_layout).render(self)
|
57
|
+
)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# Base layout filepath
|
63
|
+
# @return [Pathname]
|
64
|
+
def base_layout
|
65
|
+
src_path.join('index.slim')
|
66
|
+
end
|
67
|
+
|
68
|
+
# Index html filename
|
69
|
+
# @return [Pathname]
|
70
|
+
def index_file
|
71
|
+
build_path.join('index.html')
|
72
|
+
end
|
73
|
+
|
74
|
+
# All *.slim files from [components] folder
|
75
|
+
# @return [Array<String>] all [*.slim] files
|
76
|
+
def components_slim
|
77
|
+
Dir[src_path.join('components', '**', '*.slim').to_s]
|
78
|
+
end
|
79
|
+
|
80
|
+
# All *.slim files from [pages] folder
|
81
|
+
# @return [Array<String>] all [*.slim] files
|
82
|
+
def pages_slim
|
83
|
+
Dir[src_path.join('pages', '**', '*.slim').to_s]
|
84
|
+
end
|
85
|
+
|
86
|
+
# Get all [*.slim] file in the app path
|
87
|
+
# @return [Array<String>] all [*.slim] files
|
88
|
+
def slim_files
|
89
|
+
components_slim + pages_slim
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module VueApp
|
4
|
+
module Core
|
5
|
+
module CLI
|
6
|
+
# Helper for CLI [vueapp build]
|
7
|
+
module BuildHelper
|
8
|
+
# Run builders
|
9
|
+
# @param [Symbol] env
|
10
|
+
def run_build(env)
|
11
|
+
ask_text = "Do you want to build [VUEAPP] in ["
|
12
|
+
ask_text += env.to_s + '] mode?(yes/no):'
|
13
|
+
return unless yes?(ask_text, :green)
|
14
|
+
|
15
|
+
VueApp::Core::Builder.build(env)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module VueApp
|
4
|
+
module Core
|
5
|
+
# Base Vue app builder
|
6
|
+
module CLI
|
7
|
+
# Helper for CLI
|
8
|
+
module GeneratorHelper
|
9
|
+
def component_name
|
10
|
+
args.last
|
11
|
+
end
|
12
|
+
|
13
|
+
def generate_component(name)
|
14
|
+
component_path = src_path('components/' + name)
|
15
|
+
VueApp.logger('Generate component: ' + name)
|
16
|
+
template('generators/component/new.js', "#{component_path}/#{name}.js")
|
17
|
+
template('generators/component/new.slim', "#{component_path}/#{name}.slim")
|
18
|
+
template('generators/component/new.scss', "#{component_path}/#{name}.scss")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module VueApp
|
4
|
+
module Core
|
5
|
+
module CLI
|
6
|
+
# Helper for CLI [vueapp init]
|
7
|
+
module InitHelper
|
8
|
+
# Run initialization
|
9
|
+
def run_init
|
10
|
+
ask_text = "Do you want to initialize [VUEAPP]\n"
|
11
|
+
ask_text += 'in folder: [' + app_path('') + ']?(yes/no):'
|
12
|
+
return unless yes?(ask_text, :green)
|
13
|
+
|
14
|
+
empty_directory(app_path('build/development'))
|
15
|
+
empty_directory(app_path('build/production'))
|
16
|
+
empty_directory(app_path('build/test'))
|
17
|
+
init_core_folder
|
18
|
+
init_src_folder
|
19
|
+
init_config_folder
|
20
|
+
init_pages_folder
|
21
|
+
end
|
22
|
+
|
23
|
+
# Get VUEAPP root path
|
24
|
+
# @param [String] path
|
25
|
+
# @return [String]
|
26
|
+
def app_path(path)
|
27
|
+
File.expand_path(path, Dir.pwd)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Get VUEAPP src path
|
31
|
+
# @param [String] path
|
32
|
+
# @return [String]
|
33
|
+
def src_path(path)
|
34
|
+
app_path('src/' + path)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Get VUEAPP src/_core/vendor path
|
38
|
+
# @param [String] path
|
39
|
+
# @return [String]
|
40
|
+
def src_vendor_path(path)
|
41
|
+
app_path('src/_core/vendor/' + path)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Copy all core files
|
45
|
+
def init_core_folder
|
46
|
+
copy_file('_core/vendor/vue.js', src_vendor_path('vue.js'))
|
47
|
+
copy_file('_core/vendor/vue.dev.js', src_vendor_path('vue.dev.js'))
|
48
|
+
copy_file(
|
49
|
+
'_core/vendor/vue_router.js',
|
50
|
+
src_vendor_path('vue_router.js')
|
51
|
+
)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Create src folders
|
55
|
+
def init_src_folder
|
56
|
+
copy_file('index.slim', src_path('index.slim'))
|
57
|
+
copy_file('styles.scss', src_path('styles.scss'))
|
58
|
+
empty_directory(src_path('mixins'))
|
59
|
+
empty_directory(src_path('filters'))
|
60
|
+
empty_directory(src_path('components'))
|
61
|
+
end
|
62
|
+
|
63
|
+
def init_pages_folder
|
64
|
+
copy_file('pages/home/home.js', src_path('pages/home/home.js'))
|
65
|
+
copy_file('pages/home/home.scss', src_path('pages/home/home.scss'))
|
66
|
+
copy_file('pages/home/home.slim', src_path('pages/home/home.slim'))
|
67
|
+
copy_file('pages/about_us/about_us.js', src_path('pages/about_us/about_us.js'))
|
68
|
+
copy_file('pages/about_us/about_us.scss', src_path('pages/about_us/about_us.scss'))
|
69
|
+
copy_file('pages/about_us/about_us.slim', src_path('pages/about_us/about_us.slim'))
|
70
|
+
end
|
71
|
+
|
72
|
+
# Copy config folder files
|
73
|
+
def init_config_folder
|
74
|
+
copy_file('config/app.js', src_path('config/app.js'))
|
75
|
+
copy_file('config/routes.js', src_path('config/routes.js'))
|
76
|
+
copy_file('config/router.js', src_path('config/router.js'))
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module VueApp
|
4
|
+
module Core
|
5
|
+
module Helpers
|
6
|
+
# Add build method related to @env
|
7
|
+
module Build
|
8
|
+
# Build method
|
9
|
+
# @param [String] str
|
10
|
+
def build
|
11
|
+
case @env
|
12
|
+
when :production then build_production
|
13
|
+
when :development then build_dev
|
14
|
+
when :test then build_test
|
15
|
+
else
|
16
|
+
build_dev
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module VueApp
|
4
|
+
module Core
|
5
|
+
module Helpers
|
6
|
+
# Add @env to obj
|
7
|
+
module Env
|
8
|
+
ENV_LIST = %I[development production test].freeze
|
9
|
+
|
10
|
+
# Initialize @env
|
11
|
+
# @param [Symbol] env
|
12
|
+
def init_env(env)
|
13
|
+
raise VueApp::Errors::InvalidENV unless ENV_LIST.include?(env)
|
14
|
+
|
15
|
+
@env = env
|
16
|
+
end
|
17
|
+
|
18
|
+
# True if @env == :development
|
19
|
+
# @return [TrueClass,FalseClass]
|
20
|
+
def development?
|
21
|
+
env_is_a?(:development)
|
22
|
+
end
|
23
|
+
|
24
|
+
# True if @env == :production
|
25
|
+
# @return [TrueClass,FalseClass]
|
26
|
+
def production?
|
27
|
+
env_is_a?(:production)
|
28
|
+
end
|
29
|
+
|
30
|
+
# True if @env == :test
|
31
|
+
# @return [TrueClass,FalseClass]
|
32
|
+
def test?
|
33
|
+
env_is_a?(:test)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
# Detect env
|
39
|
+
# @param [Symbol] env
|
40
|
+
# @return [TrueClass,FalseClass]
|
41
|
+
def env_is_a?(env)
|
42
|
+
@env.eql?(env)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module VueApp
|
4
|
+
module Core
|
5
|
+
module Helpers
|
6
|
+
# Add log method
|
7
|
+
module Log
|
8
|
+
# Logger method: puts string with timestamp
|
9
|
+
# @param [String] str
|
10
|
+
def log(str)
|
11
|
+
puts Time.now.strftime('%-d %b %Y [%H:%M:%S]: ').style(:green) + str
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module VueApp
|
4
|
+
module Core
|
5
|
+
module Helpers
|
6
|
+
# Add path helper
|
7
|
+
module Path
|
8
|
+
VUEAPP_SRC = 'src'
|
9
|
+
VUEAPP_BUILD = 'build'
|
10
|
+
|
11
|
+
# Vue app folder path
|
12
|
+
# @return [Pathname]
|
13
|
+
def app_path
|
14
|
+
Pathname.new(Dir.pwd)
|
15
|
+
end
|
16
|
+
|
17
|
+
# Vue app build folder path
|
18
|
+
# @return [Pathname]
|
19
|
+
def build_path
|
20
|
+
if development?
|
21
|
+
app_path.join(VUEAPP_BUILD, 'development')
|
22
|
+
elsif test?
|
23
|
+
app_path.join(VUEAPP_BUILD, 'test')
|
24
|
+
else
|
25
|
+
app_path.join(VUEAPP_BUILD, 'production')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Vue app source code path
|
30
|
+
# @return [Pathname]
|
31
|
+
def src_path
|
32
|
+
app_path.join(VUEAPP_SRC)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Vue app source vendor path
|
36
|
+
# @return [Pathname]
|
37
|
+
def src_vendor_path
|
38
|
+
src_path.join('_core', 'vendor')
|
39
|
+
end
|
40
|
+
|
41
|
+
# Vue app source vendor path
|
42
|
+
# @return [Pathname]
|
43
|
+
def src_config_path
|
44
|
+
src_path.join('config')
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module VueApp
|
4
|
+
module Core
|
5
|
+
module Helpers
|
6
|
+
# Add timer_block method
|
7
|
+
module Timer
|
8
|
+
# Time counter
|
9
|
+
def timer_block(start_text, end_text, &block)
|
10
|
+
start_time = Time.now
|
11
|
+
log(start_text)
|
12
|
+
block.call(self)
|
13
|
+
end_time = (Time.now - start_time).round(2)
|
14
|
+
log(end_text + end_time.to_s + 's')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module VueApp
|
4
|
+
module Core
|
5
|
+
# Listen file modification
|
6
|
+
class Listener
|
7
|
+
include VueApp::Core::Helpers::Log
|
8
|
+
|
9
|
+
# Base class method
|
10
|
+
def self.call
|
11
|
+
new.run
|
12
|
+
end
|
13
|
+
|
14
|
+
# Listener main method
|
15
|
+
def run
|
16
|
+
log('Run Listener: ' + vueapp_path)
|
17
|
+
slim_listener
|
18
|
+
js_listener
|
19
|
+
scss_listener
|
20
|
+
sleep
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
# Listener for .slim files
|
26
|
+
def slim_listener
|
27
|
+
listener = Listen.to(vueapp_path, only: /.slim$/) do |modified, added, removed|
|
28
|
+
log("Modified: #{modified}") if modified
|
29
|
+
log("Added: #{added}") if added
|
30
|
+
log("Removed: #{removed}") if removed
|
31
|
+
VueApp::Core::Builders::SlimBuilder.new(:development).build
|
32
|
+
end
|
33
|
+
listener.start
|
34
|
+
end
|
35
|
+
|
36
|
+
# Listener for .js files
|
37
|
+
def js_listener
|
38
|
+
listener = Listen.to(vueapp_path, only: /.js$/) do |modified, added, removed|
|
39
|
+
log("Modified: #{modified}") if modified
|
40
|
+
log("Added: #{added}") if added
|
41
|
+
log("Removed: #{removed}") if removed
|
42
|
+
VueApp::Core::Builders::JsBuilder.new(:development).build
|
43
|
+
end
|
44
|
+
listener.start
|
45
|
+
end
|
46
|
+
|
47
|
+
# Listener for .scss files
|
48
|
+
def scss_listener
|
49
|
+
listener = Listen.to(vueapp_path, only: /.scss$/) do |modified, added, removed|
|
50
|
+
log("Modified: #{modified}") if modified
|
51
|
+
log("Added: #{added}") if added
|
52
|
+
log("Removed: #{removed}") if removed
|
53
|
+
VueApp::Core::Builders::ScssBuilder.new(:development).build
|
54
|
+
end
|
55
|
+
listener.start
|
56
|
+
end
|
57
|
+
|
58
|
+
# Path for listener
|
59
|
+
def vueapp_path
|
60
|
+
Pathname.new(Dir.pwd).join('src').to_s
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|