Skip to content

Commit

Permalink
Replace our Observer class with the Eventful gem.
Browse files Browse the repository at this point in the history
  • Loading branch information
jcoglan committed Jun 27, 2009
1 parent 6f7ea8d commit 5f59ec2
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 25 deletions.
1 change: 1 addition & 0 deletions Rakefile
Expand Up @@ -7,6 +7,7 @@ require './lib/siren.rb'
Hoe.new('siren', Siren::VERSION) do |p|
# p.rubyforge_name = 'sirenx' # if different than lowercase project name
p.developer('James Coglan', 'jcoglan@googlemail.com')
p.extra_deps = %w[treetop eventful]
end

task :tt do
Expand Down
6 changes: 4 additions & 2 deletions lib/siren.rb
@@ -1,8 +1,9 @@
require 'rubygems'
require 'treetop'
require 'eventful'

%w[ json json_query json_query_nodes
walker parser node reference observer
walker parser node reference
].each do |path|
require File.dirname(__FILE__) + '/siren/' + path
end
Expand All @@ -27,7 +28,8 @@ def self.parse(string, &block)

@json_parser.walk(result) do |holder, key, value|
if Hash === value && value[REF_FIELD]
value = Reference.new(value) do |ref, root, symbols|
value = Reference.new(value)
value.on(:resolve) do |ref, root, symbols|
holder[key] = ref.find(root, symbols, holder)
end
end
Expand Down
4 changes: 2 additions & 2 deletions lib/siren/node.rb
Expand Up @@ -6,9 +6,9 @@ def from_json(hash)
hash.each do |key, value|
object.instance_variable_set("@#{key}", value)
if Reference === value
value.add_observer(Observer.new { |ref, root, symbols|
value.on(:resolve) do |ref, root, symbols|
object.instance_variable_set("@#{key}", ref.find(root, symbols, object))
})
end
end
end
object
Expand Down
14 changes: 0 additions & 14 deletions lib/siren/observer.rb

This file was deleted.

10 changes: 3 additions & 7 deletions lib/siren/reference.rb
@@ -1,9 +1,7 @@
require 'observer'

module Siren
class Reference

include Observable
include Eventful

def self.flush!
@@cache = {}
Expand All @@ -13,16 +11,14 @@ def self.resolve!(root, symbols)
@@cache.each { |id, ref| ref.resolve!(root, symbols) }
end

def initialize(hash, &block)
def initialize(hash)
@query = Siren.compile_query(hash[REF_FIELD])
@@cache ||= {}
@@cache[hash.__id__] = self
add_observer(Observer.new(&block)) if block_given?
end

def resolve!(root, symbols)
changed(true)
notify_observers(self, root, symbols)
fire(:resolve, root, symbols)
end

def find(root, symbols, current)
Expand Down

0 comments on commit 5f59ec2

Please sign in to comment.