class Wedge
require 'wedge/require'
uses drop.js
Constants
- ATTR_ACCESSORS
- Form
- Opal
Create our own opal instance.
- VERSION
Public Class Methods
[](*args, &block)
click to toggle source
Used to call a component.
@example
Browser[:foo].bar
@param name [String, Symbol
, to_s] The unique name given to a component. @return [Wedge::Component#method] Last line of the method called.
# File lib/wedge.rb, line 167 def [](*args, &block) name = args.shift config.component_class[name.to_sym].wedge_new self, *args, &block end
append_paths()
click to toggle source
Append the correct paths to opal.
@return [Array] List of opal paths.
# File lib/wedge.rb, line 201 def append_paths @append_paths ||= begin Wedge::Opal.append_path method(:assets_url).source_location.first.sub('/wedge.rb', '') Wedge::Opal.append_path "#{Dir.pwd}/#{config.app_dir}" true end end
assets_url()
click to toggle source
# File lib/wedge.rb, line 69 def assets_url url = config.assets_url.gsub(%r{^(http(|s)://[^\/]*\/|\/)}, '/') url.gsub /\n/, '' end
assets_url_regex()
click to toggle source
# File lib/wedge.rb, line 74 def assets_url_regex @assets_url_regex ||= begin assets_url = ::Wedge.assets_url.gsub(%r{^\/}, '') # # We also allow for no assets key so when we post server methods there # # isn't an error if the key has been changed since a browser refresh. %r{(?:/|)#{assets_url}/(.*)\.(.*)$} end end
assets_url_with_host()
click to toggle source
# File lib/wedge.rb, line 83 def assets_url_with_host "#{config.assets_url}#{config.cache_assets ? "/#{config.assets_key}" : ''}" end
build(path = 'wedge', options = {})
click to toggle source
Returns the build object for opal.
@param path [String] require path to file to build. @return [String, Opal::Builder#build]
# File lib/wedge.rb, line 189 def build(path = 'wedge', options = {}) Opal::Builder.build(path, options) if append_paths end
config()
click to toggle source
# File lib/wedge.rb, line 253 def config @config ||= begin args = { component_class: IndifferentHash.new } unless RUBY_ENGINE == 'opal' args[:path] = method(:assets_url).source_location.first.sub('/wedge.rb', '') args[:assets_key] = ::File.exist?('.wedge_assets_key') ? ::File.read('.wedge_assets_key') : nil end Config.new(args) end end
create_assets_key()
click to toggle source
# File lib/wedge.rb, line 245 def create_assets_key o = [('a'..'z'), ('A'..'Z')].map { |i| i.to_a }.flatten key = (0...50).map { o[rand(o.length)] }.join ::FileUtils.mkdir_p(File.dirname('.wedge_assets_key')) ::File.open('.wedge_assets_key', 'wb'){|f| f.write(key) } config.assets_key = key end
events()
click to toggle source
# File lib/wedge.rb, line 156 def events @events ||= Events.new end
get_asset_urls(name)
click to toggle source
# File lib/wedge.rb, line 118 def get_asset_urls name sprockets = Wedge.config.opal[:server].sprockets prefix = Wedge.assets_url_with_host asset = sprockets[name] raise "Cannot find asset: #{name}" if asset.nil? urls = [] if Wedge.config.opal[:server].debug asset.to_a.map do |dependency| urls << %{#{prefix}/#{dependency.logical_path}?body=1} end else urls << %{#{prefix}/#{name}.js} end urls end
html!(scope = false, &block)
click to toggle source
# File lib/wedge.rb, line 87 def html!(scope = false, &block) if !block_given? html = HTML::DSL.html(&scope).to_html else html = HTML::DSL.scope!(scope).html(&block).to_html end DOM.new html end
javascript(path_name = 'wedge', options = {}, url = false)
click to toggle source
Return the opal javascript.
# File lib/wedge.rb, line 212 def javascript(path_name = 'wedge', options = {}, url = false) path_name = path_name.to_s if server? javascript_cache[path_name] ||= begin build(path_name, options).to_s end else trigger_javascript_loaded path_name, options end end
javascript_cache()
click to toggle source
# File lib/wedge.rb, line 136 def javascript_cache @javascript_cache ||= IndifferentHash.new end
load_settings(settings)
click to toggle source
# File lib/wedge.rb, line 42 def load_settings settings return unless settings case settings when Proc Wedge.config.instance_eval &settings else settings.each { |k, v| Wedge.config.send "#{k}=", v } end Wedge.config.opal = { server: Wedge::Opal::Server.new { |s| s.append_path "#{Dir.pwd}/#{Wedge.config.app_dir}" s.prefix = Wedge.assets_url s.debug = Wedge.config.debug s.headers = Wedge.config.assets_headers s.gzip = Wedge.config.gzip_assets }} if Wedge.config.debug Wedge.config.opal[:sprockets] = Wedge.config.opal[:server].sprockets Wedge.config.opal[:maps_prefix] = "#{Wedge.assets_url}/__OPAL_SOURCE_MAPS__" Wedge.config.opal[:maps_app] = Opal::SourceMapServer.new Wedge.config.opal[:sprockets], Wedge.config.opal[:maps_prefix] Wedge::Opal::Sprockets::SourceMapHeaderPatch.inject! Wedge.config.opal[:maps_prefix] end end
script_tag(name = 'wedge')
click to toggle source
def script_tag
# note: ?body=1 is a hack for sprockets to make source maps work # correctly. "<script src='#{assets_url_with_host}/wedge.js#{Wedge.config.debug ? '?body=1' : ''}' type='text/javascript'></script>"
end
# File lib/wedge.rb, line 103 def script_tag name = 'wedge' sprockets = Wedge.config.opal[:server].sprockets asset = sprockets[name] raise "Cannot find asset: #{name}" if asset.nil? scripts = [] get_asset_urls(name).each do |url| scripts << %{<script src="#{url}"></script>} end scripts << %{<script>#{Wedge::Opal::Sprockets.load_asset(name, sprockets)}</script>} scripts.join "\n" end
source_map(path = 'wedge', options = {})
click to toggle source
Source maps for the javascript
# File lib/wedge.rb, line 194 def source_map(path = 'wedge', options = {}) build(path, options).source_map end
trigger(wedge_name, event_name, *args)
click to toggle source
# File lib/wedge.rb, line 152 def trigger(wedge_name, event_name, *args) events.trigger wedge_name, event_name, *args end
trigger_browser_events()
click to toggle source
# File lib/wedge.rb, line 142 def trigger_browser_events config.component_class.each do |k, klass| next if klass.config.triggered_browser_events klass.config.triggered_browser_events = true Wedge.trigger klass.config.name, :browser_events end end
trigger_javascript_loaded(path_name, options)
click to toggle source
# File lib/wedge.rb, line 224 def trigger_javascript_loaded path_name, options # fix: at the moment to_js called from the server will set the class # store for whatever method it calls. we need to think of a better idea # for global and local data store. Wedge.config.component_class[options[:name]].config.store = options[:store].indifferent if initialize_args = options.delete(:initialize_args) comp = Wedge[options[:name], *initialize_args] else comp = Wedge[options[:name]] end if options[:method_args].any? comp.send(options[:method_called], options[:method_args]) else comp.send(options[:method_called]) end Wedge.trigger_browser_events end
version()
click to toggle source
# File lib/wedge/opal.rb, line 89 def self.version Wedge::VERSION end