Class: Roaster::Adapters::ActiveRecord
- Inherits:
-
Object
- Object
- Roaster::Adapters::ActiveRecord
- Defined in:
- lib/roaster/adapters/active_record.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#_change_relationship(query, rel_name, rel_ids, replace: false) ⇒ Object
TODO: Please refactor me, i’m ugly.
-
#create_relationship(query, document) ⇒ Object
TODO: Document key isn’t always rel_name, it’s rel_name’s resource type ( not accessible here right now :-( ).
- #delete(query) ⇒ Object
- #find(query, model_class: nil) ⇒ Object
- #new(query, model_class: nil) ⇒ Object
- #read(query, model_class: nil) ⇒ Object
-
#save(model) ⇒ Object
TODO: HAX, rethink data path for POST/PUT requests from the start TODO: #save! not good if we want to delay adapter request execution.
- #update_relationship(query, document) ⇒ Object
Class Method Details
.model_class_from_resource_name(resource_name) ⇒ Object
8 9 10 |
# File 'lib/roaster/adapters/active_record.rb', line 8 def self.model_class_from_resource_name(resource_name) "#{resource_name.to_s.singularize}".classify.constantize end |
Instance Method Details
#_change_relationship(query, rel_name, rel_ids, replace: false) ⇒ Object
TODO: Please refactor me, i’m ugly
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/roaster/adapters/active_record.rb', line 24 def _change_relationship(query, rel_name, rel_ids, replace: false) model = model_for(query.target.resource_name) object = model.find(query.target.resource_ids.first) rel_model = rel_name.to_s.classify.constantize = model.reflect_on_association(rel_name) rel_object = rel_model.find(rel_ids) case .macro when :has_many object.send(rel_name).clear if replace === true object.send(rel_name).push(rel_object) when :belongs_to object.send("#{rel_name}=", rel_object) else raise "#{.macro} relationship not implemented" end self.save(object) end |
#create_relationship(query, document) ⇒ Object
TODO: Document key isn’t always rel_name, it’s rel_name’s resource type
( not accessible here right now :-( )
45 46 47 48 49 |
# File 'lib/roaster/adapters/active_record.rb', line 45 def create_relationship(query, document) rel_name = query.target.relationship_name rel_ids = document[rel_name.to_s.pluralize] _change_relationship(query, rel_name, rel_ids) end |
#delete(query) ⇒ Object
78 79 80 81 82 |
# File 'lib/roaster/adapters/active_record.rb', line 78 def delete(query) q = scope_for(query.target) q.destroy_all q end |
#find(query, model_class: nil) ⇒ Object
57 58 59 60 |
# File 'lib/roaster/adapters/active_record.rb', line 57 def find(query, model_class: nil) raise 'No ID provided' if query.target.resource_ids.empty? scope_for(query.target, model_class).first end |
#new(query, model_class: nil) ⇒ Object
12 13 14 15 |
# File 'lib/roaster/adapters/active_record.rb', line 12 def new(query, model_class: nil) model = model_for(model_class || query.target.resource_name) model.new end |
#read(query, model_class: nil) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/roaster/adapters/active_record.rb', line 62 def read(query, model_class: nil) q = scope_for(query.target, model_class) query.includes.each do |i| q = q.include(i) end query.filters.each_pair do |k, v| q = q.where(k => v) end query.sorting.each do |resource_name, criteria| criteria.each do |field, direction| q = q.order(model_for(resource_name).arel_table[field].send(direction)) end end q end |
#save(model) ⇒ Object
TODO: HAX, rethink data path for POST/PUT requests from the start TODO: #save! not good if we want to delay adapter request execution
19 20 21 |
# File 'lib/roaster/adapters/active_record.rb', line 19 def save(model) model.save! end |
#update_relationship(query, document) ⇒ Object
51 52 53 54 55 |
# File 'lib/roaster/adapters/active_record.rb', line 51 def update_relationship(query, document) document.each do |rel_name, rel_ids| _change_relationship(query, rel_name.to_sym, rel_ids, replace: true) end end |