Class: Wedge

Inherits:
Object show all
Extended by:
Forwardable
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/middleware.rb,
lib/wedge/plugins/form.rb,
lib/wedge/plugins/pjax.rb,
lib/wedge/plugins/render.rb,
lib/wedge/utilis/methods.rb,
lib/wedge/plugins/factory.rb,
lib/wedge/plugins/history.rb,
lib/wedge/plugins/uploader.rb,
lib/wedge/plugins/form_backup.rb,
lib/wedge/plugins/ability_list.rb,
lib/wedge/plugins/current_user.rb,
lib/wedge/utilis/indifferent_hash.rb,
lib/wedge/plugins/form/validations.rb

Defined Under Namespace

Modules: HTML, Methods, Plugins Classes: Component, Config, DOM, Events, IndifferentHash, Middleware

Constant Summary collapse

ATTR_ACCESSORS =
%i{scope store config events method_called}
Opal =

Create our own opal instance.

::Opal.dup
VERSION =
'0.1.24'
Form =
Wedge::Plugins::Form

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Methods

#client?, included, #server?

Class Method Details

.[](*args, &block) ⇒ Wedge::Component#method

Used to call a component.

Examples:

Browser[:foo].bar

Parameters:

  • name (String, Symbol, #to_s)

    The unique name given to a component.

Returns:



99
100
101
# File 'lib/wedge.rb', line 99

def [](*args, &block)
  config.component_class[args.shift].wedge_new self, *args, &block
end

.assets_urlObject



35
36
37
38
# File 'lib/wedge.rb', line 35

def assets_url
  url = config.assets_url.gsub(%r{^(http(|s)://[^\/]*\/|\/)}, '/')
  "#{url}#{config.cache_assets ? "/#{config.assets_key}" : ''}"
end

.assets_url_regexObject



40
41
42
43
44
45
46
47
# File 'lib/wedge.rb', line 40

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}|#{assets_url.sub("#{::Wedge.config.assets_key}/", '')})/(.*)\.(.*)$}
  end
end

.assets_url_with_hostObject



49
50
51
# File 'lib/wedge.rb', line 49

def assets_url_with_host
  "#{config.assets_url}#{config.cache_assets ? "/#{config.assets_key}" : ''}"
end

.configObject



176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# File 'lib/wedge.rb', line 176

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] = 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

.eventsObject



88
89
90
# File 'lib/wedge.rb', line 88

def events
  @events ||= Events.new
end

.html!(scope = false, &block) ⇒ Object



53
54
55
56
57
58
59
60
61
# File 'lib/wedge.rb', line 53

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 = {}) ⇒ Object

Return the opal javascript.



141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'lib/wedge.rb', line 141

def javascript(path_name = 'wedge', options = {})
  path_name = path_name.to_s

  if server?
    javascript_cache[path_name] ||= begin
      build(path_name, options).to_s
    end
  else
    url   = "#{Wedge.assets_url_with_host}/#{options[:path]}.js"
    cache = options[:cache_assets]

    `jQuery.ajax({ url: url, dataType: "script", cache: cache }).done(function() {`
      # 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

     `}).fail(function(jqxhr, settings, exception){ window.console.log(exception); })`
  end
end

.script_tagObject



63
64
65
# File 'lib/wedge.rb', line 63

def script_tag
  "<script src='#{assets_url_with_host}/wedge.js'></script>"
end

.trigger(wedge_name, event_name, *args) ⇒ Object



84
85
86
# File 'lib/wedge.rb', line 84

def trigger(wedge_name, event_name, *args)
  events.trigger wedge_name, event_name, *args
end

Instance Method Details

#append_pathsArray

Append the correct paths to opal.

Returns:

  • (Array)

    List of opal paths.



132
133
134
135
136
137
# File 'lib/wedge.rb', line 132

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}"
  end
end

#build(path = 'wedge', options = {}) ⇒ String, Opal::Builder#build

Returns the build object for opal.

Parameters:

  • path (String) (defaults to: 'wedge')

    require path to file to build.

Returns:



120
121
122
# File 'lib/wedge.rb', line 120

def build(path = 'wedge', options = {})
  Opal::Builder.build(path, options) if append_paths
end

#javascript_cacheObject



68
69
70
# File 'lib/wedge.rb', line 68

def javascript_cache
  @javascript_cache ||= IndifferentHash.new
end

#source_map(path = 'wedge', options = {}) ⇒ Object

Source maps for the javascript



125
126
127
# File 'lib/wedge.rb', line 125

def source_map(path = 'wedge', options = {})
  build(path, options).source_map
end

#trigger_browser_eventsObject



74
75
76
77
78
79
80
81
# File 'lib/wedge.rb', line 74

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