Sha256: 1a5351134a371897f898b552fe395eab727340f2e356fb8c2aa74a2583e540e5
Contents?: true
Size: 1.42 KB
Versions: 5
Compression:
Stored size: 1.42 KB
Contents
module Gitrb class Object attr_accessor :repository, :id alias sha id def initialize(options = {}) @repository = options[:repository] @id = options[:id] || options[:sha] end CLASS = {} def object self end def self.inherited(subclass) CLASS[subclass.name[7..-1].downcase] = subclass end def self.factory(type, *args) klass = CLASS[type] or raise NotImplementedError, "Object type not supported: #{type}" klass.new(*args) end end class Reference undef_method :id, :type rescue nil def sha id end def initialize(properties = {}) @properties = properties @object = nil end def method_missing(name, *args, &block) if @object instance_eval %{def self.#{name}(*args, &block); @object.send("#{name}", *args, &block); end} @object.send(name, *args, &block) elsif name == :type && (mode = @properties['mode'] || @properties[:mode]) mode = mode.to_i(8) return (mode & 0x4000 == 0x4000) ? 'tree' : 'blob' elsif @properties.include?(name) return @properties[name] elsif @properties.include?(name.to_s) return @properties[name.to_s] elsif object method_missing(name, *args, &block) else super end end def object @object ||= repository.get(id) end def resolved? @object != nil end end end
Version data entries
5 entries across 5 versions & 1 rubygems
Version | Path |
---|---|
gitrb-0.0.8 | lib/gitrb/object.rb |
gitrb-0.0.7 | lib/gitrb/object.rb |
gitrb-0.0.6 | lib/gitrb/object.rb |
gitrb-0.0.5 | lib/gitrb/object.rb |
gitrb-0.0.4 | lib/gitrb/object.rb |