<commit_before># CAL Plugins
## Background


## Basic Plugin structure

Dưới đây là một ví dụ đơn giản về cách tạo một resource.

Đầu tiên ta khai báo một Controller Object.
```python

    class BasicController(object):
    
        # Define support for GET on a collection
        def index(self, req):
            data = {
                'action': "index",
                'controller': "basic"
            }
            return data
    
        def delete(self, req, id):
            data = {
                'action': "delete",
                'controller': "basic",
                'id': id
            }
            return data
    
        def update(self, req, id):
            data = {
                'action': "update",
                'controller': "basic",
                'id': id
            }
            return data
    
        def create(self, req):
            data = {
                'action': "create",
                'controller': "basic"
            }
            return data
    
        def show(self, req, id):
            data = {
                'action': "show",
                'controller': "basic",
                'id': id
            }
            return data
```

Sau đó ta khai báo một đối tượng Resource Extension như sau:

```python

    class Basics:
        collection_name = 'basics'
        member_name = 'basic'
        controller = BasicController()
        parent_resource = {}
        collection = {}
        member = {}
```

Cả hai đoạn code trên ta để trong cùng một file là basics.py


##  Explain:

1. Khi resource Basics được sử dụng nó tương đương với các url sau:

o GET /basics       => basics.index()
o POST /basics      => basics.create()
o PUT /basic/1      => basics.update(id)
o DELETE /basic/1   => basics.delete(id)
o GET /basic/1      => basics.show(id)

2. Giải thích class Controller:

Các hàm được khai báo trong class Controller tương ứng với một action.
Các hàm này khi code chỉ cần return 1 biến kiểu dict.

3. Giải thích các thuộc tính trong class Basics:

collection_name: là tên của resource
member_name: là tên của member resource, ví dụ resource basics thì có member_name là basic.
controller: là đối tượng controller.
parent_resource: chỉ rõ resource cha.
collection: là danh sách additional action cho resource.
member: là danh sách additional action cho member resource.

##  FAQ?<commit_msg>Update CAL_Plugins_Tutorial.md<commit_after># CAL Plugins
## Background


## Basic Plugin structure

Dưới đây là một ví dụ đơn giản về cách tạo một resource.

Đầu tiên ta khai báo một Controller Object.
```python

    class BasicController(object):
    
        # Define support for GET on a collection
        def index(self, req):
            data = {
                'action': "index",
                'controller': "basic"
            }
            return data
    
        def delete(self, req, id):
            data = {
                'action': "delete",
                'controller': "basic",
                'id': id
            }
            return data
    
        def update(self, req, id):
            data = {
                'action': "update",
                'controller': "basic",
                'id': id
            }
            return data
    
        def create(self, req):
            data = {
                'action': "create",
                'controller': "basic"
            }
            return data
    
        def show(self, req, id):
            data = {
                'action': "show",
                'controller': "basic",
                'id': id
            }
            return data
```

Sau đó ta khai báo một đối tượng Resource Extension như sau:

```python

    class Basics:
        collection_name = 'basics'
        member_name = 'basic'
        controller = BasicController()
        parent_resource = {}
        collection = {}
        member = {}
```

Cả hai đoạn code trên ta để trong cùng một file là basics.py


##  Explain:

1. Khi resource Basics được sử dụng nó tương đương với các url sau:

- GET /basics       => basics.index()
- POST /basics      => basics.create()
- PUT /basic/1      => basics.update(id)
- DELETE /basic/1   => basics.delete(id)
- GET /basic/1      => basics.show(id)

2. Giải thích class Controller:

Các hàm được khai báo trong class Controller tương ứng với một action.
Các hàm này khi code chỉ cần return 1 biến kiểu dict.

3. Giải thích các thuộc tính trong class Basics:

collection_name: là tên của resource
member_name: là tên của member resource, ví dụ resource basics thì có member_name là basic.
controller: là đối tượng controller.
parent_resource: chỉ rõ resource cha.
collection: là danh sách additional action cho resource.
member: là danh sách additional action cho member resource.

##  FAQ?
{'fraction_non_alphanumeric': 0.0898970804452846, 'fraction_numerical': 0.0029405587061541692, 'mean_word_length': 1.7026106696935301, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1783538', 'n_tokens_mistral': 1598, 'n_tokens_neox': 1529, 'n_words': 507}