Решение на Трета задача от Велислав Симеонов

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

Към профила на Велислав Симеонов

Резултати

  • 2 точки от тестове
  • 0 бонус точки
  • 2 точки общо
  • 18 успешни тест(а)
  • 26 неуспешни тест(а)

Код

module RBFS
class RBFS::File
attr_accessor :data
def initialize *data_to_save
@data = data_to_save[0]
end
def data_type
return :symbol if @data.is_a? Symbol
return :boolean if @data.is_a? TrueClass
return :boolean if @data.is_a? FalseClass
return :string if @data.is_a? String
return :nil if @data.is_a? NilClass
return :number if @data.is_a? Numeric
end
def serialize
@data.to_s
end
end
class RBFS::Directory
def initialize
@dir = Hash.new
end
def add_file name, file
@dir.merge! ( { name => file } )
end
def add_directory name , *directory
@dir.merge! ( { name => directory[0] } )
end
def [] *name
a = @dir.select {|key , value| key == name[0]}
if a.size == 0
nil
else
a
end
end
def files
@dir.select {|key,value| value.is_a? File }
end
def directories
@dir.select {|key,value| value.is_a? Directory }
end
def serialize
@dir.to_s
end
end
end

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

.F..F...FFFFFFFFF......FF.FFF.FF.FF.FF.FF.FF

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-o4lp9/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:'
       
       expected: "0:0:"
            got: "{}"
       
       (compared using ==)
     # /tmp/d20141111-26053-o4lp9/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
       
       expected: "2:README:19:string:Hello world!spec.rb:20:string:describe RBFS1:rbfs:4:0:0:"
            got: "{\"README\"=>#<RBFS::File:0xb980df04 @data=\"Hello world!\">, \"spec.rb\"=>#<RBFS::File:0xb980de8c @data=\"describe RBFS\">, \"rbfs\"=>nil}"
       
       (compared using ==)
     # /tmp/d20141111-26053-o4lp9/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 {"rbfs"=>nil}:Hash
     # /tmp/d20141111-26053-o4lp9/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-o4lp9/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-o4lp9/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-o4lp9/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-o4lp9/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 walk a single directory
     Failure/Error: expect(directory['home']).to eq home
       
       expected: #<RBFS::Directory:0xb979bc88 @dir={"user"=>#<RBFS::Directory:0xb979bbd4 @dir={"ruby"=>#<RBFS::Directory:0xb979bb0c @dir={"file"=>#<RBFS::File:0xb979ba1c @data="hi">}>}>}>
            got: {"home"=>#<RBFS::Directory:0xb979bc88 @dir={"user"=>#<RBFS::Directory:0xb979bbd4 @dir={"ruby"=>#<RBFS::Directory:0xb979bb0c @dir={"file"=>#<RBFS::File:0xb979ba1c @data="hi">}>}>}>}
       
       (compared using ==)
       
       Diff:
       @@ -1,9 +1,2 @@
       -#<RBFS::Directory:0xb979bc88
       - @dir=
       -  {"user"=>
       -    #<RBFS::Directory:0xb979bbd4
       -     @dir=
       -      {"ruby"=>
       -        #<RBFS::Directory:0xb979bb0c
       -         @dir={"file"=>#<RBFS::File:0xb979ba1c @data="hi">}>}>}>
       +"home" => #<RBFS::Directory:0xb979bc88 @dir={"user"=>#<RBFS::Directory:0xb979bbd4 @dir={"ruby"=>#<RBFS::Directory:0xb979bb0c @dir={"file"=>#<RBFS::File:0xb979ba1c @data="hi">}>}>}>
     # /tmp/d20141111-26053-o4lp9/spec.rb:178: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 Directory #[] can walk multiple directories
     Failure/Error: expect(directory['home']['user']['ruby']).to eq ruby
     NoMethodError:
       undefined method `[]' for nil:NilClass
     # /tmp/d20141111-26053-o4lp9/spec.rb:182: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)>'

  11) RBFS Directory #[] can get files
     Failure/Error: expect(directory['home']['user']['ruby']['file']).to eq file
     NoMethodError:
       undefined method `[]' for nil:NilClass
     # /tmp/d20141111-26053-o4lp9/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)>'

  12) RBFS File data type nil can be serialized
     Failure/Error: expect(file.serialize).to eq 'nil:'
       
       expected: "nil:"
            got: ""
       
       (compared using ==)
     # /tmp/d20141111-26053-o4lp9/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)>'

  13) 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-o4lp9/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)>'

  14) RBFS File data type string can be serialized
     Failure/Error: expect(file.serialize).to eq 'string:Hi'
       
       expected: "string:Hi"
            got: "Hi"
       
       (compared using ==)
     # /tmp/d20141111-26053-o4lp9/spec.rb:244: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 string can be parsed
     Failure/Error: file = RBFS::File.parse('string:Hey there')
     NoMethodError:
       undefined method `parse' for RBFS::File:Class
     # /tmp/d20141111-26053-o4lp9/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)>'

  16) 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-o4lp9/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)>'

  17) RBFS File data type symbol can be serialized
     Failure/Error: expect(file.serialize).to eq 'symbol:yo'
       
       expected: "symbol:yo"
            got: "yo"
       
       (compared using ==)
     # /tmp/d20141111-26053-o4lp9/spec.rb:270: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 symbol can be parsed
     Failure/Error: file = RBFS::File.parse('symbol:hello')
     NoMethodError:
       undefined method `parse' for RBFS::File:Class
     # /tmp/d20141111-26053-o4lp9/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)>'

  19) RBFS File data type number can be serialized
     Failure/Error: expect(file.serialize).to eq 'number:666'
       
       expected: "number:666"
            got: "666"
       
       (compared using ==)
     # /tmp/d20141111-26053-o4lp9/spec.rb:289: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)>'

  20) 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-o4lp9/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)>'

  21) RBFS File data type float number can be serialized
     Failure/Error: expect(file.serialize).to eq 'number:666.6'
       
       expected: "number:666.6"
            got: "666.6"
       
       (compared using ==)
     # /tmp/d20141111-26053-o4lp9/spec.rb:308: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)>'

  22) 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-o4lp9/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)>'

  23) RBFS File data type boolean true can be serialized
     Failure/Error: expect(file.serialize).to eq 'boolean:true'
       
       expected: "boolean:true"
            got: "true"
       
       (compared using ==)
     # /tmp/d20141111-26053-o4lp9/spec.rb:328: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)>'

  24) 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-o4lp9/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)>'

  25) RBFS File data type boolean false can be serialized
     Failure/Error: expect(file.serialize).to eq 'boolean:false'
       
       expected: "boolean:false"
            got: "false"
       
       (compared using ==)
     # /tmp/d20141111-26053-o4lp9/spec.rb:347: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)>'

  26) 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-o4lp9/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.04547 seconds
