Решение на Трета задача от Васил Бунарджиев

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

Към профила на Васил Бунарджиев

Резултати

  • 3 точки от тестове
  • 0 бонус точки
  • 3 точки общо
  • 25 успешни тест(а)
  • 19 неуспешни тест(а)

Код

class String
def is_int?
/\A[-+]?[0-9_]+\z/ === self
end
end
module RBFS
class File
def initialize(*argument)
if argument[0] == nil
@file_value = nil
else
@file_value = argument[0]
@file_type = argument[0].class.to_s
end
end
def data_type
return :nil if @file_type == nil
return :string if @file_type == 'String'
return :symbol if @file_type == 'Symbol'
return :number if @file_type == 'Fixnum' or @file_type == 'Float'
return :boolean if @file_type == 'FalseClass' or @file_type == 'TrueClass'
end
def data
@file_value
end
def data=(argument)
@file_value = argument
@file_type = argument.class.to_s
end
def serialize
return self.data_type.to_s+':' if @file_value == nil
return self.data_type.to_s+':'+@file_value.to_s
end
def parse(string_data)
arg_type = string_data[0..string_data.index(':')-1]
arg = string_data[string_data.index(':')+1..-1]
return File.new(arg == 'true') if arg_type == 'boolean'
return File.new(arg.to_sym) if arg_type == 'symbol'
return File.new(arg) if arg_type == 'string'
return File.new if arg_type == 'nil'
return File.new(arg.to_i) if arg_type == 'number' and arg.is_int?
return File.new(arg.to_f) if arg_type == 'number'
end
end
class Directory
def files
@all_types_hash.reject {|key,value| value.class == RBFS::Directory}
end
def directories
@directories
end
def all_types_hash
@all_types_hash
end
def initialize
@all_types_hash = Hash.new
@directories = Hash.new
end
def add_file(name, file)
@all_types_hash[name] = file
end
def add_directory(name, *directory)
if directory[0] != nil
@all_types_hash[name] = directory[0]
@directories[name] = directory[0]
else
@all_types_hash[name] = nil
end
end
def [](name)
return directories[name]
end
end
end

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

.F..F...FFFFFF..F.....FFF..FF..F..F..F..F..F

