Module Ym4r::MapstractionPlugin::MappingObject
In: lib/mapstraction_plugin/mapping.rb

The module where all the Ruby-to-JavaScript conversion takes place. It is included by all the classes in the YM4R library.

Methods

Attributes

variable  [R]  The name of the variable in JavaScript space.

Public Class methods

Escape string to be used in JavaScript. Lifted from rails.

[Source]

    # File lib/mapstraction_plugin/mapping.rb, line 42
42:       def self.escape_javascript(javascript)
43:         javascript.gsub(/\r\n|\n|\r/, "\\n").gsub(/["']/) { |m| "\\#{m}" }
44:       end

Transform a ruby-type method name (like add_overlay) to a JavaScript-style one (like addOverlay).

[Source]

    # File lib/mapstraction_plugin/mapping.rb, line 47
47:       def self.javascriptify_method(method_name)
48:         method_name.gsub(/_(\w)/){|s| $1.upcase}
49:       end

Transforms a Ruby object into a JavaScript string : MAppingObject, String, Array, Hash and general case (using to_s)

[Source]

    # File lib/mapstraction_plugin/mapping.rb, line 23
23:       def self.javascriptify_variable(arg)
24:         if arg.is_a?(MappingObject)
25:           arg.to_javascript
26:         elsif arg.is_a?(String)
27:           "\"#{MappingObject.escape_javascript(arg)}\""
28:         elsif arg.is_a?(Array)
29:           "[" + arg.collect{ |a| MappingObject.javascriptify_variable(a)}.join(",") + "]"
30:         elsif arg.is_a?(Hash)
31:           "{" + arg.to_a.collect do |v|
32:             "#{MappingObject.javascriptify_method(v[0].to_s)} : #{MappingObject.javascriptify_variable(v[1])}"
33:           end.join(",") + "}"
34:         elsif arg.nil?
35:           "undefined"
36:         else
37:           arg.to_s
38:         end
39:       end

Public Instance methods

Creates javascript code for array or hash indexing

[Source]

    # File lib/mapstraction_plugin/mapping.rb, line 18
18:       def [](index) #index could be an integer or string
19:         return Variable.new("#{to_javascript}[#{MappingObject.javascriptify_variable(index)}]")
20:       end

Binds a Mapping object to a previously declared JavaScript variable of name variable.

[Source]

    # File lib/mapstraction_plugin/mapping.rb, line 70
70:       def assign_to(variable)
71:         @variable = variable
72:         "#{@variable} = #{create};"
73:       end

Creates a Mapping Object in JavaScript. To be implemented by subclasses if needed

[Source]

    # File lib/mapstraction_plugin/mapping.rb, line 96
96:       def create
97:       end

Declares a Mapping Object bound to a JavaScript variable of name variable.

[Source]

    # File lib/mapstraction_plugin/mapping.rb, line 52
52:       def declare(variable)
53:         @variable = variable
54:         "var #{@variable} = #{create};"
55:       end

declare with a random variable name

[Source]

    # File lib/mapstraction_plugin/mapping.rb, line 58
58:       def declare_random(init,size = 8)
59:         s = init.clone
60:         6.times { s << (i = Kernel.rand(62); i += ((i < 10) ? 48 : ((i < 36) ? 55 : 61 ))).chr }
61:         declare(s)
62:       end

Checks if the MappinObject has been declared

[Source]

    # File lib/mapstraction_plugin/mapping.rb, line 65
65:       def declared?
66:         !@variable.nil?
67:       end

Returns the code to get a property from the MappingObject

[Source]

    # File lib/mapstraction_plugin/mapping.rb, line 81
81:       def get_property(property)
82:         Variable.new("#{to_javascript}.#{MappingObject.javascriptify_method(property.to_s)}")
83:       end

Creates javascript code for missing methods + takes care of listeners

[Source]

    # File lib/mapstraction_plugin/mapping.rb, line 9
 9:       def method_missing(name,*args)
10:         str_name = name.to_s
11:         args.collect! do |arg|
12:           MappingObject.javascriptify_variable(arg)
13:         end
14:         Variable.new("#{to_javascript}.#{MappingObject.javascriptify_method(str_name)}(#{args.join(",")})")
15:       end

Assign the value to the property of the MappingObject

[Source]

    # File lib/mapstraction_plugin/mapping.rb, line 76
76:       def set_property(property, value)
77:         "#{to_javascript}.#{MappingObject.javascriptify_method(property.to_s)} = #{MappingObject.javascriptify_variable(value)}"
78:       end

Returns a Javascript code representing the object

[Source]

    # File lib/mapstraction_plugin/mapping.rb, line 86
86:       def to_javascript
87:         unless @variable.nil?
88:           @variable
89:         else
90:           create
91:         end
92:       end

[Validate]