40. JavaScript Compiled Ruby
Base Language
Debugging
Complexity
Base Language
Falseness
WTF’s
File Size
No Std Lib
COMPLEXITY
Performance
JS Bridge
Type Coersion
this
41. JavaScript Compiled Ruby
Base Language
Debugging
COMPLEXITY
Base Language
Falseness
WTF’s
No Std Lib
Type Coersion
this
42.
43. WTF’s
this parseInt new type coercion
semicolon insertion typeof == vs ===
case fall-through broken comparators
“string” instanceof String == false
undefined
44. PERCEPTION
“Experimenting with @opalrb - every time I
expected to find an issue, nothing happened.
Maybe it'll be time to retire coffeescript soon…”
- Sidu Ponnappa
45. TRANSPILING
local variables => local variables
instance variables => object properties
methods => function on object
with $ prefix
classes => prototypes
47. TRANSPILINGclass User
def initialize(name, age)
@name = name
@byear = Time.now.year - age
end
def welcome
“Hi #{@name}, you were born in #{@byear}"
end
end
puts User.new('Ryan', 29).welcome
48. def.name = def.birth_year = nil;
def.$initialize = function(name, age) {
var self = this;
self.name = name;
return self.byear = $scope.get('Time').$now().$year()['$-'](age);
};
return (def.$welcome_message = function() {
var self = this;
return "Hi " + (self.name) + ", you were born in " + (self.byear);
}, nil) && 'welcome_message';
49. def.name = def.birth_year = nil;
def.$initialize = function(name, age) {
var self = this;
self.name = name;
return self.byear = $scope.get('Time').$now().$year()['$-'](age);
};
return (def.$welcome_message = function() {
var self = this;
return "Hi " + (self.name) + ", you were born in " + (self.byear);
}, nil) && 'welcome_message';
50. def.name = def.birth_year = nil;
def.$initialize = function(name, age) {
var self = this;
self.name = name;
return self.byear = $scope.get('Time').$now().$year()['$-'](age);
};
return (def.$welcome_message = function() {
var self = this;
return "Hi " + (self.name) + ", you were born in " + (self.byear);
}, nil) && 'welcome_message';
51. def.name = def.birth_year = nil;
def.$initialize = function(name, age) {
var self = this;
self.name = name;
return self.byear = $scope.get('Time').$now().$year()['$-'](age);
};
return (def.$welcome_message = function() {
var self = this;
return "Hi " + (self.name) + ", you were born in " + (self.byear);
}, nil) && 'welcome_message';
61. JavaScript Compiled Ruby
Base Language
Debugging
Complexity
Base Language
Falseness
WTF’s
File Size
No Std Lib
COMPLEXITY
Performance
JS Bridge
Type Coersion
this
62. JavaScript Compiled Ruby
Base Language
Debugging
COMPLEXITY
Base Language
Falseness
WTF’s
No Std Lib
Type Coersion
this
72. VALIDATIONS
class Post < Volt::Model
validate :name, length: 4
validate :username, unique: true
end
73. PERMISSIONS
class Post < Volt::Model
own_by_user
permissions do
# Only allow owner or admin
deny unless owner? || user.admin?
end
end
74. PERMISSIONS
class Post < Volt::Model
own_by_user
permissions(:update, :delete) do
# Only allow owner to update, or admins
deny unless owner? || user.admin?
end
end
75. PERMISSIONS
class Post < Volt::Model
own_by_user
permissions(:update, :delete) do
# Only allow owner to update, or admins
deny unless owner? || user.admin?
end
permissions(:read) do
# Only the owner can see unpublished posts
deny :notes if !published? && !owner?
end
end