opal-rails 0.8.1 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +12 -4
- data/.powder +1 -0
- data/.travis.yml +7 -3
- data/Appraisals +11 -0
- data/CHANGELOG.md +113 -50
- data/Gemfile +0 -16
- data/README.md +34 -52
- data/Rakefile +1 -5
- data/app/helpers/opal_helper.rb +2 -2
- data/config.ru +10 -0
- data/lib/opal/rails.rb +0 -2
- data/lib/opal/rails/engine.rb +2 -21
- data/lib/opal/rails/version.rb +1 -1
- data/opal-rails.gemspec +11 -5
- data/spec/spec_helper.rb +1 -14
- data/spec/support/test_app.rb +6 -0
- data/test_apps/application_controller.rb +52 -0
- data/{test_app/app → test_apps}/assets/javascripts/application.js.rb +0 -0
- data/{test_app/app → test_apps}/assets/javascripts/bar.rb +0 -0
- data/{test_app/app → test_apps}/assets/javascripts/foo.js.rb +0 -0
- data/{test_app/app → test_apps}/assets/javascripts/source_map_example.js.rb +0 -0
- data/test_apps/rails4.rb +43 -0
- data/test_apps/rails5.rb +42 -0
- metadata +83 -83
- data/app/controllers/opal_spec_controller.rb +0 -38
- data/app/views/layouts/opal_spec.html.erb +0 -13
- data/app/views/opal_spec/run.html.erb +0 -40
- data/lib/opal/rails/spec_builder.rb +0 -92
- data/lib/opal/rails/sprockets_cache_key_fix.rb +0 -19
- data/lib/tasks/opal-rails_tasks.rake +0 -26
- data/spec/integration/in_browser_specs_spec.rb +0 -21
- data/test_app/.gitignore +0 -15
- data/test_app/Rakefile +0 -7
- data/test_app/app/assets/images/rails.png +0 -0
- data/test_app/app/assets/stylesheets/application.css +0 -13
- data/test_app/app/controllers/application_controller.rb +0 -21
- data/test_app/app/views/application/index.html.erb +0 -3
- data/test_app/app/views/application/with_assignments.js.opal +0 -8
- data/test_app/app/views/layouts/application.html.erb +0 -14
- data/test_app/config.ru +0 -4
- data/test_app/config/application.rb +0 -75
- data/test_app/config/boot.rb +0 -6
- data/test_app/config/environment.rb +0 -5
- data/test_app/config/environments/development.rb +0 -33
- data/test_app/config/environments/production.rb +0 -65
- data/test_app/config/environments/test.rb +0 -42
- data/test_app/config/initializers/backtrace_silencers.rb +0 -7
- data/test_app/config/initializers/inflections.rb +0 -15
- data/test_app/config/initializers/mime_types.rb +0 -5
- data/test_app/config/initializers/secret_token.rb +0 -8
- data/test_app/config/initializers/session_store.rb +0 -8
- data/test_app/config/initializers/wrap_parameters.rb +0 -10
- data/test_app/config/locales/en.yml +0 -5
- data/test_app/config/routes.rb +0 -4
- data/test_app/lib/assets/.gitkeep +0 -0
- data/test_app/lib/tasks/.gitkeep +0 -0
- data/test_app/log/.gitkeep +0 -0
- data/test_app/public/404.html +0 -26
- data/test_app/public/422.html +0 -26
- data/test_app/public/500.html +0 -25
- data/test_app/public/favicon.ico +0 -0
- data/test_app/public/robots.txt +0 -5
- data/test_app/script/rails +0 -6
- data/test_app/spec-opal/example_spec.js.rb +0 -7
- data/test_app/spec-opal/requires_opal_spec.js.rb +0 -8
- data/test_app/spec-opal/spec_helper.rb +0 -3
- data/test_app/spec-opal/subdirectory/other_spec.js.rb +0 -7
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'opal/rails/spec_builder'
|
2
|
-
require 'fileutils'
|
3
|
-
require 'pathname'
|
4
|
-
|
5
|
-
class OpalSpecController < ActionController::Base
|
6
|
-
helper_method :spec_files, :pattern, :clean_spec_path, :runner_name
|
7
|
-
helper_method :check_errors_for, :builder
|
8
|
-
|
9
|
-
def run
|
10
|
-
end
|
11
|
-
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
# This will deactivate the requirement to precompile assets in this controller
|
16
|
-
# as specs shouldn't go to production anyway.
|
17
|
-
def check_errors_for(*)
|
18
|
-
#noop
|
19
|
-
end
|
20
|
-
|
21
|
-
def pattern
|
22
|
-
params[:pattern]
|
23
|
-
end
|
24
|
-
|
25
|
-
def builder
|
26
|
-
@builder ||= Opal::Rails::SpecBuilder.new(
|
27
|
-
spec_location: Rails.application.config.opal.spec_location,
|
28
|
-
sprockets: Rails.application.config.assets,
|
29
|
-
pattern: pattern,
|
30
|
-
)
|
31
|
-
end
|
32
|
-
|
33
|
-
def runner_name
|
34
|
-
builder.runner_pathname.basename.to_s.gsub(/(\.js)?\.rb$/, '')
|
35
|
-
end
|
36
|
-
|
37
|
-
delegate :spec_files, :clean_spec_path, to: :builder
|
38
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
<% if pattern.present? %>
|
2
|
-
<%= link_to 'All specs', opal_spec_path %>
|
3
|
-
<% end %>
|
4
|
-
|
5
|
-
<h2>Running:</h2>
|
6
|
-
<ul>
|
7
|
-
<% spec_files.each do |spec_file| %>
|
8
|
-
<li>
|
9
|
-
<% spec_file = clean_spec_path(spec_file) %>
|
10
|
-
<%= link_to spec_file, opal_spec_path(pattern: spec_file) %>
|
11
|
-
</li>
|
12
|
-
<% end %>
|
13
|
-
</ul>
|
14
|
-
|
15
|
-
<%# The list of all asset dependency %>
|
16
|
-
<% all_specs = [] %>
|
17
|
-
|
18
|
-
<%# Track root assets that will need to be bootstrapped %>
|
19
|
-
<% root_assets = {} %>
|
20
|
-
|
21
|
-
<%# Collect all assets with their dependencies %>
|
22
|
-
<% builder.clean_spec_files.each do |require_path| %>
|
23
|
-
<% asset = lookup_asset_for_path(require_path, type: :javascript) %>
|
24
|
-
<% dependency_paths = asset.to_a.map { |a| a.logical_path } %>
|
25
|
-
<% all_specs += dependency_paths %>
|
26
|
-
<% root_assets[dependency_paths.last] = require_path %>
|
27
|
-
<% end %>
|
28
|
-
|
29
|
-
<%# We'll ececute the boot code all at once in the end %>
|
30
|
-
<% load_code = [] %>
|
31
|
-
|
32
|
-
<%# Add include tags and boot code, we use #uniq as we don't want to source the same asset twice %>
|
33
|
-
<% all_specs.uniq.each do |asset_path| %>
|
34
|
-
<%- root_asset = root_assets[asset_path] -%>
|
35
|
-
<%= javascript_include_tag asset_path, skip_opal_loader: true %>
|
36
|
-
<%- load_code << javascript_tag(Opal::Processor.load_asset_code(Rails.application.assets, root_asset)) if root_asset -%>
|
37
|
-
<% end %>
|
38
|
-
|
39
|
-
<%# Boot! %>
|
40
|
-
<%= load_code.join.html_safe %>
|
@@ -1,92 +0,0 @@
|
|
1
|
-
require 'digest'
|
2
|
-
|
3
|
-
module Opal
|
4
|
-
module Rails
|
5
|
-
class SpecBuilder
|
6
|
-
def initialize(options)
|
7
|
-
@root = options.fetch(:root) { ::Rails.root }
|
8
|
-
@pattern = options[:pattern] || '**/*_spec'
|
9
|
-
@sprockets = options.fetch(:sprockets)
|
10
|
-
@spec_location = options.fetch(:spec_location)
|
11
|
-
end
|
12
|
-
|
13
|
-
attr_reader :sprockets, :pattern, :spec_location, :root
|
14
|
-
|
15
|
-
def to_s
|
16
|
-
builder.build_str main_code, 'opal_spec'
|
17
|
-
builder.to_s + 'Opal.load("opal_spec");'
|
18
|
-
end
|
19
|
-
|
20
|
-
def builder
|
21
|
-
@builder ||= begin
|
22
|
-
path_finder = Opal::HikePathFinder.new(paths)
|
23
|
-
|
24
|
-
Opal::Builder.new(
|
25
|
-
compiler_options: Opal::Processor.compiler_options,
|
26
|
-
stubs: Opal::Processor.stubbed_files,
|
27
|
-
path_reader: Opal::PathReader.new(path_finder),
|
28
|
-
)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def paths
|
33
|
-
[
|
34
|
-
root.join(spec_location).to_s,
|
35
|
-
runner_dir.to_s,
|
36
|
-
*Opal.paths,
|
37
|
-
*sprockets.paths,
|
38
|
-
]
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.runner_dir(root)
|
42
|
-
root.join('tmp/opal_spec')
|
43
|
-
end
|
44
|
-
|
45
|
-
def runner_dir
|
46
|
-
self.class.runner_dir(root)
|
47
|
-
end
|
48
|
-
|
49
|
-
def main_code
|
50
|
-
requires.map { |file| "require #{file.inspect}\n" }.join + boot_code
|
51
|
-
end
|
52
|
-
|
53
|
-
def runner_pathname
|
54
|
-
runner_dir.join("#{runner_logical_path}.js.rb")
|
55
|
-
end
|
56
|
-
|
57
|
-
def runner_logical_path
|
58
|
-
"opal_spec_runner_#{digest}"
|
59
|
-
end
|
60
|
-
|
61
|
-
def digest
|
62
|
-
# The digest is cached as it shouldn't change
|
63
|
-
# for a given builder instance
|
64
|
-
@digest ||= Digest::SHA1.new.update(requires.join).to_s
|
65
|
-
end
|
66
|
-
|
67
|
-
def requires
|
68
|
-
['opal', 'opal-rspec', *clean_spec_files]
|
69
|
-
end
|
70
|
-
|
71
|
-
def clean_spec_files
|
72
|
-
spec_files.map{|f| clean_spec_path(f)}
|
73
|
-
end
|
74
|
-
|
75
|
-
def boot_code
|
76
|
-
'Opal::RSpec::Runner.autorun'
|
77
|
-
end
|
78
|
-
|
79
|
-
def spec_files
|
80
|
-
@spec_files ||= pattern.split(':').map { |path| spec_files_for_glob(path) }.flatten
|
81
|
-
end
|
82
|
-
|
83
|
-
def spec_files_for_glob(glob)
|
84
|
-
Dir[root.join("#{spec_location}/#{glob}{,.js}.{rb,opal}").to_s]
|
85
|
-
end
|
86
|
-
|
87
|
-
def clean_spec_path(path)
|
88
|
-
path.split("#{spec_location}/").flatten.last.gsub(/(\.js)?\.(rb|opal)$/, '')
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'sprockets/base'
|
2
|
-
require 'opal/version'
|
3
|
-
require 'opal/sprockets/processor'
|
4
|
-
|
5
|
-
def (Opal::Processor).version
|
6
|
-
Opal::VERSION
|
7
|
-
end unless Opal::Processor.respond_to? :version
|
8
|
-
|
9
|
-
class Sprockets::Base
|
10
|
-
def cache_key_for(path, options)
|
11
|
-
processors = attributes_for(path).processors
|
12
|
-
processors_key = processors.map do |p|
|
13
|
-
version = p.respond_to?(:version) ? p.version : '0'
|
14
|
-
"#{p.name}-#{version}"
|
15
|
-
end.join(':')
|
16
|
-
|
17
|
-
"#{path}:#{options[:bundle] ? '1' : '0'}:#{processors_key}"
|
18
|
-
end
|
19
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'opal/rspec/rake_task'
|
2
|
-
|
3
|
-
Opal::RSpec::RakeTask.new('opal:spec' => :environment) do |server|
|
4
|
-
require 'opal/rails/spec_builder'
|
5
|
-
pattern = ENV['PATTERN'] || nil
|
6
|
-
|
7
|
-
builder = Opal::Rails::SpecBuilder.new(
|
8
|
-
spec_location: Rails.application.config.opal.spec_location,
|
9
|
-
sprockets: Rails.application.config.assets,
|
10
|
-
pattern: pattern,
|
11
|
-
)
|
12
|
-
|
13
|
-
runner = builder.runner_pathname
|
14
|
-
runner.dirname.mkpath
|
15
|
-
runner.open('w') { |f| f << builder.main_code }
|
16
|
-
|
17
|
-
server.sprockets.clear_paths
|
18
|
-
builder.paths.each { |path| server.append_path path }
|
19
|
-
|
20
|
-
main_name = builder.runner_logical_path
|
21
|
-
|
22
|
-
# Sometimes seems that sprockets will need a moment to pickup the new file
|
23
|
-
sleep 0.1 unless server.sprockets[main_name]
|
24
|
-
|
25
|
-
server.main = main_name
|
26
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
feature 'In-browser specs runner' do
|
4
|
-
scenario 'runs all specs', :js do
|
5
|
-
visit '/opal_spec'
|
6
|
-
page.should have_content('example_spec ')
|
7
|
-
page.should have_content('requires_opal_spec ')
|
8
|
-
page.should have_content('subdirectory/other_spec ')
|
9
|
-
page.should have_content('3 examples, 0 failures')
|
10
|
-
end
|
11
|
-
|
12
|
-
scenario "runs single spec file", :js do
|
13
|
-
visit '/opal_spec'
|
14
|
-
click_link 'subdirectory/other_spec'
|
15
|
-
|
16
|
-
page.should_not have_content('example_spec ')
|
17
|
-
page.should_not have_content('requires_opal_spec ')
|
18
|
-
page.should have_content('subdirectory/other_spec ')
|
19
|
-
page.should have_content('1 examples, 0 failures')
|
20
|
-
end
|
21
|
-
end
|
data/test_app/.gitignore
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
# See http://help.github.com/ignore-files/ for more about ignoring files.
|
2
|
-
#
|
3
|
-
# If you find yourself ignoring temporary files generated by your text editor
|
4
|
-
# or operating system, you probably want to add a global ignore instead:
|
5
|
-
# git config --global core.excludesfile ~/.gitignore_global
|
6
|
-
|
7
|
-
# Ignore bundler config
|
8
|
-
/.bundle
|
9
|
-
|
10
|
-
# Ignore the default SQLite database.
|
11
|
-
/db/*.sqlite3
|
12
|
-
|
13
|
-
# Ignore all logfiles and tempfiles.
|
14
|
-
/log/*.log
|
15
|
-
/tmp
|
data/test_app/Rakefile
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
#!/usr/bin/env rake
|
2
|
-
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
3
|
-
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
4
|
-
|
5
|
-
require File.expand_path('../config/application', __FILE__)
|
6
|
-
|
7
|
-
TestApp::Application.load_tasks
|
Binary file
|
@@ -1,13 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
-
* listed below.
|
4
|
-
*
|
5
|
-
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
-
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
|
7
|
-
*
|
8
|
-
* You're free to add application-wide styles to this file and they'll appear at the top of the
|
9
|
-
* compiled file, but it's generally better to create a new file per style scope.
|
10
|
-
*
|
11
|
-
*= require_self
|
12
|
-
*= require_tree .
|
13
|
-
*/
|
@@ -1,21 +0,0 @@
|
|
1
|
-
class ApplicationController < ActionController::Base
|
2
|
-
# protect_from_forgery
|
3
|
-
|
4
|
-
def index
|
5
|
-
end
|
6
|
-
|
7
|
-
def with_assignments
|
8
|
-
object = Object.new
|
9
|
-
def object.as_json options = {}
|
10
|
-
{:contents => 'json representation'}
|
11
|
-
end
|
12
|
-
|
13
|
-
@number_var = 1234
|
14
|
-
@string_var = 'hello'
|
15
|
-
@array_var = [1,'a']
|
16
|
-
@hash_var = {:a => 1, :b => 2}
|
17
|
-
@object_var = object
|
18
|
-
|
19
|
-
render :type => :js, :locals => { :local_var => 'i am local' }
|
20
|
-
end
|
21
|
-
end
|
data/test_app/config.ru
DELETED
@@ -1,75 +0,0 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
# Clear assets cache to avoid false errors
|
3
|
-
FileUtils.rmtree(File.expand_path('../../tmp/cache/assets'))
|
4
|
-
|
5
|
-
require File.expand_path('../boot', __FILE__)
|
6
|
-
|
7
|
-
# Pick the frameworks you want:
|
8
|
-
# require "active_record/railtie"
|
9
|
-
require "action_controller/railtie"
|
10
|
-
require "action_mailer/railtie"
|
11
|
-
require "active_resource/railtie" unless Rails.version.to_i == 4
|
12
|
-
require "sprockets/railtie"
|
13
|
-
require "rails/test_unit/railtie"
|
14
|
-
|
15
|
-
if defined?(Bundler)
|
16
|
-
# If you precompile assets before deploying to production, use this line
|
17
|
-
Bundler.require(*Rails.groups(:assets => %w(development test)))
|
18
|
-
# If you want your assets lazily compiled in production, use this line
|
19
|
-
# Bundler.require(:default, :assets, Rails.env)
|
20
|
-
end
|
21
|
-
|
22
|
-
module TestApp
|
23
|
-
class Application < Rails::Application
|
24
|
-
# Settings in config/environments/* take precedence over those specified here.
|
25
|
-
# Application configuration should go into files in config/initializers
|
26
|
-
# -- all .rb files in that directory are automatically loaded.
|
27
|
-
|
28
|
-
# Custom directories with classes and modules you want to be autoloadable.
|
29
|
-
# config.autoload_paths += %W(#{config.root}/extras)
|
30
|
-
|
31
|
-
# Only load the plugins named here, in the order given (default is alphabetical).
|
32
|
-
# :all can be used as a placeholder for all plugins not explicitly named.
|
33
|
-
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
|
34
|
-
|
35
|
-
# Activate observers that should always be running.
|
36
|
-
# config.active_record.observers = :cacher, :garbage_collector, :forum_observer
|
37
|
-
|
38
|
-
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
39
|
-
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
40
|
-
# config.time_zone = 'Central Time (US & Canada)'
|
41
|
-
|
42
|
-
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
43
|
-
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
44
|
-
# config.i18n.default_locale = :de
|
45
|
-
|
46
|
-
# Configure the default encoding used in templates for Ruby 1.9.
|
47
|
-
config.encoding = "utf-8"
|
48
|
-
|
49
|
-
# Configure sensitive parameters which will be filtered from the log file.
|
50
|
-
config.filter_parameters += [:password]
|
51
|
-
|
52
|
-
# Enable escaping HTML in JSON.
|
53
|
-
config.active_support.escape_html_entities_in_json = true
|
54
|
-
|
55
|
-
# Use SQL instead of Active Record's schema dumper when creating the database.
|
56
|
-
# This is necessary if your schema can't be completely dumped by the schema dumper,
|
57
|
-
# like if you have constraints or database-specific column types
|
58
|
-
# config.active_record.schema_format = :sql
|
59
|
-
|
60
|
-
# Enforce whitelist mode for mass assignment.
|
61
|
-
# This will create an empty whitelist of attributes available for mass-assignment for all models
|
62
|
-
# in your app. As such, your models will need to explicitly whitelist or blacklist accessible
|
63
|
-
# parameters by using an attr_accessible or attr_protected declaration.
|
64
|
-
# config.active_record.whitelist_attributes = true
|
65
|
-
|
66
|
-
# Enable the asset pipeline
|
67
|
-
config.assets.enabled = true
|
68
|
-
|
69
|
-
# Version of your assets, change this if you want to expire all your assets
|
70
|
-
config.assets.version = '1.0'
|
71
|
-
|
72
|
-
# Disabled by default, we need it for tests
|
73
|
-
config.opal.source_map_enabled = true
|
74
|
-
end
|
75
|
-
end
|
data/test_app/config/boot.rb
DELETED