Решение на Трета задача от Георги Павлов

Обратно към всички решения

Към профила на Георги Павлов

Резултати

  • 4 точки от тестове
  • 0 бонус точки
  • 4 точки общо
  • 32 успешни тест(а)
  • 12 неуспешни тест(а)

Код

module RBFS
class File
def initialize(object = nil)
@data = object
end
def data_type
case @data
when String then @data_type = :string
when Symbol then @data_type = :symbol
when Integer, Float then @data_type = :number
when TrueClass, FalseClass then @data_type = :boolean
else @data_type = :nil
end
@data_type
end
attr_accessor :data
def serialize
series = data_type.to_s + ':' + data.to_s
series
end
class << self
def parse(string_data)
@data_type = ':' + get_type(string_data)
#Should not start in the last hour
end
def get_type(string_data)
index = 0
type = ""
while string_data[index] != ':'
type << string_data[index]
index = index + 1
end
type
end
end
end
class Directory
def initialize
@files = Hash.new
@directories = Hash.new
end
def add_file(name, file)
@files[name] = file
end
def add_directory(name, directory = Directory.new)
@directories[name] = directory
end
def [](name)
if directories.has_key?(name)
return directories[name]
else
return files[name]
end
end
def serialize
return nil unless directories.values.size
series = serialize_files + directories.size.to_s + ':'
directories.each_pair do |name, directory|
series << name + ':' + directory.serialize.size.to_s + ':' + directory.serialize
end
series
end
def serialize_files
return '0:' if files.empty?
files_series = files.size.to_s + ':'
files.each_pair do |name, file|
files_series << name + ':' + file.serialize.size.to_s + ':' + file.serialize
end
files_series
end
def self.parse(string_data)
end
attr_reader :files
attr_reader :directories
end
end

Лог от изпълнението

..........FFFF..........F..FF..F..F..F..F..F

