class RenderSync::Resource
Attributes
model[RW]
scopes[RW]
Public Class Methods
new(model, scopes = nil)
click to toggle source
Constructor
model - The ActiveModel instace for this Resource
scopes - The optional scopes to prefix polymorphic paths with.
Can be a Symbol/String, a parent model or an RenderSync::Scope or an Array with any combination.
Examples
class User < ActiveRecord::Base sync :all sync_scope :cool, -> { where(cool: true) } sync_scope :in_group, ->(group) { where(group_id: group.id) } end user = User.find(1) resource = Resource.new(user) resource.polymorphic_path => "/users/1" resource.polymorphic_new_path => "/users/new" resource = Resource.new(user, :admin) resource.polymorphic_path => "/admin/users/1" resource.polymorphic_new_path => "/admin/users/new" resource = Resource.new(user, [:staff, :restricted]) resource.polymorphic_path => "/staff/restricted/users/1" resource.polymorphic_new_path => "/staff/restricted/users/new" resource = Resource.new(user, project) resource.polymorphic_path => "/projects/2/users/1" resource.polymorphic_new_path => "/projects/2/users/new" resource = Resource.new(user, User.cool) resource.polymorphic_path => "/cool/users/2" resource.polymorphic_new_path => "/cool/users/new" resource = Resource.new(user, User.in_group(group)) resource.polymorphic_path => "/in_group/group/3/users/2" resource.polymorphic_new_path => "/in_group/group/3/users/new" resource = Resource.new(user, [:admin, User.cool, User.in_group(group)]) resource.polymorphic_path => "admin/cool/in_group/group/3/users/2" resource.polymorphic_new_path => "admin/cool/in_group/group/3/users/new" resource = Resource.new(user, [:admin, project]) resource.polymorphic_path => "/admin/projects/2/users/1" resource.polymorphic_new_path => "/admin/projects/2/users/new"
# File lib/render_sync/resource.rb, line 56 def initialize(model, scopes = nil) self.model = model self.scopes = scopes end
Public Instance Methods
base_name()
click to toggle source
# File lib/render_sync/resource.rb, line 74 def base_name name.split('/').last end
id()
click to toggle source
# File lib/render_sync/resource.rb, line 66 def id model.id end
model_path()
click to toggle source
Returns an unscoped Pathname for the model (e.g. /users/1)
# File lib/render_sync/resource.rb, line 100 def model_path Pathname.new('/').join(plural_name, id.to_s) end
name()
click to toggle source
# File lib/render_sync/resource.rb, line 70 def name model.class.model_name.to_s.underscore end
plural_name()
click to toggle source
# File lib/render_sync/resource.rb, line 78 def plural_name name.pluralize end
polymorphic_new_path()
click to toggle source
Returns the scoped Pathname for a new model (e.g. /users/1/todos/new)
# File lib/render_sync/resource.rb, line 110 def polymorphic_new_path scopes_path.join(plural_name, "new") end
polymorphic_path()
click to toggle source
Returns the scoped Pathname for the model (e.g. /users/1/todos/2)
# File lib/render_sync/resource.rb, line 105 def polymorphic_path scopes_path.join(plural_name, id.to_s) end
scopes=(new_scopes)
click to toggle source
# File lib/render_sync/resource.rb, line 61 def scopes=(new_scopes) new_scopes = [new_scopes] unless new_scopes.nil? or new_scopes.is_a? Array @scopes = new_scopes end
scopes_path()
click to toggle source
# File lib/render_sync/resource.rb, line 82 def scopes_path path = Pathname.new('/') unless scopes.nil? paths = scopes.map do |scope| if scope.is_a?(RenderSync::Scope) scope.polymorphic_path.relative_path_from(path) elsif scope.class.respond_to? :model_name Resource.new(scope).polymorphic_path.relative_path_from(path) else scope.to_s end end path = path.join(*paths) end path end