mobx-ruby
ruby
ruby conf 2017
Ruby
80% &CTO
,
80%
•
• RubyConf China
• (DJI) Ruby
•
• spreadsheet
• web
• mobx-ruby
• mobx-ruby
•
•
• callback
• + ( , )
mobx
spreadsheets
an example
AngularJS
•
• <=> UI
• ( scope apply & digest)
•
• zone.js( )
ReactJS
•
• , UI
• DOM, diff UI
VueJS
• mobx
• data: {}
• , UI
Ruby mobx
mobx
• ( observable value )
• ( computed value )
• ( autorun )
mobx-ruby
# basic.rb
require 'mobx'
class A
include Mobx::Extension
observable :foo, 1
end
a = A.new
## Autorun
runner = Mobx.autorun do
puts "Hello: #{a.foo}"
end
a.foo = 2
# > Hello: 2
a.foo = 3
# > Hello: 3
# ai.rb
require 'mobx'
require 'byebug'
class A
include Mobx::Extension
observable :foo, 1
observable :bar, 2
observable :nocare, 10
end
a = A.new
runner = Mobx.autorun do
puts "Hello foo: #{a.foo} bar: #{a.bar}"
end
# > Hello foo: 1 bar: 2
a.foo = 2
# > Hello foo: 2 bar: 2
a.bar = 4
# > Hello foo: 2 bar: 4
a.nocare = 10
#
# transaction.rb
require 'mobx'
require 'byebug'
class A
include Mobx::Extension
observable :foo, 1
end
a = A.new
runner = Mobx.autorun do
puts "Hello: #{a.foo}"
end
# > Hello: 1
Mobx.transaction do
a.foo = 2
a.foo = 3
a.foo = 4
end
# > Hello: 4
mobx-ruby (
)
mobx-ruby
•
•
•
• class Observable
•
•
• class Reaction
•
• class Autorun
•
• ,
• Observable
• Autorun , Observable
•
• Observable ,
• transaction
• ,
• , autorun
• mobx
• ,
• redux
• ,
• rxjs
• , :)
redux
3 ~ 15
•
• actioncable opal , rails
‘meteor’
# This is just a simple example for actioncable server
require 'mobx'
class Todolist
include Mobx::Extension
observable :todos, []
def todo_length
todos.length
end
end
todolist = Todolist.new
runner = Mobx.autorun do
ActionCable.broadcast 'todo_channel', { todos:
todolist.todos, length: todolist.todo_length }
end
todolist.todos << ' '
# > todo_channel
todolist.todos << ' '
# > todo_channel
todolist.todos << ' '
# > todo_channel
• callback
•
# This is just a simple example for callback
require 'mobx'
class ModelA
include Mobx::Extension
observable :a, 1
end
class ModelB
def initialize
@b = nil
end
end
a = ModelA.new
b = ModelB.new
Mobx.autorun do
b.b = a.a + 1
b.save!
end
a.a = 2
# b a , callback
• Rails
•
# This is just a simple example for redis cache
require 'mobx'
class CacheListener
include Mobx::Extension
observable :avatar, '/uploads/xx.jpg'
end
cache = CacheListener.new
runner = Mobx.autorun do
Redis.set(:avatar_key, cache_listener.avatar)
end
cache.avatar = '/uploads/new_avatar.jpg'
# > Cache
mobx-ruby
• ( ) -
• ( )
• ( )
• ( ) -
• ( TODO )
• ( TODO )
• ( TODO )
• ( TODO )
• 2018 1
mobx-ruby
• RxJava( ) 27k
•
•
• Ruby
lyfi2003
: mobx
• rails-template
• github: 80percent/rails-template
• rails5.x
• : , ssl, backup, ,
• wechat-weapp-mobx
• github: 80percent/wechat-weapp-mobx
•
RubyChina ID: lyfi2003

mobx-ruby rubyconf china 2017 李亚飞演讲