Failures:

  1) RBFS Directory can create empty directory
     Failure/Error: expect(directory.directories.keys   ).to eq    ['home']
       
       expected: ["home"]
            got: []
       
       (compared using ==)
     # /tmp/d20141111-26053-1v8grzg/spec.rb:152:in `block (3 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 without files can be serialized
     Failure/Error: expect(directory.serialize).to eq '0:0:'
     NoMethodError:
       undefined method `serialize' for #<RBFS::Directory:0xba211ac8 @all_types_hash={}, @directories={}>
     # /tmp/d20141111-26053-1v8grzg/spec.rb:11:in `block (4 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 #serialize can serialize
     Failure/Error: expect(directory.serialize).to eq simple_serialized_string
     NoMethodError:
       undefined method `serialize' for #<RBFS::Directory:0xba20d694>
     # /tmp/d20141111-26053-1v8grzg/spec.rb:81: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 #serialize can serialize multiple directories recursively
     Failure/Error: directory['rbfs'].add_file         'solution.rb', RBFS::File.new(:hidden)
     NoMethodError:
       undefined method `add_file' for nil:NilClass
     # /tmp/d20141111-26053-1v8grzg/spec.rb:91: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 Directory serialization ::parse can parse empty directories
     Failure/Error: parsed_directory = RBFS::Directory.parse('0:0:')
     NoMethodError:
       undefined method `parse' for RBFS::Directory:Class
     # /tmp/d20141111-26053-1v8grzg/spec.rb:101: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 Directory serialization ::parse can parse directories with files
     Failure/Error: parsed_directory = RBFS::Directory.parse(simple_serialized_string)
     NoMethodError:
       undefined method `parse' for RBFS::Directory:Class
     # /tmp/d20141111-26053-1v8grzg/spec.rb:108: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 Directory serialization ::parse can parse directory trees without files
     Failure/Error: parsed_directory = RBFS::Directory.parse('0:2:dir1:15:0:1:dir2:4:0:0:dir3:4:0:0:')
     NoMethodError:
       undefined method `parse' for RBFS::Directory:Class
     # /tmp/d20141111-26053-1v8grzg/spec.rb:117: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 Directory serialization ::parse can parse directories recursively
     Failure/Error: parsed_directory = RBFS::Directory.parse(recursive_serialized_string)
     NoMethodError:
       undefined method `parse' for RBFS::Directory:Class
     # /tmp/d20141111-26053-1v8grzg/spec.rb:125: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 Directory #[] can get files
     Failure/Error: expect(directory['home']['user']['ruby']['file']).to eq file
       
       expected: #<RBFS::File:0xba170fc4 @file_value="hi", @file_type="String">
            got: nil
       
       (compared using ==)
     # /tmp/d20141111-26053-1v8grzg/spec.rb:186:in `block (4 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 nil can be detected
     Failure/Error: expect(file.data_type).to eq :nil
       
       expected: :nil
            got: nil
       
       (compared using ==)
     # /tmp/d20141111-26053-1v8grzg/spec.rb:222: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 nil can be serialized
     Failure/Error: expect(file.serialize).to eq 'nil:'
       
       expected: "nil:"
            got: ":"
       
       (compared using ==)
     # /tmp/d20141111-26053-1v8grzg/spec.rb:226: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)>'

  12) RBFS File data type nil can be parsed
     Failure/Error: file = RBFS::File.parse('nil:')
     NoMethodError:
       undefined method `parse' for RBFS::File:Class
     # /tmp/d20141111-26053-1v8grzg/spec.rb:230: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)>'

  13) RBFS File data type string can be parsed
     Failure/Error: file = RBFS::File.parse('string:Hey there')
     NoMethodError:
       undefined method `parse' for RBFS::File:Class
     # /tmp/d20141111-26053-1v8grzg/spec.rb:248: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)>'

  14) RBFS File data type string can parse a string with colons
     Failure/Error: file = RBFS::File.parse('string:Hay :)')
     NoMethodError:
       undefined method `parse' for RBFS::File:Class
     # /tmp/d20141111-26053-1v8grzg/spec.rb:255: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)>'

  15) RBFS File data type symbol can be parsed
     Failure/Error: file = RBFS::File.parse('symbol:hello')
     NoMethodError:
       undefined method `parse' for RBFS::File:Class
     # /tmp/d20141111-26053-1v8grzg/spec.rb:274: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)>'

  16) RBFS File data type number can be parsed
     Failure/Error: file = RBFS::File.parse('number:1234')
     NoMethodError:
       undefined method `parse' for RBFS::File:Class
     # /tmp/d20141111-26053-1v8grzg/spec.rb:293: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)>'

  17) RBFS File data type float number can be parsed
     Failure/Error: file = RBFS::File.parse('number:3.14')
     NoMethodError:
       undefined method `parse' for RBFS::File:Class
     # /tmp/d20141111-26053-1v8grzg/spec.rb:312: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)>'

  18) RBFS File data type boolean true can be parsed
     Failure/Error: file = RBFS::File.parse('boolean:true')
     NoMethodError:
       undefined method `parse' for RBFS::File:Class
     # /tmp/d20141111-26053-1v8grzg/spec.rb:332: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)>'

  19) RBFS File data type boolean false can be parsed
     Failure/Error: file = RBFS::File.parse('boolean:false')
     NoMethodError:
       undefined method `parse' for RBFS::File:Class
     # /tmp/d20141111-26053-1v8grzg/spec.rb:351: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.04155 seconds
44 examples, 19 failures

Failed examples:

