class Ruson::Base
Public Class Methods
accessors()
click to toggle source
# File lib/ruson/base.rb, line 33 def accessors @accessors end
ensure_output_folder_is_defined()
click to toggle source
~~~~ Class Methods ~~~~
# File lib/ruson/base.rb, line 71 def self.ensure_output_folder_is_defined return if Ruson.output_folder raise ArgumentError, 'No output folder defined. You can define it ' \ 'using Ruson.output_folder = "/path/to/db/folder"' end
enum(attr, values)
click to toggle source
# File lib/ruson/base.rb, line 28 def enum(attr, values) define_enum_methods attr.to_s, values.map(&:to_sym) add_accessor attr.to_s end
field(attr, options = {})
click to toggle source
# File lib/ruson/base.rb, line 23 def field(attr, options = {}) instance_eval("attr_accessor :#{attr.to_s}") add_accessor attr.to_s, options end
new(json, root_key: nil)
click to toggle source
~~~~ Instance Methods ~~~~
# File lib/ruson/base.rb, line 79 def initialize(json, root_key: nil) params = get_hash_from_json(json) params = params[root_key.to_s] unless root_key.nil? init_attributes(self.class.accessors, params) end
Private Class Methods
add_accessor(name, options = {})
click to toggle source
# File lib/ruson/base.rb, line 54 def add_accessor(name, options = {}) options[:name] = options[:name].try(:to_sym) if options[:name] @accessors ||= {} @accessors.merge!({ name.to_sym => options }) end
define_enum_methods(name, values)
click to toggle source
# File lib/ruson/base.rb, line 39 def define_enum_methods(name, values) instance_eval("attr_reader :#{name}") define_method "#{name}=" do |v| raise ArgumentError, "#{v} is not a valid #{name}" unless values.include? v.to_sym eval "@#{name} = :#{v.to_s}" end values.each do |v| define_method "#{v}?" do eval "@#{name} == :#{v.to_s}" end end end
Public Instance Methods
to_hash()
click to toggle source
# File lib/ruson/base.rb, line 86 def to_hash res = convert_to_hash(self.class.accessors) res.inject({}) do |result, attributes| key, value = attributes accessor = self.class.accessors[key] if accessor && accessor.key?(:name) result[accessor[:name]] = value else result[key] = value end result end end
to_json(options = {})
click to toggle source
# File lib/ruson/base.rb, line 101 def to_json(options = {}) hash = to_hash options[:exclude].each { |key| hash.delete(key) } if options[:exclude] hash.to_json end
Private Instance Methods
cast_value(value, accessor_options, options = {})
click to toggle source
# File lib/ruson/base.rb, line 111 def cast_value(value, accessor_options, options = {}) check_nilable(value, accessor_options) get_val(value, accessor_options) end
init_attributes(accessors, params)
click to toggle source
# File lib/ruson/base.rb, line 116 def init_attributes(accessors, params) update_attributes(accessors, params) self.class.attr_accessor(:id) set_attribute(:id, params[:id]) if params && params[:id] end
set_attribute(attr_name, value)
click to toggle source
# File lib/ruson/base.rb, line 123 def set_attribute(attr_name, value) send("#{attr_name}=".to_sym, value) end
update_attributes(accessors, params)
click to toggle source
# File lib/ruson/base.rb, line 127 def update_attributes(accessors, params) accessors.each do |key, options| value = params[options[:name]] || params[key] if params casted_value = cast_value(value, options) set_attribute(key, casted_value) end end