From 66ce152d5124be52f31d51fc4171fd53ba3a915c Mon Sep 17 00:00:00 2001 From: jessib Date: Tue, 18 Dec 2012 13:45:49 -0800 Subject: Refactoring of code to filter/order tickets. --- help/app/models/ticket_selection.rb | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 help/app/models/ticket_selection.rb (limited to 'help/app/models/ticket_selection.rb') diff --git a/help/app/models/ticket_selection.rb b/help/app/models/ticket_selection.rb new file mode 100644 index 0000000..77720f7 --- /dev/null +++ b/help/app/models/ticket_selection.rb @@ -0,0 +1,38 @@ +class TicketSelection + + def initialize(options = {}) + @options = options + end + + def finder_method + method = 'by_' + method += 'includes_post_by_and_' if !@options[:is_admin] or (@options[:admin_status] == 'mine') + method += 'is_open_and_' if @options[:open_status] != 'all' + method += @options[:sort_order].sub(/_(de|a)sc$/, '') + end + + def startkey + startkeys = [] + startkeys << @options[:user_id] if !@options[:is_admin] or (@options[:admin_status] == 'mine') + startkeys << (@options[:open_status] == 'open') if @options[:open_status] != 'all' + startkeys << 0 + startkeys = startkeys.join if startkeys.length == 1 #want string not array if just one thing in array + startkeys + end + + def endkey + endtime = Time.now + 2.days #TODO + if self.startkey.is_a?(Array) + endkeys = self.startkey + endkeys.pop + endkeys << endtime + else + endtime + end + end + + def order + 'descending' if @options[:sort_order].end_with? 'desc' + end + +end -- cgit v1.2.3 From d6c881294880a934424e4d399786561d5c107167 Mon Sep 17 00:00:00 2001 From: jessib Date: Wed, 19 Dec 2012 11:13:50 -0800 Subject: Some cleanup of code --- help/app/models/ticket_selection.rb | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'help/app/models/ticket_selection.rb') diff --git a/help/app/models/ticket_selection.rb b/help/app/models/ticket_selection.rb index 77720f7..cb20f5b 100644 --- a/help/app/models/ticket_selection.rb +++ b/help/app/models/ticket_selection.rb @@ -2,18 +2,33 @@ class TicketSelection def initialize(options = {}) @options = options + @options[:open_status] ||= 'open' + @options[:sort_order] ||= 'updated_at_desc' + + end + + def tickets + #TODO: can this be more succinct? + if order + Ticket.send(finder_method).startkey(startkey).endkey(endkey).send(order) + else + Ticket.send(finder_method).startkey(startkey).endkey(endkey) + end end + protected + + def finder_method method = 'by_' - method += 'includes_post_by_and_' if !@options[:is_admin] or (@options[:admin_status] == 'mine') + method += 'includes_post_by_and_' if only_mine? method += 'is_open_and_' if @options[:open_status] != 'all' method += @options[:sort_order].sub(/_(de|a)sc$/, '') end def startkey startkeys = [] - startkeys << @options[:user_id] if !@options[:is_admin] or (@options[:admin_status] == 'mine') + startkeys << @options[:user_id] if only_mine? startkeys << (@options[:open_status] == 'open') if @options[:open_status] != 'all' startkeys << 0 startkeys = startkeys.join if startkeys.length == 1 #want string not array if just one thing in array @@ -21,7 +36,7 @@ class TicketSelection end def endkey - endtime = Time.now + 2.days #TODO + endtime = Time.now + 2.days #TODO. this obviously isn't ideal if self.startkey.is_a?(Array) endkeys = self.startkey endkeys.pop @@ -35,4 +50,9 @@ class TicketSelection 'descending' if @options[:sort_order].end_with? 'desc' end + + def only_mine? + !@options[:is_admin] or (@options[:admin_status] == 'mine') + end + end -- cgit v1.2.3