Failures:

  1) RBFS Directory serialization ::parse can parse empty directories
     Failure/Error: expect(parsed_directory.files      ).to eq({})
     NoMethodError:
       undefined method `files' for nil:NilClass
     # /tmp/d20141111-26053-16etbgq/spec.rb:103:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  2) RBFS Directory serialization ::parse can parse directories with files
     Failure/Error: expect(parsed_directory.files.size     ).to eq    2
     NoMethodError:
       undefined method `files' for nil:NilClass
     # /tmp/d20141111-26053-16etbgq/spec.rb:110:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  3) RBFS Directory serialization ::parse can parse directory trees without files
     Failure/Error: expect(parsed_directory['dir1']        ).to be_an RBFS::Directory
     NoMethodError:
       undefined method `[]' for nil:NilClass
     # /tmp/d20141111-26053-16etbgq/spec.rb:119:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  4) RBFS Directory serialization ::parse can parse directories recursively
     Failure/Error: expect(parsed_directory.files.size     ).to eq 2
     NoMethodError:
       undefined method `files' for nil:NilClass
     # /tmp/d20141111-26053-16etbgq/spec.rb:127:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  5) RBFS File data type nil can be parsed
     Failure/Error: expect(file.data     ).to eq nil
     NoMethodError:
       undefined method `data' for ":nil":String
     # /tmp/d20141111-26053-16etbgq/spec.rb:231:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  6) RBFS File data type string can be parsed
     Failure/Error: expect(file.data     ).to eq 'Hey there'
     NoMethodError:
       undefined method `data' for ":string":String
     # /tmp/d20141111-26053-16etbgq/spec.rb:250:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  7) RBFS File data type string can parse a string with colons
     Failure/Error: expect(file.data     ).to eq 'Hay :)'
     NoMethodError:
       undefined method `data' for ":string":String
     # /tmp/d20141111-26053-16etbgq/spec.rb:257:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  8) RBFS File data type symbol can be parsed
     Failure/Error: expect(file.data     ).to eq :hello
     NoMethodError:
       undefined method `data' for ":symbol":String
     # /tmp/d20141111-26053-16etbgq/spec.rb:276:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  9) RBFS File data type number can be parsed
     Failure/Error: expect(file.data     ).to eq 1234
     NoMethodError:
       undefined method `data' for ":number":String
     # /tmp/d20141111-26053-16etbgq/spec.rb:295:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  10) RBFS File data type float number can be parsed
     Failure/Error: expect(file.data     ).to eq 3.14
     NoMethodError:
       undefined method `data' for ":number":String
     # /tmp/d20141111-26053-16etbgq/spec.rb:314:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  11) RBFS File data type boolean true can be parsed
     Failure/Error: expect(file.data     ).to eq true
     NoMethodError:
       undefined method `data' for ":boolean":String
     # /tmp/d20141111-26053-16etbgq/spec.rb:334:in `block (6 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  12) RBFS File data type boolean false can be parsed
     Failure/Error: expect(file.data     ).to eq false
     NoMethodError:
       undefined method `data' for ":boolean":String
     # /tmp/d20141111-26053-16etbgq/spec.rb:353:in `block (6 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

Finished in 0.04218 seconds
44 examples, 12 failures

Failed examples:

rspec /tmp/d20141111-26053-16etbgq/spec.rb:100 # RBFS Directory serialization ::parse can parse empty directories
rspec /tmp/d20141111-26053-16etbgq/spec.rb:107 # RBFS Directory serialization ::parse can parse directories with files
rspec /tmp/d20141111-26053-16etbgq/spec.rb:116 # RBFS Directory serialization ::parse can parse directory trees without files
rspec /tmp/d20141111-26053-16etbgq/spec.rb:124 # RBFS Directory serialization ::parse can parse directories recursively
rspec /tmp/d20141111-26053-16etbgq/spec.rb:229 # RBFS File data type nil can be parsed
rspec /tmp/d20141111-26053-16etbgq/spec.rb:247 # RBFS File data type string can be parsed
rspec /tmp/d20141111-26053-16etbgq/spec.rb:254 # RBFS File data type string can parse a string with colons
rspec /tmp/d20141111-26053-16etbgq/spec.rb:273 # RBFS File data type symbol can be parsed
rspec /tmp/d20141111-26053-16etbgq/spec.rb:292 # RBFS File data type number can be parsed
rspec /tmp/d20141111-26053-16etbgq/spec.rb:311 # RBFS File data type float number can be parsed
rspec /tmp/d20141111-26053-16etbgq/spec.rb:331 # RBFS File data type boolean true can be parsed
rspec /tmp/d20141111-26053-16etbgq/spec.rb:350 # RBFS File data type boolean false can be parsed

История (1 версия и 0 коментара)

Георги обнови решението на 10.11.2014 16:55 (преди над 9 години)

+module RBFS
+
+ class File
+ def initialize(object = nil)
+ @data = object
+ end
+
+ def data_type
+ case @data
+ when String then @data_type = :string
+ when Symbol then @data_type = :symbol
+ when Integer, Float then @data_type = :number
+ when TrueClass, FalseClass then @data_type = :boolean
+ else @data_type = :nil
+ end
+ @data_type
+ end
+
+ attr_accessor :data
+
+ def serialize
+ series = data_type.to_s + ':' + data.to_s
+ series
+ end
+
+ class << self
+ def parse(string_data)
+ @data_type = ':' + get_type(string_data)
+ #Should not start in the last hour
+ end
+
+ def get_type(string_data)
+ index = 0
+ type = ""
+ while string_data[index] != ':'
+ type << string_data[index]
+ index = index + 1
+ end
+ type
+ end
+ end
+ end
+
+ class Directory
+ def initialize
+ @files = Hash.new
+ @directories = Hash.new
+ end
+
+ def add_file(name, file)
+ @files[name] = file
+ end
+
+ def add_directory(name, directory = Directory.new)
+ @directories[name] = directory
+ end
+
+ def [](name)
+ if directories.has_key?(name)
+ return directories[name]
+ else
+ return files[name]
+ end
+ end
+
+ def serialize
+ return nil unless directories.values.size
+ series = serialize_files + directories.size.to_s + ':'
+ directories.each_pair do |name, directory|
+ series << name + ':' + directory.serialize.size.to_s + ':' + directory.serialize
+ end
+ series
+ end
+
+ def serialize_files
+ return '0:' if files.empty?
+ files_series = files.size.to_s + ':'
+ files.each_pair do |name, file|
+ files_series << name + ':' + file.serialize.size.to_s + ':' + file.serialize
+ end
+ files_series
+ end
+
+ def self.parse(string_data)
+
+ end
+
+ attr_reader :files
+ attr_reader :directories
+ end
+end