module Openapi::Mongoid::CrudActions
Public Instance Methods
apply_scopes_to_chain!()
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 151 def apply_scopes_to_chain! @chain = apply_scopes(@chain) end
build_object()
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 135 def build_object resource_class.new(resource_params) end
create()
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 45 def create @object = build_object if @object.save render json: @object.as_json(json_config), status: :created else log_errors @object.errors render json: @object.errors, status: :unprocessable_entity end end
default_scope()
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 127 def default_scope resource_class end
destroy()
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 70 def destroy @object = find_object if @object.destroy render nothing: true, status: :no_content else log_errors @object.errors render json: @object.errors, status: :unprocessable_entity end end
find_object()
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 131 def find_object resource_class.find(params[:id]) end
index()
click to toggle source
Actions
# File lib/openapi/mongoid/crud_actions.rb, line 25 def index @chain = default_scope apply_scopes_to_chain! search_filter_chain! paginate_chain! set_index_headers! respond_to do |format| format.json { render json: @chain.as_json(json_config) } format.csv { render csv: @chain } end end
last_page?(total_number)
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 189 def last_page?(total_number) total_number <= (page - 1) * per_page + per_page end
log_errors(errors)
click to toggle source
Helpers
# File lib/openapi/mongoid/crud_actions.rb, line 110 def log_errors(errors) if Rails.env.development? logger.info "Errors:\n #{errors.to_h}" end end
page()
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 167 def page @page ||= (params[:page] || 1).to_i end
paginate_chain!()
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 184 def paginate_chain! @unpaginated_chain = @chain @chain = @chain.skip((page - 1) * per_page).limit(per_page) end
paginates_per(number)
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 11 def paginates_per(number) self.crud_per_page = number end
per_page()
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 171 def per_page @per_page ||= begin value = params[:perPage].try(:to_i) if value.nil? self.class.crud_per_page || 25 elsif value == 0 25 else value end end end
permitted_params()
click to toggle source
NOTE: here we permit all parameters for ease of development,
before release this method should be overriden to allow only permitted parameters.
# File lib/openapi/mongoid/crud_actions.rb, line 212 def permitted_params logger.warn "#{self}: please override `permitted_params` method." params.require(resource_request_name).permit! end
resource_class(klass)
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 7 def resource_class(klass) self.crud_resource_class = klass end
resource_params()
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 205 def resource_params permitted_params end
resource_request_name()
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 217 def resource_request_name resource_class. to_s. underscore. gsub('/', '_'). gsub('::', '_') end
response_config()
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 83 def response_config config = {} fields = params[:fields] methods = params[:methods] if fields only_fields = fields.split(',').select do |field_name| resource_class.fields.has_key?(field_name) end config[:only] = only_fields unless only_fields.empty? end if methods include_methods = methods.split(',').select do |method_name| method = method_name.to_sym resource_class.instance_methods(false).include?(method) end config[:methods] = include_methods unless include_methods.empty? end config end
Also aliased as: csv_config, json_config
search_filter_chain!()
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 159 def search_filter_chain! query = params[:search] || '' if !query.empty? && support_search? normalized_query = query.to_s.downcase @chain = @chain.search(normalized_query, match: :all) end end
set_index_headers!()
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 193 def set_index_headers! unpaginated_chain_size = @chain.count response.headers['X-Page'] = page response.headers['X-Total-Count'] = unpaginated_chain_size response.headers['X-Pages-Count'] = (unpaginated_chain_size.to_f / per_page).ceil response.headers['X-Per-Page'] = per_page unless last_page?(unpaginated_chain_size) response.headers['X-Next-Page'] = page + 1 end end
set_object_version!()
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 143 def set_object_version! version = params[:version] if version && support_version? && version.to_i != @object.version @object.undo(nil, from: version.to_i + 1, to: @object.version) @object.version = version end end
show()
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 39 def show @object = find_object set_object_version! render json: @object.as_json(json_config) end
support_search?()
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 155 def support_search? @chain.respond_to?(:search, true) end
support_version?()
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 139 def support_version? @object.respond_to?(:undo, true) end
update()
click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 58 def update @object = find_object if @object.update_attributes(resource_params) render json: @object.as_json(json_config) else log_errors @object.errors render json: @object.errors, status: :unprocessable_entity end end