44 examples, 26 failures

Failed examples:

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

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

Велислав обнови решението на 09.11.2014 17:07 (преди около 10 години)

+module RBFS
+
+ class RBFS::File
+ attr_accessor :data
+
+ def initialize *data_to_save
+ @data = data_to_save[0]
+ end
+
+ def data_type
+ return :symbol if @data.is_a? Symbol
+ return :boolean if @data.is_a? TrueClass
+ return :boolean if @data.is_a? FalseClass
+ return :string if @data.is_a? String
+ return :nil if @data.is_a? NilClass
+ return :number if @data.is_a? Numeric
+ end
+
+ def serialize
+ @data.to_s
+ end
+
+
+ end
+
+ class RBFS::Directory
+
+ def initialize
+ @dir = Hash.new
+ end
+
+ def add_file name, file
+ @dir.merge! ( { name => file } )
+ end
+
+ def add_directory name , *directory
+ @dir.merge! ( { name => directory[0] } )
+ end
+
+ def [] *name
+ @dir.select {|key , value| key == name[0]}
+ end
+
+ def files
+ @dir.select {|key,value| value.is_a? File }
+ end
+
+ def directories
+ @dir.select {|key,value| value.is_a? Directory }
+ end
+
+ def serialize
+ @dir.to_s
+ end
+
+ end
+end

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

module RBFS
class RBFS::File
attr_accessor :data
def initialize *data_to_save
@data = data_to_save[0]
end
def data_type
return :symbol if @data.is_a? Symbol
return :boolean if @data.is_a? TrueClass
return :boolean if @data.is_a? FalseClass
return :string if @data.is_a? String
return :nil if @data.is_a? NilClass
return :number if @data.is_a? Numeric
end
def serialize
@data.to_s
end
end
class RBFS::Directory
def initialize
@dir = Hash.new
end
def add_file name, file
@dir.merge! ( { name => file } )
end
def add_directory name , *directory
@dir.merge! ( { name => directory[0] } )
end
def [] *name
- @dir.select {|key , value| key == name[0]}
+ a = @dir.select {|key , value| key == name[0]}
+ if a.size == 0
+ nil
+ else
+ a
+ end
end
def files
@dir.select {|key,value| value.is_a? File }
end
def directories
@dir.select {|key,value| value.is_a? Directory }
end
def serialize
@dir.to_s
end
end
end