Class: Maruto::MagentoConfig

Inherits:
Object
  • Object
show all
Includes:
TSort
Defined in:
lib/maruto/magento_config.rb

Instance Method Summary collapse

Constructor Details

#initialize(magento_root) ⇒ MagentoConfig

Returns a new instance of MagentoConfig.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/maruto/magento_config.rb', line 7

def initialize(magento_root)

	@modules = {}

	@global_model_groups = {}
	@global_events_observers = {}

	@warnings = []

	Dir.chdir(magento_root) do

		# load module definitions
		Dir.glob('app/etc/modules/*.xml') do |file|
			f = File.open(file)
			doc = Nokogiri::XML(f) { |config| config.strict }
			f.close

			doc.xpath('//modules/*').each do |node|
				load_module_definition(file, node)
			end
		end

		# sort modules dependency graph, then load their config
		modules().each do |mm_name, mm_config|
			if mm_config[:active] then
				# check dependencies
				mm_config[:dependencies].each do |dep|
					@warnings << "module:#{mm_name} - missing dependency (#{dep})" unless is_active_module?(dep)
				end

				# puts mm_name
				# puts mm_config

				config_path = "app/code/#{mm_config[:code_pool]}/#{mm_name.gsub(/_/, '/')}/etc/config.xml"

				if !File.exist?(config_path)
					# duplicate warning see new code in module_definition.rb
					# @warnings << "module:#{mm_name} is defined (#{mm_config[:defined]}) but does not exists (#{config_path})"
					next
				end

				f = File.open(config_path)
				doc = Nokogiri::XML(f) { |config| config.strict }
				f.close

				mm_config[:version] = doc.at_xpath("/config/modules/#{mm_name}/version").content if doc.at_xpath("/config/modules/#{mm_name}/version")

				##########################################################################################
				# MODELS

				doc.xpath('/config/global/models/*').each do |node|
					load_model(mm_name, node)
				end

				if mm_name.start_with? "Mage_" then
					# special case for Mage_NAME modules: if not defined, fallback to Mage_Model_NAME
					group_name = mm_name.sub("Mage_", "").downcase
					if !@global_model_groups.include? group_name then
						@global_model_groups[group_name] = {
							:class   => "#{mm_name}_Model",
							:defined => :fallback,
						}
					end
					if !@global_model_groups[group_name][:class] then
						# TODO warn? => missing dep?
						@global_model_groups[group_name][:class]   = "#{mm_name}_Model"
						@global_model_groups[group_name][:defined] = :fallback
					end
				end

			end
		end # modules().each

		# check if all model_groups have a class attribute
		# TODO write test
		@global_model_groups.each do |group_name, model_group|
			if !model_group[:class] && !group_name.end_with?('_mysql4') then
				@warnings << "module:#{model_group[:define]} model_group:#{group_name} - missing class attribute for model"
			end
		end

	end # Dir.chdir(magento_root)
end

Instance Method Details

#is_active_module?(name) ⇒ Boolean

Returns:

  • (Boolean)


103
104
105
# File 'lib/maruto/magento_config.rb', line 103

def is_active_module?(name)
	@modules.include?(name) && @modules[name][:active]
end

#modelsObject



95
96
97
# File 'lib/maruto/magento_config.rb', line 95

def models()
	@global_model_groups
end

#modulesObject



91
92
93
# File 'lib/maruto/magento_config.rb', line 91

def modules()
	Hash[tsort.map { |name| [name, @modules[name]] }]
end

#observersObject



99
100
101
# File 'lib/maruto/magento_config.rb', line 99

def observers()
	@global_events_observers
end


107
108
109
# File 'lib/maruto/magento_config.rb', line 107

def print_module(name)
	puts @modules[name]
end


111
112
113
# File 'lib/maruto/magento_config.rb', line 111

def print_warnings()
	puts @warnings
end

#tsort_each_child(node, &block) ⇒ Object



119
120
121
# File 'lib/maruto/magento_config.rb', line 119

def tsort_each_child(node, &block)
	@modules[node][:dependencies].each(&block)
end

#tsort_each_node(&block) ⇒ Object



115
116
117
# File 'lib/maruto/magento_config.rb', line 115

def tsort_each_node(&block)
	@modules.each_key(&block)
end