rugui 1.6.0 → 2.0.0.beta2
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/README.rdoc +48 -23
- data/Rakefile +3 -10
- data/bin/rugui +4 -1
- data/lib/rugui/base_view.rb +5 -5
- data/lib/rugui/configuration.rb +1 -29
- data/lib/rugui/entity_registration_support.rb +17 -2
- data/lib/rugui/framework_adapters/GTK.rb +15 -32
- data/lib/rugui/framework_adapters/Qt4.rb +22 -3
- data/lib/rugui/generators/rugui/rugui_generator.rb +3 -9
- data/lib/rugui/generators/rugui/templates/Gemfile.tt +20 -0
- data/lib/rugui/generators/rugui/templates/Rakefile +0 -4
- data/lib/rugui/generators/rugui/templates/app/main.rb +1 -1
- data/lib/rugui/generators/rugui/templates/config/boot.rb +5 -78
- data/lib/rugui/generators/rugui/templates/config/environment.rb.tt +7 -7
- data/lib/rugui/generators/rugui/templates/framework_specific/gtk/app/resources/xml/main_view.xml +43 -0
- data/lib/rugui/generators/rugui/templates/spec/spec_helper.rb +0 -2
- data/lib/rugui/initializer.rb +3 -60
- data/lib/rugui/observable_property_support.rb +5 -1
- data/lib/rugui/property_changed_support.rb +1 -1
- data/lib/rugui/signal_support.rb +2 -2
- data/lib/rugui/tasks/rugui.rb +1 -1
- data/lib/rugui/tasks/runner_application.rake +1 -1
- data/lib/rugui/tasks/spec_application.rake +5 -44
- data/lib/rugui/tasks/spec_framework.rake +3 -25
- data/lib/rugui/version.rb +1 -7
- data/lib/rugui.rb +0 -3
- data/spec/framework/base_controller_spec.rb +7 -14
- data/spec/framework/base_model_spec.rb +1 -3
- data/spec/framework/base_view_helper_spec.rb +1 -3
- data/spec/framework/base_view_spec.rb +2 -5
- data/spec/framework/log_support_spec.rb +2 -2
- data/spec/framework/observable_property_proxy_spec.rb +13 -14
- data/spec/framework/observable_property_support_spec.rb +8 -10
- data/spec/framework/property_observer_spec.rb +20 -22
- data/spec/helpers/controllers.rb +3 -3
- data/spec/helpers/helper_manager.rb +9 -0
- data/spec/helpers/observables.rb +40 -52
- data/spec/helpers/views.rb +15 -15
- data/spec/resource_files/my_other_view.xml +53 -0
- data/spec/resource_files/my_view.xml +53 -0
- data/spec/spec_helper.rb +9 -3
- metadata +98 -84
- data/lib/rugui/gem_builder.rb +0 -21
- data/lib/rugui/gem_dependency.rb +0 -282
- data/lib/rugui/generators/rugui/templates/framework_specific/gtk/app/resources/glade/main_view.glade +0 -33
- data/lib/rugui/generators/rugui/templates/spec/rcov.opts +0 -1
- data/lib/rugui/generators/rugui/templates/spec/spec.opts +0 -4
- data/lib/rugui/generators/rugui/templates/test/test_helper.rb +0 -12
- data/lib/rugui/plugin/loader.rb +0 -77
- data/lib/rugui/tasks/gems_application.rake +0 -71
- data/lib/rugui/tasks/test_application.rake +0 -77
- data/lib/rugui/vendor_gem_source_index.rb +0 -140
- data/spec/rcov.opts +0 -1
- data/spec/spec.opts +0 -5
data/lib/rugui/plugin/loader.rb
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
module RuGUI
|
2
|
-
module Plugin
|
3
|
-
class Loader
|
4
|
-
attr_accessor :initializer
|
5
|
-
attr_accessor :configurations
|
6
|
-
cattr_accessor :located_plugins
|
7
|
-
|
8
|
-
def initialize(initializer, configurations)
|
9
|
-
self.initializer = initializer
|
10
|
-
self.configurations = configurations
|
11
|
-
@@located_plugins ||= []
|
12
|
-
end
|
13
|
-
|
14
|
-
def load_plugins
|
15
|
-
plugins.each do |plugin|
|
16
|
-
plugin.load unless plugin.loaded?
|
17
|
-
register_as_loaded(plugin)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def plugins
|
22
|
-
@plugins ||= locate_plugins
|
23
|
-
end
|
24
|
-
|
25
|
-
protected
|
26
|
-
# Locate all plugins in APPLICATION_ROOT/vendor/plugins
|
27
|
-
def locate_plugins
|
28
|
-
Dir.glob(File.join(APPLICATION_ROOT, "vendor", "plugins", "*")).each do |dir|
|
29
|
-
@@located_plugins << Location.new(dir)
|
30
|
-
end
|
31
|
-
@@located_plugins
|
32
|
-
end
|
33
|
-
|
34
|
-
# Register plugins as loaded.
|
35
|
-
def register_as_loaded(plugin)
|
36
|
-
plugin.loaded = true
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
# This class is a representation of RuGUI plugins.
|
41
|
-
class Location
|
42
|
-
attr_accessor :plugin_name
|
43
|
-
attr_accessor :dir
|
44
|
-
attr_accessor :loaded
|
45
|
-
|
46
|
-
include RuGUI::LogSupport
|
47
|
-
|
48
|
-
def initialize(dir)
|
49
|
-
self.dir = dir
|
50
|
-
self.plugin_name = dir.split(File::SEPARATOR).last
|
51
|
-
end
|
52
|
-
|
53
|
-
# Load plugins.
|
54
|
-
def load
|
55
|
-
$LOAD_PATH.unshift(File.join(self.dir, "lib")) if File.directory?(self.dir)
|
56
|
-
$LOAD_PATH.uniq!
|
57
|
-
|
58
|
-
init_file = File.expand_path(File.join(self.dir, "init.rb"))
|
59
|
-
if File.exist?(init_file)
|
60
|
-
require_for init_file
|
61
|
-
else
|
62
|
-
logger.warn "The init file for (#{self.plugin_name}) was not found."
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def require_for(init_file)
|
67
|
-
require init_file
|
68
|
-
rescue Exception
|
69
|
-
logger.error "An error occurred while loading #{self.plugin_name}. Checks its init file: #{$!}"
|
70
|
-
end
|
71
|
-
|
72
|
-
def loaded?
|
73
|
-
self.loaded ||= false
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
@@ -1,71 +0,0 @@
|
|
1
|
-
task :rake_environment do
|
2
|
-
$rails_rake_task = true
|
3
|
-
require(File.join(APPLICATION_ROOT, 'config', 'environment'))
|
4
|
-
RuGUI.configuration.logger[:level] = :error
|
5
|
-
end
|
6
|
-
|
7
|
-
desc "List the gems that this RuGUI application depends on"
|
8
|
-
task :gems => 'gems:base' do
|
9
|
-
RuGUI.configuration.gems.each do |gem|
|
10
|
-
print_gem_status(gem)
|
11
|
-
end
|
12
|
-
puts
|
13
|
-
puts "I = Installed"
|
14
|
-
puts "F = Frozen"
|
15
|
-
puts "R = Framework (loaded before RuGUI starts)"
|
16
|
-
end
|
17
|
-
|
18
|
-
namespace :gems do
|
19
|
-
task :base do
|
20
|
-
$gems_rake_task = true
|
21
|
-
require 'rubygems'
|
22
|
-
require 'rubygems/gem_runner'
|
23
|
-
Rake::Task[:rake_environment].invoke
|
24
|
-
end
|
25
|
-
|
26
|
-
desc "Build any native extensions for unpacked gems"
|
27
|
-
task :build do
|
28
|
-
$gems_build_rake_task = true
|
29
|
-
Rake::Task['gems:unpack'].invoke
|
30
|
-
current_gems.each &:build
|
31
|
-
end
|
32
|
-
|
33
|
-
desc "Installs all required gems."
|
34
|
-
task :install => :base do
|
35
|
-
current_gems.each &:install
|
36
|
-
end
|
37
|
-
|
38
|
-
desc "Unpacks all required gems into vendor/gems."
|
39
|
-
task :unpack => :install do
|
40
|
-
current_gems.each &:unpack
|
41
|
-
end
|
42
|
-
|
43
|
-
namespace :unpack do
|
44
|
-
desc "Unpacks all required gems and their dependencies into vendor/gems."
|
45
|
-
task :dependencies => :install do
|
46
|
-
current_gems.each { |gem| gem.unpack(:recursive => true) }
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
desc "Regenerate gem specifications in correct format."
|
51
|
-
task :refresh_specs => :base do
|
52
|
-
current_gems.each &:refresh
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def current_gems
|
57
|
-
gems = RuGUI.configuration.gems
|
58
|
-
gems = gems.select { |gem| gem.name == ENV['GEM'] } unless ENV['GEM'].blank?
|
59
|
-
gems
|
60
|
-
end
|
61
|
-
|
62
|
-
def print_gem_status(gem, indent=1)
|
63
|
-
code = case
|
64
|
-
when gem.framework_gem? then 'R'
|
65
|
-
when gem.frozen? then 'F'
|
66
|
-
when gem.installed? then 'I'
|
67
|
-
else ' '
|
68
|
-
end
|
69
|
-
puts " "*(indent-1)+" - [#{code}] #{gem.name} #{gem.requirement.to_s}"
|
70
|
-
gem.dependencies.each { |g| print_gem_status(g, indent+1) }
|
71
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
TEST_CHANGES_SINCE = Time.now - 600
|
2
|
-
|
3
|
-
# Look up tests for recently modified sources.
|
4
|
-
def recent_tests(source_pattern, test_path, touched_since = 10.minutes.ago)
|
5
|
-
FileList[source_pattern].map do |path|
|
6
|
-
if File.mtime(path) > touched_since
|
7
|
-
tests = []
|
8
|
-
source_dir = File.dirname(path).split("/")
|
9
|
-
source_file = File.basename(path, '.rb')
|
10
|
-
|
11
|
-
# Support subdirs in app/models and app/controllers
|
12
|
-
modified_test_path = source_dir.length > 2 ? "#{test_path}/" << source_dir[1..source_dir.length].join('/') : test_path
|
13
|
-
|
14
|
-
# For modified files in app/ run the tests for it. ex. /test/models/account_controller.rb
|
15
|
-
test = "#{modified_test_path}/#{source_file}_test.rb"
|
16
|
-
tests.push test if File.exist?(test)
|
17
|
-
|
18
|
-
# For modified files in app, run tests in subdirs too. ex. /test/functional/account/*_test.rb
|
19
|
-
test = "#{modified_test_path}/#{File.basename(path, '.rb').sub("_controller","")}"
|
20
|
-
FileList["#{test}/*_test.rb"].each { |f| tests.push f } if File.exist?(test)
|
21
|
-
|
22
|
-
return tests
|
23
|
-
|
24
|
-
end
|
25
|
-
end.flatten.compact
|
26
|
-
end
|
27
|
-
|
28
|
-
desc 'Run all models, controllers and libs tests'
|
29
|
-
task :test do
|
30
|
-
errors = %w(test:models test:controllers test:libs).collect do |task|
|
31
|
-
begin
|
32
|
-
Rake::Task[task].invoke
|
33
|
-
nil
|
34
|
-
rescue => e
|
35
|
-
task
|
36
|
-
end
|
37
|
-
end.compact
|
38
|
-
abort "Errors running #{errors.to_sentence}!" if errors.any?
|
39
|
-
end
|
40
|
-
|
41
|
-
namespace :test do
|
42
|
-
|
43
|
-
Rake::TestTask.new(:recent) do |t|
|
44
|
-
since = TEST_CHANGES_SINCE
|
45
|
-
touched = FileList['test/**/*_test.rb'].select { |path| File.mtime(path) > since } +
|
46
|
-
recent_tests('app/models/**/*.rb', 'test/models', since) +
|
47
|
-
recent_tests('app/controllers/**/*.rb', 'test/controllers', since) +
|
48
|
-
recent_tests('lib/**/*.rb', 'test/libs', since)
|
49
|
-
|
50
|
-
t.libs << 'test'
|
51
|
-
t.verbose = true
|
52
|
-
t.test_files = touched.uniq
|
53
|
-
end
|
54
|
-
Rake::Task['test:recent'].comment = "Test recent changes"
|
55
|
-
|
56
|
-
Rake::TestTask.new(:models) do |t|
|
57
|
-
t.libs << "test"
|
58
|
-
t.pattern = 'test/models/**/*_test.rb'
|
59
|
-
t.verbose = true
|
60
|
-
end
|
61
|
-
Rake::Task['test:models'].comment = "Run the models tests in test/models"
|
62
|
-
|
63
|
-
Rake::TestTask.new(:controllers) do |t|
|
64
|
-
t.libs << "test"
|
65
|
-
t.pattern = 'test/controllers/**/*_test.rb'
|
66
|
-
t.verbose = true
|
67
|
-
end
|
68
|
-
Rake::Task['test:controllers'].comment = "Run the controllers tests in test/unit"
|
69
|
-
|
70
|
-
Rake::TestTask.new(:libs) do |t|
|
71
|
-
t.libs << "test"
|
72
|
-
t.pattern = 'test/lib/**/*_test.rb'
|
73
|
-
t.verbose = true
|
74
|
-
end
|
75
|
-
Rake::Task['test:libs'].comment = "Run the libs tests in test/unit"
|
76
|
-
|
77
|
-
end
|
@@ -1,140 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'yaml'
|
3
|
-
|
4
|
-
module RuGUI
|
5
|
-
|
6
|
-
class VendorGemSourceIndex
|
7
|
-
# VendorGemSourceIndex acts as a proxy for the Gem source index, allowing
|
8
|
-
# gems to be loaded from vendor/gems. Rather than the standard gem repository format,
|
9
|
-
# vendor/gems contains unpacked gems, with YAML specifications in .specification in
|
10
|
-
# each gem directory.
|
11
|
-
include Enumerable
|
12
|
-
|
13
|
-
attr_reader :installed_source_index
|
14
|
-
attr_reader :vendor_source_index
|
15
|
-
|
16
|
-
@@silence_spec_warnings = false
|
17
|
-
|
18
|
-
def self.silence_spec_warnings
|
19
|
-
@@silence_spec_warnings
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.silence_spec_warnings=(v)
|
23
|
-
@@silence_spec_warnings = v
|
24
|
-
end
|
25
|
-
|
26
|
-
def initialize(installed_index, vendor_dir=RuGUI::GemDependency.unpacked_path)
|
27
|
-
@installed_source_index = installed_index
|
28
|
-
@vendor_dir = vendor_dir
|
29
|
-
refresh!
|
30
|
-
end
|
31
|
-
|
32
|
-
def refresh!
|
33
|
-
# reload the installed gems
|
34
|
-
@installed_source_index.refresh!
|
35
|
-
vendor_gems = {}
|
36
|
-
|
37
|
-
# handle vendor RuGUI gems - they are identified by having loaded_from set to ""
|
38
|
-
# we add them manually to the list, so that other gems can find them via dependencies
|
39
|
-
Gem.loaded_specs.each do |n, s|
|
40
|
-
next unless s.loaded_from.empty?
|
41
|
-
vendor_gems[s.full_name] = s
|
42
|
-
end
|
43
|
-
|
44
|
-
# load specifications from vendor/gems
|
45
|
-
Dir[File.join(RuGUI::GemDependency.unpacked_path, '*')].each do |d|
|
46
|
-
dir_name = File.basename(d)
|
47
|
-
dir_version = version_for_dir(dir_name)
|
48
|
-
spec = load_specification(d)
|
49
|
-
if spec
|
50
|
-
if spec.full_name != dir_name
|
51
|
-
# mismatched directory name and gem spec - produced by 2.1.0-era unpack code
|
52
|
-
if dir_version
|
53
|
-
# fix the spec version - this is not optimal (spec.files may be wrong)
|
54
|
-
# but it's better than breaking apps. Complain to remind users to get correct specs.
|
55
|
-
# use ActiveSupport::Deprecation.warn, as the logger is not set yet
|
56
|
-
$stderr.puts("config.gem: Unpacked gem #{dir_name} in vendor/gems has a mismatched specification file."+
|
57
|
-
" Run 'rake gems:refresh_specs' to fix this.") unless @@silence_spec_warnings
|
58
|
-
spec.version = dir_version
|
59
|
-
else
|
60
|
-
$stderr.puts("config.gem: Unpacked gem #{dir_name} in vendor/gems is not in a versioned directory"+
|
61
|
-
"(should be #{spec.full_name}).") unless @@silence_spec_warnings
|
62
|
-
# continue, assume everything is OK
|
63
|
-
end
|
64
|
-
end
|
65
|
-
else
|
66
|
-
# no spec - produced by early-2008 unpack code
|
67
|
-
# emulate old behavior, and complain.
|
68
|
-
$stderr.puts("config.gem: Unpacked gem #{dir_name} in vendor/gems has no specification file."+
|
69
|
-
" Run 'rake gems:refresh_specs' to fix this.") unless @@silence_spec_warnings
|
70
|
-
if dir_version
|
71
|
-
spec = Gem::Specification.new
|
72
|
-
spec.version = dir_version
|
73
|
-
spec.require_paths = ['lib']
|
74
|
-
ext_path = File.join(d, 'ext')
|
75
|
-
spec.require_paths << 'ext' if File.exist?(ext_path)
|
76
|
-
spec.name = /^(.*)-[^-]+$/.match(dir_name)[1]
|
77
|
-
files = ['lib']
|
78
|
-
# set files to everything in lib/
|
79
|
-
files += Dir[File.join(d, 'lib', '*')].map { |v| v.gsub(/^#{d}\//, '') }
|
80
|
-
files += Dir[File.join(d, 'ext', '*')].map { |v| v.gsub(/^#{d}\//, '') } if ext_path
|
81
|
-
spec.files = files
|
82
|
-
else
|
83
|
-
$stderr.puts("config.gem: Unpacked gem #{dir_name} in vendor/gems not in a versioned directory."+
|
84
|
-
" Giving up.") unless @@silence_spec_warnings
|
85
|
-
next
|
86
|
-
end
|
87
|
-
end
|
88
|
-
spec.loaded_from = File.join(d, '.specification')
|
89
|
-
# finally, swap out full_gem_path
|
90
|
-
# it would be better to use a Gem::Specification subclass, but the YAML loads an explicit class
|
91
|
-
class << spec
|
92
|
-
def full_gem_path
|
93
|
-
path = File.join installation_path, full_name
|
94
|
-
return path if File.directory? path
|
95
|
-
File.join installation_path, original_name
|
96
|
-
end
|
97
|
-
end
|
98
|
-
vendor_gems[File.basename(d)] = spec
|
99
|
-
end
|
100
|
-
@vendor_source_index = Gem::SourceIndex.new(vendor_gems)
|
101
|
-
end
|
102
|
-
|
103
|
-
def version_for_dir(d)
|
104
|
-
matches = /-([^-]+)$/.match(d)
|
105
|
-
Gem::Version.new(matches[1]) if matches
|
106
|
-
end
|
107
|
-
|
108
|
-
def load_specification(gem_dir)
|
109
|
-
spec_file = File.join(gem_dir, '.specification')
|
110
|
-
YAML.load_file(spec_file) if File.exist?(spec_file)
|
111
|
-
end
|
112
|
-
|
113
|
-
def find_name(*args)
|
114
|
-
@installed_source_index.find_name(*args) + @vendor_source_index.find_name(*args)
|
115
|
-
end
|
116
|
-
|
117
|
-
def search(*args)
|
118
|
-
# look for vendor gems, and then installed gems - later elements take priority
|
119
|
-
@installed_source_index.search(*args) + @vendor_source_index.search(*args)
|
120
|
-
end
|
121
|
-
|
122
|
-
def each(&block)
|
123
|
-
@vendor_source_index.each(&block)
|
124
|
-
@installed_source_index.each(&block)
|
125
|
-
end
|
126
|
-
|
127
|
-
def add_spec(spec)
|
128
|
-
@vendor_source_index.add_spec spec
|
129
|
-
end
|
130
|
-
|
131
|
-
def remove_spec(spec)
|
132
|
-
@vendor_source_index.remove_spec spec
|
133
|
-
end
|
134
|
-
|
135
|
-
def size
|
136
|
-
@vendor_source_index.size + @installed_source_index.size
|
137
|
-
end
|
138
|
-
|
139
|
-
end
|
140
|
-
end
|
data/spec/rcov.opts
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--exclude "spec/*,gems/*"
|