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