Class: Reporter::Scope::ReferenceScope

Inherits:
Base
  • Object
show all
Defined in:
lib/reporter/scope/reference_scope.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(scoping, name, data_source, *args) ⇒ ReferenceScope

Returns a new instance of ReferenceScope.



3
4
5
6
7
8
9
# File 'lib/reporter/scope/reference_scope.rb', line 3

def initialize scoping, name, data_source, *args
	mappings = args.extract_options!
	mappings = create_mappings_for_object_type(data_source, args.first, mappings) if args.first
	super scoping, data_source, name, mappings
	@limiter = nil
	@id_collection = nil
end

Class Method Details

.possible_scopes(sources) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/reporter/scope/reference_scope.rb', line 61

def self.possible_scopes sources
	results = []
	# check reflections
	reflection_references = nil
	sources.each do |source|
		relations = source.relations_to_objects
		relation_pool = relations.keys + [source.active_record]
		reflection_references = reflection_references ? (reflection_references & relation_pool) : relation_pool
	end
	(reflection_references || []).each do |reflection_object|
		result_hash = { :type => :reference, :match => :loose, :object => reflection_object }
		sources.each do |source|
			fields = []
			fields << "id" if (source.active_record == reflection_object)
			fields += source.relations_to_objects[reflection_object] || []
			result_hash[source.model_name] = fields
		end
		results << result_hash
	end
	#Rails.logger.info reflection_references.inspect

	results
end

Instance Method Details

#apply_on(source) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/reporter/scope/reference_scope.rb', line 33

def apply_on source
	raise "No mapped column for source #{source}" unless mappings.has_key? source.name
	reference = mappings[source.name]

	limiter = group_object || @limiter
	if limiter
		q, values = limit_through_association source, reference, limiter
		source.where(q, values)
	else
		source
	end
end

#change(object) ⇒ Object



23
24
25
# File 'lib/reporter/scope/reference_scope.rb', line 23

def change object
	scoping.serialize_scope name, item
end

#group_objectObject



15
16
17
# File 'lib/reporter/scope/reference_scope.rb', line 15

def group_object
	scoping.unserialize_scope(name)
end

#human_nameObject



27
28
29
30
31
# File 'lib/reporter/scope/reference_scope.rb', line 27

def human_name
	limiter = group_object || @limiter
	return limiter.collect { |item| human_name_for item }.to_sentence if limiter.is_a? Enumerable
	human_name_for limiter
end

#iterate(items, data_set, &block) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/reporter/scope/reference_scope.rb', line 46

def iterate items, data_set, &block
	items ||= @limiter
	if items.is_a? Enumerable
		items.each do |item|
			scoping.serialize_scope name, item
			yield data_set.get_row
		end
		scoping.serialize_scope name, nil
	else
		scoping.serialize_scope name, items
		yield data_set.get_row
		scoping.serialize_scope name, nil
	end
end

#limit=(object_or_array) ⇒ Object



11
12
13
# File 'lib/reporter/scope/reference_scope.rb', line 11

def limit= object_or_array
	@limiter = object_or_array
end

#valueObject



19
20
21
# File 'lib/reporter/scope/reference_scope.rb', line 19

def value
	group_object || @limiter
end