rspec /tmp/d20141111-26053-1v8grzg/spec.rb:149 # RBFS Directory can create empty directory
rspec /tmp/d20141111-26053-1v8grzg/spec.rb:10 # RBFS Directory without files can be serialized
rspec /tmp/d20141111-26053-1v8grzg/spec.rb:76 # RBFS Directory serialization #serialize can serialize
rspec /tmp/d20141111-26053-1v8grzg/spec.rb:84 # RBFS Directory serialization #serialize can serialize multiple directories recursively
rspec /tmp/d20141111-26053-1v8grzg/spec.rb:100 # RBFS Directory serialization ::parse can parse empty directories
rspec /tmp/d20141111-26053-1v8grzg/spec.rb:107 # RBFS Directory serialization ::parse can parse directories with files
rspec /tmp/d20141111-26053-1v8grzg/spec.rb:116 # RBFS Directory serialization ::parse can parse directory trees without files
rspec /tmp/d20141111-26053-1v8grzg/spec.rb:124 # RBFS Directory serialization ::parse can parse directories recursively
rspec /tmp/d20141111-26053-1v8grzg/spec.rb:185 # RBFS Directory #[] can get files
rspec /tmp/d20141111-26053-1v8grzg/spec.rb:221 # RBFS File data type nil can be detected
rspec /tmp/d20141111-26053-1v8grzg/spec.rb:225 # RBFS File data type nil can be serialized
rspec /tmp/d20141111-26053-1v8grzg/spec.rb:229 # RBFS File data type nil can be parsed
rspec /tmp/d20141111-26053-1v8grzg/spec.rb:247 # RBFS File data type string can be parsed
rspec /tmp/d20141111-26053-1v8grzg/spec.rb:254 # RBFS File data type string can parse a string with colons
rspec /tmp/d20141111-26053-1v8grzg/spec.rb:273 # RBFS File data type symbol can be parsed
rspec /tmp/d20141111-26053-1v8grzg/spec.rb:292 # RBFS File data type number can be parsed
rspec /tmp/d20141111-26053-1v8grzg/spec.rb:311 # RBFS File data type float number can be parsed
rspec /tmp/d20141111-26053-1v8grzg/spec.rb:331 # RBFS File data type boolean true can be parsed
rspec /tmp/d20141111-26053-1v8grzg/spec.rb:350 # RBFS File data type boolean false can be parsed

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

Васил обнови решението на 10.11.2014 16:46 (преди около 10 години)

+class String
+ def is_int?
+ /\A[-+]?[0-9_]+\z/ === self
+ end
+end
+
+module RBFS
+ class File
+ def initialize(*argument)
+ if argument[0] == nil
+ @file_value = nil
+ else
+ @file_value = argument[0]
+ @file_type = argument[0].class.to_s
+ end
+ end
+
+ def data_type
+ return :nil if @file_type == nil
+ return :string if @file_type == 'String'
+ return :symbol if @file_type == 'Symbol'
+ return :number if @file_type == 'Fixnum' or @file_type == 'Float'
+ return :boolean if @file_type == 'FalseClass' or @file_type == 'TrueClass'
+ end
+
+ def data
+ @file_value
+ end
+
+ def data=(argument)
+ @file_value = argument
+ @file_type = argument.class.to_s
+ end
+
+ def serialize
+ return self.data_type.to_s+':' if @file_value == nil
+ return self.data_type.to_s+':'+@file_value.to_s
+ end
+
+ def parse(string_data)
+ arg_type = string_data[0..string_data.index(':')-1]
+ arg = string_data[string_data.index(':')+1..-1]
+ return File.new(arg == 'true') if arg_type == 'boolean'
+ return File.new(arg.to_sym) if arg_type == 'symbol'
+ return File.new(arg) if arg_type == 'string'
+ return File.new if arg_type == 'nil'
+ return File.new(arg.to_i) if arg_type == 'number' and arg.is_int?
+ return File.new(arg.to_f) if arg_type == 'number'
+ end
+ end
+
+ class Directory
+
+ def files
+ @all_types_hash.reject {|key,value| value.class == RBFS::Directory}
+ end
+
+ def directories
+ @directories
+ end
+
+ def all_types_hash
+ @all_types_hash
+ end
+
+ def initialize
+ @all_types_hash = Hash.new
+ @directories = Hash.new
+ end
+
+ def add_file(name, file)
+ @all_types_hash[name] = file
+ end
+
+ def add_directory(name, *directory)
+ if directory[0] != nil
+ @all_types_hash[name] = directory[0]
+ @directories[name] = directory[0]
+ else
+ @all_types_hash[name] = nil
+ end
+ end
+
+ def [](name)
+ return directories[name]
+ end
+ end
+end