Class: Redmine::Activity::Fetcher

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

Overview

Class used to retrieve activity events

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

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

Returns a new instance of Fetcher.



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

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.



24
25
26
# File 'lib/redmine/activity/fetcher.rb', line 24

def project
  @project
end

#scopeObject

Returns the value of attribute scope.



24
25
26
# File 'lib/redmine/activity/fetcher.rb', line 24

def scope
  @scope
end

#userObject (readonly)

Returns the value of attribute user.



24
25
26
# File 'lib/redmine/activity/fetcher.rb', line 24

def user
  @user
end

Instance Method Details

#default_scope!Object

Resets the scope to the default scope



81
82
83
# File 'lib/redmine/activity/fetcher.rb', line 81

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

#event_typesObject

Returns an array of available event types



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/redmine/activity/fetcher.rb', line 36

def event_types
  return @event_types unless @event_types.nil?

  @event_types = Redmine::Activity.available_event_types
  if @project
    projects = @project.self_and_descendants
    @event_types = @event_types.select do |event_type|
      keep = false
      constantized_providers(event_type).each do |provider|
        options = provider.activity_provider_options[event_type]
        permission = options[:permission]
        unless options.key?(:permission)
          permission ||= "view_#{event_type}".to_sym
        end
        if permission
          keep |= projects.any? {|p| @user.allowed_to?(permission, p)}
        else
          keep = true
        end
      end
      keep
    end
  end
  @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



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/redmine/activity/fetcher.rb', line 87

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



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

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