github.com/jasonish/buffalo@v0.8.2-0.20170413145823-bacbdd415f1b/resource.go (about)

     1  package buffalo
     2  
     3  import "errors"
     4  
     5  // Resource interface allows for the easy mapping
     6  // of common RESTful actions to a set of paths. See
     7  // the a.Resource documentation for more details.
     8  // NOTE: When skipping Resource handlers, you need to first declare your
     9  // resource handler as a type of buffalo.Resource for the Skip function to
    10  // properly recognize and match it.
    11  /*
    12  	// Works:
    13  	var cr Resource
    14  	cr = &carsResource{&buffaloBaseResource{}}
    15  	g = a.Resource("/cars", cr)
    16  	g.Use(SomeMiddleware)
    17  	g.Middleware.Skip(SomeMiddleware, cr.Show)
    18  
    19  	// Doesn't Work:
    20  	cr := &carsResource{&buffaloBaseResource{}}
    21  	g = a.Resource("/cars", cr)
    22  	g.Use(SomeMiddleware)
    23  	g.Middleware.Skip(SomeMiddleware, cr.Show)
    24  */
    25  type Resource interface {
    26  	List(Context) error
    27  	Show(Context) error
    28  	New(Context) error
    29  	Create(Context) error
    30  	Edit(Context) error
    31  	Update(Context) error
    32  	Destroy(Context) error
    33  }
    34  
    35  // BaseResource fills in the gaps for any Resource interface
    36  // functions you don't want/need to implement.
    37  /*
    38  	type UsersResource struct {
    39  		Resource
    40  	}
    41  
    42  	func (ur *UsersResource) List(c Context) error {
    43  		return c.Render(200, render.String("hello")
    44  	}
    45  
    46  	// This will fulfill the Resource interface, despite only having
    47  	// one of the functions defined.
    48  	&UsersResource{&BaseResource{})
    49  */
    50  type BaseResource struct{}
    51  
    52  // List default implementation. Returns a 404
    53  func (v *BaseResource) List(c Context) error {
    54  	return c.Error(404, errors.New("resource not implemented"))
    55  }
    56  
    57  // Show default implementation. Returns a 404
    58  func (v *BaseResource) Show(c Context) error {
    59  	return c.Error(404, errors.New("resource not implemented"))
    60  }
    61  
    62  // New default implementation. Returns a 404
    63  func (v *BaseResource) New(c Context) error {
    64  	return c.Error(404, errors.New("resource not implemented"))
    65  }
    66  
    67  // Create default implementation. Returns a 404
    68  func (v *BaseResource) Create(c Context) error {
    69  	return c.Error(404, errors.New("resource not implemented"))
    70  }
    71  
    72  // Edit default implementation. Returns a 404
    73  func (v *BaseResource) Edit(c Context) error {
    74  	return c.Error(404, errors.New("resource not implemented"))
    75  }
    76  
    77  // Update default implementation. Returns a 404
    78  func (v *BaseResource) Update(c Context) error {
    79  	return c.Error(404, errors.New("resource not implemented"))
    80  }
    81  
    82  // Destroy default implementation. Returns a 404
    83  func (v *BaseResource) Destroy(c Context) error {
    84  	return c.Error(404, errors.New("resource not implemented"))
    85  }