| 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.
| variable | [R] | The name of the variable in JavaScript space. |
Escape string to be used in JavaScript. Lifted from rails.
# 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).
# 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)
# 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
Creates javascript code for array or hash indexing
# 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.
# 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
# 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.
# 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
# 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
# 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
# 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
# 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
# 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