Skip to content

Commit

Permalink
more customization options
Browse files Browse the repository at this point in the history
  • Loading branch information
berk committed Sep 12, 2016
1 parent 0b372bd commit ebd8410
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 10 deletions.
14 changes: 10 additions & 4 deletions app/models/will_filter/filter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -164,22 +164,24 @@ def inner_joins
end

def model_columns
model_class.columns
@model_columns ||= model_class.columns
end

def model_column_keys
model_columns.collect{|col| col.name.to_sym}
@model_column_keys ||= model_columns.collect{|col| col.name.to_sym}
end

def contains_column?(key)
model_column_keys.index(key) != nil
model_column_keys.index(key.to_sym) != nil
end

def definition
@definition ||= begin
defs = {}
model_columns.each do |col|
defs[col.name.to_sym] = default_condition_definition_for(col.name, col.sql_type)
key = col.name.to_sym
next unless contains_column?(key)
defs[key] = default_condition_definition_for(col.name, col.sql_type)
end
inner_joins.each do |inner_join|
join_class = association_class(inner_join)
Expand Down Expand Up @@ -236,6 +238,10 @@ def default_condition_definition_for(name, sql_data_type)
operators
end

def model_class_for_column_key(key)
nil
end

def sorted_operators(opers)
(WillFilter::Config.operator_order & opers.keys.collect{|o| o.to_s})
end
Expand Down
17 changes: 11 additions & 6 deletions lib/will_filter/containers/filter_list.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,30 +36,35 @@ class FilterList < WillFilter::FilterContainer
def self.operators
[:is_filtered_by]
end

def validate
return "Value must be provided" if value.blank?
end

def template_name
'list'
end

def linked_filter
@linked_filter ||= begin
if condition.key == :id
model_class = filter.model_class_for_column_key(condition.key)

if model_class
model_class_name = model_class.name
elsif condition.key == :id
model_class_name = filter.model_class_name
else
model_class_name = condition.key.to_s[0..-4].camelcase
end

WillFilter::Filter.new(model_class_name)
end
end

def options
linked_filter.saved_filters(false)
end

def sql_condition
return nil unless operator == :is_filtered_by
sub_filter = WillFilter::Filter.find_by_id(value) || linked_filter.user_filters.first
Expand All @@ -71,7 +76,7 @@ def sql_condition
sub_conds[0] = " #{condition.full_key} IN (SELECT #{sub_filter.table_name}.id FROM #{sub_filter.table_name}) "
else
sub_conds[0] = " #{condition.full_key} IN (SELECT #{sub_filter.table_name}.id FROM #{sub_filter.table_name} WHERE #{sub_conds[0]}) "
end
end

sub_conds
end
Expand Down

0 comments on commit ebd8410

Please sign in to comment.