Class: ActiveMocker::Mock::Base
- Inherits:
-
Object
- Object
- ActiveMocker::Mock::Base
- Extended by:
- Queries
- Defined in:
- lib/active_mocker/mock/base.rb
Defined Under Namespace
Modules: PropertiesGetterAndSetter, Scopes Classes: ScopeRelation
Instance Attribute Summary collapse
-
#_create_caller_locations ⇒ Object
Returns the value of attribute _create_caller_locations.
-
#associations ⇒ Object
readonly
Returns the value of attribute associations.
-
#attributes ⇒ Object
readonly
Returns the value of attribute attributes.
-
#types ⇒ Object
readonly
Returns the value of attribute types.
Class Method Summary collapse
- ._find_associations_by_class(klass_name) ⇒ Object
- .abstract_class? ⇒ Boolean
- .build_type(type) ⇒ Object
- .classes(klass) ⇒ Object
- .clear_mock ⇒ Object
-
.create(attributes = {}, &block) ⇒ Object
(also: create!)
Creates an object (or multiple objects) and saves it to memory.
- .created_with(version) ⇒ Object
-
.delete(id) ⇒ Object
Delete an object (or multiple objects) that has the given id.
-
.delete_all(conditions = nil) ⇒ Object
(also: destroy_all)
Deletes the records matching
conditions
. -
.destroy ⇒ Object
Delete an object (or multiple objects) that has the given id.
- .from_limit? ⇒ Boolean private
- .inherited(subclass) ⇒ Object
- .new_relation(collection) ⇒ Object
- .records ⇒ Object
Instance Method Summary collapse
- #_assign_attribute(k, v) ⇒ Object private
- #assign_attributes(new_attributes) {|_self| ... } ⇒ Object (also: #attributes=) private
-
#attribute_names ⇒ Object
Returns an array of names for the attributes available on this object.
-
#attribute_present?(attribute) ⇒ Boolean
Returns
true
if the specifiedattribute
has been set and is neithernil
norempty?
(the latter only applies to objects that respond toempty?
, most notably Strings). - #delete ⇒ Object (also: #destroy)
-
#has_attribute?(attr_name) ⇒ Boolean
Returns
true
if the given attribute is in the attributes hash, otherwisefalse
. -
#initialize(attributes = {}, &block) ⇒ Base
constructor
New objects can be instantiated as either empty (pass no construction parameter) or pre-set with attributes but not yet saved (pass a hash with key names matching the associated table column names).
- #inspect ⇒ Object
-
#new_record? ⇒ Boolean
Returns true if this object hasn’t been saved yet; otherwise, returns false.
-
#persisted? ⇒ Boolean
Indicates if the model is persisted.
- #save(*args) ⇒ Object (also: #save!)
- #update(attributes = {}) ⇒ Object
Methods included from Queries
all, average, count, delete_all, find, find_by, find_by!, find_or_create_by, find_or_initialize_by, limit, maximum, minimum, order, reverse_order, sum, update_all, where
Methods included from TemplateMethods
Methods included from MockAbilities
#clear_mocked_methods, included
Methods included from MockAbilities::InstanceAndClassMethods
#clear_mocked_methods, #mock_instance_method
Methods included from DoNothingActiveRecordMethods
#destroyed?, #errors, included, #marked_for_destruction?, #readonly?, #reload, #valid?
Constructor Details
#initialize(attributes = {}, &block) ⇒ Base
New objects can be instantiated as either empty (pass no construction parameter) or pre-set with attributes but not yet saved (pass a hash with key names matching the associated table column names). In both instances, valid attribute keys are determined by the column names of the associated table – hence you can’t have attributes that aren’t part of the table columns.
Example:
# Instantiates a single new object
UserMock.new(first_name: 'Jamie')
156 157 158 159 160 161 162 |
# File 'lib/active_mocker/mock/base.rb', line 156 def initialize(attributes = {}, &block) if self.class.abstract_class? raise NotImplementedError, "#{self.class.name} is an abstract class and cannot be instantiated." end setup_instance_variables assign_attributes(attributes, &block) end |
Instance Attribute Details
#_create_caller_locations ⇒ Object
Returns the value of attribute _create_caller_locations.
147 148 149 |
# File 'lib/active_mocker/mock/base.rb', line 147 def _create_caller_locations @_create_caller_locations end |
#associations ⇒ Object (readonly)
Returns the value of attribute associations.
146 147 148 |
# File 'lib/active_mocker/mock/base.rb', line 146 def associations @associations end |
#attributes ⇒ Object (readonly)
Returns the value of attribute attributes.
146 147 148 |
# File 'lib/active_mocker/mock/base.rb', line 146 def attributes @attributes end |
#types ⇒ Object (readonly)
Returns the value of attribute types.
146 147 148 |
# File 'lib/active_mocker/mock/base.rb', line 146 def types @types end |
Class Method Details
._find_associations_by_class(klass_name) ⇒ Object
128 129 130 |
# File 'lib/active_mocker/mock/base.rb', line 128 def _find_associations_by_class(klass_name) associations_by_class[klass_name.to_s] end |
.abstract_class? ⇒ Boolean
102 103 104 |
# File 'lib/active_mocker/mock/base.rb', line 102 def abstract_class? true end |
.build_type(type) ⇒ Object
106 107 108 109 |
# File 'lib/active_mocker/mock/base.rb', line 106 def build_type(type) @@built_types ||= {} @@built_types[type] ||= Virtus::Attribute.build(type) end |
.classes(klass) ⇒ Object
111 112 113 |
# File 'lib/active_mocker/mock/base.rb', line 111 def classes(klass) ActiveMocker::LoadedMocks.find(klass) end |
.clear_mock ⇒ Object
123 124 125 126 |
# File 'lib/active_mocker/mock/base.rb', line 123 def clear_mock clear_mocked_methods delete_all end |
.create(attributes = {}, &block) ⇒ Object Also known as: create!
Creates an object (or multiple objects) and saves it to memory.
The attributes
parameter can be either a Hash or an Array of Hashes. These Hashes describe the attributes on the objects that are to be created.
Examples
# Create a single new object
User.create(first_name: 'Jamie')
# Create an Array of new objects
User.create([{ first_name: 'Jamie' }, { first_name: 'Jeremy' }])
# Create a single object and pass it into a block to set other attributes.
User.create(first_name: 'Jamie') do |u|
u.is_admin = false
end
# Creating an Array of new objects using a block, where the block is executed for each object:
User.create([{ first_name: 'Jamie' }, { first_name: 'Jeremy' }]) do |u|
u.is_admin = false
end
38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/active_mocker/mock/base.rb', line 38 def create(attributes = {}, &block) if attributes.is_a?(Array) attributes.collect { |attr| create(attr, &block) } else record = new(id: attributes[:id] || attributes['id']) record.save record.assign_attributes(attributes, &block) record._create_caller_locations = caller_locations record end end |
.created_with(version) ⇒ Object
132 133 134 |
# File 'lib/active_mocker/mock/base.rb', line 132 def created_with(version) raise UpdateMocksError.new(self.name, version, ActiveMocker::VERSION) if version != ActiveMocker::VERSION end |
.delete(id) ⇒ Object
Delete an object (or multiple objects) that has the given id.
This essentially finds the object (or multiple objects) with the given id and then calls delete on it.
Parameters
-
id
- Can be either an Integer or an Array of Integers.
Examples
# Destroy a single object
TodoMock.delete(1)
# Destroy multiple objects
todos = [1,2,3]
TodoMock.delete(todos)
77 78 79 80 81 82 83 |
# File 'lib/active_mocker/mock/base.rb', line 77 def delete(id) if id.is_a?(Array) id.map { |one_id| delete(one_id) } else find(id).delete end end |
.delete_all(conditions = nil) ⇒ Object Also known as: destroy_all
Deletes the records matching conditions
.
Post.where(person_id: 5).where(category: ['Something', 'Else']).delete_all
90 91 92 93 |
# File 'lib/active_mocker/mock/base.rb', line 90 def delete_all(conditions=nil) return records.reset if conditions.nil? super end |
.destroy ⇒ Object
Delete an object (or multiple objects) that has the given id.
This essentially finds the object (or multiple objects) with the given id and then calls delete on it.
Parameters
-
id
- Can be either an Integer or an Array of Integers.
Examples
# Destroy a single object
TodoMock.delete(1)
# Destroy multiple objects
todos = [1,2,3]
TodoMock.delete(todos)
85 86 87 88 89 90 91 |
# File 'lib/active_mocker/mock/base.rb', line 85 def delete(id) if id.is_a?(Array) id.map { |one_id| delete(one_id) } else find(id).delete end end |
.from_limit? ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
98 99 100 |
# File 'lib/active_mocker/mock/base.rb', line 98 def from_limit? false end |
.inherited(subclass) ⇒ Object
10 11 12 13 |
# File 'lib/active_mocker/mock/base.rb', line 10 def self.inherited(subclass) return ActiveMocker::LoadedMocks.send(:add, subclass) if subclass.superclass == Base ActiveMocker::LoadedMocks.send(:add_subclass, subclass) end |
.new_relation(collection) ⇒ Object
115 116 117 |
# File 'lib/active_mocker/mock/base.rb', line 115 def new_relation(collection) ScopeRelation.new(collection) end |
Instance Method Details
#_assign_attribute(k, v) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
192 193 194 195 196 197 198 199 200 |
# File 'lib/active_mocker/mock/base.rb', line 192 def _assign_attribute(k, v) public_send("#{k}=", v) rescue NoMethodError if respond_to?("#{k}=") raise else raise UnknownAttributeError.new(self, k) end end |
#assign_attributes(new_attributes) {|_self| ... } ⇒ Object Also known as: attributes=
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/active_mocker/mock/base.rb', line 177 def assign_attributes(new_attributes, &block) yield self if block_given? unless new_attributes.respond_to?(:stringify_keys) raise ArgumentError, "When assigning attributes, you must pass a hash as an argument." end return nil if new_attributes.blank? attributes = new_attributes.stringify_keys attributes.each do |k, v| _assign_attribute(k, v) end end |
#attribute_names ⇒ Object
Returns an array of names for the attributes available on this object.
person = Person.new
person.attribute_names
# => ["id", "created_at", "updated_at", "name", "age"]
270 271 272 |
# File 'lib/active_mocker/mock/base.rb', line 270 def attribute_names self.class.attribute_names end |
#attribute_present?(attribute) ⇒ Boolean
Returns true
if the specified attribute
has been set and is neither nil
nor empty?
(the latter only applies to objects that respond to empty?
, most notably Strings). Otherwise, false
. Note that it always returns true
with boolean attributes.
person = Task.new(title: '', is_done: false)
person.attribute_present?(:title) # => false
person.attribute_present?(:is_done) # => true
person.name = 'Francesco'
person.is_done = true
person.attribute_present?(:title) # => true
person.attribute_present?(:is_done) # => true
260 261 262 263 |
# File 'lib/active_mocker/mock/base.rb', line 260 def attribute_present?(attribute) value = read_attribute(attribute) !value.nil? && !(value.respond_to?(:empty?) && value.empty?) end |
#delete ⇒ Object Also known as: destroy
218 219 220 |
# File 'lib/active_mocker/mock/base.rb', line 218 def delete records.delete(self) end |
#has_attribute?(attr_name) ⇒ Boolean
Returns true
if the given attribute is in the attributes hash, otherwise false
.
person = Person.new
person.has_attribute?(:name) # => true
person.has_attribute?('age') # => true
person.has_attribute?(:nothing) # => false
245 246 247 |
# File 'lib/active_mocker/mock/base.rb', line 245 def has_attribute?(attr_name) @attributes.has_key?(attr_name.to_s) end |
#inspect ⇒ Object
274 275 276 |
# File 'lib/active_mocker/mock/base.rb', line 274 def inspect ObjectInspect.new(self.class.name, attributes).to_s end |
#new_record? ⇒ Boolean
Returns true if this object hasn’t been saved yet; otherwise, returns false.
227 228 229 |
# File 'lib/active_mocker/mock/base.rb', line 227 def new_record? records.new_record?(self) end |
#persisted? ⇒ Boolean
Indicates if the model is persisted. Default is false
.
person = Person.new(id: 1, name: 'bob')
person.persisted? # => false
235 236 237 |
# File 'lib/active_mocker/mock/base.rb', line 235 def persisted? records.persisted?(id) end |
#save(*args) ⇒ Object Also known as: save!
202 203 204 205 206 207 |
# File 'lib/active_mocker/mock/base.rb', line 202 def save(*args) unless self.class.exists?(self) self.class.send(:insert, self) end true end |
#update(attributes = {}) ⇒ Object
172 173 174 |
# File 'lib/active_mocker/mock/base.rb', line 172 def update(attributes={}) assign_attributes(attributes) end |