Module: AWS::Record::AbstractBase::InstanceMethods

Defined in:
lib/aws/record/abstract_base.rb

Instance Method Summary collapse

Instance Method Details

#attributesHash

Returns A hash with attribute names as hash keys (strings) and attribute values (of mixed types) as hash values.

Returns:

  • (Hash)

    A hash with attribute names as hash keys (strings) and attribute values (of mixed types) as hash values.


93
94
95
96
97
98
99
# File 'lib/aws/record/abstract_base.rb', line 93

def attributes
  attributes = Core::IndifferentHash.new
  attributes['id'] = id if persisted?
  self.class.attributes.keys.inject(attributes) do |hash,attr_name|
    hash.merge(attr_name => __send__(attr_name))
  end
end

#attributes=(attributes) ⇒ Hash

Acts like #update but does not call #save.

record.attributes = { :name => 'abc', :age => 20 }

Parameters:

  • attributes (Hash)

    A hash of attributes to set on this record without calling save.

Returns:

  • (Hash)

    Returns the attribute hash that was passed in.


110
111
112
# File 'lib/aws/record/abstract_base.rb', line 110

def attributes= attributes
  bulk_assign(attributes)
end

#deletetrue Also known as: destroy

Deletes the record.

Returns:

  • (true)

190
191
192
193
194
195
196
197
198
199
200
201
# File 'lib/aws/record/abstract_base.rb', line 190

def delete
  if persisted?
    if deleted?
      raise 'unable to delete, this object has already been deleted'
    else
      delete_storage
      @_deleted = true
    end
  else
    raise 'unable to delete, this object has not been saved yet'
  end
end

#deleted?Boolean

Returns true if this instance object has been deleted.

Returns:

  • (Boolean)

    Returns true if this instance object has been deleted.


205
206
207
# File 'lib/aws/record/abstract_base.rb', line 205

def deleted?
  persisted? ? !!@_deleted : false
end

#errorsObject


139
140
141
# File 'lib/aws/record/abstract_base.rb', line 139

def errors
  @errors ||= Errors.new
end

#idString

The id for each record is auto-generated. The default strategy generates uuid strings.

Returns:

  • (String)

    Returns the id string (uuid) for this record. Retuns nil if this is a new record that has not been persisted yet.


87
88
89
# File 'lib/aws/record/abstract_base.rb', line 87

def id
  @_id
end

#initialize(attributes = {}) ⇒ Model, HashModel

Constructs a new record.

Parameters:

  • attributes (Hash) (defaults to: {})

    Attributes that should be bulk assigned to this record. You can also specify the shard (i.e. domain or table) this record should persist to via :shard).

Options Hash (attributes):

  • :shard (String)

    The domain/table this record should persist to. If this is omitted, it will persist to the class default shard (which defaults to the class name).

Returns:

  • (Model, HashModel)

    Returns a new (non-persisted) record.

    Call #save to persist changes to AWS.


58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/aws/record/abstract_base.rb', line 58

def initialize attributes = {}
  
  attributes = attributes.dup
  
  # supporting :domain for backwards compatability, :shard is prefered
  @_shard = attributes.delete(:domain)
  @_shard ||= attributes.delete('domain')
  @_shard ||= attributes.delete(:shard)
  @_shard ||= attributes.delete('shard')
  @_shard = self.class.shard_name(@_shard)
  
  @_data = {}
  assign_default_values
  bulk_assign(attributes)
  
end

#new_record?Boolean

Returns true if this record has not been persisted to SimpleDB.

Returns:

  • (Boolean)

    Returns true if this record has not been persisted to SimpleDB.


129
130
131
# File 'lib/aws/record/abstract_base.rb', line 129

def new_record?
  !persisted?
end

#persisted?Boolean

Persistence indicates if the record has been saved previously or not.

Examples:

@recipe = Recipe.new(:name => 'Buttermilk Pancackes')
@recipe.persisted? #=> false
@recipe.save!
@recipe.persisted? #=> true

Returns:

  • (Boolean)

    Returns true if this record has been persisted.


123
124
125
# File 'lib/aws/record/abstract_base.rb', line 123

def persisted?
  !!@_persisted
end

#saveBoolean

Creates new records, updates existing records.

Returns:

  • (Boolean)

    Returns true if the record saved without errors, false otherwise.


146
147
148
149
150
151
152
153
154
# File 'lib/aws/record/abstract_base.rb', line 146

def save
  if valid?
    persisted? ? update : create
    clear_changes!
    true
  else
    false
  end
end

#save!true

Creates new records, updates exsting records. If there is a validation error then an exception is raised.

Returns:

  • (true)

    Returns true after a successful save.

Raises:

  • (InvalidRecordError)

    Raised when the record has validation errors and can not be saved.


161
162
163
164
# File 'lib/aws/record/abstract_base.rb', line 161

def save!
  raise InvalidRecordError.new(self) unless save
  true
end

#shardString Also known as: domain

Returns the name of the shard this record is persisted to or will be persisted to. Defaults to the domain/table named after this record class.

Returns:

  • (String)

    Returns the name of the shard this record is persisted to or will be persisted to. Defaults to the domain/table named after this record class.


78
79
80
# File 'lib/aws/record/abstract_base.rb', line 78

def shard
  @_shard
end

#update_attributes(attribute_hash) ⇒ Boolean

Bulk assigns the attributes and then saves the record.

Parameters:

  • attribute_hash (Hash)

    A hash of attribute names (keys) and attribute values to assign to this record.

Returns:

  • (Boolean)

    Returns true if the record saved without errors, false otherwise.


170
171
172
173
# File 'lib/aws/record/abstract_base.rb', line 170

def update_attributes attribute_hash
  bulk_assign(attribute_hash)
  save
end

#update_attributes!(attribute_hash) ⇒ true

Bulk assigns the attributes and then saves the record. Raises an exception (AWS::Record::InvalidRecordError) if the record is not valid.

Parameters:

  • attribute_hash (Hash)

    A hash of attribute names (keys) and attribute values to assign to this record.

Returns:

  • (true)

180
181
182
183
184
185
186
# File 'lib/aws/record/abstract_base.rb', line 180

def update_attributes! attribute_hash
  if update_attributes(attribute_hash)
    true
  else
    raise InvalidRecordError.new(self)
  end
end

#valid?Boolean

Returns true if this record has no validation errors.

Returns:

  • (Boolean)

    Returns true if this record has no validation errors.


134
135
136
137
# File 'lib/aws/record/abstract_base.rb', line 134

def valid?
  run_validations
  errors.empty?
end