summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2005-04-15 20:09:07 +0000
committerLuke Kanies <luke@madstop.com>2005-04-15 20:09:07 +0000
commit3904d2efd505fec08de3c4e8e7ab6d14586aed7e (patch)
tree44f211e5d548037f5f1ff98289273edd09ac898f /lib
parent13f16b6690224758706e1c68d1da577a13df8be5 (diff)
downloadpuppet-3904d2efd505fec08de3c4e8e7ab6d14586aed7e.tar.gz
puppet-3904d2efd505fec08de3c4e8e7ab6d14586aed7e.tar.xz
puppet-3904d2efd505fec08de3c4e8e7ab6d14586aed7e.zip
fixing most of the function call stuff
git-svn-id: https://reductivelabs.com/svn/puppet/library/trunk@167 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib')
-rw-r--r--lib/blink/client.rb10
-rw-r--r--lib/blink/fact.rb24
-rw-r--r--lib/blink/function.rb37
3 files changed, 58 insertions, 13 deletions
diff --git a/lib/blink/client.rb b/lib/blink/client.rb
index 670aae4ad..cef92cfa8 100644
--- a/lib/blink/client.rb
+++ b/lib/blink/client.rb
@@ -15,11 +15,14 @@ module Blink
attr_accessor :objects
class Local
- def callfunc(name,*args)
+ def callfunc(name,args)
if function = Blink::Function[name]
- return function.call(*args)
+ #Blink.debug("calling function %s" % function)
+ value = function.call(args)
+ #Blink.debug("from %s got %s" % [name,value])
+ return value
else
- return nil
+ raise "Function '%s' not found" % name
end
end
@@ -31,7 +34,6 @@ module Blink
# create a Blink object from the list...
if type = Blink::Types.type(object.type)
namevar = type.namevar
- Blink.notice("%s namevar is %s" % [type.name,namevar])
if namevar != :name
object[namevar] = object[:name]
object.delete(:name)
diff --git a/lib/blink/fact.rb b/lib/blink/fact.rb
index 4da297828..de7d7aae0 100644
--- a/lib/blink/fact.rb
+++ b/lib/blink/fact.rb
@@ -9,12 +9,18 @@
# currently a very thin veneer on 'facter'
require 'facter'
+require 'blink'
require 'blink/types'
module Blink
class Fact < Blink::Interface
def Fact.[](name)
- Facter[name].value
+ fact = Facter[name]
+ if fact.value.nil?
+ raise "Could not retrieve fact %s" % name
+ end
+ Blink.debug("fact: got %s from %s for %s" % [fact.value,fact,name])
+ return fact.value
end
# just pass the block to 'add'
@@ -35,16 +41,22 @@ module Blink
Blink::Types.newtype(self)
+ # we're adding a new resolution mechanism here; this is just how
+ # types work
+ # we don't have any real interest in the returned object
def initialize(hash)
name = hash[:name]
hash.delete(:name)
Fact.add(name) { |fact|
- p fact
+ method = nil
hash.each { |key,value|
- method = key + "="
- #if key.is_a?(String)
- # key = key.intern
- #end
+ if key.is_a?(String)
+ method = key + "="
+ elsif key.is_a?(Symbol)
+ method = key.id2name + "="
+ else
+ raise "Key must be either string or symbol"
+ end
fact.send(method,value)
}
}
diff --git a/lib/blink/function.rb b/lib/blink/function.rb
index 9e67b0071..4f10fb2c6 100644
--- a/lib/blink/function.rb
+++ b/lib/blink/function.rb
@@ -16,8 +16,8 @@ module Blink
#---------------------------------------------------------------
#---------------------------------------------------------------
- def call(*args)
- @code.call(*args)
+ def call(args)
+ @code.call(args)
end
#---------------------------------------------------------------
@@ -36,6 +36,37 @@ module Blink
Function.new("retrieve", proc { |fact|
require 'blink/fact'
- return Fact[fact]
+ value = Fact[fact]
+ Blink.debug("retrieved %s as %s" % [fact,value])
+ value
+ })
+
+ Function.new("addfact", proc { |args|
+ require 'blink/fact'
+ #Blink.debug("running addfact")
+
+ hash = nil
+ if args.is_a?(Array)
+ hash = Hash[*args]
+ end
+ name = nil
+ if hash.has_key?("name")
+ name = hash["name"]
+ hash.delete("name")
+ elsif hash.has_key?(:name)
+ name = hash[:name]
+ hash.delete(:name)
+ else
+ raise "Functions must have names"
+ end
+ #Blink.debug("adding fact %s" % name)
+ newfact = Fact.add(name) { |fact|
+ hash.each { |key,value|
+ method = key + "="
+ fact.send(method,value)
+ }
+ }
+
+ #Blink.debug("got fact %s" % newfact)
})
end