Class: Redmine::Activity::Fetcher

Inherits:
Object
  • Object
show all
Defined in:
lib/redmine/activity/fetcher.rb

Overview

Class used to retrieve activity events

Constant Summary collapse

@@constantized_providers =

Needs to be unloaded in development mode

Hash.new {|h,k| h[k] = Redmine::Activity.providers[k].collect {|t| t.constantize } }

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(user, options = {}) ⇒ Fetcher

Returns a new instance of Fetcher.



27
28
29
30
31
32
33
34
# File 'lib/redmine/activity/fetcher.rb', line 27

def initialize(user, options={})
  options.assert_valid_keys(:project, :with_subprojects, :author)
  @user = user
  @project = options[:project]
  @options = options
  
  @scope = event_types
end

Instance Attribute Details

#projectObject (readonly)

Returns the value of attribute project.



22
23
24
# File 'lib/redmine/activity/fetcher.rb', line 22

def project
  @project
end

#scopeObject

Returns the value of attribute scope.



22
23
24
# File 'lib/redmine/activity/fetcher.rb', line 22

def scope
  @scope
end

#userObject (readonly)

Returns the value of attribute user.



22
23
24
# File 'lib/redmine/activity/fetcher.rb', line 22

def user
  @user
end

Instance Method Details

#default_scope!Object

Resets the scope to the default scope



64
65
66
# File 'lib/redmine/activity/fetcher.rb', line 64

def default_scope!
  @scope = Redmine::Activity.default_event_types
end

#event_typesObject

Returns an array of available event types



37
38
39
40
41
42
43
# File 'lib/redmine/activity/fetcher.rb', line 37

def event_types
  return @event_types unless @event_types.nil?
  
  @event_types = Redmine::Activity.available_event_types
  @event_types = @event_types.select {|o| @project.self_and_descendants.detect {|p| @user.allowed_to?("view_#{o}".to_sym, p)}} if @project
  @event_types
end

#events(from = nil, to = nil, options = {}) ⇒ Object

Returns an array of events for the given date range sorted in reverse chronological order



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/redmine/activity/fetcher.rb', line 70

def events(from = nil, to = nil, options={})
  e = []
  @options[:limit] = options[:limit]
  
  @scope.each do |event_type|
    constantized_providers(event_type).each do |provider|
      e += provider.find_events(event_type, @user, from, to, @options)
    end
  end
  
  e.sort! {|a,b| b.event_datetime <=> a.event_datetime}
  
  if options[:limit]
    e = e.slice(0, options[:limit])
  end
  e
end

#scope_select(&block) ⇒ Object

Yields to filter the activity scope



46
47
48
# File 'lib/redmine/activity/fetcher.rb', line 46

def scope_select(&block)
  @scope = @scope.select {|t| yield t }
end