Module: Anubis::Core::Data::Actions
- Defined in:
- app/controllers/anoubis/core/data/actions.rb
Overview
Module presents all default actions for for Anubis::Core::DataController.
Instance Method Summary collapse
-
#autocomplete ⇒ Object
Returns autocomplete data.
-
#create ⇒ Object
Create action of Anubis::Core::DataController.
-
#destroy ⇒ Object
Destroy action of Anubis::Core::DataController.
-
#edit ⇒ Object
Edit action of Anubis::Core::DataController.
-
#export ⇒ Object
Export data from database.
-
#frame ⇒ Object
Frame action of Anubis::Core::DataController.
-
#index ⇒ Object
Default action of Anubis::Core::DataController.
-
#new ⇒ Object
New action of Anubis::Core::DataController.
- #new_action_skeleton(action) ⇒ Object
-
#render_xls_file ⇒ Object
Returns rendered xlsx data.
-
#show ⇒ Object
Show action of Anubis::Core::DataController.
-
#update ⇒ Object
Update action of Anubis::Core::DataController.
Instance Method Details
#autocomplete ⇒ Object
Returns autocomplete data
864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 |
# File 'app/controllers/anoubis/core/data/actions.rb', line 864 def autocomplete self.output = Anubis::Output::Autocomplete.new self.output.result = -1 self.set_parent_model 'autocomplete' self.output.tab = self.etc.tab.tab if params.key?(:field) && params.key?(:value) self.setup_fields if self.etc.data.fields if self.etc.data.fields.key? params[:field].to_s.to_sym field = self.etc.data.fields[params[:field].to_s.to_sym] #puts 'autocomplete' #puts field.to_h if field.autocomplete self.output.result = 0 self.get_autocomplete_data field, params[:value] #puts field.to_h end end end end self.before_output respond_to do |format| format.json { render json: self.output.to_h } end end |
#create ⇒ Object
Create action of Anubis::Core::DataController. Procedure inserts data into database. Authorization bearer is required.
API request:
POST /api/<version>/<controller>/new
Request Header:
{
"Authorization": "Bearer <Session token>"
}
Parameters:
-
locale (String) — the output language locale (optional value)
-
tab (String) — the tab, is used for action (optional value, default: first defined tab)
-
data (String) — inserted data (required value)
Request example:
curl --request POST --header "Content-Type: application/json" --header 'Authorization: Bearer <session-token>' --data='{"title": "Sailor Mars", "name": "Rey Hino", "state": "inner"}' http://<server>:<port>/api/<api-version>/<controller>/?tab=<tab>
Results:
Resulting data returns in JSON format.
Examples:
Success: HTTP response code 200
{
"result": 0,
"message": "Successful",
"timestamp": 1563271417,
"tab": "inner",
"values": {
"id": 3,
"sys_title": "Sailor Mars",
"actions": {
"edit": "Edit: Sailor Mars",
"delete": "Delete: Sailor Mars"
},
"title": "Sailor Mars",
"name": "Rey Hino",
"state": "Inner Senshi",
"raw_state": "inner"
},
"action": ""
}
Error (data presents): HTTP response code 200
{
"result": -3,
"message": "Error update data",
"timestamp": 1563271417,
"tab": "inner",
"errors": [
"Title already presents"
]
}
Error (session expired): HTTP response code 422
{
"result": -1,
"message": "Session expired",
"timestamp": 1563271417,
"tab": "inner"
}
490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 |
# File 'app/controllers/anoubis/core/data/actions.rb', line 490 def create self.output = Anubis::Output::Update.new self.set_parent_model 'create' self.output.tab = self.etc.tab.tab if params.key? :data if self.etc.tab..key? :new self.load_new_data if self.etc.data.data self.setup_fields data = get_permited_params data = self.before_create_data data if data data.each_key do |key| self.convert_view_to_db_value key, data[key] end if self.etc.data.data.respond_to? :tenant_id if self.current_user.respond_to? :tenant_id self.etc.data.data.tenant_id = self.current_user.tenant_id if !self.etc.data.data.tenant_id end end if self.etc.data.data.save else self.output.errors.concat self.etc.data.data.errors. end else self.output.result = -4 end if self.output.errors.length == 0 self.etc.data.fields = nil self.set_new_action 'index' self.output.values = self.get_data_row self.etc.data.data self.set_new_action 'create' self.after_create_data else self.output.result = -3 end else self.output.result = -2 end else self.output.result = -1 end else self.output.result = -2 end self.before_output respond_to do |format| format.json { render json: self.output.to_h } end end |
#destroy ⇒ Object
Destroy action of Anubis::Core::DataController. Procedure deletes data from database. Authorization bearer is required.
API request:
DELETE /api/<version>/<controller>/<id>/
Request Header:
{
"Authorization": "Bearer <Session token>"
}
Parameters:
-
locale (String) — the output language locale (optional value)
-
tab (String) — the tab, is used for action (optional value, default: first defined tab)
Request example:
curl --request DELETE --header "Content-Type: application/json" --header 'Authorization: Bearer <session-token>' http://<server>:<port>/api/<api-version>/<controller>/<id>/?tab=<tab>
Results:
Resulting data returns in JSON format.
Examples:
Success: HTTP response code 200
{
"result": 0,
"message": "Successful",
"timestamp": 1563271417,
"tab": "inner"
}
Error (incorrect request id): HTTP response code 200
{
"result": -2,
"message": "Incorrect request parameters",
"timestamp": 1563271417,
"tab": "inner"
}
Error (session expired): HTTP response code 422
{
"result": -1,
"message": "Session expired",
"timestamp": 1563271417,
"tab": "inner"
}
829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 |
# File 'app/controllers/anoubis/core/data/actions.rb', line 829 def destroy self.output = Anubis::Output::Delete.new self.set_parent_model 'destroy' self.output.tab = self.etc.tab.tab if self.etc.tab..key? :delete if params.key?(:value) && params.key?(:field) self.load_data_by_title params[:field], params[:value] params[:id] = self.etc.data.data.id if self.etc.data.data end if params.key?(:id) self.load_data_by_id params[:id] if !self.etc.data.data if self.etc.data.data self.output.id = self.etc.data.data.id if self.etc.data.data.can_delete( { tab: self.etc.tab } ) self.destroy_data else self.output.result = -1 end else self.output.result = -2 end else self.output.result = -2 end else self.output.result = -1 end self.before_output respond_to do |format| format.json { render json: self.output.to_h } end end |
#edit ⇒ Object
Edit action of Anubis::Core::DataController. Procedure outputs values for edit form. Authorization bearer is required.
API request:
GET /api/<version>/<controller>/<id>/edit
Request Header:
{
"Authorization": "Bearer <Session token>"
}
Parameters:
-
locale (String) — the output language locale (optional value)
-
tab (String) — the tab, is used for action (optional value, default: first defined tab)
Resulting output title is took from translation file <lang>.yml at path:
<lang>:
<controller name divided by level>:
edit:
form:
title: "Edit soldier %{title}"
If this path isn't defined in translation file, then value is took from path:
<lang>:
anubis:
form:
titles:
edit: "Edit element: %{title}"
Request example:
curl --header "Content-Type: application/json" --header 'Authorization: Bearer <session-token>' http://<server>:<port>/api/<api-version>/<controller>/<id>/edit?tab=<tab>
Results:
Resulting data returns in JSON format.
Examples:
Success: HTTP response code 200
{
"result": 0,
"message": "Successful",
"timestamp": 1563271417,
"tab": "inner",
"title": "Edit soldier Sailor Mars",
"values": {
"id": 3,
"title": "Sailor Mars",
"name": "Rey Hino",
"state_view": "Inner Senshi",
"state": "inner"
},
"options": {
"state": {
"inner": "Inner Senshi",
"outer": "Outer Senshi",
"star": "Sailor Star"
}
}
}
Error (incorrect request id): HTTP response code 200
{
"result": -2,
"message": "Incorrect request parameters",
"timestamp": 1563271417,
"tab": "inner"
}
Error (session expired): HTTP response code 422
{
"result": -1,
"message": "Session expired",
"timestamp": 1563271417,
"tab": "inner"
}
625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 |
# File 'app/controllers/anoubis/core/data/actions.rb', line 625 def edit self.output = Anubis::Output::Edit.new self.set_parent_model 'edit' self.output.tab = self.etc.tab.tab if self.table_actions.include?('edit') if params.key?(:value) && params.key?(:field) self.load_data_by_title params[:field], params[:value] params[:id] = self.etc.data.data.id if self.etc.data.data end if params.key? :id self.load_data_by_id params[:id] if !self.etc.data.data if self.etc.data.data self.output.values = self.get_data_row self.etc.data.data if params.key? :time self.output. = self. params[:time] else self.output. = self. 0 end self.output.fields = self.get_fields_properties if self.etc.time == 0 else self.output.result = -2 end else self.output.result = -2 end else self.output.result = -1 end if self.output.result == 0 self.output.title = I18n.t(format('%s.edit.form.title', params[:controller].sub('/', '.')), title: self.output.values[:sys_title], default: I18n.t('anubis.form.titles.edit', title: self.output.values[:sys_title])) end self.before_output respond_to do |format| format.json { render json: self.output.to_h } end end |
#export ⇒ Object
Export data from database
892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 |
# File 'app/controllers/anoubis/core/data/actions.rb', line 892 def export self.etc.data = Anubis::Etc::Data.new self.set_parent_model 'export' self.output = Anubis::Output::Data.new if self.etc.tab.export self.output.count = self.get_table_data_count count = (self.output.count / 40).to_i + 1 self.setup_fields self.exports = Anubis::Export.new format: self.export_format, fields: self.get_fields_properties case self.exports.format when 'xls' headers['Content-Disposition'] = 'attachment; filename="export.xlsx" filename*="export.xlsx"' end self.etc.data.limit = 40 self.etc.data.offset = 0 self.output.data = self.get_table_data self.after_get_table_data self.before_output self.exports.add self.output.data if count > 1 for i in 2..count self.etc.data.offset = (i-1)*40 self.output.data = self.get_table_data self.after_get_table_data self.before_output self.exports.add self.output.data end end respond_to do |format| case self.exports.format when 'xls' format.xlsx { send_data self.render_xls_file, type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' } end end else respond_to do |format| format.any { render json: {result: -1}, status: :unprocessable_entity } end end end |
#frame ⇒ Object
Frame action of Anubis::Core::DataController. Procedure outputs frame data information (title, tabs, frame buttons) Authorization bearer is required.
API request:
GET /api/<version>/<controller>/frame
Request Header:
{
"Authorization": "Bearer <Session token>"
}
Parameters:
-
locale (String) — the output language locale (optional value)
-
offset (String) — starting number for selection (optional value, default: 0)
-
limit (String) — number of selected rows (optional value, default: 10)
-
tab (String) — the tab, is used for selected data (optional value, default: first defined tab)
Request example:
curl --header "Content-Type: application/json" --header 'Authorization: Bearer <session-token>' http://<server>:<port>/api/<api-version>/<controller>/frame
Results:
Resulting data returns in JSON format.
Examples:
Success: HTTP response code 200
{
"result": 0,
"message": "Successful",
"timestamp": 1563271417,
"title": "Sailor soldiers",
"short": "Soldiers",
"mode": "soldiers",
"access": "write",
"tabs": [
{
"tab": "inner",
"title": "Inner Senshi",
"buttons": [
{
"key": "new",
"mode": "single",
"type": "primary"
}
],
"hint": "Shows only inner soldiers"
},
{
"tab": "outer",
"title": "Outer Senshi",
"buttons": [
{
"key": "new",
"mode": "single",
"type": "primary"
},
{
"key": "delete",
"mode": "multiple",
"type": "danger"
}
]
}
]
}
Error (session expired): HTTP response code 422
{
"result": -1,
"message": "Session expired",
"timestamp": 1563271417,
"tab": "inner"
}
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
# File 'app/controllers/anoubis/core/data/actions.rb', line 188 def frame self.output = Anubis::Output::Frame.new self.etc.data = Anubis::Etc::Data.new if !self.etc.data self.etc.action = 'frame' if self.parent_model if !self.get_parent_data self.output.result = -2 end end self.setup_frame self.before_output respond_to do |format| format.json { render json: self.output.to_h } end end |
#index ⇒ Object
Default action of Anubis::Core::DataController. Procedure outputs data loaded from database table. Authorization bearer is required.
API request:
GET /api/<version>/<controller>
Request Header:
{
"Authorization": "Bearer <Session token>"
}
Parameters:
-
locale (String) — the output language locale (optional value)
-
offset (String) — starting number for selection (optional value, default: 0)
-
limit (String) — number of selected rows (optional value, default: 10)
-
tab (String) — the tab, is used for selected data (optional value, default: first defined tab)
Request example:
curl --header "Content-Type: application/json" --header 'Authorization: Bearer <session-token>' http://<server>:<port>/api/<api-version>/<controller>?offset=0&limit=10
Results:
Resulting data returns in JSON format.
Examples:
Success: HTTP response code 200
{
"result": 0,
"message": "Successful",
"count": 5,
"tab": "inner",
"offset": "0",
"limit": "10",
"timestamp": 1563169525,
"fields": [
{
"prop": "title",
"title": "Soldier Ttitle"
"type": "string",
"sortable": true
},
{
"prop": "name",
"title": "Soldier Name"
"type": "string",
"sortable": true
},
{
"prop": "age",
"title": "Girl Age"
"type": "string",
"sortable": true
}
],
"data": [
{
"id": 1,
"sys_title": "Sailor Moon",
"actions": {
"edit": "Edit: Sailor Moon",
"delete": "Delete: Sailor Moon"
},
"title": "Sailor Moon",
"name": "Banny Tsukino",
"age": 16,
"state": "inner"
},
{
"id": 2,
"sys_title": "Sailor Mercury",
"actions": {
"edit": "Edit: Sailor Mercury",
"delete": "Delete: Sailor Mercury"
},
"title": "Sailor Mercury",
"name": "Amy Mitsuno",
"age": 16,
"state": "inner"
}
]
}
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'app/controllers/anoubis/core/data/actions.rb', line 90 def index self.etc.data = Anubis::Etc::Data.new self.set_parent_model 'index' self.output = Anubis::Output::Data.new self.output.count = self.get_table_data_count self.setup_fields self.output.limit = self.etc.data.limit self.output.offset = self.etc.data.offset self.output.fields = self.get_fields_properties if self.etc.time == 0 self.output.filter = self.get_filter_properties if self.etc.time == 0 self.output.data = self.get_table_data self.output.tab = self.etc.tab.tab self.output.sortable = self.is_sortable self.output.order = self.etc.tab.order if self.etc.tab.order != '' self.output.sort = self.etc.tab.sort if self.etc.tab.sort != nil self.after_get_table_data self.before_output respond_to do |format| format.json { render json: around_output(self.output.to_h) } end end |
#new ⇒ Object
New action of Anubis::Core::DataController. Procedure outputs default values for create form. Authorization bearer is required.
API request:
GET /api/<version>/<controller>/new
Request Header:
{
"Authorization": "Bearer <Session token>"
}
Parameters:
-
locale (String) — the output language locale (optional value)
-
tab (String) — the tab, is used for action (optional value, default: first defined tab)
Resulting output title is took from translation file <lang>.yml at path:
<lang>:
<controller name divided by level>:
new:
form:
title: "Add new soldier"
If this path isn't defined in translation file, then value is took from path:
<lang>:
anubis:
form:
titles:
new: "Add new element"
Request example:
curl --header "Content-Type: application/json" --header 'Authorization: Bearer <session-token>' http://<server>:<port>/api/<api-version>/<controller>/new?tab=<tab>
Results:
Resulting data returns in JSON format.
Examples:
Success: HTTP response code 200
{
"result": 0,
"message": "Successful",
"timestamp": 1563271417,
"tab": "inner",
"title": "Add new soldier",
"values": {
"title": "",
"name": "",
"state_view": "Inner Senshi",
"state": "inner"
},
"options": {
"state": {
"inner": "Inner Senshi",
"outer": "Outer Senshi",
"star": "Sailor Star"
}
}
}
Error (session expired): HTTP response code 422
{
"result": -1,
"message": "Session expired",
"timestamp": 1563271417,
"tab": "inner"
}
386 387 388 |
# File 'app/controllers/anoubis/core/data/actions.rb', line 386 def new new_action_skeleton 'new' end |
#new_action_skeleton(action) ⇒ Object
390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 |
# File 'app/controllers/anoubis/core/data/actions.rb', line 390 def new_action_skeleton(action) self.output = Anubis::Output::Edit.new self.set_parent_model action self.output.tab = self.etc.tab.tab if self.etc.tab..key? action.to_sym self.load_new_data action if etc.data.data self.output.values = get_data_row etc.data.data if params.key? :time self.output. = params[:time] else self.output. = self. 0 end etc.action = 'new' self.output.fields = self.get_fields_properties if self.etc.time == 0 etc.action = action else self.output.result = -2 end else self.output.result = -1 end if self.output.result == 0 self.output.title = I18n.t(format('%s.%s.form.title', params[:controller].sub('/', '.'), action), default: I18n.t('anubis.form.titles.new')) end self.before_output respond_to do |format| format.json { render json: self.output.to_h } end end |
#render_xls_file ⇒ Object
Returns rendered xlsx data
943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 |
# File 'app/controllers/anoubis/core/data/actions.rb', line 943 def render_xls_file Axlsx::Package.new do |p| wb = p.workbook wb.styles do |s| default = s.add_style :sz => 11, :font_name => "Calibri", :alignment => {:vertical => :center} default_bold = s.add_style :sz => 11, :font_name => "Calibri", :alignment => {:vertical => :center}, :b => true wb.add_worksheet(name: 'Data') do |sheet| sheet.add_row self.exports.title, :style => default_bold self.exports.data.each do |data| sheet.add_row data, :style => default end end end return p.to_stream().read end end |
#show ⇒ Object
Show action of Anubis::Core::DataController. Procedure outputs values for view form. Authorization bearer is required.
API request:
GET /api/<version>/<controller>/<id>
Request Header:
{
"Authorization": "Bearer <Session token>"
}
Parameters:
-
locale (String) — the output language locale (optional value)
-
tab (String) — the tab, is used for action (optional value, default: first defined tab)
Resulting output title is took from translation file <lang>.yml at path:
<lang>:
<controller name divided by level>:
edit:
form:
title: "Edit soldier %{title}"
If this path isn't defined in translation file, then value is took from path:
<lang>:
anubis:
form:
titles:
edit: "Edit element: %{title}"
Request example:
curl --header "Content-Type: application/json" --header 'Authorization: Bearer <session-token>' http://<server>:<port>/api/<api-version>/<controller>/<id>?tab=<tab>
Results:
Resulting data returns in JSON format.
Examples:
Success: HTTP response code 200
{
"result": 0,
"message": "Successful",
"timestamp": 1563271417,
"tab": "inner",
"title": "Edit soldier Sailor Mars",
"values": {
"id": 3,
"title": "Sailor Mars",
"name": "Rey Hino",
"state_view": "Inner Senshi",
"state": "inner"
},
"options": {
"state": {
"inner": "Inner Senshi",
"outer": "Outer Senshi",
"star": "Sailor Star"
}
}
}
Error (incorrect request id): HTTP response code 200
{
"result": -2,
"message": "Incorrect request parameters",
"timestamp": 1563271417,
"tab": "inner"
}
Error (session expired): HTTP response code 422
{
"result": -1,
"message": "Session expired",
"timestamp": 1563271417,
"tab": "inner"
}
283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 |
# File 'app/controllers/anoubis/core/data/actions.rb', line 283 def show self.output = Anubis::Output::Edit.new self.set_parent_model 'show' self.output.tab = self.etc.tab.tab if params.key?(:value) && params.key?(:field) self.load_data_by_title params[:field], params[:value] params[:id] = self.etc.data.data.id if self.etc.data.data end if params.key? :id self.load_data_by_id params[:id] if !self.etc.data.data if self.etc.data.data self.output.values = self.get_data_row self.etc.data.data if params.key? :time self.output. = self. params[:time] else self.output. = self. 0 end self.output.fields = self.get_fields_properties if self.etc.time == 0 else self.output.result = -2 end else self.output.result = -2 end if self.output.result == 0 self.output.title = I18n.t(format('%s.show.form.title', params[:controller].sub('/', '.')), title: self.output.values[:sys_title], default: I18n.t('anubis.form.titles.show', title: self.output.values[:sys_title])) end self.before_output respond_to do |format| format.json { render json: self.output.to_h } end end |
#update ⇒ Object
Update action of Anubis::Core::DataController. Procedure updates data in database. Authorization bearer is required.
API request:
PUT /api/<version>/<controller>/<id>/
Request Header:
{
"Authorization": "Bearer <Session token>"
}
Parameters:
-
locale (String) — the output language locale (optional value)
-
tab (String) — the tab, is used for action (optional value, default: first defined tab)
-
data (String) — inserted data (required value)
Request example:
curl --request PUT --header "Content-Type: application/json" --header 'Authorization: Bearer <session-token>' --data='{"title": "Sailor Mars", "name": "Rey Hino", "state": "inner"}' http://<server>:<port>/api/<api-version>/<controller>/<id>/?tab=<tab>
Results:
Resulting data returns in JSON format.
Examples:
Success: HTTP response code 200
{
"result": 0,
"message": "Successful",
"timestamp": 1563271417,
"tab": "inner",
"values": {
"id": 3,
"sys_title": "Sailor Mars",
"actions": {
"edit": "Edit: Sailor Mars",
"delete": "Delete: Sailor Mars"
},
"title": "Sailor Mars",
"name": "Rey Hino",
"state": "Inner Senshi",
"raw_state": "inner"
},
"action": ""
}
Error (data presents): HTTP response code 200
{
"result": -3,
"message": "Error update data",
"timestamp": 1563271417,
"tab": "inner",
"errors": [
"Title already presents"
]
}
Error (session expired): HTTP response code 422
{
"result": -1,
"message": "Session expired",
"timestamp": 1563271417,
"tab": "inner"
}
730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 |
# File 'app/controllers/anoubis/core/data/actions.rb', line 730 def update self.output = Anubis::Output::Update.new self.set_parent_model 'update' self.output.tab = self.etc.tab.tab if self.table_actions.include?('edit') if params.key?(:id) && params.key?(:data) self.load_data_by_id params[:id] if self.etc.data.data self.setup_fields data = get_permited_params data = self.before_update_data data if data data.each_key do |key| self.convert_view_to_db_value key, data[key] end if self.etc.data.data.save else self.output.errors.concat self.etc.data.data.errors. end if self.output.errors.length == 0 self.etc.data.fields = nil self.set_new_action 'index' self.output.values = self.get_data_row self.etc.data.data self.output.action = 'refresh' if self.etc.data.data.need_refresh self.set_new_action 'update' self.after_update_data else self.output.result = -3 end end else self.output.result = -4 end else self.output.result = -2 end else self.output.result = -1 end self.before_output respond_to do |format| format.json { render json: self.output.to_h } end end |