Module: Ditty::Helpers::Component
- Includes:
- ActiveSupport::Inflector
- Defined in:
- lib/ditty/helpers/component.rb
Instance Method Summary collapse
- #apply_filter(dataset, filter) ⇒ Object
- #base_path ⇒ Object
- #dataset ⇒ Object
- #dehumanized ⇒ Object
- #filter_association(filter) ⇒ Object
- #filter_field(filter) ⇒ Object
- #filter_value(filter) ⇒ Object
- #filtered(dataset) ⇒ Object
- #filters ⇒ Object
- #heading(action = nil) ⇒ Object
- #list ⇒ Object
- #search(dataset) ⇒ Object
- #search_filters ⇒ Object
- #searchable_fields ⇒ Object
Instance Method Details
#apply_filter(dataset, filter) ⇒ Object
61 62 63 64 65 66 |
# File 'lib/ditty/helpers/component.rb', line 61 def apply_filter(dataset, filter) value = params[filter[:name].to_s].send(filter[:modifier]) return dataset.where(filter[:field] => value) unless filter[:field].to_s.include? '.' dataset.where(filter_field(filter) => filter_value(filter)) end |
#base_path ⇒ Object
39 40 41 |
# File 'lib/ditty/helpers/component.rb', line 39 def base_path settings.base_path || "#{settings.map_path}/#{dasherize(view_location)}" end |
#dataset ⇒ Object
11 12 13 |
# File 'lib/ditty/helpers/component.rb', line 11 def dataset search(filtered(policy_scope(settings.model_class))) end |
#dehumanized ⇒ Object
35 36 37 |
# File 'lib/ditty/helpers/component.rb', line 35 def dehumanized settings.dehumanized || underscore(heading) end |
#filter_association(filter) ⇒ Object
80 81 82 83 84 85 |
# File 'lib/ditty/helpers/component.rb', line 80 def filter_association(filter) assoc = filter[:field].to_s.split('.').first.to_sym assoc = settings.model_class.association_reflection(assoc) raise "Unknown association #{assoc}" if assoc.nil? assoc end |
#filter_field(filter) ⇒ Object
68 69 70 |
# File 'lib/ditty/helpers/component.rb', line 68 def filter_field(filter) filter[:field].to_s.split('.').first.to_sym end |
#filter_value(filter) ⇒ Object
72 73 74 75 76 77 78 |
# File 'lib/ditty/helpers/component.rb', line 72 def filter_value(filter) field = filter[:field].to_s.split('.').last.to_sym assoc = filter_association(filter) value = params[filter[:name].to_s].send(filter[:modifier]) value = assoc.associated_dataset.first(field => value) value.nil? ? assoc.associated_class.new : value end |
#filtered(dataset) ⇒ Object
51 52 53 54 55 56 57 58 59 |
# File 'lib/ditty/helpers/component.rb', line 51 def filtered(dataset) filters.each do |filter| next if [nil, ''].include? params[filter[:name].to_s] filter[:field] ||= filter[:name] filter[:modifier] ||= :to_s dataset = apply_filter(dataset, filter) end dataset end |
#filters ⇒ Object
43 44 45 |
# File 'lib/ditty/helpers/component.rb', line 43 def filters self.class.const_defined?('FILTERS') ? self.class::FILTERS : [] end |
#heading(action = nil) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/ditty/helpers/component.rb', line 23 def heading(action = nil) @headings ||= begin heading = titleize(demodulize(settings.model_class)) h = Hash.new(heading) h[:new] = "New #{heading}" h[:list] = pluralize heading h[:edit] = "Edit #{heading}" h end @headings[action] end |
#list ⇒ Object
15 16 17 18 19 20 21 |
# File 'lib/ditty/helpers/component.rb', line 15 def list count = params['count'] || 10 page = params['page'] || 1 ds = dataset.select count == 'all' ? ds : ds.paginate(page.to_i, count.to_i) end |
#search(dataset) ⇒ Object
91 92 93 94 |
# File 'lib/ditty/helpers/component.rb', line 91 def search(dataset) return dataset if ['', nil].include?(params['q']) || searchable_fields == [] dataset.where Sequel.|(*search_filters) end |
#search_filters ⇒ Object
87 88 89 |
# File 'lib/ditty/helpers/component.rb', line 87 def search_filters searchable_fields.map { |f| Sequel.ilike(f.to_sym, "%#{params[:q]}%") } end |
#searchable_fields ⇒ Object
47 48 49 |
# File 'lib/ditty/helpers/component.rb', line 47 def searchable_fields self.class.const_defined?('SEARCHABLE') ? self.class::SEARCHABLE : [] end |