module Proxima

Constants

HTTP_METHODS
TYPES
VERSION

Public Class Methods

add_type(klass, from = nil, to = nil) click to toggle source
# File lib/proxima/types.rb, line 43
def self.add_type(klass, from = nil, to = nil)
  TYPES.push({
    klass: klass,
    from:  from,
    to:    to
  })
end
remove_type(klass) click to toggle source
# File lib/proxima/types.rb, line 51
def self.remove_type(klass)
  TYPES.delete_if({
    klass: klass,
    from:  from,
    to:    to
  })
end
type_from_json(klass, value) click to toggle source
# File lib/proxima/types.rb, line 59
def self.type_from_json(klass, value)
  type = TYPES.find { |t| t[:klass] == klass }
  if type
    type[:from_json].call(value)
  else
    value
  end
end
type_to_json(klass, value) click to toggle source
# File lib/proxima/types.rb, line 68
def self.type_to_json(klass, value)
  type = TYPES.find { |t| t[:klass] == klass }
  if type
    type[:to_json].call(value)
  else
    value
  end
end
watch(value, &block) click to toggle source
# File lib/proxima/watch.rb, line 7
def self.watch(value, &block)
  Proxima.watch_hash(value, &block)  if value.is_a? Hash
  Proxima.watch_array(value, &block) if value.is_a? Array
end
watch_array(array, &on_change) click to toggle source
# File lib/proxima/watch_array.rb, line 5
def self.watch_array(array, &on_change)

  array.instance_variable_set(:@on_change, on_change)

  array.each do |value|
    Proxima.watch(value, &on_change)
  end

  class << array

    def <<(*args)
      result = super
      args.each do |value|
        Proxima.watch(value, &@on_change)
      end
      @on_change.call
      result
    end

    def []=(*args)
      result = super
      Proxima.watch(args[2] || args[1], &@on_change)
      @on_change.call
      result
    end

    def clear(*args)
      result = super
      @on_change.call
      result
    end

    def collect!(*args)
      result = super
      @on_change.call
      result
    end

    def compact!(*args)
      result = super
      @on_change.call if result
      result
    end

    def delete(*args)
      result = super
      @on_change.call if result
      result
    end

    def delete_at(*args)
      result = super
      @on_change.call if result
      result
    end

    def delete_if(*args)
      result = super
      @on_change.call
      result
    end

    def fill(*args)
      result = super
      @on_change.call
      result
    end

    def flatten!(*args)
      result = super
      @on_change.call
      result
    end

    def replace(*args)
      result = super
      @on_change.call
      result
    end

    def insert(*args)
      args[1..-1].each do |value|
        Proxima.watch(value, &@on_change)
      end
      result = super
      @on_change.call if args[1] != nil
      result
    end

    def pop(*args)
      result = super
      @on_change.call if args[0] == nil || args[0] > 0
      result
    end

    def push(*args)
      args.each do |value|
        Proxima.watch(value, &@on_change)
      end
      result = super
      @on_change.call if args.length > 0
      result
    end

    def reject!(*args)
      result = super
      @on_change.call if result
      result
    end

    def reverse!(*args)
      result = super
      @on_change.call
      result
    end

    def rotate!(*args)
      result = super
      @on_change.call if args[0] != 0
      result
    end

    def select!(*args)
      result = super
      @on_change.call if result
      result
    end

    def shift(*args)
      result = super
      @on_change.call if args[0] == nil || args[0] > 0
      result
    end

    def shuffle!(*args)
      result = super
      @on_change.call
      result
    end

    def slice!(*args)
      result = super
      if result.is_a? Array
        @on_change.call if result.length > 0
      else
        @on_change.call if result != nil
      end
      result
    end

    def sort!(*args)
      result = super
      @on_change.call
      result
    end

    def sort_by!(*args)
      result = super
      @on_change.call
      result
    end

    def uniq!(*args)
      result = super
      @on_change.call if result
      result
    end
  end
end
watch_hash(hash, &on_change) click to toggle source
# File lib/proxima/watch_hash.rb, line 5
def self.watch_hash(hash, &on_change)

  hash.instance_variable_set(:@on_change, on_change)

  hash.values.each do |value|
    Proxima.watch(value, &on_change)
  end

  class << hash

    def []=(*args)
      Proxima.watch(args[1], &@on_change)
      result = super
      @on_change.call if args[1]
      result
    end

    def clear(*args)
      result = super
      @on_change.call
      result
    end

    def delete(*args)
      result = super
      @on_change.call if result
      result
    end

    def delete_if(*args)
      result = super
      @on_change.call
      result
    end

    def merge!(*args)
      args[0].values.each do |value|
        Proxima.watch(value, &@on_change)
      end
      result = super
      @on_change.call
      result
    end

    def reject!(*args)
      result = super
      @on_change.call if result
      result
    end

    def select!(*args)
      result = super
      @on_change.call if result
      result
    end

    def store(*args)
      Proxima.watch(args[1], &@on_change)
      result = super
      @on_change.call
      result
    end

    def update(*args)
      args[0].values.each do |value|
        Proxima.watch(value, &@on_change)
      end
      result = super
      @on_change.call
      result
    end
  end
end