Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Serializer
- def serializables
- self.class.instance_variable_get('@serializables')
- end
- def attr_accessors
- self.class.instance_variable_get('@attr_accessors')
- end
- def self.included(klass)
- klass.send :define_singleton_method, :json, ->(*params) do
- @serializables ||= []
- @serializables.concat params
- end
- klass.send :define_singleton_method, :attr_accessor, ->(*params) do
- @attr_accessors ||= []
- @attr_accessors.concat params
- super(*params)
- end
- klass.send :define_method, :get_instance_variable, ->(key) do
- self.send key.to_sym
- end
- end
- def to_data
- hash = {}
- self.class.instance_variable_get('@serializables').each do |k|
- hash.merge!({"#{k.to_s}" => self.get_instance_variable(k)})
- end
- hash
- end
- end
- class User
- include Serializer
- attr_accessor :username, :full_name, :password
- json :username, :fullname
- end
- u = User.new
- u.username = "rezam"
- u.full_name = "Reza M"
- u.password = "secret"
- u.attr_accessors
- # => [:username, :full_name, :password]
- u.serializables
- # => [:username, :full_name]
- u.to_data
- # => {username: 'rezam', full_name: 'Reza M'}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement