RDI 0.1.0.20091020
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/AUTHORS +3 -0
- data/ChangeLog +46 -0
- data/Credits +21 -0
- data/LICENSE +31 -0
- data/README +18 -0
- data/TODO +17 -0
- data/lib/rdi/Installer.rb +678 -0
- data/lib/rdi/Model/ContextModifier.rb +20 -0
- data/lib/rdi/Model/DependencyDescription.rb +154 -0
- data/lib/rdi/Model/DependencyUserChoice.rb +202 -0
- data/lib/rdi/Model/Installer.rb +24 -0
- data/lib/rdi/Model/LocationSelector.rb +16 -0
- data/lib/rdi/Model/ProgressView.rb +16 -0
- data/lib/rdi/Model/Tester.rb +20 -0
- data/lib/rdi/Model/View.rb +16 -0
- data/lib/rdi/Plugins/ContextModifiers/GemPath.desc.rb +13 -0
- data/lib/rdi/Plugins/ContextModifiers/GemPath.rb +106 -0
- data/lib/rdi/Plugins/ContextModifiers/LibraryPath.rb +74 -0
- data/lib/rdi/Plugins/ContextModifiers/RubyLoadPath.rb +76 -0
- data/lib/rdi/Plugins/ContextModifiers/SystemPath.rb +74 -0
- data/lib/rdi/Plugins/GemCommon.rb +127 -0
- data/lib/rdi/Plugins/Installers/Download.rb +72 -0
- data/lib/rdi/Plugins/Installers/DownloadAndInstall.desc.rb +11 -0
- data/lib/rdi/Plugins/Installers/DownloadAndInstall.rb +54 -0
- data/lib/rdi/Plugins/Installers/Gem.desc.rb +13 -0
- data/lib/rdi/Plugins/Installers/Gem.rb +67 -0
- data/lib/rdi/Plugins/Installers/Icons/Download.png +0 -0
- data/lib/rdi/Plugins/Installers/Icons/DownloadAndInstall.png +0 -0
- data/lib/rdi/Plugins/Installers/Icons/Gem.png +0 -0
- data/lib/rdi/Plugins/Installers/Yum.rb +52 -0
- data/lib/rdi/Plugins/ProgressViews/SimpleWxGUI.desc.rb +13 -0
- data/lib/rdi/Plugins/ProgressViews/SimpleWxGUI.rb +58 -0
- data/lib/rdi/Plugins/ProgressViews/Text.rb +68 -0
- data/lib/rdi/Plugins/RubyGemsDepDesc.rb +41 -0
- data/lib/rdi/Plugins/Testers/Binaries.rb +56 -0
- data/lib/rdi/Plugins/Testers/DynamicLibraries.rb +56 -0
- data/lib/rdi/Plugins/Testers/RubyRequires.rb +76 -0
- data/lib/rdi/Plugins/Views/SimpleWxGUI/DependenciesLoaderDialog.rb +147 -0
- data/lib/rdi/Plugins/Views/SimpleWxGUI/DependencyPanel.rb +301 -0
- data/lib/rdi/Plugins/Views/SimpleWxGUI/Icons/Dependency.png +0 -0
- data/lib/rdi/Plugins/Views/SimpleWxGUI/Icons/Ignore.png +0 -0
- data/lib/rdi/Plugins/Views/SimpleWxGUI/Icons/ValidKO.png +0 -0
- data/lib/rdi/Plugins/Views/SimpleWxGUI/Icons/ValidOK.png +0 -0
- data/lib/rdi/Plugins/Views/SimpleWxGUI/LocationSelectors/Directory.desc.rb +13 -0
- data/lib/rdi/Plugins/Views/SimpleWxGUI/LocationSelectors/Directory.rb +45 -0
- data/lib/rdi/Plugins/Views/SimpleWxGUI.desc.rb +13 -0
- data/lib/rdi/Plugins/Views/SimpleWxGUI.rb +60 -0
- data/lib/rdi/Plugins/Views/Text/LocationSelectors/Directory.rb +44 -0
- data/lib/rdi/Plugins/Views/Text.rb +257 -0
- data/lib/rdi/Plugins/WxCommon.rb +69 -0
- data/lib/rdi/Plugins/WxRubyDepDesc.rb +36 -0
- data/lib/rdi/rdi.rb +8 -0
- data/test/Common.rb +796 -0
- data/test/Flows/BasicFlows.rb +114 -0
- data/test/Flows/UIFlows.rb +460 -0
- data/test/Plugins/ContextModifiers/GemPath.rb +44 -0
- data/test/Plugins/ContextModifiers/LibraryPath.rb +36 -0
- data/test/Plugins/ContextModifiers/RubyLoadPath.rb +36 -0
- data/test/Plugins/ContextModifiers/SystemPath.rb +36 -0
- data/test/Plugins/Installers/Download.rb +65 -0
- data/test/Plugins/Installers/DownloadAndInstall.rb +73 -0
- data/test/Plugins/Installers/Gem.rb +79 -0
- data/test/Plugins/LocationSelectors/Directory.rb +34 -0
- data/test/Plugins/Testers/Binaries.rb +46 -0
- data/test/Plugins/Testers/DynamicLibraries.rb +46 -0
- data/test/Plugins/Testers/RubyRequires.rb +48 -0
- data/test/Plugins/Views/SimpleWxGUI.rb +190 -0
- data/test/Plugins/Views/Text.rb +112 -0
- data/test/Plugins/WxEnv.rb +58 -0
- data/test/Plugins/WxEnvApp.rb +53 -0
- data/test/Repository/Binaries/DummyBinary +1 -0
- data/test/Repository/Libraries/DummyLibrary.so +1 -0
- data/test/Repository/RubyGems/DummyGem-0.0.1.20090828.gem +0 -0
- data/test/Repository/RubyGems/GemsSources/DummyGem/DummyGem.gemspec.rb +23 -0
- data/test/Repository/RubyGems/GemsSources/DummyGem/lib/DummyGemMain.rb +5 -0
- data/test/Repository/RubyLibraries/DummyRubyLib.rb +1 -0
- data/test/run.rb +23 -0
- metadata +145 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
|
3
|
+
# Licensed under the terms specified in LICENSE file. No warranty is provided.
|
4
|
+
#++
|
5
|
+
|
6
|
+
require 'rdi/Plugins/WxRubyDepDesc'
|
7
|
+
|
8
|
+
{
|
9
|
+
:Dependencies => [
|
10
|
+
# WxRuby
|
11
|
+
::RDI::getWxRubyDepDesc
|
12
|
+
]
|
13
|
+
}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
|
3
|
+
# Licensed under the terms specified in LICENSE file. No warranty is provided.
|
4
|
+
#++
|
5
|
+
|
6
|
+
require 'rdi/Model/LocationSelector'
|
7
|
+
|
8
|
+
module RDI
|
9
|
+
|
10
|
+
module Views
|
11
|
+
|
12
|
+
module LocationSelectors
|
13
|
+
|
14
|
+
module SimpleWxGUI
|
15
|
+
|
16
|
+
class Directory < RDI::Model::LocationSelector
|
17
|
+
|
18
|
+
# Give user the choice of a new location
|
19
|
+
#
|
20
|
+
# Return:
|
21
|
+
# * _Object_: A location, or nil if none selected
|
22
|
+
def getNewLocation
|
23
|
+
rLocation = nil
|
24
|
+
|
25
|
+
require 'rdi/Plugins/WxCommon'
|
26
|
+
RDI::Views::RDIWx.ensureWxApp do
|
27
|
+
showModal(Wx::DirDialog, nil) do |iModalResult, iDialog|
|
28
|
+
if (iModalResult == Wx::ID_OK)
|
29
|
+
rLocation = iDialog.path
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
return rLocation
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
|
3
|
+
# Licensed under the terms specified in LICENSE file. No warranty is provided.
|
4
|
+
#++
|
5
|
+
|
6
|
+
require 'rdi/Plugins/WxRubyDepDesc'
|
7
|
+
|
8
|
+
{
|
9
|
+
:Dependencies => [
|
10
|
+
# WxRuby
|
11
|
+
::RDI::getWxRubyDepDesc
|
12
|
+
]
|
13
|
+
}
|
@@ -0,0 +1,60 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
|
3
|
+
# Licensed under the terms specified in LICENSE file. No warranty is provided.
|
4
|
+
#++
|
5
|
+
|
6
|
+
require 'rdi/Model/View'
|
7
|
+
|
8
|
+
module RDI
|
9
|
+
|
10
|
+
module Views
|
11
|
+
|
12
|
+
class SimpleWxGUI < RDI::Model::View
|
13
|
+
|
14
|
+
# Ask the user about missing dependencies.
|
15
|
+
# This method will use a user interface to know what to do with missing dependencies.
|
16
|
+
# For each dependency, choices are:
|
17
|
+
# * Install it
|
18
|
+
# * Ignore it
|
19
|
+
# * Change the context to find it (select directory...)
|
20
|
+
#
|
21
|
+
# Parameters:
|
22
|
+
# * *ioInstaller* (_Installer_): The RDI installer
|
23
|
+
# * *iMissingDependencies* (<em>list<DependencyDescription></em>): The missing dependencies list
|
24
|
+
# Return:
|
25
|
+
# * <em>list<DependencyUserChoice></em>: The corresponding user choices
|
26
|
+
def execute(ioInstaller, iMissingDependencies)
|
27
|
+
# List of corresponding dependencies user choices
|
28
|
+
# list< DependencyUserChoice >
|
29
|
+
rDependenciesUserChoices = []
|
30
|
+
|
31
|
+
# Initialize the list
|
32
|
+
iMissingDependencies.each do |iDepDesc|
|
33
|
+
rDependenciesUserChoices << RDI::Model::DependencyUserChoice.new(ioInstaller, 'SimpleWxGUI', iDepDesc)
|
34
|
+
end
|
35
|
+
# Display the dialog
|
36
|
+
require 'rdi/Plugins/Views/SimpleWxGUI/DependenciesLoaderDialog'
|
37
|
+
if (defined?(showModal) == nil)
|
38
|
+
require 'RUtilAnts/GUI'
|
39
|
+
RUtilAnts::GUI.initializeGUI
|
40
|
+
end
|
41
|
+
if (defined?($rUtilAnts_URLCache) == nil)
|
42
|
+
require 'RUtilAnts/URLCache'
|
43
|
+
RUtilAnts::URLCache.initializeURLCache
|
44
|
+
end
|
45
|
+
# If an application is already running, use it
|
46
|
+
require 'rdi/Plugins/WxCommon'
|
47
|
+
RDI::Views::RDIWx.ensureWxApp do
|
48
|
+
showModal(DependenciesLoaderDialog, nil, ioInstaller, rDependenciesUserChoices) do |iModalResult, iDialog|
|
49
|
+
# Nothing to do
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
return rDependenciesUserChoices
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
|
3
|
+
# Licensed under the terms specified in LICENSE file. No warranty is provided.
|
4
|
+
#++
|
5
|
+
|
6
|
+
require 'rdi/Model/LocationSelector'
|
7
|
+
|
8
|
+
module RDI
|
9
|
+
|
10
|
+
module Views
|
11
|
+
|
12
|
+
module LocationSelectors
|
13
|
+
|
14
|
+
module Text
|
15
|
+
|
16
|
+
class Directory < RDI::Model::LocationSelector
|
17
|
+
|
18
|
+
# Give user the choice of a new location
|
19
|
+
#
|
20
|
+
# Return:
|
21
|
+
# * _Object_: A location, or nil if none selected
|
22
|
+
def getNewLocation
|
23
|
+
rLocation = nil
|
24
|
+
|
25
|
+
puts 'Please enter a directory name (Ctrl-C to cancel):'
|
26
|
+
$stdout.write('-Directory-> ')
|
27
|
+
begin
|
28
|
+
rLocation = $stdin.gets.chomp
|
29
|
+
rescue Exception
|
30
|
+
rLocation = nil
|
31
|
+
end
|
32
|
+
|
33
|
+
return rLocation
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,257 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
|
3
|
+
# Licensed under the terms specified in LICENSE file. No warranty is provided.
|
4
|
+
#++
|
5
|
+
|
6
|
+
require 'rdi/Model/View'
|
7
|
+
|
8
|
+
module RDI
|
9
|
+
|
10
|
+
module Views
|
11
|
+
|
12
|
+
class Text < RDI::Model::View
|
13
|
+
|
14
|
+
# Ask the user about missing dependencies.
|
15
|
+
# This method will use a user interface to know what to do with missing dependencies.
|
16
|
+
# For each dependency, choices are:
|
17
|
+
# * Install it
|
18
|
+
# * Ignore it
|
19
|
+
# * Change the context to find it (select directory...)
|
20
|
+
#
|
21
|
+
# Parameters:
|
22
|
+
# * *ioInstaller* (_Installer_): The RDI installer
|
23
|
+
# * *iMissingDependencies* (<em>list<DependencyDescription></em>): The missing dependencies list
|
24
|
+
# Return:
|
25
|
+
# * <em>list<DependencyUserChoice></em>: The corresponding user choices
|
26
|
+
def execute(ioInstaller, iMissingDependencies)
|
27
|
+
# List of corresponding dependencies user choices
|
28
|
+
# list< DependencyUserChoice >
|
29
|
+
rDependenciesUserChoices = []
|
30
|
+
|
31
|
+
# Fill it from the beginning
|
32
|
+
iMissingDependencies.each do |iDepDesc|
|
33
|
+
rDependenciesUserChoices << RDI::Model::DependencyUserChoice.new(ioInstaller, 'Text', iDepDesc)
|
34
|
+
end
|
35
|
+
# Start looping unless user validates its choices
|
36
|
+
lExit = false
|
37
|
+
while (!lExit)
|
38
|
+
display(ioInstaller, iMissingDependencies, rDependenciesUserChoices)
|
39
|
+
# Wait for input
|
40
|
+
$stdout.write('Please enter choice number -> ')
|
41
|
+
lUserChoiceText = $stdin.gets
|
42
|
+
# Parse user choice
|
43
|
+
lInvalid = false
|
44
|
+
# Check that we have an array of integers not 0
|
45
|
+
lUserChoice = lUserChoiceText.chomp('.').chomp.split('.').map do |iElem|
|
46
|
+
lInt = iElem.to_i
|
47
|
+
if (lInt == 0)
|
48
|
+
lInvalid = true
|
49
|
+
end
|
50
|
+
next lInt
|
51
|
+
end
|
52
|
+
if (!lInvalid)
|
53
|
+
# Check that each value does not exceed maximal value
|
54
|
+
if ((lUserChoice.empty?) or
|
55
|
+
(lUserChoice[0] > iMissingDependencies.size + 1))
|
56
|
+
lInvalid = true
|
57
|
+
elsif (lUserChoice[0] == iMissingDependencies.size + 1)
|
58
|
+
if (lUserChoice.size == 1)
|
59
|
+
# We want to apply those choices
|
60
|
+
lExit = true
|
61
|
+
else
|
62
|
+
lInvalid = true
|
63
|
+
end
|
64
|
+
else
|
65
|
+
# A given dependency has been selected
|
66
|
+
lDepDesc = iMissingDependencies[lUserChoice[0]-1]
|
67
|
+
lDepUserChoice = rDependenciesUserChoices[lUserChoice[0]-1]
|
68
|
+
case lUserChoice[1]
|
69
|
+
when 1
|
70
|
+
# Ask to modify the context somewhere
|
71
|
+
if (lUserChoice.size == 2)
|
72
|
+
# Just select that we locate it
|
73
|
+
lDepUserChoice.setLocate
|
74
|
+
else
|
75
|
+
# We try to use a given ContextModifier
|
76
|
+
if (lUserChoice.size == 3)
|
77
|
+
if (lUserChoice[2] > lDepUserChoice.AffectingContextModifiers.size)
|
78
|
+
lInvalid = true
|
79
|
+
else
|
80
|
+
# Select a new location for the given context modifier
|
81
|
+
lDepUserChoice.affectContextModifier(lDepUserChoice.AffectingContextModifiers[lUserChoice[2]-1])
|
82
|
+
end
|
83
|
+
else
|
84
|
+
lInvalid = true
|
85
|
+
end
|
86
|
+
end
|
87
|
+
when 2
|
88
|
+
# Ask to ignore the dependency
|
89
|
+
if (lUserChoice.size == 2)
|
90
|
+
lDepUserChoice.setIgnore
|
91
|
+
else
|
92
|
+
lInvalid = true
|
93
|
+
end
|
94
|
+
when 3
|
95
|
+
# Ask to install the dependency
|
96
|
+
if (lUserChoice.size == 4)
|
97
|
+
if (lUserChoice[2] > lDepDesc.Installers.size)
|
98
|
+
lInvalid = true
|
99
|
+
else
|
100
|
+
lInstallerName, lInstallerContent, lContextModifiers = lDepDesc.Installers[lUserChoice[2]-1]
|
101
|
+
# Access the possible destinations
|
102
|
+
ioInstaller.accessPlugin('Installers', lInstallerName) do |ioPlugin|
|
103
|
+
if (lUserChoice[3] > ioPlugin.PossibleDestinations.size)
|
104
|
+
lInvalid = true
|
105
|
+
else
|
106
|
+
lDepUserChoice.setInstaller(lUserChoice[2]-1, lUserChoice[3]-1)
|
107
|
+
# Check if it is a DEST_OTHER flavour
|
108
|
+
if (ioPlugin.PossibleDestinations[lUserChoice[3]-1][0] == DEST_OTHER)
|
109
|
+
# Replace the other location of this dependency
|
110
|
+
if (!lDepUserChoice.selectOtherInstallLocation(ioPlugin.PossibleDestinations[lUserChoice[3]-1][1]))
|
111
|
+
lDepUserChoice.setInstaller(lUserChoice[2]-1, 0)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
else
|
118
|
+
lInvalid = true
|
119
|
+
end
|
120
|
+
else
|
121
|
+
lInvalid = true
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
# Now either store the last selection
|
126
|
+
if (lInvalid)
|
127
|
+
puts "Invalid selection. Please type the selection correctly (i.e. 1.3.2)"
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
return rDependenciesUserChoices
|
132
|
+
end
|
133
|
+
|
134
|
+
private
|
135
|
+
|
136
|
+
# Display the current state
|
137
|
+
#
|
138
|
+
# Parameters:
|
139
|
+
# * *ioInstaller* (_Installer_): The RDI installer
|
140
|
+
# * *iMissingDependencies* (<em>list<DependencyDescription></em>): The missing dependencies list
|
141
|
+
# * *iDepsUserChoices* (<em>list<DependencyUserChoice></em>): The corresponding user choices
|
142
|
+
def display(ioInstaller, iMissingDependencies, iDepsUserChoices)
|
143
|
+
lIdxMissingDeps = 1
|
144
|
+
iMissingDependencies.each do |iDepDesc|
|
145
|
+
lDepID = iDepDesc.ID
|
146
|
+
# Get the dependency info
|
147
|
+
lDepUserChoice = iDepsUserChoices[lIdxMissingDeps-1]
|
148
|
+
# Check the state of this dependency
|
149
|
+
lStateText = ''
|
150
|
+
lLocateChoice = ' '
|
151
|
+
lIgnoreChoice = ' '
|
152
|
+
lInstallChoice = ' '
|
153
|
+
if (lDepUserChoice.Locate)
|
154
|
+
# To be located
|
155
|
+
lLocateChoice = '*'
|
156
|
+
# Check if the Testers are all resolved
|
157
|
+
if (lDepUserChoice.ResolvedTesters.size == iDepDesc.Testers.size)
|
158
|
+
lStateText = 'Found'
|
159
|
+
else
|
160
|
+
lStateText = 'Locate incomplete'
|
161
|
+
end
|
162
|
+
elsif (lDepUserChoice.Ignore)
|
163
|
+
# To be ignored
|
164
|
+
lIgnoreChoice = '*'
|
165
|
+
lStateText = 'Ignore'
|
166
|
+
else
|
167
|
+
# To be installed
|
168
|
+
lInstallChoice = '*'
|
169
|
+
lStateText = 'Install'
|
170
|
+
end
|
171
|
+
# Display title
|
172
|
+
puts "#{lIdxMissingDeps}. [ #{lStateText} ] #{lDepID}"
|
173
|
+
puts ''
|
174
|
+
# Display the "Locate it" choice
|
175
|
+
puts " #{lIdxMissingDeps}.1. (#{lLocateChoice}) Locate it"
|
176
|
+
lIdxTester = 0
|
177
|
+
iDepDesc.Testers.each do |iTesterInfo|
|
178
|
+
iTesterName, iTesterContent = iTesterInfo
|
179
|
+
# Check the state of this tester
|
180
|
+
lTesterText = nil
|
181
|
+
if (lDepUserChoice.ResolvedTesters.has_key?(lIdxTester))
|
182
|
+
lTesterText = 'Found'
|
183
|
+
else
|
184
|
+
lTesterText = 'Missing'
|
185
|
+
end
|
186
|
+
puts " [ #{lTesterText} ] #{iTesterName} - #{iTesterContent}"
|
187
|
+
lIdxTester += 1
|
188
|
+
end
|
189
|
+
# Display the choices for location
|
190
|
+
lIdxACM = 1
|
191
|
+
lDepUserChoice.AffectingContextModifiers.each do |iCMName|
|
192
|
+
puts " #{lIdxMissingDeps}.1.#{lIdxACM}. Add location to #{iCMName}"
|
193
|
+
lIdxACM += 1
|
194
|
+
end
|
195
|
+
puts ''
|
196
|
+
# Display the "Ignore it" choice
|
197
|
+
puts " #{lIdxMissingDeps}.2. (#{lIgnoreChoice}) Ignore it"
|
198
|
+
puts ''
|
199
|
+
# Display the "Install it" choice
|
200
|
+
puts " #{lIdxMissingDeps}.3. (#{lInstallChoice}) Install it"
|
201
|
+
lIdxInstaller = 1
|
202
|
+
iDepDesc.Installers.each do |iInstallerInfo|
|
203
|
+
iInstallerName, iInstallerContent, iContextModifiers = iInstallerInfo
|
204
|
+
lInstallSelectionText = ' '
|
205
|
+
if (lDepUserChoice.IdxInstaller == lIdxInstaller-1)
|
206
|
+
lInstallSelectionText = '*'
|
207
|
+
end
|
208
|
+
puts " #{lIdxMissingDeps}.3.#{lIdxInstaller}. (#{lInstallSelectionText}) #{iInstallerName} - #{iInstallerContent}"
|
209
|
+
puts ' Install in:'
|
210
|
+
ioInstaller.accessPlugin('Installers', iInstallerName) do |iPlugin|
|
211
|
+
lIdxDest = 1
|
212
|
+
iPlugin.PossibleDestinations.each do |iDestInfo|
|
213
|
+
iDestFlavour, iDestLocation = iDestInfo
|
214
|
+
lFlavourText = nil
|
215
|
+
lDestLocation = iDestLocation
|
216
|
+
case iDestFlavour
|
217
|
+
when DEST_LOCAL
|
218
|
+
lFlavourText = 'Local'
|
219
|
+
when DEST_SYSTEM
|
220
|
+
lFlavourText = 'System'
|
221
|
+
when DEST_USER
|
222
|
+
lFlavourText = 'User'
|
223
|
+
when DEST_TEMP
|
224
|
+
lFlavourText = 'Temporary'
|
225
|
+
when DEST_OTHER
|
226
|
+
lFlavourText = 'Other'
|
227
|
+
if (lDepUserChoice.IdxInstaller == lIdxInstaller-1)
|
228
|
+
lDestLocation = lDepUserChoice.OtherLocation
|
229
|
+
else
|
230
|
+
lDestLocation = 'Choose'
|
231
|
+
end
|
232
|
+
else
|
233
|
+
logBug "Unknown flavour ID: #{iDestFlavour}"
|
234
|
+
lFlavourText = 'Unknown'
|
235
|
+
end
|
236
|
+
lInstallLocationSelectionText = ' '
|
237
|
+
if (lDepUserChoice.IdxDestination == lIdxDest-1)
|
238
|
+
lInstallLocationSelectionText = '*'
|
239
|
+
end
|
240
|
+
puts " #{lIdxMissingDeps}.3.#{lIdxInstaller}.#{lIdxDest}. (#{lInstallLocationSelectionText}) #{lFlavourText} - #{lDestLocation}"
|
241
|
+
lIdxDest += 1
|
242
|
+
end
|
243
|
+
end
|
244
|
+
lIdxInstaller += 1
|
245
|
+
end
|
246
|
+
puts ''
|
247
|
+
lIdxMissingDeps += 1
|
248
|
+
end
|
249
|
+
# Display the apply choice
|
250
|
+
puts "#{lIdxMissingDeps}. Apply."
|
251
|
+
end
|
252
|
+
|
253
|
+
end
|
254
|
+
|
255
|
+
end
|
256
|
+
|
257
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
|
3
|
+
# Licensed under the terms specified in LICENSE file. No warranty is provided.
|
4
|
+
#++
|
5
|
+
|
6
|
+
require 'wx'
|
7
|
+
|
8
|
+
module RDI
|
9
|
+
|
10
|
+
module Views
|
11
|
+
|
12
|
+
module RDIWx
|
13
|
+
|
14
|
+
# Dummy Class that executes code in a Wx application context
|
15
|
+
# This is used only if there is no already an existing application
|
16
|
+
class DummyApp < Wx::App
|
17
|
+
|
18
|
+
# Constructor
|
19
|
+
#
|
20
|
+
# Parameters:
|
21
|
+
# * *iCodeBlock* (_Proc_): The code to call
|
22
|
+
def initialize(iCodeBlock)
|
23
|
+
super()
|
24
|
+
@CodeBlock = iCodeBlock
|
25
|
+
end
|
26
|
+
|
27
|
+
# Initialize the application
|
28
|
+
def on_init
|
29
|
+
@CodeBlock.call
|
30
|
+
return false
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
# Get the main Ex application, or nil if none
|
36
|
+
#
|
37
|
+
# Return:
|
38
|
+
# * <em>Wx::App</em>: The application
|
39
|
+
def self.getWxMainApp
|
40
|
+
rApp = nil
|
41
|
+
|
42
|
+
begin
|
43
|
+
rApp = Wx.get_app
|
44
|
+
rescue Exception
|
45
|
+
rApp = nil
|
46
|
+
end
|
47
|
+
|
48
|
+
return rApp
|
49
|
+
end
|
50
|
+
|
51
|
+
# Ensure that some given code is run in a Wx::App context
|
52
|
+
#
|
53
|
+
# Parameters:
|
54
|
+
# * _CodeBlock_: To execute in the Wx::App context
|
55
|
+
def self.ensureWxApp(&iCodeBlock)
|
56
|
+
if (self.getWxMainApp != nil)
|
57
|
+
# We are already running
|
58
|
+
iCodeBlock.call
|
59
|
+
else
|
60
|
+
# Call the dummy application
|
61
|
+
DummyApp.new(iCodeBlock).main_loop
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
|
3
|
+
# Licensed under the terms specified in LICENSE file. No warranty is provided.
|
4
|
+
#++
|
5
|
+
|
6
|
+
module RDI
|
7
|
+
|
8
|
+
# Give the description of the RubyGems dependency
|
9
|
+
# It has been put in this singular file because it is required by many different plugins
|
10
|
+
#
|
11
|
+
# Return:
|
12
|
+
# * <em>map<Symbol,Object></em>: The description
|
13
|
+
def self.getWxRubyDepDesc
|
14
|
+
return RDI::Model::DependencyDescription.new('WxRuby 2.0.0').addDescription( {
|
15
|
+
:Testers => [
|
16
|
+
{
|
17
|
+
:Type => 'RubyRequires',
|
18
|
+
:Content => [ 'wx' ]
|
19
|
+
}
|
20
|
+
],
|
21
|
+
:Installers => [
|
22
|
+
{
|
23
|
+
:Type => 'Gem',
|
24
|
+
:Content => 'wxruby',
|
25
|
+
:ContextModifiers => [
|
26
|
+
{
|
27
|
+
:Type => 'GemPath',
|
28
|
+
:Content => '%INSTALLDIR%'
|
29
|
+
}
|
30
|
+
]
|
31
|
+
}
|
32
|
+
]
|
33
|
+
} )
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
data/lib/rdi/rdi.rb
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
|
3
|
+
# Licensed under the terms specified in LICENSE file. No warranty is provided.
|
4
|
+
#++
|
5
|
+
|
6
|
+
require 'rdi/Model/DependencyDescription'
|
7
|
+
require 'rdi/Model/DependencyUserChoice'
|
8
|
+
require 'rdi/Installer'
|