Guest User

Untitled

a guest
May 21st, 2018
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.93 KB | None | 0 0
  1. # Unique, atomic sequential number generator using MongoMapper, MongoDB and Ruby.
  2. # Usage:
  3. # Helper::Sequence.next_value(:my_seq)
  4. # => 1
  5. # Helper::Sequence.next_value(:my_seq)
  6. # => 2
  7. # Helper::Sequence.next_value(:my_other_seq)
  8. # => 1
  9. # Helper::Sequence.next_value(:my_seq)
  10. # => 3
  11. class Helper::Sequence
  12. include MongoMapper::Document
  13. key :identifier, String
  14. key :value, Integer
  15.  
  16. validates_presence_of :identifier
  17. validates_uniqueness_of :identifier
  18.  
  19. def initialize(args={}, from_database=false)
  20. super(args, from_database)
  21. self.value ||= 0
  22. end
  23.  
  24. def self.next_value(seq_identifier)
  25. s = Helper::Sequence.first_or_create(identifier: seq_identifier.to_s)
  26. o = OrderedHash.new
  27. o["findandmodify"]="helper.sequences"
  28. o["query"] = {"identifier"=>s.identifier}
  29. o["sort"]={}
  30. o["update"]={"$inc"=>{"value"=>1}}
  31. o["new"] = true
  32. MongoMapper.database.command(o)["value"]["value"]
  33. end
  34. end
Add Comment
Please, Sign In to add comment