summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xruby/grep.rb17
-rwxr-xr-xruby/to_file.rb24
-rwxr-xr-xruby/tree.rb36
3 files changed, 77 insertions, 0 deletions
diff --git a/ruby/grep.rb b/ruby/grep.rb
new file mode 100755
index 0000000..61d60b0
--- /dev/null
+++ b/ruby/grep.rb
@@ -0,0 +1,17 @@
+#!/usr/bin/env ruby
+
+exit 1 if ARGV.size < 2
+
+pattern = ARGV[0]
+
+ARGV[1..-1].each do |fname|
+ unless File.file?(fname)
+ puts "File #{fname} does not exist or is a directory"
+ exit 1
+ end
+ File.open(fname, 'r') do |f|
+ f.each_line do |line|
+ puts "#{f.lineno}:\t#{line}" if line =~ /#{pattern}/
+ end
+ end
+end
diff --git a/ruby/to_file.rb b/ruby/to_file.rb
new file mode 100755
index 0000000..5b6967f
--- /dev/null
+++ b/ruby/to_file.rb
@@ -0,0 +1,24 @@
+#!/usr/bin/env ruby
+
+module ToFile
+ def filename
+ "object_#{self.object_id}.txt"
+ end
+ def to_f
+ File.open(filename, 'w') {|f| f.write(to_s)}
+ end
+end
+
+class Person
+ include ToFile
+ attr_accessor :name
+
+ def initialize(name)
+ @name = name
+ end
+ def to_s
+ name
+ end
+end
+
+Person.new("matz").to_f
diff --git a/ruby/tree.rb b/ruby/tree.rb
new file mode 100755
index 0000000..364917e
--- /dev/null
+++ b/ruby/tree.rb
@@ -0,0 +1,36 @@
+#!/usr/bin/env ruby
+
+class Tree
+ attr_accessor :name, :children
+ def initialize(hash = {})
+ pair = hash.first
+ if pair
+ @name = pair[0]
+ @children = []
+ pair[1].each do |key, value|
+ @children.push(Tree.new( {key => value} ))
+ end
+ else
+ @name = nil
+ @children = nil
+ end
+ end
+
+ def visit_all(&block)
+ visit(&block)
+ children.each {|x| x.visit_all(&block) if x}
+ end
+
+ def visit(&block)
+ block.call self
+ end
+end
+
+ruby_tree = Tree.new({"Ruby" => {"Reia" => {"MacRuby" => {}}, "Waka" => {"Blr" => {}}}})
+
+puts "Visiting a node"
+ruby_tree.visit {|node| puts node.name}
+puts
+
+puts "Visiting entire tree"
+ruby_tree.visit_all {|node| puts node.name}