diff --git a/lib/dunlop/ember/api_base_controller.rb b/lib/dunlop/ember/api_base_controller.rb index e5fe939..8d8b2ec 100644 --- a/lib/dunlop/ember/api_base_controller.rb +++ b/lib/dunlop/ember/api_base_controller.rb @@ -2,6 +2,7 @@ module Dunlop::Ember::ApiBaseController extend ActiveSupport::Concern included do + cattr_accessor :predicate_end_matcher before_action :authenticate_user_from_token! before_action :authenticate_user! before_action :set_current_user @@ -174,6 +175,7 @@ module Dunlop::Ember::ApiBaseController {} end + # predicate_end_matcher => # /(_eq|_eq_any|_eq_all|_not_eq|_not_eq_any|_not_eq_all|_matches|_matches_any|_matches_all| # _does_not_match|_does_not_match_any|_does_not_match_all|_lt|_lt_any|_lt_all|_lteq|_lteq_any| # _lteq_all|_gt|_gt_any|_gt_all|_gteq|_gteq_any|_gteq_all|_in|_in_any|_in_all|_not_in|_not_in_any| @@ -181,13 +183,13 @@ module Dunlop::Ember::ApiBaseController # _not_cont_all|_i_not_cont|_i_not_cont_any|_i_not_cont_all|_start|_start_any|_start_all|_not_start| # _not_start_any|_not_start_all|_end|_end_any|_end_all|_not_end|_not_end_any|_not_end_all| # _true|_not_true|_false|_not_false|_present|_blank|_null|_not_null)$/ - PREDICATE_END_MATCHER = Regexp.new("(_#{Ransack.predicates.keys.join('|_')})$") #TODO: make me pretty, specs are in place def query + self.class.predicate_end_matcher ||= Regexp.new("(_#{Ransack.predicates.keys.join('|_')})$") mapped_query = {} (params[:q] || {}).each do |key, value| - key = "#{key}_eq" unless %w[s sorts].include?(key) or record_class.try(:ransackable_scopes).try(:include?, key.to_sym) or key =~ PREDICATE_END_MATCHER # expect equality when no predicate is given + key = "#{key}_eq" unless %w[s sorts].include?(key) or record_class.try(:ransackable_scopes).try(:include?, key.to_sym) or key =~ self.class.predicate_end_matcher # expect equality when no predicate is given if key =~ /^type_/ # map type to sti_type mapped_value = case value @@ -204,6 +206,9 @@ module Dunlop::Ember::ApiBaseController end def _render_with_renderer_json(resource, options = {}) + if resource == nil + return params[:id].blank? ? '{"data":[]}' : '{"data":null}' + end return resource.to_json if resource.is_a?(Hash) return resource if resource.is_a?(String)