lib/Tokens.rb in maroon-0.7.1 vs lib/Tokens.rb in maroon-0.8.0
- old
+ new
@@ -1,8 +1,13 @@
class Tokens
def self.define_token(name)
- class_eval("@@#{name} = Tokens.new :#{name};def Tokens.#{name};@@#{name};end")
+ class_eval %{
+ @#{name} = Tokens.new :#{name};
+ def Tokens.#{name}
+ @#{name}
+ end
+ }
end
def to_s
@type.to_s
end
@@ -19,6 +24,63 @@
define_token :other
define_token :call
define_token :indexer
define_token :block
define_token :block_with_bind
-end
\ No newline at end of file
+ define_token :initializer
+ define_token :const
+end
+
+class DependencyGraphModel
+
+ def initialize(dependencies)
+ @dependencies = dependencies
+ end
+
+ def to_hash
+ @dependecies
+ end
+
+ def to_s
+ print_dependencies @dependencies,0
+ end
+
+ def to_dot
+ res = ''
+ dependencies = denormalize @dependencies
+ dependencies.each{|d| res << d.reverse.join('->') << '
+'}
+ 'digraph g{
+ ' + res + '}'
+ end
+
+ private
+ def print_dependencies(dependencies,indent)
+ res = ''
+ dependencies.each do |key,value|
+ res << key.to_s
+ if value.instance_of? Hash
+ res << '->' << (print_dependencies value,indent != nil ? indent+4 : nil)
+ elsif
+ res << ':' << value.to_s + '
+ '
+ indent.times {res << ' '} unless indent == nil
+ end
+ res << '
+ '
+ end
+ res
+ end
+
+ def denormalize(dependencies)
+ res = []
+ dependencies.each do |key,value|
+ if value.instance_of? Hash
+ res = denormalize value
+ res.each{|a| a << key}
+ else
+ res << [key]
+ end
+ end
+ res
+ end
+end