class Bluesky::ViewController

Attributes

appearance[RW]
children[RW]
data[RW]
parent[RW]

Public Class Methods

attribute(name, *args, &block) click to toggle source
# File lib/bluesky/view_controller.rb, line 15
def self.attribute(name, *args, &block)
  case args.length
  when 0
    define_method(name) { data.fetch(name) }
  when 1
    if args[0].respond_to?(:call)
      define_method(name) { data.fetch(name) { data.store(name, args[0].call) } }
    else
      define_method(name) { data.fetch(name, args[0]) }
    end
  else
    raise ArgumentError, %{ wrong number of arguments
                            (#{args.length} for 1..2) }
  end
  define_method("#{name}=") { |value| data.store(name, value) }
end
inherited(subclass) click to toggle source
# File lib/bluesky/view_controller.rb, line 32
def self.inherited(subclass)
  define_method(subclass.name) do |**data|
    subclass.new(delegate: self, data: data)
  end
end
new(*_, children: [], parent: nil, data: {}) click to toggle source
# File lib/bluesky/view_controller.rb, line 40
def initialize(*_, children: [], parent: nil, data: {})
  @children = children
  @parent = parent
  @data = data
  @appearance = :disappeared
  @force_update = false
  @delegate = self
end

Public Instance Methods

add_child_view_controller(view_controller) click to toggle source
# File lib/bluesky/view_controller.rb, line 96
def add_child_view_controller(view_controller)
  view_controller.will_move_to_parent_view_controller(self)
  view_controller.remove_from_parent_view_controller
  children.push(view_controller)
  view_controller.parent = self
  view_controller.did_move_to_parent_view_controller(self)
end
appeared?() click to toggle source
# File test/test_helper.rb, line 40
def appeared?
  !!(@will_appear && @did_appear && @will_appear < @did_appear &&
    (@will_disappear ? @will_appear > @will_disappear : true) &&
    (@did_disappear  ? @did_appear > @did_disappear : true))
end
begin_appearance_transition(appearing) click to toggle source
# File lib/bluesky/view_controller.rb, line 69
def begin_appearance_transition(appearing)
  if appearing
    return unless @appearance == :disappeared
    # raise "Invalid appearance #{@appearance} when appearing" if @appearance != :disappeared
    @appearance = :appearing
    view_will_appear()
  else
    return unless @appearance == :appeared
    # raise "Invalid appearance #{@appearance} when disappearing" if @appearance != :appeared
    @appearance = :disappearing
    view_will_disappear()
  end
end
did_move_to_parent_view_controller(view_controller) click to toggle source
# File lib/bluesky/view_controller.rb, line 131
def did_move_to_parent_view_controller(view_controller)
end
disappeared?() click to toggle source
# File test/test_helper.rb, line 46
def disappeared?
  !!(@will_disappear && @did_disappear && @will_disappear < @did_disappear &&
    (@will_appear ? @will_disappear > @will_appear : true) &&
    (@did_appear  ? @did_disappear > @did_appear : true))
end
dismiss() click to toggle source
# File lib/bluesky/view_controller.rb, line 117
def dismiss
  raise 'not implemented'
end
dispatch(target, action, *payload, &block) click to toggle source
# File lib/bluesky/view_controller.rb, line 61
def dispatch(target, action, *payload, &block)
  try(parent, :dispatch, target, action, *payload, &block)
end
dump() click to toggle source
# File test/test_helper.rb, line 57
def dump
  puts "will_appear == #{@will_appear}"
  puts "did_appear == #{@did_appear}"
  puts "will_disappear == #{@will_disappear}"
  puts "did_disappear == #{@did_disappear}"
end
end_appearance_transition() click to toggle source
# File lib/bluesky/view_controller.rb, line 83
def end_appearance_transition()
  case @appearance
  when :appearing
    @appearance = :appeared
    view_did_appear()
  when :disappearing
    @appearance = :disappeared
    view_did_disappear()
  else
    # raise "Invalid appearance #{@appearance} when transitioning"
  end
end
force_update() { || ... } click to toggle source

Dispatch methods

# File lib/bluesky/view_controller.rb, line 148
def force_update
  @force_update = true
  @parent.refresh do
    @force_update = false
    yield if block_given?
  end
end
force_update?() click to toggle source
# File lib/bluesky/view_controller.rb, line 49
def force_update?
  @force_update
end
index() click to toggle source
# File test/test_helper.rb, line 19
def index
  @index ||= 0
  @index += 1
end
navigation_controller() click to toggle source
notify(source, event, *payload) click to toggle source
# File lib/bluesky/view_controller.rb, line 65
def notify(source, event, *payload)
  try(parent, :notify, source, event, *payload)
end
present(_view_controller) click to toggle source
# File lib/bluesky/view_controller.rb, line 113
def present(_view_controller)
  raise 'not implemented'
end
refresh(&block) click to toggle source
# File lib/bluesky/view_controller.rb, line 156
def refresh(&block)
  @parent.refresh(&block)
end
remove_from_parent_view_controller() click to toggle source
# File lib/bluesky/view_controller.rb, line 104
def remove_from_parent_view_controller
  return unless parent
  parent.children.delete(self)
end
render() click to toggle source
# File lib/bluesky/view_controller.rb, line 57
def render
  view
end
reset!() click to toggle source
# File test/test_helper.rb, line 52
def reset!
  @will_appear = @did_appear = @will_disappear = @did_disappear = false
  @index = 0
end
show(_view_controller) click to toggle source
# File lib/bluesky/view_controller.rb, line 109
def show(_view_controller)
  raise 'not implemented'
end
view() click to toggle source
# File lib/bluesky/view_controller.rb, line 53
def view
  nil
end
view_did_appear() click to toggle source
# File lib/bluesky/view_controller.rb, line 137
def view_did_appear
end
view_did_disappear() click to toggle source
# File lib/bluesky/view_controller.rb, line 143
def view_did_disappear
end
view_will_appear() click to toggle source
# File lib/bluesky/view_controller.rb, line 134
def view_will_appear
end
view_will_disappear() click to toggle source
# File lib/bluesky/view_controller.rb, line 140
def view_will_disappear
end
will_move_to_parent_view_controller(view_controller) click to toggle source

Callbacks

# File lib/bluesky/view_controller.rb, line 128
def will_move_to_parent_view_controller(view_controller)
end