diamond 3.0.0
Powerful Full-stack MVC web-framework using vibe.d
To use this package, run the following command in your project's root directory:
						Manual usage
						
						Put the following dependency into your project's dependences section:
					
Diamond
Diamond is a powerful full-stack web-framework written in the D Programming Language.
Diamond can be used to write powerful websites, webapis or as stand-alone as a template parser.
Website: https://diamondmvc.org/
Key-Features
Goals
- To provide a powerful consistent API
- The API of Diamond should be rich of features, but still with powerful performance and the style should be consistent all over.
- High performance without complexity
- The performance of Diamond should be high without making the API complex to use.
- Compile-time template parsing
- Templates are parsed at compile-time and thus produce very little run-time overhead.
- Easy-to-use and feature-rich template syntax
- The syntax of templates should be feature-rich, with an easy-to-use syntax.
- It should be easy to create advanced templates without complex looking code.
- Secure & less error-prone API
- The API of Diamond should provide security to battle error-prone code, enabling code to be written "bug-free".
- Enterprise development
- Diamond should be stable enough and have enough features to be used in enterprise and commercial work.
- Always free & open-source
- Diamond should always remain free and open-source, no matter the framework's size or popularity.
- As little dependencies as possible
- The less dependencies Diamond has, the better.
- library dependencies for database drivers etc. are okay
- Cross-platform
- Should always be able to support all platforms that vibe.d/DMD supports.
- Natural development feeling
- Using Diamond should feel natural without annoyance, so you can focus more on developing your application, rather than setting up Diamond.
Dependencies
|Package|Version|Description| |---|:--:|---| |vibe.d|0.8.3|Used as the backend for Diamond's web applications. From 3.0.0 vibe.d will be an optional dependency.| |DMD/Phobos|2.072.2 - 2.077.0|The standard library of D and thus a required dependency.| |Mysql-native|2.2.1|A native wrapper for Mysql. It's a dependency, because of the MySql ORM.| |ddbc|X.X.X|A database wrapper in D to a lot of database systems. Diamond will be using it for PostgreSQL, Sqlite and MSSQL.|
Example (2.X.X)
View
Layout:
@<doctype>
<html>
<head>
  <title>Website - @<title></title>
</head>
<body>
  @<view>
</body>
</html>
View:
@[
  layout:
    layout
---
  route:
    home
---
  model:
    Home
---
  controller:
    HomeController
---
  placeholders:
    [
      "title": "Home"
    ]
]
<p>Hello @=model.name;!</p>
Controller
module controllers.homecontroller;
import diamond.controllers;
final class HomeController(TView) : Controller!TView
{
  this(TView view)
  {
    super(view);
  }
  
  /// / || /home
  @HttpDefault Status defaultAction()
  {
    view.model = new Home("World!");
    
    return Status.success;
  }
  
  /// /home/setname/{name}
  @HttpAction(HttpPost) Status setName()
  {
    auto name = this.getByIndex!string(0);
    view.model = new Home(name);
    
    return Status.success;
  }
}
Model
module models.home;
final class Home
{
  private:
  string _name;
  
  public:
  final:
  this(string name)
  {
    _name = name;
  }
  
  @property
  {
    string name() { return _name; }
  }
}
Example (3.X.X)
View
Layout:
@(doctype)
<html>
<head>
  <title>Website - @(title)</title>
</head>
<body>
  @(view)
</body>
</html>
View:
@[
  layout:
    layout
---
  route:
    home
---
  model:
    Home
---
  controller:
    HomeController
---
  placeholders:
    [
      "title": "Home"
    ]
]
<p>Hello @=model.name;!</p>
Controller (View)
module controllers.homecontroller;
import diamond.controllers;
final class HomeController(TView) : WebController!TView
{
  this(TView view)
  {
    super(view);
  }
  
  /// / || /home
  @HttpDefault Status defaultAction()
  {
    view.model = new Home("World!");
    
    return Status.success;
  }
  
  /// /home/setname/{name}
  @HttpAction(HttpPost) Status setName(string name)
  {
    view.model = new Home(name);
    
    return Status.success;
  }
}
Controller (Api)
module controllers.usercontroller;
import diamond.controllers;
final class UserController : ApiController
{
  this(HttpClient client)
  {
    super(client);
  }
  
  /// /user/update
  @HttpAction(HttpPost) Status update(UserModel user)
  {
    // Do stuff ...
    
    return Status.success;
  }
}
Model
module models.home;
final class Home
{
  private:
  string _name;
  
  public:
  final:
  this(string name)
  {
    _name = name;
  }
  
  @property
  {
    string name() { return _name; }
  }
}
...
module models.user;
final class User
{
  public:
  string name;
  int age;
}
FAQ
See: https://diamondmvc.org/faq
Are there any syntax guide-lines?
See: https://diamondmvc.org/docs/views/#syntax
Installing (Web)
See: https://diamondmvc.org/download
Installing (Standalone)
Not supported since 3.0.0
Contributing
See: https://diamondmvc.org/contribute
Version & Branch Support
Diamond only supports up to the 3 latest minor versions of itself, including pre-release versions.
If a version is not supported its working branch is deleted.
Anything below 2.10.0 is no longer supported, because earlier versions are not adviced to use unless necessary.
2.10.0+ is generally backward compatible, but 3.0.0 is not.
Currently supported versions: 2.10.0 - 3.0.0
No longer supported (Only available in release.): < 2.10.0
Note: 3.0.0 is not yet supported, but the master branch is 3.0.0
- 3.0.0 released 5 years ago
- DiamondMVC/Diamond
- diamondmvc.org/
- The MIT License (MIT)
- Copyright © 2016-2018 Diamond MVC
- Authors:
- Dependencies:
- vibe-d, ddbc, mysql-native
- Versions:
- 
						
 Show all 49 versions3.0.0 2020-Mar-31 2.10.1 2018-Jun-10 2.10.0 2018-Jun-09 2.9.3 2018-May-10 2.9.2 2018-Apr-30 
- Download Stats:
- 
						- 
								0 downloads today 
- 
								3 downloads this week 
- 
								40 downloads this month 
- 
								561 downloads total 
 
- 
								
- Score:
- 2.9
- Short URL:
- diamond.dub.pm
