Module: KayakoClient::Object

Included in:
Base
Defined in:
lib/kayako_client/mixins/object.rb

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

PROPERTY_TYPES =
[ :integer,
  :float,
  :string,
  :symbol,
  :boolean,
  :date,
  :object,
  :binary
].freeze
COMMON_OPTIONS =
[ :in,
  :required,
  :condition,
  :readonly,
  :new
].freeze
OPTIONS =
{ :integer => [ :range ],
  :object  => [ :class ]
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



41
42
43
# File 'lib/kayako_client/mixins/object.rb', line 41

def self.included(base)
    base.extend(ClassMethods)
end

Instance Method Details

#[](name) ⇒ Object



69
70
71
72
73
74
75
# File 'lib/kayako_client/mixins/object.rb', line 69

def [](name)
    if name.respond_to?(:to_sym) && self.class.properties.include?(name.to_sym)
        send("#{name}")
    else
        nil
    end
end

#[]=(name, value) ⇒ Object

Raises:

  • (ArgumentError)


53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/kayako_client/mixins/object.rb', line 53

def []=(name, value)
    raise ArgumentError, "object properties are read-only" if self.class.embedded?
    raise ArgumentError, "property :#{name} does not exist" unless self.class.properties.include?(name.to_sym)
    if !self.class.options[name.to_sym] || !self.class.options[name.to_sym][:readonly]
        if self.class.options[name.to_sym] && self.class.options[name.to_sym][:new] && !new?
            raise ArgumentError, "property :#{name} cannot be changed"
        end
        changes(name.to_sym)
        @associated.delete(name.to_sym)
        value = assign(self.class.properties[name.to_sym], value, self.class.options[name.to_sym] ? self.class.options[name.to_sym] : {})
        instance_variable_set("@#{name}", value)
    else
        raise ArgumentError, "property :#{name} is read-only"
    end
end

#changed?Boolean

Returns:

  • (Boolean)


85
86
87
# File 'lib/kayako_client/mixins/object.rb', line 85

def changed?
    !changes.empty?
end

#errorsObject



77
78
79
# File 'lib/kayako_client/mixins/object.rb', line 77

def errors
    @errors ||= {}
end

#has_errors?Boolean

Returns:

  • (Boolean)


97
98
99
# File 'lib/kayako_client/mixins/object.rb', line 97

def has_errors?
    errors.size > 0
end

#idObject



45
46
47
# File 'lib/kayako_client/mixins/object.rb', line 45

def id
    nil
end

#loaded!Object



101
102
103
104
# File 'lib/kayako_client/mixins/object.rb', line 101

def loaded!
    @changes = []
    @new = false
end

#new?Boolean

Returns:

  • (Boolean)


89
90
91
92
93
94
95
# File 'lib/kayako_client/mixins/object.rb', line 89

def new?
    if defined?(@new)
        @new
    else
        @new = true
    end
end

#propertiesObject



81
82
83
# File 'lib/kayako_client/mixins/object.rb', line 81

def properties
    self.class.properties.keys
end

#to_iObject



49
50
51
# File 'lib/kayako_client/mixins/object.rb', line 49

def to_i
    instance_variable_defined?(:@id) ? instance_variable_get(:@id).to_i : 0
end