volt 0.9.5.pre7 → 0.9.5.pre8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/volt/cli.rb +21 -12
- data/lib/volt/cli/asset_compile.rb +13 -8
- data/lib/volt/cli/base_index_renderer.rb +4 -3
- data/lib/volt/cli/new_gem.rb +22 -4
- data/lib/volt/models/model.rb +3 -0
- data/lib/volt/models/validators/length_validator.rb +2 -2
- data/lib/volt/page/bindings/event_binding.rb +4 -4
- data/lib/volt/server/middleware/default_middleware_stack.rb +2 -2
- data/lib/volt/server/rack/asset_files.rb +12 -7
- data/lib/volt/server/rack/component_code.rb +3 -2
- data/lib/volt/server/rack/component_paths.rb +1 -1
- data/lib/volt/server/rack/index_files.rb +5 -5
- data/lib/volt/server/rack/opal_files.rb +7 -6
- data/lib/volt/server/rack/sprockets_helpers_setup.rb +41 -7
- data/lib/volt/server/template_handlers/sprockets_component_handler.rb +1 -1
- data/lib/volt/utils/recursive_exists.rb +19 -0
- data/lib/volt/version.rb +1 -1
- data/lib/volt/volt/app.rb +3 -1
- data/lib/volt/volt/server_setup/app.rb +8 -0
- data/spec/apps/file_loading/app/disable_auto/config/dependencies.rb +1 -1
- data/spec/apps/kitchen_sink/Gemfile +1 -1
- data/spec/apps/kitchen_sink/app/main/views/main/store_demo.html +1 -5
- data/spec/integration/todos_spec.rb +26 -2
- data/spec/models/validators/length_validator_spec.rb +2 -10
- data/spec/server/rack/asset_files_spec.rb +35 -35
- data/spec/server/rack/rack_requests_spec.rb +2 -1
- data/spec/server/rack/sprockets_helpers_setup.rb +15 -0
- data/templates/newgem/Gemfile.tt +11 -0
- data/templates/newgem/app/newgem/tasks/.empty_directory +0 -0
- data/templates/newgem/newgem.gemspec.tt +16 -1
- data/templates/newgem/spec/integration/sample_integration_spec.rb +11 -0
- data/templates/newgem/spec/newgem_spec.rb.tt +0 -4
- data/templates/newgem/spec/spec_helper.rb.tt +5 -1
- data/templates/project/Gemfile.tt +5 -5
- data/volt.gemspec +1 -1
- metadata +10 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c66c8281cc4ad10eadde2b575b4ca2606cf270e8
|
4
|
+
data.tar.gz: f76598259c1dcd62376c61efb2f208295bc221cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a5f7e6b83f481e1c81222c93df07f77a2fc3dc8715de60712950701cda264c6192fa9ce294d680f4ce77fba651948562386d774e312893862a374e0b7253218a
|
7
|
+
data.tar.gz: 89030a005ae230751ed6f45f0afaa1ac190fbe0c0abe3fb63f9e7643ffda2675904748251f86dd4bbab53a84fb70af0bb208f5e42ef95bb7a6591d6d25668dde
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
3
|
## 0.9.5
|
4
|
+
### Breaking Changes
|
5
|
+
- previously, we mounted the asset folders in components at /assets, and we also mounted the /app folder (and any gem's app folders') at /assets. This allowed you to usually access what you wanted at /assets, but resulted in conflicts. To ensure better component isolation, we now only mount the ```app``` folders. To make things clear, instead of sprockets being mounted at /assets, it is now mounted at /app. So the url for something in /app/main/assets/css/something.css can be accessed at (you guessed it) /app/main/assets/css/something.css
|
6
|
+
|
4
7
|
### Added
|
5
8
|
- You can now disable auto-import of JS/CSS with ```disable_auto_import``` in a dependencies.rb file
|
6
9
|
- Opal was upgraded to 0.8, which brings sourcemaps back (yah!)
|
@@ -12,6 +15,8 @@
|
|
12
15
|
- Rewrote the precompile pipeline.
|
13
16
|
- Added image compression by default. (using image_optim)
|
14
17
|
- All volt CLI tasks now can run from inside of any directory in the volt app (or the root)
|
18
|
+
- Asset precompilation has been reworked to use Sprockets::Manifest. The results are written to /public, and an index.html file is created. The entire app loading up until the websocket connect can be served statically (via nginx for example) All js and css is written to a single file.
|
19
|
+
- The ```generate gem``` generator has been improved to setup a dummy app and integration specs out of the box.
|
15
20
|
|
16
21
|
### Changed
|
17
22
|
- fix issue with ```raw``` and promises (#275)
|
data/lib/volt/cli.rb
CHANGED
@@ -17,16 +17,7 @@ module Volt
|
|
17
17
|
desc 'new PROJECT_NAME', 'generates a new project.'
|
18
18
|
|
19
19
|
def new(name)
|
20
|
-
|
21
|
-
|
22
|
-
# Grab the current volt version
|
23
|
-
directory('project', name, version: Volt::Version::STRING, name: name, domain: name.dasherize.downcase, app_name: name.capitalize)
|
24
|
-
|
25
|
-
# Move into the directory
|
26
|
-
Dir.chdir(name) do
|
27
|
-
# bundle
|
28
|
-
bundle_command('install')
|
29
|
-
end
|
20
|
+
new_project(name)
|
30
21
|
|
31
22
|
say ""
|
32
23
|
say "Your app is now ready in the #{name} directory.", :green
|
@@ -63,11 +54,12 @@ module Volt
|
|
63
54
|
|
64
55
|
require 'fileutils'
|
65
56
|
require 'volt/server'
|
57
|
+
require 'volt/utils/recursive_exists'
|
66
58
|
|
67
59
|
# If we're in a Volt project, clear the temp directory
|
68
60
|
# TODO: this is a work around for a bug when switching between
|
69
61
|
# source maps and non-source maps.
|
70
|
-
if
|
62
|
+
if RecursiveExists.exists_here_or_up?('config.ru') && RecursiveExists.exists_here_or_up?('Gemfile')
|
71
63
|
# FileUtils.rm_rf('tmp/sass')
|
72
64
|
# FileUtils.rm_rf('tmp/sprockets')
|
73
65
|
else
|
@@ -126,13 +118,30 @@ module Volt
|
|
126
118
|
end
|
127
119
|
|
128
120
|
no_tasks do
|
121
|
+
# The logic for creating a new project. We want to be able to invoke this
|
122
|
+
# inside of a method so we can run it with Dir.chdir
|
123
|
+
def new_project(name, skip_gemfile = false)
|
124
|
+
require 'securerandom'
|
125
|
+
|
126
|
+
# Grab the current volt version
|
127
|
+
directory('project', name, version: Volt::Version::STRING, name: name, domain: name.dasherize.downcase, app_name: name.capitalize)
|
128
|
+
|
129
|
+
unless skip_gemfile
|
130
|
+
# Move into the directory
|
131
|
+
Dir.chdir(name) do
|
132
|
+
# bundle
|
133
|
+
bundle_command('install')
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
129
138
|
def move_to_root
|
130
139
|
unless Gem.win_platform?
|
131
140
|
# Change CWD to the root of the volt project
|
132
141
|
pwd = Dir.pwd
|
133
142
|
changed = false
|
134
143
|
loop do
|
135
|
-
if File.exists?(pwd + '/Gemfile')
|
144
|
+
if File.exists?(pwd + '/config.ru') || File.exists?(pwd + '/Gemfile')
|
136
145
|
Dir.chdir(pwd) if changed
|
137
146
|
break
|
138
147
|
else
|
@@ -16,6 +16,11 @@ module Volt
|
|
16
16
|
ENV['MAPS'] = 'false'
|
17
17
|
ENV['NO_FORKING'] = 'true'
|
18
18
|
|
19
|
+
if !ENV['VOLT_ENV'] && !ENV['RACK_ENV']
|
20
|
+
# Set the default env for compile
|
21
|
+
ENV['VOLT_ENV'] = 'production'
|
22
|
+
end
|
23
|
+
|
19
24
|
require 'opal'
|
20
25
|
require 'rack'
|
21
26
|
require 'volt'
|
@@ -41,7 +46,7 @@ module Volt
|
|
41
46
|
end
|
42
47
|
|
43
48
|
def write_files_and_manifest
|
44
|
-
asset_files = AssetFiles.from_cache('main', @volt_app.component_paths)
|
49
|
+
asset_files = AssetFiles.from_cache(@volt_app.app_url, 'main', @volt_app.component_paths)
|
45
50
|
# Write a temp css file
|
46
51
|
js = asset_files.javascript(@volt_app)
|
47
52
|
css = asset_files.css
|
@@ -51,7 +56,7 @@ module Volt
|
|
51
56
|
js.each do |type, src_or_body|
|
52
57
|
if type == :src
|
53
58
|
src = src_or_body
|
54
|
-
url = src.gsub(
|
59
|
+
url = src.gsub(/^#{@volt_app.app_url}\//, '')
|
55
60
|
file.write("//= require '#{url}'\n")
|
56
61
|
else
|
57
62
|
body = src_or_body
|
@@ -73,14 +78,14 @@ module Volt
|
|
73
78
|
|
74
79
|
File.open(Volt.root + '/app/main/app.scss', 'wb') do |file|
|
75
80
|
css.each do |link|
|
76
|
-
url = link.gsub(
|
81
|
+
url = link.gsub(/^#{@volt_app.app_url}\//, '')
|
77
82
|
file.write("//= require '#{url}'\n")
|
78
83
|
end
|
79
84
|
end
|
80
85
|
end
|
81
86
|
|
82
87
|
def compile_manifests
|
83
|
-
manifest = Sprockets::Manifest.new(@volt_app.sprockets,
|
88
|
+
manifest = Sprockets::Manifest.new(@volt_app.sprockets, "./public#{@volt_app.app_url}/manifest.json")
|
84
89
|
|
85
90
|
# Compile the files (and linked assets)
|
86
91
|
manifest.compile('main/app.js')
|
@@ -90,8 +95,8 @@ module Volt
|
|
90
95
|
@tmp_files.each {|path| FileUtils.rm(path) }
|
91
96
|
|
92
97
|
# Remove the temp files
|
93
|
-
FileUtils.rm(Volt.root +
|
94
|
-
FileUtils.rm(Volt.root +
|
98
|
+
FileUtils.rm(Volt.root + "#{@volt_app.app_url}/main/app.js")
|
99
|
+
FileUtils.rm(Volt.root + "#{@volt_app.app_url}/main/app.scss")
|
95
100
|
end
|
96
101
|
|
97
102
|
def write_index
|
@@ -100,8 +105,8 @@ module Volt
|
|
100
105
|
output_path = "#{@root_path}/public/index.html"
|
101
106
|
require 'json'
|
102
107
|
|
103
|
-
@manifest = JSON.parse(File.read(@root_path +
|
104
|
-
output_html = BaseIndexRenderer.new(@manifest).html
|
108
|
+
@manifest = JSON.parse(File.read(@root_path + "/public#{@volt_app.app_url}/manifest.json"))
|
109
|
+
output_html = BaseIndexRenderer.new(@volt_app, @manifest).html
|
105
110
|
|
106
111
|
write_file(output_path, output_html)
|
107
112
|
end
|
@@ -3,7 +3,8 @@
|
|
3
3
|
|
4
4
|
module Volt
|
5
5
|
class BaseIndexRenderer
|
6
|
-
def initialize(manifest)
|
6
|
+
def initialize(volt_app, manifest)
|
7
|
+
@volt_app = volt_app
|
7
8
|
@manifest = manifest
|
8
9
|
end
|
9
10
|
|
@@ -16,11 +17,11 @@ module Volt
|
|
16
17
|
|
17
18
|
# When writing the index, we render the
|
18
19
|
def javascript_tags
|
19
|
-
"<script src=\"
|
20
|
+
"<script async src=\"#{@volt_app.app_url}/#{@manifest['assets']['main/app.js']}\"></script>"
|
20
21
|
end
|
21
22
|
|
22
23
|
def css_tags
|
23
|
-
"<link href=\"
|
24
|
+
"<link href=\"#{@volt_app.app_url}/#{@manifest['assets']['main/app.css']}\" media=\"all\" rel=\"stylesheet\" type=\"text/css\" />"
|
24
25
|
end
|
25
26
|
end
|
26
27
|
end
|
data/lib/volt/cli/new_gem.rb
CHANGED
@@ -25,6 +25,25 @@ class NewGem
|
|
25
25
|
|
26
26
|
copy_files
|
27
27
|
copy_options
|
28
|
+
|
29
|
+
# Create a sample project inside of the specs folder
|
30
|
+
Dir.chdir(@target + '/spec') do
|
31
|
+
@thor.say 'Generating dummy project for integration specs', :green
|
32
|
+
cli = Volt::CLI.new
|
33
|
+
cli.shell.mute do
|
34
|
+
cli.new_project('dummy', true)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Remove gemfile
|
38
|
+
FileUtils.rm('dummy/Gemfile')
|
39
|
+
|
40
|
+
# Remove spec directory inside of dummy app
|
41
|
+
FileUtils.rm_rf('dummy/spec')
|
42
|
+
end
|
43
|
+
|
44
|
+
puts "Initializing git repo in #{@target}"
|
45
|
+
Dir.chdir(@target) { `git init`; `git add .` }
|
46
|
+
|
28
47
|
end
|
29
48
|
|
30
49
|
# Check with the rubygems api to see if this gem name is available.
|
@@ -78,9 +97,8 @@ at choosealicense.com/licenses/mit.\n\ny/(n):")
|
|
78
97
|
copy('newgem/bin/newgem.tt', "bin/#{@name}") if @options[:bin]
|
79
98
|
copy('newgem/rspec.tt', '.rspec')
|
80
99
|
copy('newgem/spec/spec_helper.rb.tt', 'spec/spec_helper.rb')
|
81
|
-
copy('newgem/spec/newgem_spec.rb.tt', "spec
|
82
|
-
|
83
|
-
Dir.chdir(@target) { `git init`; `git add .` }
|
100
|
+
copy('newgem/spec/newgem_spec.rb.tt', "spec/sample_spec.rb")
|
101
|
+
copy('newgem/spec/integration/sample_integration_spec.rb', "spec/integration/sample_integration_spec.rb")
|
84
102
|
|
85
103
|
if @options[:edit]
|
86
104
|
run("#{@options['edit']} \"#{gemspec_dest}\"") # Open gemspec in editor
|
@@ -115,7 +133,7 @@ at choosealicense.com/licenses/mit.\n\ny/(n):")
|
|
115
133
|
|
116
134
|
def volt_version_base
|
117
135
|
require 'volt/version'
|
118
|
-
Volt::Version::STRING
|
136
|
+
Volt::Version::STRING
|
119
137
|
end
|
120
138
|
|
121
139
|
def get_constant_name
|
data/lib/volt/models/model.rb
CHANGED
@@ -19,9 +19,9 @@ module Volt
|
|
19
19
|
end
|
20
20
|
|
21
21
|
if !value || value.size < min
|
22
|
-
errors[field_name] = [message || "must be at least #{
|
22
|
+
errors[field_name] = [message || "must be at least #{min} characters"]
|
23
23
|
elsif max && value.size > max
|
24
|
-
errors[field_name] = [message || "must be less than #{
|
24
|
+
errors[field_name] = [message || "must be less than #{max} characters"]
|
25
25
|
end
|
26
26
|
|
27
27
|
errors
|
@@ -13,19 +13,19 @@ module Volt
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def key_code
|
16
|
-
`
|
16
|
+
`self.js_event.keyCode`
|
17
17
|
end
|
18
18
|
|
19
19
|
def stop!
|
20
|
-
`
|
20
|
+
`self.js_event.stopPropagation();`
|
21
21
|
end
|
22
22
|
|
23
23
|
def prevent_default!
|
24
|
-
`
|
24
|
+
`self.js_event.preventDefault();`
|
25
25
|
end
|
26
26
|
|
27
27
|
def target
|
28
|
-
`
|
28
|
+
`self.js_event.toElement || self.js_event.target`
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -43,11 +43,11 @@ module Volt
|
|
43
43
|
# can set them up.
|
44
44
|
def self.postboot_setup(volt_app, rack_app)
|
45
45
|
# Serve the opal files
|
46
|
-
opal_files = OpalFiles.new(rack_app, volt_app.app_path, volt_app.component_paths)
|
46
|
+
opal_files = OpalFiles.new(rack_app, volt_app.app_url, volt_app.app_path, volt_app.component_paths)
|
47
47
|
volt_app.opal_files = opal_files
|
48
48
|
volt_app.sprockets = opal_files.environment
|
49
49
|
|
50
|
-
Volt::SprocketsHelpersSetup.new(volt_app
|
50
|
+
Volt::SprocketsHelpersSetup.new(volt_app)
|
51
51
|
|
52
52
|
# Serve the main html files from public, also figure out
|
53
53
|
# which JS/CSS files to serve.
|
@@ -4,17 +4,18 @@ require 'uri'
|
|
4
4
|
# from the dependencies.rb files.
|
5
5
|
module Volt
|
6
6
|
class AssetFiles
|
7
|
-
def self.from_cache(component_name, component_paths)
|
7
|
+
def self.from_cache(app_url, component_name, component_paths)
|
8
8
|
# @cache ||= {}
|
9
9
|
|
10
10
|
# @cache[component_name] ||= begin
|
11
11
|
# not cached, create
|
12
12
|
|
13
|
-
self.new(component_name, component_paths)
|
13
|
+
self.new(app_url, component_name, component_paths)
|
14
14
|
# end
|
15
15
|
end
|
16
16
|
|
17
|
-
def initialize(component_name, component_paths)
|
17
|
+
def initialize(app_url, component_name, component_paths)
|
18
|
+
@app_url = app_url
|
18
19
|
@component_paths = component_paths
|
19
20
|
@assets = []
|
20
21
|
@included_components = {}
|
@@ -93,7 +94,7 @@ module Volt
|
|
93
94
|
|
94
95
|
def prepare_locator(locator, valid_extensions)
|
95
96
|
unless url_or_path?(locator)
|
96
|
-
locator = File.join(
|
97
|
+
locator = File.join(@app_url, @current_component, '/assets', valid_extensions.first, "#{locator}")
|
97
98
|
locator += '.css' unless locator =~ /^.*\.(#{valid_extensions.join('|')})$/
|
98
99
|
end
|
99
100
|
locator
|
@@ -129,7 +130,10 @@ module Volt
|
|
129
130
|
case type
|
130
131
|
when :folder
|
131
132
|
# for a folder, we search for all .js files and return a tag for them
|
132
|
-
javascript_files += Dir["#{path}/**/*.js"].sort.map
|
133
|
+
javascript_files += Dir["#{path}/**/*.js"].sort.map do |folder|
|
134
|
+
# Grab the component folder/assets/js/file.js
|
135
|
+
@app_url + '/' + folder.split('/')[-4..-1].join('/')
|
136
|
+
end
|
133
137
|
when :javascript_file
|
134
138
|
# javascript_file is a cdn path to a JS file
|
135
139
|
javascript_files << path
|
@@ -146,7 +150,7 @@ module Volt
|
|
146
150
|
if ENV['MAPS'] == 'all'
|
147
151
|
scripts << @opal_tag_generator.javascript_include_tag(volt_path)
|
148
152
|
else
|
149
|
-
scripts << "<script src=\"
|
153
|
+
scripts << "<script src=\"#{volt_app.app_url}/#{volt_path}.js\"></script>"
|
150
154
|
scripts << "<script>#{Opal::Processor.load_asset_code(volt_app.sprockets, volt_path)}</script>"
|
151
155
|
end
|
152
156
|
|
@@ -172,7 +176,8 @@ module Volt
|
|
172
176
|
# aren't imported by default:
|
173
177
|
# http://sass-lang.com/guide
|
174
178
|
css_files += Dir["#{path}/**/[^_]*.{css,scss}"].sort.map do |folder|
|
175
|
-
|
179
|
+
last4 = folder.split('/')[-4..-1].join('/').gsub(/[.]scss$/, '')
|
180
|
+
css_path = @app_url + '/' + last4
|
176
181
|
css_path += '.css' unless css_path =~ /[.]css$/
|
177
182
|
css_path
|
178
183
|
end
|
@@ -6,7 +6,8 @@ require 'volt/server/rack/asset_files'
|
|
6
6
|
# method that returns all of the ruby setup code for the component.
|
7
7
|
module Volt
|
8
8
|
class ComponentCode
|
9
|
-
def initialize(component_name, component_paths, client = true)
|
9
|
+
def initialize(volt_app, component_name, component_paths, client = true)
|
10
|
+
@volt_app = volt_app
|
10
11
|
@component_name = component_name
|
11
12
|
@component_paths = component_paths
|
12
13
|
@client = client
|
@@ -17,7 +18,7 @@ module Volt
|
|
17
18
|
# Start with config code
|
18
19
|
code = @client ? generate_config_code : ''
|
19
20
|
|
20
|
-
asset_files = AssetFiles.from_cache(@component_name, @component_paths)
|
21
|
+
asset_files = AssetFiles.from_cache(@volt_app.app_url, @component_name, @component_paths)
|
21
22
|
asset_files.component_paths.each do |component_path, component_name|
|
22
23
|
code << ComponentTemplates.new(component_path, component_name, @client).code
|
23
24
|
code << "\n\n"
|
@@ -84,7 +84,7 @@ module Volt
|
|
84
84
|
# Load in all views and routes
|
85
85
|
# TODO: Nested components listed twice are are loaded multiple times
|
86
86
|
component_names.uniq.each do |component_name|
|
87
|
-
code = Volt::ComponentCode.new(component_name, self, false).code
|
87
|
+
code = Volt::ComponentCode.new(volt_app, component_name, self, false).code
|
88
88
|
# Evaluate returned code, the ```volt_app``` variable is set for access.
|
89
89
|
eval(code)
|
90
90
|
end
|
@@ -4,8 +4,8 @@ require 'volt/router/routes'
|
|
4
4
|
# Serves the main pages
|
5
5
|
module Volt
|
6
6
|
class IndexFiles
|
7
|
-
def initialize(
|
8
|
-
@
|
7
|
+
def initialize(rack_app, volt_app, component_paths, opal_files)
|
8
|
+
@rack_app = rack_app
|
9
9
|
@volt_app = volt_app
|
10
10
|
@component_paths = component_paths
|
11
11
|
@opal_files = opal_files
|
@@ -37,7 +37,7 @@ module Volt
|
|
37
37
|
if route_match?(env['PATH_INFO'])
|
38
38
|
[200, { 'Content-Type' => 'text/html; charset=utf-8' }, [html]]
|
39
39
|
else
|
40
|
-
@
|
40
|
+
@rack_app.call env
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
@@ -58,11 +58,11 @@ module Volt
|
|
58
58
|
|
59
59
|
def javascript_tags
|
60
60
|
# TODO: Cache somehow, this is being loaded every time
|
61
|
-
AssetFiles.from_cache('main', @component_paths).javascript_tags(@volt_app)
|
61
|
+
AssetFiles.from_cache(@volt_app.app_url, 'main', @component_paths).javascript_tags(@volt_app)
|
62
62
|
end
|
63
63
|
|
64
64
|
def css_tags
|
65
|
-
AssetFiles.from_cache('main', @component_paths).css_tags
|
65
|
+
AssetFiles.from_cache(@volt_app.app_url, 'main', @component_paths).css_tags
|
66
66
|
end
|
67
67
|
end
|
68
68
|
end
|
@@ -12,7 +12,7 @@ module Volt
|
|
12
12
|
class OpalFiles
|
13
13
|
attr_reader :environment, :server
|
14
14
|
|
15
|
-
def initialize(builder, app_path, component_paths)
|
15
|
+
def initialize(builder, app_url, app_path, component_paths)
|
16
16
|
Opal::Processor.source_map_enabled = Volt.source_maps?
|
17
17
|
Opal::Processor.const_missing_enabled = true
|
18
18
|
|
@@ -34,7 +34,7 @@ module Volt
|
|
34
34
|
# Opal::Processor.arity_check_enabled = !Volt.env.production?
|
35
35
|
# Opal::Processor.dynamic_require_severity = :raise
|
36
36
|
|
37
|
-
@server = Opal::Server.new(prefix:
|
37
|
+
@server = Opal::Server.new(prefix: app_url, debug: Volt.source_maps?)
|
38
38
|
@server.use_index = false
|
39
39
|
|
40
40
|
@component_paths = component_paths
|
@@ -78,7 +78,7 @@ module Volt
|
|
78
78
|
# environment in closure
|
79
79
|
environment = @environment
|
80
80
|
|
81
|
-
builder.map
|
81
|
+
builder.map(app_url) do
|
82
82
|
run environment
|
83
83
|
end
|
84
84
|
|
@@ -121,9 +121,10 @@ module Volt
|
|
121
121
|
end
|
122
122
|
|
123
123
|
def add_asset_folders(environment)
|
124
|
-
@component_paths.asset_folders do |asset_folder|
|
125
|
-
|
126
|
-
|
124
|
+
# @component_paths.asset_folders do |asset_folder|
|
125
|
+
# puts "ADD ASSET FOLDER: #{asset_folder.inspect}"
|
126
|
+
# environment.append_path(asset_folder)
|
127
|
+
# end
|
127
128
|
end
|
128
129
|
end
|
129
130
|
end
|
@@ -2,8 +2,9 @@ require 'sprockets-helpers'
|
|
2
2
|
|
3
3
|
module Volt
|
4
4
|
class SprocketsHelpersSetup
|
5
|
-
def initialize(
|
6
|
-
@
|
5
|
+
def initialize(volt_app)
|
6
|
+
@volt_app = volt_app
|
7
|
+
@env = volt_app.sprockets
|
7
8
|
|
8
9
|
setup_path_helpers
|
9
10
|
add_linking_in_asset_path
|
@@ -15,7 +16,7 @@ module Volt
|
|
15
16
|
# Configure Sprockets::Helpers (if necessary)
|
16
17
|
Sprockets::Helpers.configure do |config|
|
17
18
|
config.environment = @env
|
18
|
-
config.prefix =
|
19
|
+
config.prefix = @volt_app.app_url
|
19
20
|
config.public_path = 'public'
|
20
21
|
config.debug = false#!Volt.env.production?
|
21
22
|
|
@@ -36,9 +37,27 @@ module Volt
|
|
36
37
|
# We "freedom-patch" sprockets-helpers asset_path method to
|
37
38
|
# automatically link assets.
|
38
39
|
def asset_path(source, options = {})
|
40
|
+
relative_path = source =~ /^[.][.]\//
|
41
|
+
if relative_path
|
42
|
+
component_root = logical_path.gsub(/\/[^\/]+$/, '')
|
43
|
+
path = File.join(component_root, source)
|
44
|
+
source = Volt::SprocketsHelpersSetup.expand(path)
|
45
|
+
end
|
46
|
+
|
47
|
+
if relative_path
|
48
|
+
link_path = source
|
49
|
+
else
|
50
|
+
link_path = source.gsub(/^#{@volt_app.app_path}\//, '')
|
51
|
+
end
|
52
|
+
|
53
|
+
# Return for absolute urls (one's off site)
|
39
54
|
uri = URI.parse(source)
|
40
55
|
return source if uri.absolute?
|
41
56
|
|
57
|
+
# Link all assets out of the box
|
58
|
+
# Added by volt
|
59
|
+
link_asset(link_path)
|
60
|
+
|
42
61
|
options[:prefix] = Sprockets::Helpers.prefix unless options[:prefix]
|
43
62
|
|
44
63
|
if Sprockets::Helpers.debug || options[:debug]
|
@@ -53,11 +72,8 @@ module Volt
|
|
53
72
|
uri.path << ".#{options[:ext]}"
|
54
73
|
end
|
55
74
|
|
56
|
-
# Link all assets out of the box
|
57
|
-
# Added by volt
|
58
|
-
link_asset(uri)
|
59
|
-
|
60
75
|
path = find_asset_path(uri, source, options)
|
76
|
+
|
61
77
|
if options[:expand] && path.respond_to?(:to_a)
|
62
78
|
path.to_a
|
63
79
|
else
|
@@ -67,5 +83,23 @@ module Volt
|
|
67
83
|
end
|
68
84
|
|
69
85
|
end
|
86
|
+
|
87
|
+
private
|
88
|
+
|
89
|
+
def self.expand(path)
|
90
|
+
parts = path.split('/')
|
91
|
+
|
92
|
+
output = []
|
93
|
+
|
94
|
+
parts.each do |part|
|
95
|
+
if part == '..'
|
96
|
+
output.pop
|
97
|
+
else
|
98
|
+
output << part
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
output.join('/')
|
103
|
+
end
|
70
104
|
end
|
71
105
|
end
|
@@ -49,7 +49,7 @@ module Sprockets
|
|
49
49
|
|
50
50
|
# Working with a component path
|
51
51
|
volt_app = Thread.current['volt_app'] || $volt_app
|
52
|
-
data = Volt::ComponentCode.new(component_name, volt_app.component_paths, true).code
|
52
|
+
data = Volt::ComponentCode.new(volt_app, component_name, volt_app.component_paths, true).code
|
53
53
|
else
|
54
54
|
data = env.read_file(input[:filename], input[:content_type])
|
55
55
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Volt
|
2
|
+
module RecursiveExists
|
3
|
+
def self.exists_here_or_up?(file)
|
4
|
+
# Check for a gemfile here or up a directory
|
5
|
+
pwd = Dir.pwd
|
6
|
+
|
7
|
+
loop do
|
8
|
+
if File.exists?("#{pwd}/#{file}")
|
9
|
+
return true
|
10
|
+
else
|
11
|
+
pwd = pwd.gsub(/\/[^\/]+$/, '')
|
12
|
+
return false if pwd == ''
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
false
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/volt/version.rb
CHANGED
data/lib/volt/volt/app.rb
CHANGED
@@ -91,7 +91,9 @@ module Volt
|
|
91
91
|
# Load up the main component dependencies. This is needed to load in
|
92
92
|
# any opal_gem calls in dependencies.rb
|
93
93
|
# TODO: Needs to support all components
|
94
|
-
|
94
|
+
if Dir.exists?(Volt.root + '/app/main')
|
95
|
+
AssetFiles.from_cache(app_url, 'main', component_paths)
|
96
|
+
end
|
95
97
|
|
96
98
|
reset_query_pool!
|
97
99
|
|
@@ -10,6 +10,11 @@ end
|
|
10
10
|
module Volt
|
11
11
|
module ServerSetup
|
12
12
|
module App
|
13
|
+
# The root url is where the volt app is mounted
|
14
|
+
attr_reader :root_url
|
15
|
+
# The app url is where the app folder (and sprockets) is mounted
|
16
|
+
attr_reader :app_url
|
17
|
+
|
13
18
|
def setup_paths
|
14
19
|
# Load component paths
|
15
20
|
@component_paths = ComponentPaths.new(@app_path)
|
@@ -19,6 +24,9 @@ module Volt
|
|
19
24
|
def load_app_code
|
20
25
|
setup_router
|
21
26
|
require_http_controllers
|
27
|
+
|
28
|
+
@root_url = '/'
|
29
|
+
@app_url = '/app'
|
22
30
|
end
|
23
31
|
|
24
32
|
def setup_router
|
@@ -7,7 +7,7 @@ gem 'volt-mongo'
|
|
7
7
|
|
8
8
|
# The following gem's are optional for themeing
|
9
9
|
# Twitter bootstrap
|
10
|
-
gem 'volt-bootstrap', '~> 0.0
|
10
|
+
gem 'volt-bootstrap', '~> 0.1.0'
|
11
11
|
|
12
12
|
# Simple theme for bootstrap, remove to theme yourself.
|
13
13
|
gem 'volt-bootstrap_jumbotron_theme', '~> 0.1.0'
|
@@ -1,11 +1,12 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'todos app', type: :feature, sauce: true do
|
4
|
+
ENTER_KEY = ENV["BROWSER"] == 'phantom' ? :Enter : :return
|
4
5
|
it 'should add a todo and remove it' do
|
5
6
|
visit '/todos'
|
6
7
|
|
7
8
|
fill_in 'newtodo', :with => 'Todo 1'
|
8
|
-
find('#newtodo').native.send_keys(
|
9
|
+
find('#newtodo').native.send_keys(ENTER_KEY)
|
9
10
|
|
10
11
|
expect(page).to have_content('Todo 1')
|
11
12
|
|
@@ -16,7 +17,30 @@ describe 'todos app', type: :feature, sauce: true do
|
|
16
17
|
expect(page).to_not have_content('Todo 1')
|
17
18
|
|
18
19
|
# Make sure it deleted
|
19
|
-
|
20
|
+
if ENV['BROWSER'] == 'phantom'
|
21
|
+
visit '/todos'
|
22
|
+
else
|
23
|
+
page.driver.browser.navigate.refresh
|
24
|
+
end
|
20
25
|
expect(page).to_not have_content('Todo 1')
|
21
26
|
end
|
27
|
+
|
28
|
+
it 'should update a todo check state and persist' do
|
29
|
+
visit '/todos'
|
30
|
+
|
31
|
+
fill_in 'newtodo', :with => 'Todo 1'
|
32
|
+
find('#newtodo').native.send_keys(ENTER_KEY)
|
33
|
+
|
34
|
+
expect(page).to have_content('Todo 1')
|
35
|
+
|
36
|
+
find("input[type='checkbox']").click
|
37
|
+
|
38
|
+
if ENV['BROWSER'] == 'phantom'
|
39
|
+
visit '/todos'
|
40
|
+
else
|
41
|
+
page.evaluate_script('document.location.reload()')
|
42
|
+
end
|
43
|
+
|
44
|
+
expect(find("input[type='checkbox']").checked?).to eq(true)
|
45
|
+
end
|
22
46
|
end
|
@@ -38,22 +38,14 @@ describe Volt::LengthValidator do
|
|
38
38
|
describe 'when name is "John"' do
|
39
39
|
let(:name) { 'John' }
|
40
40
|
it do
|
41
|
-
|
42
|
-
expect(subject).to eq(name: ["must be at least {\"length\"=>5, \"maximum\"=>10} characters"])
|
43
|
-
else
|
44
|
-
expect(subject).to eq(name: ['must be at least {:length=>5, :maximum=>10} characters'])
|
45
|
-
end
|
41
|
+
expect(subject).to eq(name: ["must be at least 5 characters"])
|
46
42
|
end
|
47
43
|
end
|
48
44
|
|
49
45
|
describe 'when name is "Zach Galifianakis"' do
|
50
46
|
let(:name) { 'Zach Galifianakis' }
|
51
47
|
it do
|
52
|
-
|
53
|
-
expect(subject).to eq(name: ["must be less than {\"length\"=>5, \"maximum\"=>10} characters"])
|
54
|
-
else
|
55
|
-
expect(subject).to eq(name: ['must be less than {:length=>5, :maximum=>10} characters'])
|
56
|
-
end
|
48
|
+
expect(subject).to eq(name: ['must be less than 10 characters'])
|
57
49
|
end
|
58
50
|
end
|
59
51
|
end
|
@@ -11,7 +11,7 @@ if RUBY_PLATFORM != 'opal'
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'should return the dependencies list' do
|
14
|
-
main = Volt::AssetFiles.new('main', @component_paths)
|
14
|
+
main = Volt::AssetFiles.new('/app', 'main', @component_paths)
|
15
15
|
|
16
16
|
components = main.components
|
17
17
|
expect(components).to eq(%w(volt mongo main shared bootstrap slideshow))
|
@@ -20,31 +20,31 @@ if RUBY_PLATFORM != 'opal'
|
|
20
20
|
describe 'js files' do
|
21
21
|
context "when the component's dependencies.rb does not contain .disable_auto_import" do
|
22
22
|
it 'should list all JS files' do
|
23
|
-
main = Volt::AssetFiles.new('main', @component_paths)
|
23
|
+
main = Volt::AssetFiles.new('/app', 'main', @component_paths)
|
24
24
|
expect(main.javascript(volt_app).reject{|v| v[0] != :src }).to eq([
|
25
|
-
[:src,
|
26
|
-
[:src,
|
27
|
-
[:src,
|
28
|
-
[:src,
|
29
|
-
[:src,
|
30
|
-
[:src,
|
31
|
-
[:src,
|
32
|
-
[:src,
|
33
|
-
[:src,
|
25
|
+
[:src, "/app/volt/assets/js/jquery-2.0.3.js"],
|
26
|
+
[:src, "/app/volt/assets/js/volt_js_polyfills.js"],
|
27
|
+
[:src, "/app/volt/assets/js/volt_watch.js"],
|
28
|
+
[:src, "/app/bootstrap/assets/js/bootstrap.js"],
|
29
|
+
[:src, "/app/shared/assets/js/test2.js"],
|
30
|
+
[:src, "/app/slideshow/assets/js/test3.js"],
|
31
|
+
[:src, "/app/main/assets/js/test1.js"],
|
32
|
+
[:src, "/app/volt/volt/app.js"],
|
33
|
+
[:src, "/app/components/main.js"]
|
34
34
|
])
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
38
|
context "when the component's dependencies.rb contains .disable_auto_import" do
|
39
39
|
it 'should list only the files included via the css_file helpers' do
|
40
|
-
disabled_auto = Volt::AssetFiles.new('disable_auto', @component_paths)
|
40
|
+
disabled_auto = Volt::AssetFiles.new('/app', 'disable_auto', @component_paths)
|
41
41
|
expect(disabled_auto.javascript(volt_app).reject{|v| v[0] != :src }).to eq([
|
42
|
-
[:src,
|
43
|
-
[:src,
|
44
|
-
[:src,
|
45
|
-
[:src,
|
46
|
-
[:src,
|
47
|
-
[:src,
|
42
|
+
[:src, "/app/volt/assets/js/jquery-2.0.3.js"],
|
43
|
+
[:src, "/app/volt/assets/js/volt_js_polyfills.js"],
|
44
|
+
[:src, "/app/volt/assets/js/volt_watch.js"],
|
45
|
+
[:src, "/app/disable_auto/assets/js/test1.js"],
|
46
|
+
[:src, "/app/volt/volt/app.js"],
|
47
|
+
[:src, "/app/components/main.js"]
|
48
48
|
])
|
49
49
|
end
|
50
50
|
end
|
@@ -54,23 +54,23 @@ if RUBY_PLATFORM != 'opal'
|
|
54
54
|
|
55
55
|
context "when the component's dependencies.rb does not contain .disable_auto_import" do
|
56
56
|
it 'should list all the asset files in that component' do
|
57
|
-
main = Volt::AssetFiles.new('main', @component_paths)
|
57
|
+
main = Volt::AssetFiles.new('/app', 'main', @component_paths)
|
58
58
|
|
59
59
|
expect(main.css).to eq([
|
60
|
-
|
61
|
-
|
62
|
-
|
60
|
+
"/app/volt/assets/css/notices.css",
|
61
|
+
"/app/bootstrap/assets/css/01-bootstrap.css",
|
62
|
+
"/app/main/assets/css/test3.css"
|
63
63
|
])
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
67
|
context "when the component's dependencies.rb contains .disable_auto_import" do
|
68
68
|
it 'should list only the files included via the css_file helpers' do
|
69
|
-
disabled_auto = Volt::AssetFiles.new('disable_auto', @component_paths)
|
69
|
+
disabled_auto = Volt::AssetFiles.new('/app', 'disable_auto', @component_paths)
|
70
70
|
|
71
71
|
expect(disabled_auto.css).to eq([
|
72
|
-
|
73
|
-
|
72
|
+
"/app/volt/assets/css/notices.css",
|
73
|
+
"/app/disable_auto/assets/css/test1.css"
|
74
74
|
])
|
75
75
|
end
|
76
76
|
end
|
@@ -78,33 +78,33 @@ if RUBY_PLATFORM != 'opal'
|
|
78
78
|
|
79
79
|
describe '.is_url?' do
|
80
80
|
it 'should return true for URIs like //something.com/something.js' do
|
81
|
-
main = Volt::AssetFiles.new('main', @component_paths)
|
81
|
+
main = Volt::AssetFiles.new('/app', 'main', @component_paths)
|
82
82
|
expect(main.url_or_path? '//something.com/a-folder/something.js').to eq(true)
|
83
83
|
end
|
84
84
|
|
85
85
|
it 'should return true for HTTP and HTTPS urls' do
|
86
|
-
main = Volt::AssetFiles.new('main', @component_paths)
|
86
|
+
main = Volt::AssetFiles.new('/app', 'main', @component_paths)
|
87
87
|
expect(main.url_or_path? 'http://something.com/a-folder/something.js').to eq(true)
|
88
88
|
expect(main.url_or_path? 'https://something.com/a-folder/something.js').to eq(true)
|
89
89
|
end
|
90
90
|
|
91
91
|
it 'should return true for paths' do
|
92
|
-
main = Volt::AssetFiles.new('main', @component_paths)
|
92
|
+
main = Volt::AssetFiles.new('/app', 'main', @component_paths)
|
93
93
|
expect(main.url_or_path? 'something.js').to eq(false)
|
94
|
-
expect(main.url_or_path? '/
|
95
|
-
expect(main.url_or_path? '/
|
94
|
+
expect(main.url_or_path? '/app/something.js').to eq(true)
|
95
|
+
expect(main.url_or_path? '/app/something/something.js').to eq(true)
|
96
96
|
end
|
97
97
|
|
98
98
|
it 'should return false for file names' do
|
99
|
-
main = Volt::AssetFiles.new('main', @component_paths)
|
99
|
+
main = Volt::AssetFiles.new('/app', 'main', @component_paths)
|
100
100
|
expect(main.url_or_path? 'something.js').to eq(false)
|
101
|
-
expect(main.url_or_path? '
|
101
|
+
expect(main.url_or_path? 'app/something/something.js').to eq(false)
|
102
102
|
end
|
103
103
|
|
104
104
|
end
|
105
105
|
|
106
106
|
it 'should raise an exception for a missing component gem' do
|
107
|
-
main = Volt::AssetFiles.new('main', @component_paths)
|
107
|
+
main = Volt::AssetFiles.new('/app', 'main', @component_paths)
|
108
108
|
|
109
109
|
relative_dep_path = '../../apps/file_loading/app/missing_deps'
|
110
110
|
path_to_missing_deps = File.join(File.dirname(__FILE__), relative_dep_path)
|
@@ -115,7 +115,7 @@ if RUBY_PLATFORM != 'opal'
|
|
115
115
|
end
|
116
116
|
|
117
117
|
it 'should not raise an exception for a dependency file with valid components' do
|
118
|
-
main = Volt::AssetFiles.new('main', @component_paths)
|
118
|
+
main = Volt::AssetFiles.new('/app', 'main', @component_paths)
|
119
119
|
|
120
120
|
path_to_main = File.join(File.dirname(__FILE__), '../../apps/file_loading/app/main')
|
121
121
|
path_to_missing_deps = File.join(File.dirname(__FILE__), path_to_main)
|
@@ -125,7 +125,7 @@ if RUBY_PLATFORM != 'opal'
|
|
125
125
|
end
|
126
126
|
|
127
127
|
it 'should parse javascript src/body from the javascript tags' do
|
128
|
-
main = Volt::AssetFiles.new('main', @component_paths)
|
128
|
+
main = Volt::AssetFiles.new('/app', 'main', @component_paths)
|
129
129
|
|
130
130
|
expect(main).to receive(:javascript_tags).and_return("<script src='/someurl.js'></script><script>var inlinejs = true;</script>")
|
131
131
|
|
@@ -1,8 +1,9 @@
|
|
1
|
+
require 'spec_helper'
|
1
2
|
|
2
3
|
if ENV['BROWSER'] && ENV['BROWSER'] == 'phantom'
|
3
4
|
describe 'Rack Requests', type: :feature do
|
4
5
|
it 'should send JS file with JS mimetype' do
|
5
|
-
visit '/components/main.js'
|
6
|
+
visit '/app/components/main.js'
|
6
7
|
|
7
8
|
expect(page.response_headers['Content-Type']).to include 'application/javascript'
|
8
9
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "sprockets helpers" do
|
4
|
+
it 'should expand paths' do
|
5
|
+
result = Volt::SprocketsHelpersSetup.expand('/something/cool/../awesome/beans/../../five/six/seven')
|
6
|
+
|
7
|
+
expect(result).to eq('/something/five/six/seven')
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should expand paths2' do
|
11
|
+
result = Volt::SprocketsHelpersSetup.expand('bootstrap/assets/css/../fonts/glyphicons-halflings-regular.svg')
|
12
|
+
|
13
|
+
expect(result).to eq('bootstrap/assets/fonts/glyphicons-halflings-regular.svg')
|
14
|
+
end
|
15
|
+
end
|
data/templates/newgem/Gemfile.tt
CHANGED
@@ -2,3 +2,14 @@ source 'https://rubygems.org'
|
|
2
2
|
|
3
3
|
# Specify your gem's dependencies in <%=config[:name]%>.gemspec
|
4
4
|
gemspec
|
5
|
+
|
6
|
+
# Optional Gems for testing/dev
|
7
|
+
|
8
|
+
# The implementation of ReadWriteLock in Volt uses concurrent ruby and ext helps performance.
|
9
|
+
gem 'concurrent-ruby-ext', '~> 0.8.0'
|
10
|
+
|
11
|
+
# For mongo (optional)
|
12
|
+
gem 'bson_ext', '~> 1.9.0'
|
13
|
+
|
14
|
+
# Gems you use for development should be added to the gemspec file as
|
15
|
+
# development dependencies.
|
File without changes
|
@@ -19,8 +19,23 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_development_dependency "volt", "~> <%= config[:volt_version_base] %>"
|
22
|
-
spec.add_development_dependency 'rspec', '~> 3.2.0'
|
23
22
|
spec.add_development_dependency "rake"
|
23
|
+
|
24
|
+
# Testing gems
|
25
|
+
spec.add_development_dependency 'rspec', '~> 3.2.0'
|
26
|
+
spec.add_development_dependency 'opal-rspec', '~> 0.4.2'
|
27
|
+
spec.add_development_dependency 'capybara', '~> 2.4.2'
|
28
|
+
spec.add_development_dependency 'selenium-webdriver', '~> 2.43.0'
|
29
|
+
spec.add_development_dependency 'chromedriver2-helper', '~> 0.0.8'
|
30
|
+
spec.add_development_dependency 'poltergeist', '~> 1.5.0'
|
31
|
+
|
32
|
+
# Gems to run the dummy app
|
33
|
+
spec.add_development_dependency 'volt-mongo', '0.1.1'
|
34
|
+
spec.add_development_dependency 'volt-bootstrap', '~> 0.1.0'
|
35
|
+
spec.add_development_dependency 'volt-bootstrap_jumbotron_theme', '~> 0.1.0'
|
36
|
+
spec.add_development_dependency 'volt-user_templates', '~> 0.4.0'
|
37
|
+
spec.add_development_dependency 'thin', '~> 1.6.0'
|
38
|
+
|
24
39
|
<% if config[:test] -%>
|
25
40
|
spec.add_development_dependency "<%=config[:test]%>"
|
26
41
|
<% end -%>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'sample integration test', type: :feature do
|
4
|
+
# An example integration spec, this will only be run if ENV['BROWSER'] is
|
5
|
+
# specified. Current values for ENV['BROWSER'] are 'firefox' and 'phantom'
|
6
|
+
it 'should load the page' do
|
7
|
+
visit '/'
|
8
|
+
|
9
|
+
expect(page).to have_content('Home')
|
10
|
+
end
|
11
|
+
end
|
@@ -1,6 +1,10 @@
|
|
1
1
|
# Volt sets up rspec and capybara for testing.
|
2
2
|
require 'volt/spec/setup'
|
3
|
-
|
3
|
+
|
4
|
+
# When testing Volt component gems, we boot up a dummy app first to run the
|
5
|
+
# test in, so we have access to Volt itself.
|
6
|
+
dummy_app_path = File.join(File.dirname(__FILE__), 'dummy')
|
7
|
+
Volt.spec_setup(dummy_app_path)
|
4
8
|
|
5
9
|
RSpec.configure do |config|
|
6
10
|
config.run_all_when_everything_filtered = true
|
@@ -7,7 +7,7 @@ gem 'volt-mongo', '~> 0.1.0'
|
|
7
7
|
|
8
8
|
# The following gem's are optional for themeing
|
9
9
|
# Twitter bootstrap
|
10
|
-
gem 'volt-bootstrap', '~> 0.0
|
10
|
+
gem 'volt-bootstrap', '~> 0.1.0'
|
11
11
|
|
12
12
|
# Simple theme for bootstrap, remove to theme yourself.
|
13
13
|
gem 'volt-bootstrap_jumbotron_theme', '~> 0.1.0'
|
@@ -27,10 +27,6 @@ platform :ruby, :jruby do
|
|
27
27
|
gem 'rbnacl-libsodium', require: false
|
28
28
|
end
|
29
29
|
|
30
|
-
# Asset compilation gems, they will be required when needed.
|
31
|
-
gem 'csso-rails', '~> 0.3.4', require: false
|
32
|
-
gem 'uglifier', '>= 2.4.0', require: false
|
33
|
-
|
34
30
|
group :test do
|
35
31
|
# Testing dependencies
|
36
32
|
gem 'rspec', '~> 3.2.0'
|
@@ -52,6 +48,10 @@ platform :mri, :mingw do
|
|
52
48
|
end
|
53
49
|
|
54
50
|
group :production do
|
51
|
+
# Asset compilation gems, they will be required when needed.
|
52
|
+
gem 'csso-rails', '~> 0.3.4', require: false
|
53
|
+
gem 'uglifier', '>= 2.4.0', require: false
|
54
|
+
|
55
55
|
# Image compression gem for precompiling assets
|
56
56
|
gem 'image_optim'
|
57
57
|
|
data/volt.gemspec
CHANGED
@@ -45,7 +45,7 @@ Gem::Specification.new do |spec|
|
|
45
45
|
|
46
46
|
# There is a big performance issue with selenium-webdriver on v2.45.0
|
47
47
|
spec.add_development_dependency 'selenium-webdriver', '~> 2.46.2'
|
48
|
-
spec.add_development_dependency '
|
48
|
+
spec.add_development_dependency 'chromedriver-helper', '~> 1.0.0'
|
49
49
|
spec.add_development_dependency 'poltergeist', '~> 1.5.0'
|
50
50
|
spec.add_development_dependency 'thin', '~> 1.6.3'
|
51
51
|
spec.add_development_dependency 'coveralls', '~> 0.8.1'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: volt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.5.
|
4
|
+
version: 0.9.5.pre8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Stout
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -235,19 +235,19 @@ dependencies:
|
|
235
235
|
- !ruby/object:Gem::Version
|
236
236
|
version: 2.46.2
|
237
237
|
- !ruby/object:Gem::Dependency
|
238
|
-
name:
|
238
|
+
name: chromedriver-helper
|
239
239
|
requirement: !ruby/object:Gem::Requirement
|
240
240
|
requirements:
|
241
241
|
- - "~>"
|
242
242
|
- !ruby/object:Gem::Version
|
243
|
-
version: 0.0
|
243
|
+
version: 1.0.0
|
244
244
|
type: :development
|
245
245
|
prerelease: false
|
246
246
|
version_requirements: !ruby/object:Gem::Requirement
|
247
247
|
requirements:
|
248
248
|
- - "~>"
|
249
249
|
- !ruby/object:Gem::Version
|
250
|
-
version: 0.0
|
250
|
+
version: 1.0.0
|
251
251
|
- !ruby/object:Gem::Dependency
|
252
252
|
name: poltergeist
|
253
253
|
requirement: !ruby/object:Gem::Requirement
|
@@ -591,6 +591,7 @@ files:
|
|
591
591
|
- lib/volt/utils/parsing.rb
|
592
592
|
- lib/volt/utils/promise_extensions.rb
|
593
593
|
- lib/volt/utils/read_write_lock.rb
|
594
|
+
- lib/volt/utils/recursive_exists.rb
|
594
595
|
- lib/volt/utils/set_patch.rb
|
595
596
|
- lib/volt/utils/tilt_patch.rb
|
596
597
|
- lib/volt/utils/time_patch.rb
|
@@ -739,6 +740,7 @@ files:
|
|
739
740
|
- spec/server/rack/http_response_renderer_spec.rb
|
740
741
|
- spec/server/rack/quite_common_logger_spec.rb
|
741
742
|
- spec/server/rack/rack_requests_spec.rb
|
743
|
+
- spec/server/rack/sprockets_helpers_setup.rb
|
742
744
|
- spec/spec_helper.rb
|
743
745
|
- spec/store/mongo_spec.rb
|
744
746
|
- spec/tasks/dispatcher_spec.rb
|
@@ -796,6 +798,7 @@ files:
|
|
796
798
|
- templates/newgem/app/newgem/controllers/server/.empty_directory
|
797
799
|
- templates/newgem/app/newgem/lib/.empty_directory
|
798
800
|
- templates/newgem/app/newgem/models/.empty_directory
|
801
|
+
- templates/newgem/app/newgem/tasks/.empty_directory
|
799
802
|
- templates/newgem/app/newgem/views/main/index.html
|
800
803
|
- templates/newgem/bin/newgem.tt
|
801
804
|
- templates/newgem/gitignore.tt
|
@@ -804,6 +807,7 @@ files:
|
|
804
807
|
- templates/newgem/lib/newgem/version.rb.tt
|
805
808
|
- templates/newgem/newgem.gemspec.tt
|
806
809
|
- templates/newgem/rspec.tt
|
810
|
+
- templates/newgem/spec/integration/sample_integration_spec.rb
|
807
811
|
- templates/newgem/spec/newgem_spec.rb.tt
|
808
812
|
- templates/newgem/spec/spec_helper.rb.tt
|
809
813
|
- templates/newgem/test/minitest_helper.rb.tt
|
@@ -1001,6 +1005,7 @@ test_files:
|
|
1001
1005
|
- spec/server/rack/http_response_renderer_spec.rb
|
1002
1006
|
- spec/server/rack/quite_common_logger_spec.rb
|
1003
1007
|
- spec/server/rack/rack_requests_spec.rb
|
1008
|
+
- spec/server/rack/sprockets_helpers_setup.rb
|
1004
1009
|
- spec/spec_helper.rb
|
1005
1010
|
- spec/store/mongo_spec.rb
|
1006
1011
|
- spec/tasks/dispatcher_spec.rb
|