Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RubyJS at rubyconf.tw
Search
hasclass
December 07, 2012
Programming
2
700
RubyJS at rubyconf.tw
lightning talk
hasclass
December 07, 2012
Tweet
Share
More Decks by hasclass
See All by hasclass
RubyJS
hasclass
1
230
Other Decks in Programming
See All in Programming
なんとなくわかった気になるブロックテーマ入門/contents.nagoya 2025 6.28
chiilog
1
240
PHPで始める振る舞い駆動開発(Behaviour-Driven Development)
ohmori_yusuke
2
240
Goで作る、開発・CI環境
sin392
0
180
Railsアプリケーションと パフォーマンスチューニング ー 秒間5万リクエストの モバイルオーダーシステムを支える事例 ー Rubyセミナー 大阪
falcon8823
4
1k
LINEヤフー データグループ紹介
lycorp_recruit_jp
0
1.6k
WindowInsetsだってテストしたい
ryunen344
1
210
Is Xcode slowly dying out in 2025?
uetyo
1
240
Blazing Fast UI Development with Compose Hot Reload (droidcon New York 2025)
zsmb
1
270
イベントストーミング図からコードへの変換手順 / Procedure for Converting Event Storming Diagrams to Code
nrslib
1
550
スタートアップの急成長を支えるプラットフォームエンジニアリングと組織戦略
sutochin26
0
180
Flutterで備える!Accessibility Nutrition Labels完全ガイド
yuukiw00w
0
130
A2A プロトコルを試してみる
azukiazusa1
2
1.3k
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
Practical Orchestrator
shlominoach
188
11k
Designing Experiences People Love
moore
142
24k
4 Signs Your Business is Dying
shpigford
184
22k
Six Lessons from altMBA
skipperchong
28
3.9k
BBQ
matthewcrist
89
9.7k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.4k
The Cost Of JavaScript in 2023
addyosmani
51
8.5k
For a Future-Friendly Web
brad_frost
179
9.8k
The Invisible Side of Design
smashingmag
300
51k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Transcript
RubyJS alpha www.rubyjs.org twi5er.com/hasclass
50 slides in 5 minutes
None
None
A port of Ruby core-‐lib to JS • String,
Regexp, MatchData • Array, Enumerable, Enumerator • Numeric (Integer/Fixnum, Float) • Range • Time, Hash coming soon
JS Methods Array jjjjjjjjjjjjj Enumerable Fixnum Float jjjj Integer
Kernel Matchdata Numeric Range Regexp jj String jjjjjjjjjjjjj
RubyJS Methods Array jjjjjjjjjjjjj................................. ............................ Enumerable .............................................. Fixnum ...........................
Float jjjj.............................. Integer .................... Kernel ... Matchdata ..................... Numeric ....................... Range ...................... Regexp jj...................... String jjjjjjjjjjjjj................................ ...........................
Compliant to Ruby No surprises.. Rubinius Rubyspecs ported
to JS
str = "a"
str = R("a”) #=> R.String
str = R("a") str.capitalize() #=> R.String #=> A
str = R("a") str.capitalize() .upto('C') #=> R.Enumerator
str = R("a") str.capitalize() .upto('C’) .each_cons(2, function (a,b) {
R.puts("#{a} to the #{b}") }) # A to the B # B to the C
str = R("a") str.capitalize() .upto('C’) .to_a() #=> R.Array #=>
[A, B, C]
str = R("a") str.capitalize() .upto('C’) .to_a() .join(', ') #=>
R.String #=> ’A, B, C'
str = R("a") str.capitalize() .upto('C’) .to_a() .join(', ') .ljust(10,
‘-’) #=> R.String #=> ’A, B, C---'
str = R("a") str.capitalize() .upto('C’) .to_a() .join(', ') .ljust(10,
‘-’) .to_native(); #=> string #=> ’A, B, C---'
RubyJS objects are wrappers Around naMve JS objects
Wrapper class RubyJS.Fixnum @include RubyJS.Comparable constructor: (__native__) ->
@__native__ = __native__; #=> new R.Fixnum(2)
Wrapper class RubyJS.Fixnum @include RubyJS.Comparable constructor: (@__native__) ->
odd: -> @__native__ % 2 != 0
Wrapper class RubyJS.Fixnum @include RubyJS.Comparable constructor: (@__native__) ->
odd: -> @__native__ % 2 != 0 next: -> new R.Fixnum(@__native__ + 1)
PorMng Ruby Code to JS
Ruby arr = %w(looks feels acts) arr.map {|w|
w.capitalize } .join(", ") .concat(" like Ruby") .center(35, '-') '---Looks, Feels, Acts like Ruby---’
RubyJS arr = R.w('looks feels acts')
RubyJS arr = R.w('looks feels acts') arr.map
{|w| w.capitalize }
RubyJS arr = R.w('looks feels acts') arr.map((w)
-> w.capitalize() )
RubyJS arr = R.w('looks feels acts') arr.map((w)
-> w.capitalize() ) .join(", ") .concat(" like Ruby") .center(35, '-') '---Looks, Feels, Acts like Ruby---’
Ruby arr = %w(looks feels acts) arr.map
{|w| w.capitalize } .join(", ") .concat(" like Ruby") .center(35, '-’) '---Looks, Feels, Acts like Ruby---’
RubyJS arr = R.w('looks feels acts') arr.map((w)
-> w.capitalize() ) .join(", ") .concat(" like Ruby") .center(35, '-') '---Looks, Feels, Acts like Ruby---’
Symbol#to_proc arr = R.w('looks feels acts') arr.map(
R.proc('capitalize’) ) .join(", ") .concat(" like Ruby") .center(35, '-')
Symbol#to_proc arr = R.w('looks feels acts') arr.map(
R.proc(’ljust’, 35) ) .join(", ") .concat(" like Ruby") .center(35, '-')
But I can do with library x, y ,z
arr = ['looks', 'feels', 'acts']; str = _.map(arr, (w)
-> S(w).capitalize().s; ).join(', ') str += ' like Ruby’; S(str).pad(15, '-');
RubyJS arr = R.w('looks feels acts') arr.map((w)
-> w.capitalize() ) .join(", ") .concat(" like Ruby") .center(35, '-') '---Looks, Feels, Acts like Ruby---’
Benefits
One dependency <script src="/es5shims.js"/> <script src="/underscore-1.3.min.js"/> <script src="/stringjs-0.9.9.js"/> <script
src="/momentjs-1.5.1.js"/> <script src="/custom_functions.js"/>
One dependency <script src="/es5shims.js"/> <script src="/underscore-1.3.min.js"/> <script src="/stringjs-0.9.9.js"/> <script
src="/momentjs-1.5.1.js"/> <script src="/custom_functions.js"/> <script src="/ruby.js">
One API _.map([], (w) -> ) _.chain(arr).(...).value() S("foo").capitalize().s
moment().format('L')
One API R( [1] ).map().to_native() R( [2] ).map().reject().to_native()
R("foo").capitalize().to_native() R(new Date(…)).strftime(“%y-%m-%d”)
One chain arr = ['looks', 'feels', 'acts'] str =
_.map(arr, (w) -> S(w).capitalize().s ).join(', ’) str += " not like Ruby” S(str).pad(str, 35, '-').s
One chain arr = R.w('looks feels acts') arr.map((w)
-> w.capitalize() ) .join(", ") .concat(" like Ruby") .center(35, '-')
One documentaMon
One documentaMon
20 kbytes minified and gzipped
It scales
Dual-‐license • AGPL • Commercial license
Booh
Booh
Should I open source it?
None
DO IT
RubyJS is now MIT License
Happy hacking
Roadmap • Move from CoffeeScript to JavaScript •
RubyJS corelib – Time, Hash, Date • RubyJS corelib-‐lite – remove some rubyisms – simplify
RubyJS.org twi5er.com/hasclass