Class: Wedge
- Includes:
- Methods
- Defined in:
- lib/wedge.rb,
lib/wedge/dom.rb,
lib/wedge/html.rb,
lib/wedge/opal.rb,
lib/wedge/config.rb,
lib/wedge/events.rb,
lib/wedge/version.rb,
lib/wedge/component.rb,
lib/wedge/plugins/form.rb,
lib/wedge/plugins/pjax.rb,
lib/wedge/utilis/methods.rb,
lib/wedge/plugins/history.rb,
lib/wedge/plugins/validations.rb,
lib/wedge/utilis/indifferent_hash.rb
Defined Under Namespace
Modules: HTML, Methods, Plugins Classes: Component, Config, DOM, Events, IndifferentHash
Constant Summary collapse
- ATTR_ACCESSORS =
%i{scope store config events}
- Opal =
Create our own opal instance.
::Opal.dup
- VERSION =
'0.1.0'
- Form =
Wedge::Plugins::Form
Class Method Summary collapse
-
.[](name, *args, &block) ⇒ Wedge::Component#method
Used to call a component.
- .assets_url ⇒ Object
- .assets_url_with_host ⇒ Object
- .config ⇒ Object
- .events ⇒ Object
-
.javascript(path_name = 'wedge', options = {}) ⇒ Object
Return the opal javascript.
- .script_tag ⇒ Object
- .trigger(wedge_name, event_name, *args) ⇒ Object
Instance Method Summary collapse
-
#append_paths ⇒ Array
Append the correct paths to opal.
-
#build(path = 'wedge', options = {}) ⇒ String, Opal::Builder#build
Returns the build object for opal.
- #javascript_cache ⇒ Object
-
#source_map(path = 'wedge', options = {}) ⇒ Object
Source maps for the javascript.
- #trigger_browser_events ⇒ Object
Methods included from Methods
Class Method Details
.[](name, *args, &block) ⇒ Wedge::Component#method
Used to call a component.
74 75 76 |
# File 'lib/wedge.rb', line 74 def [](name, *args, &block) config.component_class[name].wedge_new self, *args, &block end |
.assets_url ⇒ Object
29 30 31 32 |
# File 'lib/wedge.rb', line 29 def assets_url url = config.assets_url.gsub(%r{^(http(|s)://[^\/]*\/|\/)}, '/') "#{url}#{config.cache_assets ? "/#{config.assets_key}" : ''}" end |
.assets_url_with_host ⇒ Object
34 35 36 |
# File 'lib/wedge.rb', line 34 def assets_url_with_host "#{config.assets_url}#{config.cache_assets ? "/#{config.assets_key}" : ''}" end |
.config ⇒ Object
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/wedge.rb', line 157 def config @config ||= begin args = { klass: self, component_class: IndifferentHash.new } unless RUBY_ENGINE == 'opal' args[:path] = caller.first.gsub(/(?<=\.rb):.*/, '') args[:assets_key] = begin if defined?(PlatformAPI) && ENV['HEROKU_TOKEN'] && ENV['HEROKU_APP'] heroku = PlatformAPI.connect_oauth(ENV['HEROKU_TOKEN'], default_headers: {'Range' => 'version ..; order=desc'}) slug_id = heroku.release.list(ENV['HEROKU_APP']).first["slug"]["id"] heroku.slug.info(ENV['HEROKU_APP'], slug_id)["commit"] else `git rev-parse HEAD 2>/dev/null`.to_s.strip end end end Config.new(args) end end |
.javascript(path_name = 'wedge', options = {}) ⇒ Object
Return the opal javascript.
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/wedge.rb', line 120 def javascript(path_name = 'wedge', = {}) if server? javascript_cache[path_name] ||= begin js = build(path_name, ).javascript if path_name == 'wedge' compiled_data = Base64.encode64 config.client_data.to_json # We need to merge in some data that is only set on the server. # i.e. path, assets_key etc.... js << Opal.compile("Wedge.config.data = HashObject.new(JSON.parse(Base64.decode64('#{compiled_data}')).merge Wedge.config.data.to_h)") # load all global plugins into wedge config.plugins.each do |path| js << Wedge.javascript(path) end end js end else url = "#{Wedge.assets_url_with_host}/#{[:path]}.js" cache = [:cache_assets] `jQuery.ajax({ url: url, dataType: "script", cache: cache }).done(function() {` comp = Wedge.store!([:store].indifferent)[[:name]] if [:method_args].any? comp.send([:method_called], [:method_args]) else comp.send([:method_called]) end Wedge.trigger_browser_events `}).fail(function(jqxhr, settings, exception){ window.console.log(exception); })` end end |
.script_tag ⇒ Object
38 39 40 |
# File 'lib/wedge.rb', line 38 def script_tag "<script src='#{assets_url}/wedge.js'></script>" end |
.trigger(wedge_name, event_name, *args) ⇒ Object
59 60 61 |
# File 'lib/wedge.rb', line 59 def trigger(wedge_name, event_name, *args) events.trigger wedge_name, event_name, *args end |
Instance Method Details
#append_paths ⇒ Array
Append the correct paths to opal.
106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/wedge.rb', line 106 def append_paths @append_paths ||= begin file = method(:assets_url).source_location.first.sub('/wedge.rb', '') gems_dir = ::Opal.gem_dir.gsub(/(?<=gems)\/opal-.*/, '') Wedge::Opal.append_path file Wedge::Opal.append_path Dir.pwd Dir["#{gems_dir}/**/"].sort.each do |folder| Wedge::Opal.append_path "#{folder}/lib" end end end |
#build(path = 'wedge', options = {}) ⇒ String, Opal::Builder#build
Returns the build object for opal.
94 95 96 |
# File 'lib/wedge.rb', line 94 def build(path = 'wedge', = {}) Opal::Builder.build(path, ) if append_paths end |
#javascript_cache ⇒ Object
43 44 45 |
# File 'lib/wedge.rb', line 43 def javascript_cache @javascript_cache ||= IndifferentHash.new end |
#source_map(path = 'wedge', options = {}) ⇒ Object
Source maps for the javascript
99 100 101 |
# File 'lib/wedge.rb', line 99 def source_map(path = 'wedge', = {}) build(path, ).source_map end |
#trigger_browser_events ⇒ Object
49 50 51 52 53 54 55 56 |
# File 'lib/wedge.rb', line 49 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 |