Skip to content

Commit 26952d6

Browse files
committed
refs #40 reuse preloaded cache for supply/resource items
1 parent 78f7a5f commit 26952d6

File tree

4 files changed

+49
-13
lines changed

4 files changed

+49
-13
lines changed

lib/redmine_resource_manager/issue_patch.rb

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,20 @@ def self.apply
2121

2222

2323
def issue_human_resource_item_names
24-
IssueResourceItemsPresenter.new(issue_human_resource_items).to_s
24+
cached_items = instance_variable_get("@issue_human_resource_items")
25+
if !cached_items.nil?
26+
IssueResourceItemsPresenter.new(cached_items).to_s
27+
else
28+
IssueResourceItemsPresenter.new(issue_human_resource_items).to_s
29+
end
2530
end
2631
def issue_asset_resource_item_names
27-
IssueResourceItemsPresenter.new(issue_asset_resource_items).to_s
32+
cached_items = instance_variable_get("@issue_asset_resource_items")
33+
if !cached_items.nil?
34+
IssueResourceItemsPresenter.new(cached_items).to_s
35+
else
36+
IssueResourceItemsPresenter.new(issue_asset_resource_items).to_s
37+
end
2838
end
2939

3040
def issue_human_resource_items

lib/redmine_resource_manager/issue_resource_items_presenter.rb

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
module RedmineResourceManager
22
class IssueResourceItemsPresenter < RedmineSupply::Presenter
3-
def initialize(scope)
4-
@scope = scope.sorted
3+
def initialize(obj)
4+
if obj.instance_of?(Array)
5+
@scope = nil
6+
@issue_resource_items = obj
7+
else
8+
@scope = obj.sorted
9+
@issue_resource_items = @scope.to_a
10+
end
511
end
612

713
def call
8-
@scope.to_a.map{|ri| issue_resource_item_tag ri}
14+
@issue_resource_items.map{|ri| issue_resource_item_tag ri}
915
end
1016

1117
def to_s
Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
module RedmineSupply
22
class IssueSupplyItemsPresenter < Presenter
3-
def initialize(scope)
4-
@scope = scope.sorted
3+
def initialize(obj)
4+
if obj.instance_of?(Array)
5+
@scope = nil
6+
@issue_supply_items = obj
7+
else
8+
@scope = obj.sorted
9+
@issue_supply_items = @scope.to_a
10+
end
511
end
612

713
def call
8-
@scope.to_a.map{|isi| issue_supply_item_tag isi}
14+
@issue_supply_items.map{|isi| issue_supply_item_tag isi}
915
end
1016

1117
def to_s
@@ -16,7 +22,9 @@ def to_s
1622

1723
def issue_supply_item_tag(issue_supply_item)
1824
item = issue_supply_item.supply_item
19-
"#{h item.name} (#{h issue_supply_item.quantity} #{h item.unit_name})"
25+
# TODO: improve prealod cache logic
26+
unit_name = @scope.nil? ? item.custom_values.first.value : item.unit_name
27+
"#{h item.name} (#{h issue_supply_item.quantity} #{h unit_name})"
2028
end
2129
end
2230
end

lib/redmine_supply/patches/issue_patch.rb

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@ def self.apply
2222
end
2323

2424
def issue_supply_item_names
25-
IssueSupplyItemsPresenter.new(issue_supply_items).to_s
25+
cached_items = instance_variable_get("@issue_supply_items")
26+
if !cached_items.nil?
27+
IssueSupplyItemsPresenter.new(cached_items).to_s
28+
else
29+
IssueSupplyItemsPresenter.new(issue_supply_items).to_s
30+
end
2631
end
2732

2833
def issue_supply_items_attributes=(attributes = [])
@@ -62,7 +67,10 @@ module ClassMethods
6267
def load_issue_supply_items(issues, user=User.current)
6368
if issues.any?
6469
issue_ids = issues.map(&:id)
65-
_issue_supply_items = IssueSupplyItem.where(:issue_id => issue_ids)
70+
_issue_supply_items = IssueSupplyItem.includes(supply_item: [:custom_values]).
71+
where(:issue_id => issue_ids).
72+
order(:issue_id).
73+
order("#{SupplyItem.table_name}.name ASC").to_a
6674
issues.each do |issue|
6775
issue.instance_variable_set "@issue_supply_items", _issue_supply_items.select {|s| s.issue_id == issue.id}
6876
end
@@ -72,7 +80,9 @@ def load_issue_supply_items(issues, user=User.current)
7280
def load_issue_human_resource_items(issues, user=User.current)
7381
if issues.any?
7482
issue_ids = issues.map(&:id)
75-
_issue_human_resource_items = IssueResourceItem.where(resource_item_id: ResourceItem.humans.ids).where(:issue_id => issue_ids)
83+
_issue_human_resource_items = IssueResourceItem.includes(:resource_item).
84+
where(resource_items: {type: "Human"}).
85+
where(:issue_id => issue_ids).to_a
7686
issues.each do |issue|
7787
issue.instance_variable_set "@issue_human_resource_items", _issue_human_resource_items.select {|h| h.issue_id == issue.id}
7888
end
@@ -82,7 +92,9 @@ def load_issue_human_resource_items(issues, user=User.current)
8292
def load_issue_asset_resource_items(issues, user=User.current)
8393
if issues.any?
8494
issue_ids = issues.map(&:id)
85-
_issue_asset_resource_items = IssueResourceItem.where(resource_item_id: ResourceItem.assets.ids).where(:issue_id => issue_ids)
95+
_issue_asset_resource_items = IssueResourceItem.includes(:resource_item).
96+
where(resource_items: {type: "Asset"}).
97+
where(:issue_id => issue_ids).to_a
8698
issues.each do |issue|
8799
issue.instance_variable_set "@issue_asset_resource_items", _issue_asset_resource_items.select {|a| a.issue_id == issue.id}
88100
end

0 commit comments

Comments
 (0)