Advertisement
Guest User

Untitled

a guest
Jan 2nd, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.14 KB | None | 0 0
  1. module Serializer
  2. def serializables
  3. self.class.instance_variable_get('@serializables')
  4. end
  5.  
  6. def attr_accessors
  7. self.class.instance_variable_get('@attr_accessors')
  8. end
  9.  
  10. def self.included(klass)
  11. klass.send :define_singleton_method, :json, ->(*params) do
  12. @serializables ||= []
  13. @serializables.concat params
  14. end
  15.  
  16. klass.send :define_singleton_method, :attr_accessor, ->(*params) do
  17. @attr_accessors ||= []
  18. @attr_accessors.concat params
  19. super(*params)
  20. end
  21.  
  22. klass.send :define_method, :get_instance_variable, ->(key) do
  23. self.send key.to_sym
  24. end
  25. end
  26.  
  27. def to_data
  28. hash = {}
  29. self.class.instance_variable_get('@serializables').each do |k|
  30. hash.merge!({"#{k.to_s}" => self.get_instance_variable(k)})
  31. end
  32. hash
  33. end
  34. end
  35.  
  36. class User
  37. include Serializer
  38. attr_accessor :username, :full_name, :password
  39. json :username, :fullname
  40.  
  41. end
  42.  
  43. u = User.new
  44. u.username = "rezam"
  45. u.full_name = "Reza M"
  46. u.password = "secret"
  47.  
  48. u.attr_accessors
  49. # => [:username, :full_name, :password]
  50. u.serializables
  51. # => [:username, :full_name]
  52. u.to_data
  53. # => {username: 'rezam', full_name: 'Reza M'}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement