Решение на Пета задача от Ивелина Христова

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

Към профила на Ивелина Христова

Резултати

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

Код

require 'digest/sha1'
def except(hash, element)
hash.tap{ |h| h.delete(element) }
end
class ObjectStore
attr_accessor :objects
attr_accessor :staged_objects
attr_accessor :commits
def self.init
store = new
store.objects = Hash.new
store.staged_objects = Hash.new
store.commits = Hash.new
# yield if block_given?
store
end
def add(name, object)
@staged_objects.merge!({name => object})
end
def commit(message)
date = Time.now
formated_date = date.strftime("%d %b %Y %H:%M:%S")
hash = Digest::SHA1.hexdigest '$' + formated_date + '$$' + message + '$'
@commits.merge!({hash => @staged_objects})
@objects.merge!(@staged_objects)
@staged_objects = Hash.new
hash
end
def remove(name)
@staged_objects.merge!({name => nil})
end
end

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

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Failures:

  1) ObjectStore can add objects
     Failure/Error: actual.message == message &&
     NoMethodError:
       undefined method `message' for {"object"=>"content"}:Hash
     # /tmp/d20160111-5693-5hniy8/spec.rb:6:in `block (3 levels) in <top (required)>'
     # /tmp/d20160111-5693-5hniy8/spec.rb:23:in `block (2 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) ObjectStore can commit objects
     Failure/Error: expect(repo.commit("So cool!")).to be_success("So cool!\n\t2 objects changed", repo.head.result)
     NoMethodError:
       undefined method `head' for #<ObjectStore:0x007f057e875278>
     # /tmp/d20160111-5693-5hniy8/spec.rb:30:in `block (2 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) ObjectStore cannot commit without changed objects
     Failure/Error: result.message == message &&
     NoMethodError:
       undefined method `message' for "8e99fdb804fdedfdcdfcc454f539073671e87dee":String
     # /tmp/d20160111-5693-5hniy8/spec.rb:15:in `block (3 levels) in <top (required)>'
     # /tmp/d20160111-5693-5hniy8/spec.rb:35:in `block (2 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) ObjectStore can remove objects
     Failure/Error: actual.message == message &&
     NoMethodError:
       undefined method `message' for {"object1"=>nil}:Hash
     # /tmp/d20160111-5693-5hniy8/spec.rb:6:in `block (3 levels) in <top (required)>'
     # /tmp/d20160111-5693-5hniy8/spec.rb:43:in `block (2 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) ObjectStore can commit changes which include only removed objects
     Failure/Error: expect(repo.commit("Removed object2")).to be_success("Removed object2\n\t1 objects changed", repo.head.result)
     NoMethodError:
       undefined method `head' for #<ObjectStore:0x007f057e860558>
     # /tmp/d20160111-5693-5hniy8/spec.rb:53:in `block (2 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) ObjectStore cannot remove objects that are not committed
     Failure/Error: result.message == message &&
     NoMethodError:
       undefined method `message' for {"object2"=>nil}:Hash
     # /tmp/d20160111-5693-5hniy8/spec.rb:15:in `block (3 levels) in <top (required)>'
     # /tmp/d20160111-5693-5hniy8/spec.rb:60:in `block (2 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) ObjectStore can show head
     Failure/Error: last_commit = repo.commit("There we go").result
     NoMethodError:
       undefined method `result' for "e29991bc728f1fb7a203e3dd2b0290d86e816fdd":String
     # /tmp/d20160111-5693-5hniy8/spec.rb:68:in `block (2 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) ObjectStore cannot show head for empty repository
     Failure/Error: expect(repo.head).to be_error("Branch master does not have any commits yet.")
     NoMethodError:
       undefined method `head' for #<ObjectStore:0x007f057e84c990>
     # /tmp/d20160111-5693-5hniy8/spec.rb:74:in `block (2 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) ObjectStore can show log of changes for a single commit
     Failure/Error: commit = repo.commit("So cool!").result
     NoMethodError:
       undefined method `result' for "259ae7de399d23c68ac0f25fb6dc334c2c8bbab4":String
     # /tmp/d20160111-5693-5hniy8/spec.rb:81:in `block (2 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) ObjectStore can show log of changes for a single commit
     Failure/Error: commit = repo.commit("So cool!").result
     NoMethodError:
       undefined method `result' for "259ae7de399d23c68ac0f25fb6dc334c2c8bbab4":String
     # /tmp/d20160111-5693-5hniy8/spec.rb:90:in `block (2 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) ObjectStore can show log of changes for multiple commits
     Failure/Error: commit1 = repo.commit("First commit").result
     NoMethodError:
       undefined method `result' for "46ddf2ef6c53906acf630f11d81f8b8830240504":String
     # /tmp/d20160111-5693-5hniy8/spec.rb:98:in `block (2 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) ObjectStore shows the log for the current branch only
     Failure/Error: commit1 = repo.commit("First commit").result
     NoMethodError:
       undefined method `result' for "46ddf2ef6c53906acf630f11d81f8b8830240504":String
     # /tmp/d20160111-5693-5hniy8/spec.rb:114:in `block (2 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) ObjectStore cannot show log for empty repository
     Failure/Error: expect(repo.log).to be_error("Branch master does not have any commits yet.")
     NoMethodError:
       undefined method `log' for #<ObjectStore:0x007f057e2be348>
     # /tmp/d20160111-5693-5hniy8/spec.rb:133:in `block (2 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) ObjectStore can list branches
     Failure/Error: repo.branch.create("develop")
     NoMethodError:
       undefined method `branch' for #<ObjectStore:0x007f057e4aedd8>
     # /tmp/d20160111-5693-5hniy8/spec.rb:138:in `block (2 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) ObjectStore can create branches
     Failure/Error: expect(repo.branch.create("develop")).to be_success("Created branch develop.")
     NoMethodError:
       undefined method `branch' for #<ObjectStore:0x007f057e49e320>
     # /tmp/d20160111-5693-5hniy8/spec.rb:145:in `block (2 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) ObjectStore cannot create branch if already exists
     Failure/Error: expect(repo.branch.create("master")).to be_error("Branch master already exists.")
     NoMethodError:
       undefined method `branch' for #<ObjectStore:0x007f057e48ef38>
     # /tmp/d20160111-5693-5hniy8/spec.rb:150:in `block (2 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) ObjectStore can switch branches
     Failure/Error: first_commit = repo.commit("First commit").result
     NoMethodError:
       undefined method `result' for "46ddf2ef6c53906acf630f11d81f8b8830240504":String
     # /tmp/d20160111-5693-5hniy8/spec.rb:156:in `block (2 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) ObjectStore cannot switch to nonexisting branch
     Failure/Error: expect(repo.branch.checkout("develop")).to be_error("Branch develop does not exist.")
     NoMethodError:
       undefined method `branch' for #<ObjectStore:0x007f057e471d70>
     # /tmp/d20160111-5693-5hniy8/spec.rb:168:in `block (2 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) ObjectStore can remove branch
     Failure/Error: repo.branch.create("develop")
     NoMethodError:
       undefined method `branch' for #<ObjectStore:0x007f057e45ee28>
     # /tmp/d20160111-5693-5hniy8/spec.rb:173:in `block (2 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) ObjectStore cannot remove current branch
     Failure/Error: expect(repo.branch.remove("master")).to be_error("Cannot remove current branch.")
     NoMethodError:
       undefined method `branch' for #<ObjectStore:0x007f057e456778>
     # /tmp/d20160111-5693-5hniy8/spec.rb:179:in `block (2 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) ObjectStore cannot remove nonexisting branch
     Failure/Error: expect(repo.branch.remove("develop")).to be_error("Branch develop does not exist.")
     NoMethodError:
       undefined method `branch' for #<ObjectStore:0x007f057e44f6d0>
     # /tmp/d20160111-5693-5hniy8/spec.rb:184:in `block (2 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) ObjectStore can be initialized with block
     Failure/Error: expect(repo.head).to be_success("Second commit", $second_commit)
     NoMethodError:
       undefined method `head' for #<ObjectStore:0x007f057e43f5c8>
     # /tmp/d20160111-5693-5hniy8/spec.rb:195:in `block (2 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) ObjectStore can return objects
     Failure/Error: expect(repo.get("number")).to be_success("Found object number.", 21)
     NoMethodError:
       undefined method `get' for #<ObjectStore:0x007f057e43c198>
     # /tmp/d20160111-5693-5hniy8/spec.rb:202:in `block (2 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) ObjectStore cannot return not committed objects
     Failure/Error: expect(repo.get("string")).to be_error("Object string is not committed.")
     NoMethodError:
       undefined method `get' for #<ObjectStore:0x007f057e41e940>
     # /tmp/d20160111-5693-5hniy8/spec.rb:209:in `block (2 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) ObjectStore cannot return objects when no commits
     Failure/Error: expect(repo.get("string")).to be_error("Object string is not committed.")
     NoMethodError:
       undefined method `get' for #<ObjectStore:0x007f057e3f3308>
     # /tmp/d20160111-5693-5hniy8/spec.rb:214:in `block (2 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) ObjectStore can checkout commits
     Failure/Error: first_commit = repo.commit("First commit").result
     NoMethodError:
       undefined method `result' for "46ddf2ef6c53906acf630f11d81f8b8830240504":String
     # /tmp/d20160111-5693-5hniy8/spec.rb:220:in `block (2 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)>'

  27) ObjectStore cannot checkout commits with nonexisting hashes
     Failure/Error: expect(repo.checkout("[not-present]")).to be_error("Commit [not-present] does not exist.")
     NoMethodError:
       undefined method `checkout' for #<ObjectStore:0x007f057e3d5600>
     # /tmp/d20160111-5693-5hniy8/spec.rb:231:in `block (2 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)>'

  28) ObjectStore cannot checkout commits in empty repository
     Failure/Error: expect(repo.checkout("[not-present]")).to be_error("Commit [not-present] does not exist.")
     NoMethodError:
       undefined method `checkout' for #<ObjectStore:0x007f057e3c6948>
     # /tmp/d20160111-5693-5hniy8/spec.rb:236:in `block (2 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)>'

  29) ObjectStore can show the objects in a repo after overwriting an object
     Failure/Error: first_commit = repo.commit("First commit").result
     NoMethodError:
       undefined method `result' for "46ddf2ef6c53906acf630f11d81f8b8830240504":String
     # /tmp/d20160111-5693-5hniy8/spec.rb:242:in `block (2 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)>'

  30) ObjectStore can show the objects of a repo after removing an object
     Failure/Error: first_commit = repo.commit("First commit").result
     NoMethodError:
       undefined method `result' for "46ddf2ef6c53906acf630f11d81f8b8830240504":String
     # /tmp/d20160111-5693-5hniy8/spec.rb:258:in `block (2 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.01372 seconds
30 examples, 30 failures

Failed examples:

rspec /tmp/d20160111-5693-5hniy8/spec.rb:21 # ObjectStore can add objects
rspec /tmp/d20160111-5693-5hniy8/spec.rb:26 # ObjectStore can commit objects
rspec /tmp/d20160111-5693-5hniy8/spec.rb:33 # ObjectStore cannot commit without changed objects
rspec /tmp/d20160111-5693-5hniy8/spec.rb:38 # ObjectStore can remove objects
rspec /tmp/d20160111-5693-5hniy8/spec.rb:46 # ObjectStore can commit changes which include only removed objects
rspec /tmp/d20160111-5693-5hniy8/spec.rb:56 # ObjectStore cannot remove objects that are not committed
rspec /tmp/d20160111-5693-5hniy8/spec.rb:63 # ObjectStore can show head
rspec /tmp/d20160111-5693-5hniy8/spec.rb:72 # ObjectStore cannot show head for empty repository
rspec /tmp/d20160111-5693-5hniy8/spec.rb:77 # ObjectStore can show log of changes for a single commit
rspec /tmp/d20160111-5693-5hniy8/spec.rb:86 # ObjectStore can show log of changes for a single commit
rspec /tmp/d20160111-5693-5hniy8/spec.rb:95 # ObjectStore can show log of changes for multiple commits
rspec /tmp/d20160111-5693-5hniy8/spec.rb:111 # ObjectStore shows the log for the current branch only
rspec /tmp/d20160111-5693-5hniy8/spec.rb:131 # ObjectStore cannot show log for empty repository
rspec /tmp/d20160111-5693-5hniy8/spec.rb:136 # ObjectStore can list branches
rspec /tmp/d20160111-5693-5hniy8/spec.rb:143 # ObjectStore can create branches
rspec /tmp/d20160111-5693-5hniy8/spec.rb:148 # ObjectStore cannot create branch if already exists
rspec /tmp/d20160111-5693-5hniy8/spec.rb:153 # ObjectStore can switch branches
rspec /tmp/d20160111-5693-5hniy8/spec.rb:166 # ObjectStore cannot switch to nonexisting branch
rspec /tmp/d20160111-5693-5hniy8/spec.rb:171 # ObjectStore can remove branch
rspec /tmp/d20160111-5693-5hniy8/spec.rb:177 # ObjectStore cannot remove current branch
rspec /tmp/d20160111-5693-5hniy8/spec.rb:182 # ObjectStore cannot remove nonexisting branch
rspec /tmp/d20160111-5693-5hniy8/spec.rb:187 # ObjectStore can be initialized with block
rspec /tmp/d20160111-5693-5hniy8/spec.rb:198 # ObjectStore can return objects
rspec /tmp/d20160111-5693-5hniy8/spec.rb:205 # ObjectStore cannot return not committed objects
rspec /tmp/d20160111-5693-5hniy8/spec.rb:212 # ObjectStore cannot return objects when no commits
rspec /tmp/d20160111-5693-5hniy8/spec.rb:217 # ObjectStore can checkout commits
rspec /tmp/d20160111-5693-5hniy8/spec.rb:227 # ObjectStore cannot checkout commits with nonexisting hashes
rspec /tmp/d20160111-5693-5hniy8/spec.rb:234 # ObjectStore cannot checkout commits in empty repository
rspec /tmp/d20160111-5693-5hniy8/spec.rb:239 # ObjectStore can show the objects in a repo after overwriting an object
rspec /tmp/d20160111-5693-5hniy8/spec.rb:253 # ObjectStore can show the objects of a repo after removing an object

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

Ивелина обнови решението на 23.11.2015 01:11 (преди над 8 години)

+require 'digest/sha1'
+
+def except(hash, element)
+ hash.tap{ |h| h.delete(element) }
+end
+
+class ObjectStore
+ attr_accessor :objects
+ attr_accessor :staged_objects
+ attr_accessor :commits
+
+ def self.init
+ store = new
+ store.objects = Hash.new
+ store.staged_objects = Hash.new
+ store.commits = Hash.new
+ # yield if block_given?
+ store
+ end
+
+ def add(name, object)
+ @staged_objects.merge!({name => object})
+ end
+
+ def commit(message)
+ date = Time.now
+ formated_date = date.strftime("%d %b %Y %H:%M:%S")
+ hash = Digest::SHA1.hexdigest '$' + formated_date + '$$' + message + '$'
+
+ @commits.merge!({hash => @staged_objects})
+ @objects.merge!(@staged_objects)
+ @staged_objects = Hash.new
+ hash
+ end
+
+ def remove(name)
+ @staged_objects.merge!({name => nil})
+ end
+end