Module: Anoubis::Data::Actions
- Included in:
- Anoubis::DataController
- Defined in:
- app/controllers/anoubis/data/actions.rb
Overview
Module presents all default actions for for Anoubis::DataController.
Instance Method Summary collapse
-
#autocomplete ⇒ Object
Returns autocomplete data.
-
#create ⇒ Object
Create action of Anoubis::DataController.
-
#destroy ⇒ Object
Destroy action of Anoubis::DataController.
-
#edit ⇒ Object
Edit action of Anoubis::DataController.
-
#export ⇒ Object
Export data from database.
-
#frame ⇒ Object
Frame action of Anoubis::DataController.
-
#index ⇒ Object
Default action of Anoubis::DataController.
-
#new ⇒ Object
New action of Anoubis::DataController.
- #new_action_skeleton(action) ⇒ Object
-
#render_xls_file ⇒ Object
Returns rendered xlsx data.
-
#show ⇒ Object
Show action of Anoubis::DataController.
-
#update ⇒ Object
Update action of Anoubis::DataController.
Instance Method Details
#autocomplete ⇒ Object
Returns autocomplete data
851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 |
# File 'app/controllers/anoubis/data/actions.rb', line 851 def autocomplete self.output = Anoubis::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 render json: around_output(output.to_h) end |
#create ⇒ Object
Create action of Anoubis::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"
}
481 482 483 484 485 486 487 488 489 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 |
# File 'app/controllers/anoubis/data/actions.rb', line 481 def create self.output = Anoubis::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 render json: around_output(output.to_h) end |
#destroy ⇒ Object
Destroy action of Anoubis::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"
}
817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 |
# File 'app/controllers/anoubis/data/actions.rb', line 817 def destroy self.output = Anoubis::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 render json: around_output(output.to_h) end |
#edit ⇒ Object
Edit action of Anoubis::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"
}
615 616 617 618 619 620 621 622 623 624 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 |
# File 'app/controllers/anoubis/data/actions.rb', line 615 def edit self.output = Anoubis::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('anoubis.form.titles.edit', title: self.output.values[:sys_title])) end self.before_output render json: around_output(output.to_h) end |
#export ⇒ Object
Export data from database
878 879 880 881 882 883 884 885 886 887 888 889 890 891 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 |
# File 'app/controllers/anoubis/data/actions.rb', line 878 def export self.etc.data = Anoubis::Etc::Data.new self.set_parent_model 'export' self.output = Anoubis::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 = Anoubis::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 Anoubis::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"
}
186 187 188 189 190 191 192 193 194 195 196 197 |
# File 'app/controllers/anoubis/data/actions.rb', line 186 def frame self.output = Anoubis::Output::Frame.new self.etc.data = Anoubis::Etc::Data.new unless etc.data self.etc.action = 'frame' if parent_model self.output.result = -2 unless self.get_parent_data end setup_frame before_output render json: around_output(output.to_h) end |
#index ⇒ Object
Default action of Anoubis::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"
}
]
}
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'app/controllers/anoubis/data/actions.rb', line 89 def index self.etc.data = Anoubis::Etc::Data.new self.set_parent_model 'index' self.output = Anoubis::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 render json: around_output(output.to_h) end |
#new ⇒ Object
New action of Anoubis::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"
}
380 381 382 |
# File 'app/controllers/anoubis/data/actions.rb', line 380 def new new_action_skeleton 'new' end |
#new_action_skeleton(action) ⇒ Object
384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 |
# File 'app/controllers/anoubis/data/actions.rb', line 384 def new_action_skeleton(action) self.output = Anoubis::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('anoubis.form.titles.new')) end self.before_output render json: around_output(output.to_h) end |
#render_xls_file ⇒ Object
Returns rendered xlsx data
929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 |
# File 'app/controllers/anoubis/data/actions.rb', line 929 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 Anoubis::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"
}
278 279 280 281 282 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 |
# File 'app/controllers/anoubis/data/actions.rb', line 278 def show self.output = Anoubis::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('anoubis.form.titles.show', title: self.output.values[:sys_title])) end self.before_output render json: around_output(output.to_h) end |
#update ⇒ Object
Update action of Anoubis::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"
}
719 720 721 722 723 724 725 726 727 728 729 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 |
# File 'app/controllers/anoubis/data/actions.rb', line 719 def update self.output = Anoubis::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 render json: around_output(output.to_h) end |