volt 0.2.3 → 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 +4 -4
- data/Readme.md +3 -0
- data/VERSION +1 -1
- data/docs/GUIDE.md +3 -3
- data/lib/volt.rb +0 -2
- data/lib/volt/cli.rb +14 -1
- data/lib/volt/cli/new_gem.rb +116 -0
- data/lib/volt/controllers/model_controller.rb +4 -0
- data/lib/volt/router/routes.rb +10 -7
- data/lib/volt/server.rb +36 -96
- data/lib/volt/server/channel_handler.rb +1 -1
- data/lib/volt/server/rack/component_files.rb +97 -0
- data/lib/volt/server/rack/component_paths.rb +70 -0
- data/lib/volt/server/rack/index_files.rb +38 -0
- data/lib/volt/server/rack/opal_files.rb +51 -0
- data/lib/volt/server/{source_map_server.rb → rack/source_map_server.rb} +0 -0
- data/lib/volt/templates/page.rb +3 -5
- data/{templates/app/.empty_directory → spec/app/main/assets/js/test1.js} +0 -0
- data/spec/app/main/config/dependencies.rb +1 -0
- data/{templates/app/home/css/.empty_directory → spec/app/shared/assets/js/test2.js} +0 -0
- data/spec/app/shared/config/dependencies.rb +1 -0
- data/spec/server/rack/component_files_spec.rb +23 -0
- data/spec/server/rack/component_paths_spec.rb +26 -0
- data/spec/store/mongo_spec.rb +5 -2
- data/templates/newgem/Gemfile.tt +4 -0
- data/templates/newgem/LICENSE.txt.tt +22 -0
- data/templates/newgem/README.md.tt +29 -0
- data/templates/newgem/Rakefile.tt +16 -0
- data/templates/newgem/VERSION +1 -0
- data/templates/{app/home/models → newgem/app/newgem/assets/css}/.empty_directory +0 -0
- data/templates/{public/css/ansi.css → newgem/app/newgem/assets/js/.empty_directory} +0 -0
- data/templates/newgem/bin/newgem.tt +3 -0
- data/templates/newgem/gitignore.tt +17 -0
- data/templates/newgem/lib/newgem.rb.tt +9 -0
- data/templates/{public/js/bootstrap.js → newgem/lib/newgem/.empty_directory} +0 -0
- data/templates/newgem/newgem.gemspec.tt +28 -0
- data/templates/newgem/rspec.tt +2 -0
- data/templates/newgem/spec/newgem_spec.rb.tt +11 -0
- data/templates/newgem/spec/spec_helper.rb.tt +2 -0
- data/templates/newgem/test/minitest_helper.rb.tt +4 -0
- data/templates/newgem/test/test_newgem.rb.tt +11 -0
- data/templates/{Gemfile.tt → project/Gemfile.tt} +4 -1
- data/templates/project/app/.empty_directory +0 -0
- data/templates/{app → project/app}/home/config/routes.rb +0 -0
- data/templates/{app → project/app}/home/controllers/index_controller.rb +0 -0
- data/templates/project/app/home/css/.empty_directory +0 -0
- data/templates/project/app/home/models/.empty_directory +0 -0
- data/templates/{app → project/app}/home/views/index/about.html +0 -0
- data/templates/{app → project/app}/home/views/index/home.html +0 -0
- data/templates/{app → project/app}/home/views/index/index.html +0 -0
- data/templates/{config.ru → project/config.ru} +1 -1
- data/templates/project/public/css/ansi.css +0 -0
- data/templates/{public → project/public}/css/bootstrap-theme.css +0 -0
- data/templates/{public → project/public}/css/bootstrap.css +0 -0
- data/templates/{public → project/public}/css/jumbotron.css +0 -0
- data/templates/{public → project/public}/fonts/glyphicons-halflings-regular.eot +0 -0
- data/templates/{public → project/public}/fonts/glyphicons-halflings-regular.svg +0 -0
- data/templates/{public → project/public}/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/templates/{public → project/public}/fonts/glyphicons-halflings-regular.woff +0 -0
- data/templates/project/public/index.html +19 -0
- data/templates/project/public/js/bootstrap.js +0 -0
- data/templates/{public → project/public}/js/jquery-2.0.3.js +0 -0
- data/templates/{public → project/public}/js/sockjs-0.2.1.min.js +0 -0
- data/templates/{spec → project/spec}/spec_helper.rb +0 -0
- metadata +60 -27
- data/lib/volt/server/request_handler.rb +0 -16
- data/templates/public/index.html +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a11e880b0dfbda45e1a83176460f5723748a8f9
|
4
|
+
data.tar.gz: 600654cace56d7e79b31f61519dbe11d2b6ecf02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a59388069aadc3a45416d72284f56e67b0b1f5a8eb46f5dd8807e0706abfb24bd35e645554892c15e1091837c1193a907c54b42190e1cc2201ff46ff9ec0b5c
|
7
|
+
data.tar.gz: b99c2138d7ab5d24bbad34cec8d0ce561fab2717d9b570280bc1ca74c2e06bb71c0a2abe9c6edd8a43614bfdf597d283f0e85f3f8500b283c2736a389e2a25a1
|
data/Readme.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
[](http://badge.fury.io/rb/volt)
|
2
|
+
[](https://codeclimate.com/github/voltrb/volt)
|
3
|
+
|
1
4
|
# Volt
|
2
5
|
|
3
6
|
NOTE: VOLT IS STILL IN DEVELOPMENT, DON'T USE IT FOR ANYTHING SERIOUS YET
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.4
|
data/docs/GUIDE.md
CHANGED
@@ -4,7 +4,7 @@ This guide will take you through creating a basic web application in Volt. This
|
|
4
4
|
|
5
5
|
To get started, install volt:
|
6
6
|
|
7
|
-
gem install
|
7
|
+
gem install volt
|
8
8
|
|
9
9
|
Then create a new project:
|
10
10
|
|
@@ -19,8 +19,8 @@ This will setup a basic project. Now lets run the server.
|
|
19
19
|
|
20
20
|
When a user interacts with a web page, typically we want to do two things:
|
21
21
|
|
22
|
-
1
|
23
|
-
2
|
22
|
+
1. Change application state
|
23
|
+
2. Update the DOM
|
24
24
|
|
25
25
|
For example when a user clicks to add a new todo item to a todo list, we might create a JavaScript object to represent the todo item, then add an item to the list's DOM. A lot of work needs to be done to make sure that the JavaScript object and the DOM always stay in sync.
|
26
26
|
|
data/lib/volt.rb
CHANGED
data/lib/volt/cli.rb
CHANGED
@@ -6,7 +6,7 @@ class CLI < Thor
|
|
6
6
|
|
7
7
|
desc "new PROJECT_NAME", "generates a new project."
|
8
8
|
def new(name)
|
9
|
-
directory("
|
9
|
+
directory("project", name)
|
10
10
|
|
11
11
|
say "Bundling Gems...."
|
12
12
|
`cd #{name} ; bundle`
|
@@ -26,6 +26,19 @@ class CLI < Thor
|
|
26
26
|
Thin::Runner.new(['start']).run!
|
27
27
|
end
|
28
28
|
|
29
|
+
desc "gem GEM", "Creates a gem where you can share a component"
|
30
|
+
method_option :bin, :type => :boolean, :default => false, :aliases => '-b', :banner => "Generate a binary for your library."
|
31
|
+
method_option :test, :type => :string, :lazy_default => 'rspec', :aliases => '-t', :banner => "Generate a test directory for your library: 'rspec' is the default, but 'minitest' is also supported."
|
32
|
+
method_option :edit, :type => :string, :aliases => "-e",
|
33
|
+
:lazy_default => [ENV['BUNDLER_EDITOR'], ENV['VISUAL'], ENV['EDITOR']].find{|e| !e.nil? && !e.empty? },
|
34
|
+
:required => false, :banner => "/path/to/your/editor",
|
35
|
+
:desc => "Open generated gemspec in the specified editor (defaults to $EDITOR or $BUNDLER_EDITOR)"
|
36
|
+
def gem(name)
|
37
|
+
require 'volt/cli/new_gem'
|
38
|
+
|
39
|
+
NewGem.new(self, name, options)
|
40
|
+
end
|
41
|
+
|
29
42
|
def self.source_root
|
30
43
|
File.expand_path(File.join(File.dirname(__FILE__), '../../templates'))
|
31
44
|
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require "net/http"
|
2
|
+
require "uri"
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
# Creates a new "volt" gem, which can be used to easily repackage
|
6
|
+
# components.
|
7
|
+
class NewGem
|
8
|
+
def initialize(thor, name, options)
|
9
|
+
@thor = thor
|
10
|
+
@component_name = name.chomp("/")
|
11
|
+
@name = "volt-" + @component_name # remove trailing slash if present
|
12
|
+
|
13
|
+
if gem_is_available?
|
14
|
+
@thor.say("#{@name} is available! Making gem files.", :green)
|
15
|
+
else
|
16
|
+
@thor.say("There is already a gem named #{@name}. Please choose a different name.", :red)
|
17
|
+
return
|
18
|
+
end
|
19
|
+
|
20
|
+
@options = options
|
21
|
+
@namespaced_path = @name.tr('-', '/')
|
22
|
+
@opts = gem_options
|
23
|
+
@target = File.join(Dir.pwd, @name)
|
24
|
+
|
25
|
+
copy_files
|
26
|
+
copy_options
|
27
|
+
end
|
28
|
+
|
29
|
+
# Check with the rubygems api to see if this gem name is available.
|
30
|
+
def gem_is_available?
|
31
|
+
@thor.say("Check if #{@name} is available as a gem name.", :yellow)
|
32
|
+
uri = URI.parse("https://rubygems.org/api/v1/gems/#{@name}.json")
|
33
|
+
|
34
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
35
|
+
http.use_ssl = true
|
36
|
+
|
37
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
38
|
+
response = http.request(request)
|
39
|
+
|
40
|
+
return response.code == "404"
|
41
|
+
rescue SocketError => e
|
42
|
+
# rubygems is down, skip check
|
43
|
+
return true
|
44
|
+
end
|
45
|
+
|
46
|
+
def copy_files
|
47
|
+
@thor.directory("newgem/app/newgem", File.join("#{@target}", "app/#{@component_name}"))
|
48
|
+
copy("newgem/Gemfile.tt", "Gemfile")
|
49
|
+
copy("newgem/Rakefile.tt", "Rakefile")
|
50
|
+
copy("newgem/README.md.tt", "README.md")
|
51
|
+
copy("newgem/gitignore.tt", ".gitignore")
|
52
|
+
copy("newgem/newgem.gemspec.tt", "#{@name}.gemspec")
|
53
|
+
copy("newgem/lib/newgem.rb.tt", "lib/#{@namespaced_path}.rb")
|
54
|
+
copy("newgem/VERSION", "VERSION")
|
55
|
+
FileUtils.mkdir_p(File.join(@target, "lib/#{@namespaced_path}"))
|
56
|
+
end
|
57
|
+
|
58
|
+
def copy_options
|
59
|
+
if @options[:bin]
|
60
|
+
copy("newgem/bin/newgem.tt", "bin/#{@name}")
|
61
|
+
end
|
62
|
+
case @options[:test]
|
63
|
+
when 'rspec'
|
64
|
+
copy("newgem/rspec.tt", ".rspec")
|
65
|
+
copy("newgem/spec/spec_helper.rb.tt", "spec/spec_helper.rb")
|
66
|
+
copy("newgem/spec/newgem_spec.rb.tt", "spec/#{@namespaced_path}_spec.rb")
|
67
|
+
when 'minitest'
|
68
|
+
copy("newgem/test/minitest_helper.rb.tt", "test/minitest_helper.rb")
|
69
|
+
copy("newgem/test/test_newgem.rb.tt", "test/test_#{@namespaced_path}.rb")
|
70
|
+
end
|
71
|
+
puts "Initializing git repo in #{@target}"
|
72
|
+
Dir.chdir(@target) { `git init`; `git add .` }
|
73
|
+
|
74
|
+
if @options[:edit]
|
75
|
+
run("#{@options["edit"]} \"#{gemspec_dest}\"") # Open gemspec in editor
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
private
|
80
|
+
def copy(from, to)
|
81
|
+
@thor.template(File.join(from), File.join(@target, to), @opts)
|
82
|
+
end
|
83
|
+
|
84
|
+
def gem_options
|
85
|
+
constant_name = get_constant_name
|
86
|
+
constant_array = constant_name.split('::')
|
87
|
+
git_user_name = `git config user.name`.chomp
|
88
|
+
git_user_email = `git config user.email`.chomp
|
89
|
+
|
90
|
+
opts = {
|
91
|
+
:name => @name,
|
92
|
+
:namespaced_path => @namespaced_path,
|
93
|
+
:constant_name => constant_name,
|
94
|
+
:constant_array => constant_array,
|
95
|
+
:author => git_user_name.empty? ? "TODO: Write your name" : git_user_name,
|
96
|
+
:email => git_user_email.empty? ? "TODO: Write your email address" : git_user_email,
|
97
|
+
:test => @options[:test],
|
98
|
+
:volt_version_base => volt_version_base
|
99
|
+
}
|
100
|
+
|
101
|
+
return opts
|
102
|
+
end
|
103
|
+
|
104
|
+
def volt_version_base
|
105
|
+
version_path = File.join(File.dirname(__FILE__), '../../../VERSION')
|
106
|
+
File.read(version_path).split('.').tap {|v| v[v.size-1] = 0 }.join('.')
|
107
|
+
end
|
108
|
+
|
109
|
+
def get_constant_name
|
110
|
+
constant_name = @name.split('_').map{|p| p[0..0].upcase + p[1..-1] }.join
|
111
|
+
constant_name = constant_name.split('-').map{|q| q[0..0].upcase + q[1..-1] }.join('::') if constant_name =~ /-/
|
112
|
+
|
113
|
+
return constant_name
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
data/lib/volt/router/routes.rb
CHANGED
@@ -12,19 +12,20 @@ class Routes
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def get(path, options)
|
15
|
-
if path.index('
|
16
|
-
sections = path.split(/([
|
15
|
+
if path.index('{') && path.index('}')
|
16
|
+
sections = path.split(/(\{[^\}]+\})/)
|
17
|
+
sections = sections.reject {|v| v == '' }
|
17
18
|
|
18
19
|
sections.each do |section|
|
19
|
-
if section[0] == '
|
20
|
-
options[section[1..-
|
20
|
+
if section[0] == '{' && section[-1] == '}'
|
21
|
+
options[section[1..-2]] = nil
|
21
22
|
end
|
22
23
|
end
|
23
24
|
path = Proc.new do |params|
|
24
25
|
# Create a path using the params in the path
|
25
26
|
sections.map do |section|
|
26
|
-
if section[0] == '
|
27
|
-
params[section[1..-
|
27
|
+
if section[0] == '{' && section[-1] == '}'
|
28
|
+
params[section[1..-2]]
|
28
29
|
else
|
29
30
|
section
|
30
31
|
end
|
@@ -73,7 +74,9 @@ class Routes
|
|
73
74
|
|
74
75
|
def params_match_options?(params, options)
|
75
76
|
options.each_pair do |key, value|
|
76
|
-
|
77
|
+
# A nil value means it can match anything, so we don't want to
|
78
|
+
# fail on nil.
|
79
|
+
if value != nil && value != params.send(key)
|
77
80
|
return false
|
78
81
|
end
|
79
82
|
end
|
data/lib/volt/server.rb
CHANGED
@@ -8,114 +8,54 @@ require "sprockets-sass"
|
|
8
8
|
require "sass"
|
9
9
|
|
10
10
|
require 'volt/extra_core/extra_core'
|
11
|
-
require 'volt/server/request_handler'
|
12
11
|
require 'volt/server/component_handler'
|
13
12
|
if RUBY_PLATFORM != 'java'
|
14
13
|
require 'volt/server/channel_handler'
|
15
14
|
end
|
16
|
-
require 'volt/server/
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
def initialize(app, files)
|
21
|
-
@app = app
|
22
|
-
@files = files
|
23
|
-
end
|
24
|
-
|
25
|
-
def call(env)
|
26
|
-
if %w[/ /demo /blog /todos /page3 /page4].include?(env['PATH_INFO']) || env['PATH_INFO'][0..5] == '/todos'
|
27
|
-
[200, { 'Content-Type' => 'text/html' }, [html]]
|
28
|
-
else
|
29
|
-
@app.call env
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def html
|
34
|
-
index_path = File.expand_path(File.join(Dir.pwd, "public/index.html"))
|
35
|
-
html = File.read(index_path)
|
36
|
-
|
37
|
-
ERB.new(html).result(binding)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
SOURCE_MAPS = !!ENV['MAPS']
|
44
|
-
|
45
|
-
Opal::Processor.source_map_enabled = SOURCE_MAPS
|
46
|
-
# Opal::Processor.arity_check_enabled = true
|
47
|
-
# Opal::Processor.dynamic_require_severity = :raise
|
48
|
-
|
15
|
+
require 'volt/server/rack/component_paths'
|
16
|
+
require 'volt/server/rack/index_files'
|
17
|
+
require 'volt/server/rack/opal_files'
|
49
18
|
|
50
19
|
|
51
20
|
class Server
|
52
|
-
def
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
# run RequestHandler.new
|
57
|
-
|
58
|
-
use Rack::ShowExceptions
|
59
|
-
|
60
|
-
map '/components' do
|
61
|
-
run ComponentHandler.new
|
62
|
-
end
|
63
|
-
|
64
|
-
environment = Opal::Environment.new
|
65
|
-
|
66
|
-
app_path = File.expand_path(File.join(Dir.pwd, "app"))
|
67
|
-
environment.append_path(app_path)
|
68
|
-
|
69
|
-
volt_gem_lib_path = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
70
|
-
environment.append_path(volt_gem_lib_path)
|
71
|
-
|
72
|
-
# Add the opal load paths
|
73
|
-
Opal.paths.each do |path|
|
74
|
-
environment.append_path(path)
|
75
|
-
end
|
76
|
-
|
77
|
-
# opal-jquery gem
|
78
|
-
spec = Gem::Specification.find_by_name("opal-jquery")
|
79
|
-
environment.append_path(spec.gem_dir + "/opal")
|
80
|
-
|
81
|
-
|
82
|
-
map '/assets' do
|
83
|
-
run environment
|
84
|
-
end
|
85
|
-
|
86
|
-
if SOURCE_MAPS
|
87
|
-
source_maps = SourceMapServer.new(environment)
|
21
|
+
def initialize
|
22
|
+
@app_path = File.expand_path(File.join(Dir.pwd, "app"))
|
23
|
+
@component_paths = ComponentPaths.new
|
24
|
+
end
|
88
25
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
26
|
+
def app
|
27
|
+
@app = Rack::Builder.new
|
28
|
+
@app.use Rack::CommonLogger
|
29
|
+
@app.use Rack::ShowExceptions
|
93
30
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
end
|
98
|
-
end
|
31
|
+
@app.map '/components' do
|
32
|
+
run ComponentHandler.new
|
33
|
+
end
|
99
34
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
35
|
+
# Serve the main html files from public, also figure out
|
36
|
+
# which JS/CSS files to serve.
|
37
|
+
@app.use IndexFiles, @component_paths
|
38
|
+
|
39
|
+
# Serve the opal files
|
40
|
+
OpalFiles.new(@app, @app_path, @component_paths)
|
41
|
+
|
42
|
+
# Handle socks js connection
|
43
|
+
if RUBY_PLATFORM != 'java'
|
44
|
+
@app.map "/channel" do
|
45
|
+
run Rack::SockJS.new(ChannelHandler)#, :websocket => false
|
104
46
|
end
|
105
|
-
|
106
|
-
use Index, files
|
107
|
-
|
108
|
-
use Rack::Static,
|
109
|
-
:urls => ["/"],
|
110
|
-
:root => "public",
|
111
|
-
:index => "",
|
112
|
-
:header_rules => [
|
113
|
-
[:all, {'Cache-Control' => 'public, max-age=86400'}]
|
114
|
-
]
|
115
|
-
|
116
|
-
run lambda{ |env| [ 404, { 'Content-Type' => 'text/html' }, ['404 - page not found'] ] }
|
117
47
|
end
|
118
48
|
|
119
|
-
|
49
|
+
@app.use Rack::Static,
|
50
|
+
:urls => ["/"],
|
51
|
+
:root => "public",
|
52
|
+
:index => "",
|
53
|
+
:header_rules => [
|
54
|
+
[:all, {'Cache-Control' => 'public, max-age=86400'}]
|
55
|
+
]
|
56
|
+
|
57
|
+
@app.run lambda{ |env| [ 404, { 'Content-Type' => 'text/html' }, ['404 - page not found'] ] }
|
58
|
+
|
59
|
+
return @app
|
120
60
|
end
|
121
61
|
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'volt/server/rack/component_paths'
|
2
|
+
|
3
|
+
SOURCE_MAPS = !!ENV['MAPS'] unless defined?(SOURCE_MAPS)
|
4
|
+
|
5
|
+
# Takes in the path to a component and gets all other components
|
6
|
+
# required from this one
|
7
|
+
class ComponentFiles
|
8
|
+
def initialize(component_name, component_paths)
|
9
|
+
@component_name = component_name
|
10
|
+
@component_paths = component_paths
|
11
|
+
@asset_folders = []
|
12
|
+
@components = [component_name]
|
13
|
+
|
14
|
+
load_child_components
|
15
|
+
add_asset_folder(component_name)
|
16
|
+
end
|
17
|
+
|
18
|
+
def components
|
19
|
+
@components
|
20
|
+
end
|
21
|
+
|
22
|
+
def component(name)
|
23
|
+
# Load any sub-requires
|
24
|
+
child_files = ComponentFiles.new(name, @component_paths)
|
25
|
+
new_components = child_files.components
|
26
|
+
|
27
|
+
# remove any we already have
|
28
|
+
new_components = new_components - @components
|
29
|
+
new_components.each {|nc| add_asset_folder(nc) }
|
30
|
+
|
31
|
+
@components += new_components
|
32
|
+
|
33
|
+
return @components
|
34
|
+
end
|
35
|
+
|
36
|
+
def add_asset_folder(component_name)
|
37
|
+
path = path_to_component(component_name)
|
38
|
+
|
39
|
+
asset_folder = File.join(path, 'assets')
|
40
|
+
if File.directory?(asset_folder)
|
41
|
+
@asset_folders << asset_folder
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def path_to_component(name=nil)
|
46
|
+
@component_paths.component_path(name || @component_name)
|
47
|
+
end
|
48
|
+
|
49
|
+
def load_child_components
|
50
|
+
path = path_to_component
|
51
|
+
if path
|
52
|
+
dependencies_file = File.join(path_to_component, "config/dependencies.rb")
|
53
|
+
else
|
54
|
+
raise "Unable to find component #{@component_name.inspect}"
|
55
|
+
end
|
56
|
+
|
57
|
+
if File.exists?(dependencies_file)
|
58
|
+
# Run the dependencies file in this ComponentFiles context
|
59
|
+
code = File.read(dependencies_file)
|
60
|
+
puts "CODE: #{code.inspect}"
|
61
|
+
instance_eval(code)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Returns every asset folder that is included from this component.
|
66
|
+
# This means this components assets folder and any in the dependency chain.
|
67
|
+
def asset_folders
|
68
|
+
files = []
|
69
|
+
@asset_folders.each do |asset_folder|
|
70
|
+
files << yield(asset_folder)
|
71
|
+
end
|
72
|
+
|
73
|
+
return files.flatten
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
def javascript_files
|
78
|
+
if SOURCE_MAPS
|
79
|
+
javascript_files = environment['volt/templates/page'].to_a.map {|v| '/assets/' + v.logical_path + '?body=1' }
|
80
|
+
else
|
81
|
+
javascript_files = ['/assets/volt/templates/page.js']
|
82
|
+
end
|
83
|
+
|
84
|
+
javascript_files << '/components/home.js'
|
85
|
+
javascript_files += asset_folders do |asset_folder|
|
86
|
+
Dir["#{asset_folder}/**/*.js"].map {|path| '/assets' + path[asset_folder.size..-1] }
|
87
|
+
end
|
88
|
+
|
89
|
+
return javascript_files
|
90
|
+
end
|
91
|
+
|
92
|
+
def css_files
|
93
|
+
asset_folders do |asset_folder|
|
94
|
+
Dir["#{asset_folder}/**/*.{css,scss}"].map {|path| '/assets' + path[asset_folder.size..-1].gsub(/[.]scss$/, '') }
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|