Module: Jsonoid::Document::ClassMethods

Defined in:
lib/jsonoid/fields.rb,
lib/jsonoid/document.rb,
lib/jsonoid/callbacks.rb,
lib/jsonoid/collection.rb

Instance Method Summary collapse

Instance Method Details

#_before_destroy_callbacksObject



69
70
71
# File 'lib/jsonoid/callbacks.rb', line 69

def _before_destroy_callbacks
  @_before_destroy_callbacks ||= []
end

#_before_save_callbacksObject



65
66
67
# File 'lib/jsonoid/callbacks.rb', line 65

def _before_save_callbacks
  @_before_save_callbacks ||= []
end

#_register_field_accessors(name, accessor = nil) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/jsonoid/fields.rb', line 16

def _register_field_accessors(name, accessor=nil)
  mod = Module.new
  include mod

  accessor = name if accessor.nil?

  mod.class_eval <<-CODE, __FILE__, __LINE__+1
  def #{accessor}
    @_data[:#{name}]
  end

  def #{accessor}?
    !@_data[:#{name}].nil?
  end

  def #{accessor}=(value)
    @_data[:#{name}] = value
  end
  CODE
end

#_validate_callbacksObject



61
62
63
# File 'lib/jsonoid/callbacks.rb', line 61

def _validate_callbacks
  @_validate_callbacks ||= []
end

#allObject



121
122
123
# File 'lib/jsonoid/document.rb', line 121

def all
  Scope.new(self, collection)
end

#before_destroy(callback) ⇒ Object

Raises:

  • (ArgumentError)


56
57
58
59
# File 'lib/jsonoid/callbacks.rb', line 56

def before_destroy(callback)
  raise ArgumentError, 'Callback must be a Symbol' unless callback.is_a? Symbol
  self._before_destroy_callbacks << callback
end

#before_save(callback) ⇒ Object

Raises:

  • (ArgumentError)


51
52
53
54
# File 'lib/jsonoid/callbacks.rb', line 51

def before_save(callback)
  raise ArgumentError, 'Callback must be a Symbol' unless callback.is_a? Symbol
  self._before_save_callbacks << callback
end

#collection(name = nil) ⇒ Object



14
15
16
17
# File 'lib/jsonoid/collection.rb', line 14

def collection(name=nil)
  @_collection = nil unless name.nil?
  @_collection ||= Jsonoid::Collection.new(name || self.name.downcase + 's')
end

#field(name, opts = {}) ⇒ Object

Raises:

  • (ArgumentError)


4
5
6
7
8
9
10
# File 'lib/jsonoid/fields.rb', line 4

def field(name, opts={})
  raise ArgumentError, 'Name must be a Symbol' unless name.is_a? Symbol
  raise ArgumentError, 'Opts must be a Hash' unless opts.is_a? Hash

  self._register_field_accessors(name, opts.delete(:name))
  self.fields << [name, opts.delete(:type) || String, opts.delete(:default)]
end

#fieldsObject



12
13
14
# File 'lib/jsonoid/fields.rb', line 12

def fields
  @_fields ||= []
end

#find(id) ⇒ Object



115
116
117
118
119
# File 'lib/jsonoid/document.rb', line 115

def find(id)
  parse(collection.read(id))
rescue NotFound
  nil
end

#parse(json) ⇒ Object



125
126
127
# File 'lib/jsonoid/document.rb', line 125

def parse(json)
  new(JSON.parse(json))
end

#store_in(name) ⇒ Object

Raises:

  • (ArgumentError)


9
10
11
12
# File 'lib/jsonoid/collection.rb', line 9

def store_in(name)
  raise ArgumentError, 'Name must be a Symbol' unless name.is_a? Symbol
  collection(name).exists?
end

#validate(callback) ⇒ Object

Raises:

  • (ArgumentError)


12
13
14
15
# File 'lib/jsonoid/callbacks.rb', line 12

def validate(callback)
  raise ArgumentError, 'Callback must be a Symbol' unless callback.is_a? Symbol
  self._validate_callbacks << callback
end

#validates_numericality_of(name, opts = {}) ⇒ Object

Raises:

  • (ArgumentError)


34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/jsonoid/callbacks.rb', line 34

def validates_numericality_of(name, opts={})
  raise ArgumentError, 'Name must be a Symbol' unless callback.is_a? Symbol

  mod = Module.new
  include mod

  callback = "_validates_numeracality_of_#{name}_callback"

  mod.class_eval <<-CODE, __FILE__, __LINE__+1
  def #{callback}
    errors.add(:field, ":#{name} must be numeric") unless @_data[:#{name}].is_a?(Numeric)
  end
  CODE

  validate callback.to_sym
end

#validates_presence_of(name, opts = {}) ⇒ Object

Raises:

  • (ArgumentError)


17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/jsonoid/callbacks.rb', line 17

def validates_presence_of(name, opts={})
  raise ArgumentError, 'Name must be a Symbol' unless callback.is_a? Symbol

  mod = Module.new
  include mod

  callback = "_validates_presence_of_#{name}_callback"

  mod.class_eval <<-CODE, __FILE__, __LINE__+1
  def #{callback}
    errors.add(:field, ":#{name} can't be nil") if @_data[:#{name}].nil?
  end
  CODE

  validate callback.to_sym
end