skozlov-netzke-core 0.1.0.2 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +108 -0
- data/LICENSE +2 -19
- data/Manifest +50 -0
- data/README.rdoc +12 -0
- data/Rakefile +2 -3
- data/TODO +2 -0
- data/autotest/discover.rb +3 -0
- data/generators/netzke_core/netzke_core_generator.rb +6 -6
- data/generators/netzke_core/templates/create_netzke_preferences.rb +2 -2
- data/javascripts/core.js +474 -111
- data/lib/app/controllers/netzke_controller.rb +76 -0
- data/lib/app/models/netzke_preference.rb +128 -39
- data/lib/netzke-core.rb +23 -9
- data/lib/netzke/action_view_ext.rb +26 -0
- data/lib/netzke/base.rb +440 -102
- data/lib/netzke/base_js.rb +258 -0
- data/lib/netzke/controller_extensions.rb +80 -29
- data/lib/netzke/core_ext.rb +72 -21
- data/lib/netzke/feedback_ghost.rb +43 -0
- data/lib/netzke/routing.rb +9 -0
- data/netzke-core.gemspec +10 -11
- data/stylesheets/core.css +12 -0
- data/test/app_root/app/controllers/{application.rb → application_controller.rb} +0 -0
- data/test/app_root/app/models/role.rb +3 -0
- data/test/app_root/app/models/user.rb +3 -0
- data/test/app_root/config/boot.rb +2 -1
- data/test/app_root/config/database.yml +10 -0
- data/test/app_root/config/environment.rb +1 -0
- data/test/app_root/db/migrate/20081222035855_create_netzke_preferences.rb +18 -0
- data/test/app_root/db/migrate/20090423214303_create_roles.rb +11 -0
- data/test/app_root/db/migrate/20090423222114_create_users.rb +12 -0
- data/test/app_root/lib/console_with_fixtures.rb +4 -0
- data/test/app_root/script/console +1 -0
- data/test/fixtures/roles.yml +7 -0
- data/test/fixtures/users.yml +9 -0
- data/test/test_helper.rb +3 -2
- data/test/unit/core_ext_test.rb +66 -0
- data/test/unit/netzke_core_test.rb +167 -0
- data/test/unit/netzke_preference_test.rb +103 -0
- metadata +45 -30
- data/README.mdown +0 -11
- data/generators/netzke_core/templates/create_netzke_layouts.rb +0 -14
- data/generators/netzke_core/templates/netzke.html.erb +0 -10
- data/lib/app/models/netzke_layout.rb +0 -75
- data/lib/netzke/js_class_builder.rb +0 -114
- data/lib/vendor/facets/hash/recursive_merge.rb +0 -28
- data/test/core_ext_test.rb +0 -35
- data/test/netzke_core_test.rb +0 -136
@@ -0,0 +1,43 @@
|
|
1
|
+
module Netzke
|
2
|
+
#
|
3
|
+
# An invisible component that provides feedback service for all Netzke widgets
|
4
|
+
#
|
5
|
+
class FeedbackGhost < Base
|
6
|
+
def self.js_base_class
|
7
|
+
"Ext.Component" # yes, invisible
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.js_extend_properties
|
11
|
+
{
|
12
|
+
:show_feedback => <<-END_OF_JAVASCRIPT.l,
|
13
|
+
function(msg){
|
14
|
+
var createBox = function(s, l){
|
15
|
+
return ['<div class="msg">',
|
16
|
+
'<div class="x-box-tl"><div class="x-box-tr"><div class="x-box-tc"></div></div></div>',
|
17
|
+
'<div class="x-box-ml"><div class="x-box-mr"><div class="x-box-mc">', s, '</div></div></div>',
|
18
|
+
'<div class="x-box-bl"><div class="x-box-br"><div class="x-box-bc"></div></div></div>',
|
19
|
+
'</div>'].join('');
|
20
|
+
}
|
21
|
+
|
22
|
+
var showBox = function(msg, lvl){
|
23
|
+
if (!lvl) {lvl = 'notice'};
|
24
|
+
var msgCt = Ext.DomHelper.insertFirst(document.body, {'class':'netzke-feedback'}, true);
|
25
|
+
var m = Ext.DomHelper.append(msgCt, {html:createBox(msg,lvl)}, true);
|
26
|
+
m.slideIn('t').pause(2).ghost("b", {remove:true});
|
27
|
+
}
|
28
|
+
|
29
|
+
if (typeof msg != 'string') {
|
30
|
+
var compoundMsg = "";
|
31
|
+
Ext.each(msg, function(m){
|
32
|
+
compoundMsg += m.msg + '<br>';
|
33
|
+
});
|
34
|
+
if (compoundMsg != "") showBox(compoundMsg, null); // the second parameter will be level
|
35
|
+
} else {
|
36
|
+
showBox(msg);
|
37
|
+
}
|
38
|
+
}
|
39
|
+
END_OF_JAVASCRIPT
|
40
|
+
}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/netzke-core.gemspec
CHANGED
@@ -2,27 +2,26 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{netzke-core}
|
5
|
-
s.version = "0.1
|
5
|
+
s.version = "0.4.1"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Sergei Kozlov"]
|
9
|
-
s.date = %q{
|
9
|
+
s.date = %q{2009-09-06}
|
10
10
|
s.description = %q{Build ExtJS/Rails widgets with minimum effort}
|
11
|
-
s.email = %q{sergei@
|
12
|
-
s.extra_rdoc_files = ["CHANGELOG", "lib/app/controllers/netzke_controller.rb", "lib/app/models/
|
13
|
-
s.files = ["CHANGELOG", "
|
14
|
-
s.
|
15
|
-
s.
|
16
|
-
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Netzke-core", "--main", "README.mdown"]
|
11
|
+
s.email = %q{sergei@playcode.nl}
|
12
|
+
s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README.rdoc", "TODO", "lib/app/controllers/netzke_controller.rb", "lib/app/models/netzke_preference.rb", "lib/netzke-core.rb", "lib/netzke/action_view_ext.rb", "lib/netzke/base.rb", "lib/netzke/base_js.rb", "lib/netzke/controller_extensions.rb", "lib/netzke/core_ext.rb", "lib/netzke/feedback_ghost.rb", "lib/netzke/routing.rb", "tasks/netzke_core_tasks.rake"]
|
13
|
+
s.files = ["CHANGELOG", "LICENSE", "Manifest", "README.rdoc", "Rakefile", "TODO", "autotest/discover.rb", "generators/netzke_core/USAGE", "generators/netzke_core/netzke_core_generator.rb", "generators/netzke_core/templates/create_netzke_preferences.rb", "init.rb", "install.rb", "javascripts/core.js", "lib/app/controllers/netzke_controller.rb", "lib/app/models/netzke_preference.rb", "lib/netzke-core.rb", "lib/netzke/action_view_ext.rb", "lib/netzke/base.rb", "lib/netzke/base_js.rb", "lib/netzke/controller_extensions.rb", "lib/netzke/core_ext.rb", "lib/netzke/feedback_ghost.rb", "lib/netzke/routing.rb", "netzke-core.gemspec", "stylesheets/core.css", "tasks/netzke_core_tasks.rake", "test/app_root/app/controllers/application_controller.rb", "test/app_root/app/models/role.rb", "test/app_root/app/models/user.rb", "test/app_root/config/boot.rb", "test/app_root/config/database.yml", "test/app_root/config/environment.rb", "test/app_root/config/environments/in_memory.rb", "test/app_root/config/environments/mysql.rb", "test/app_root/config/environments/postgresql.rb", "test/app_root/config/environments/sqlite.rb", "test/app_root/config/environments/sqlite3.rb", "test/app_root/config/routes.rb", "test/app_root/db/migrate/20081222035855_create_netzke_preferences.rb", "test/app_root/db/migrate/20090423214303_create_roles.rb", "test/app_root/db/migrate/20090423222114_create_users.rb", "test/app_root/lib/console_with_fixtures.rb", "test/app_root/script/console", "test/fixtures/roles.yml", "test/fixtures/users.yml", "test/test_helper.rb", "test/unit/core_ext_test.rb", "test/unit/netzke_core_test.rb", "test/unit/netzke_preference_test.rb", "uninstall.rb"]
|
14
|
+
s.homepage = %q{http://playcode.nl}
|
15
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Netzke-core", "--main", "README.rdoc"]
|
17
16
|
s.require_paths = ["lib"]
|
18
17
|
s.rubyforge_project = %q{netzke-core}
|
19
|
-
s.rubygems_version = %q{1.3.
|
18
|
+
s.rubygems_version = %q{1.3.4}
|
20
19
|
s.summary = %q{Build ExtJS/Rails widgets with minimum effort}
|
21
|
-
s.test_files = ["test/core_ext_test.rb", "test/netzke_core_test.rb"]
|
20
|
+
s.test_files = ["test/unit/core_ext_test.rb", "test/unit/netzke_core_test.rb", "test/unit/netzke_preference_test.rb"]
|
22
21
|
|
23
22
|
if s.respond_to? :specification_version then
|
24
23
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
25
|
-
s.specification_version =
|
24
|
+
s.specification_version = 3
|
26
25
|
|
27
26
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
28
27
|
else
|
File without changes
|
@@ -47,6 +47,7 @@ module Rails
|
|
47
47
|
def load_initializer
|
48
48
|
require "#{RAILS_FRAMEWORK_ROOT}/railties/lib/initializer"
|
49
49
|
Rails::Initializer.run(:install_gem_spec_stubs)
|
50
|
+
Rails::GemDependency.add_frozen_gem_path
|
50
51
|
end
|
51
52
|
end
|
52
53
|
|
@@ -85,7 +86,7 @@ module Rails
|
|
85
86
|
|
86
87
|
def load_rubygems
|
87
88
|
require 'rubygems'
|
88
|
-
min_version = '1.
|
89
|
+
min_version = '1.3.1'
|
89
90
|
unless rubygems_version >= min_version
|
90
91
|
$stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.)
|
91
92
|
exit 1
|
@@ -2,20 +2,30 @@ in_memory:
|
|
2
2
|
adapter: sqlite3
|
3
3
|
database: ":memory:"
|
4
4
|
verbosity: quiet
|
5
|
+
pool: 5
|
6
|
+
timeout: 5000
|
5
7
|
sqlite:
|
6
8
|
adapter: sqlite
|
7
9
|
dbfile: plugin_test.sqlite.db
|
10
|
+
pool: 5
|
11
|
+
timeout: 5000
|
8
12
|
sqlite3:
|
9
13
|
adapter: sqlite3
|
10
14
|
dbfile: plugin_test.sqlite3.db
|
15
|
+
pool: 5
|
16
|
+
timeout: 5000
|
11
17
|
postgresql:
|
12
18
|
adapter: postgresql
|
13
19
|
username: postgres
|
14
20
|
password: postgres
|
15
21
|
database: plugin_test
|
22
|
+
pool: 5
|
23
|
+
timeout: 5000
|
16
24
|
mysql:
|
17
25
|
adapter: mysql
|
18
26
|
host: localhost
|
19
27
|
username: root
|
20
28
|
password:
|
21
29
|
database: plugin_test
|
30
|
+
pool: 5
|
31
|
+
timeout: 5000
|
@@ -3,6 +3,7 @@ require File.join(File.dirname(__FILE__), 'boot')
|
|
3
3
|
Rails::Initializer.run do |config|
|
4
4
|
config.cache_classes = false
|
5
5
|
config.whiny_nils = true
|
6
|
+
config.action_controller.session = {:key => 'rails_session', :secret => 'd229e4d22437432705ab3985d4d246'}
|
6
7
|
config.plugin_locators.unshift(
|
7
8
|
Class.new(Rails::Plugin::Locator) do
|
8
9
|
def plugins
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class CreateNetzkePreferences < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :netzke_preferences do |t|
|
4
|
+
t.string :name
|
5
|
+
t.string :pref_type
|
6
|
+
t.string :value
|
7
|
+
t.integer :user_id
|
8
|
+
t.integer :role_id
|
9
|
+
t.string :widget_name
|
10
|
+
|
11
|
+
t.timestamps
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.down
|
16
|
+
drop_table :netzke_preferences
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,4 @@
|
|
1
|
+
# Loads fixtures into the database when running the test app via the console
|
2
|
+
(ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : Dir.glob(File.join(Rails.root, '../fixtures/*.{yml,csv}'))).each do |fixture_file|
|
3
|
+
Fixtures.create_fixtures(File.join(Rails.root, '../fixtures'), File.basename(fixture_file, '.*'))
|
4
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -4,7 +4,6 @@ ENV['RAILS_ENV'] ||= 'in_memory'
|
|
4
4
|
# Load the Rails environment and testing framework
|
5
5
|
require "#{File.dirname(__FILE__)}/app_root/config/environment"
|
6
6
|
require 'test_help'
|
7
|
-
require 'action_view/test_case' # Load additional test classes not done automatically by < Rails 2.2.2
|
8
7
|
|
9
8
|
# Undo changes to RAILS_ENV
|
10
9
|
silence_warnings {RAILS_ENV = ENV['RAILS_ENV']}
|
@@ -13,8 +12,10 @@ silence_warnings {RAILS_ENV = ENV['RAILS_ENV']}
|
|
13
12
|
ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate")
|
14
13
|
|
15
14
|
# Set default fixture loading properties
|
16
|
-
|
15
|
+
ActiveSupport::TestCase.class_eval do
|
17
16
|
self.use_transactional_fixtures = true
|
18
17
|
self.use_instantiated_fixtures = false
|
19
18
|
self.fixture_path = "#{File.dirname(__FILE__)}/fixtures"
|
19
|
+
|
20
|
+
fixtures :all
|
20
21
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'netzke/core_ext'
|
3
|
+
|
4
|
+
class CoreExtTest < ActiveSupport::TestCase
|
5
|
+
test "recursive delete if nil" do
|
6
|
+
assert_equal({:a => 1, :b => {:c => 4, :d => 5}}, {:a => 1, :aa => nil, :b => {:c => 4, :d => 5, :cc => nil}}.recursive_delete_if_nil)
|
7
|
+
|
8
|
+
assert_equal({:a => [{:e => 5}, {:f => 7}], :b => {:c => 4, :d => 5}}, {:a => [{:e => 5, :ee => nil},{:f => 7, :ff => nil}], :aa => nil, :b => {:c => 4, :d => 5, :cc => nil}}.recursive_delete_if_nil)
|
9
|
+
|
10
|
+
assert_equal([
|
11
|
+
{:a => [{:e => 5}]},
|
12
|
+
{},
|
13
|
+
{:b => {:c => 4, :d => 5}}
|
14
|
+
], [
|
15
|
+
{:a => [{:e => 5, :ee => nil}]},
|
16
|
+
{:aa => nil},
|
17
|
+
{:b => {:c => 4, :d => 5, :cc => nil}}
|
18
|
+
].recursive_delete_if_nil)
|
19
|
+
end
|
20
|
+
|
21
|
+
test "convert keys" do
|
22
|
+
assert_equal([
|
23
|
+
{:aB => 1, :cDD => [{:lookMa => true},{:wowNow => true}]}
|
24
|
+
],[:a_b => 1, :c_d_d => [{:look_ma => true},{:wow_now => true}]].convert_keys{|k| k.camelize(:lower)})
|
25
|
+
end
|
26
|
+
|
27
|
+
test "javascript-like access to hash data" do
|
28
|
+
a = {}
|
29
|
+
a["key"] = 100
|
30
|
+
assert_equal(100, a.key)
|
31
|
+
|
32
|
+
a.key = 200
|
33
|
+
assert_equal(200, a["key"])
|
34
|
+
|
35
|
+
a.another_key = 300
|
36
|
+
assert_equal(300, a[:another_key])
|
37
|
+
end
|
38
|
+
|
39
|
+
test "jsonify" do
|
40
|
+
assert_equal({:aB => 1, "cD" => [[1, {:eF => "stay_same"}], {"literal_symbol" => :should_not_change, "literal_string".l => "also_should_not"}]}, {:a_b => 1, "c_d" => [[1, {:e_f => "stay_same"}], {:literal_symbol.l => :should_not_change, "literal_string".l => "also_should_not"}]}.jsonify)
|
41
|
+
end
|
42
|
+
|
43
|
+
# test "flatten" do
|
44
|
+
# assert_equal([{
|
45
|
+
# :name => :one, :value => 1
|
46
|
+
# },{
|
47
|
+
# :name => :two, :value => 2
|
48
|
+
# },{
|
49
|
+
# :name => :three__four, :value => 4
|
50
|
+
# },{
|
51
|
+
# :name => :three__five__six, :value => 6
|
52
|
+
# }],
|
53
|
+
# {
|
54
|
+
# :one => 1,
|
55
|
+
# :two => 2,
|
56
|
+
# :three => {
|
57
|
+
# :four => 4,
|
58
|
+
# :five => {
|
59
|
+
# :six => 6
|
60
|
+
# }
|
61
|
+
# }
|
62
|
+
# }.flatten
|
63
|
+
# )
|
64
|
+
# end
|
65
|
+
|
66
|
+
end
|
@@ -0,0 +1,167 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'netzke-core'
|
3
|
+
|
4
|
+
module Netzke
|
5
|
+
class Widget < Base
|
6
|
+
api :method_one, :method_two
|
7
|
+
|
8
|
+
def self.config
|
9
|
+
super.merge({
|
10
|
+
:pref_one => 1,
|
11
|
+
:pref_two => 2
|
12
|
+
})
|
13
|
+
end
|
14
|
+
|
15
|
+
def initial_aggregatees
|
16
|
+
{
|
17
|
+
:nested_one => {:widget_class_name => 'NestedWidgetOne'},
|
18
|
+
:nested_two => {:widget_class_name => 'NestedWidgetTwo'}
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
def available_permissions
|
23
|
+
%w(read update)
|
24
|
+
end
|
25
|
+
|
26
|
+
def default_config
|
27
|
+
{
|
28
|
+
:config_uno => true,
|
29
|
+
:config_dos => false
|
30
|
+
}
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class NestedWidgetOne < Base
|
35
|
+
end
|
36
|
+
|
37
|
+
class NestedWidgetTwo < Base
|
38
|
+
def initial_aggregatees
|
39
|
+
{
|
40
|
+
:nested => {:widget_class_name => 'DeepNestedWidget'}
|
41
|
+
}
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class DeepNestedWidget < Base
|
46
|
+
end
|
47
|
+
|
48
|
+
class JsInheritanceWidget < Widget
|
49
|
+
end
|
50
|
+
|
51
|
+
class InheritedWidget < Widget
|
52
|
+
def self.config
|
53
|
+
super.merge({
|
54
|
+
:pref_one => -1
|
55
|
+
})
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
class NetzkeCoreTest < ActiveSupport::TestCase
|
61
|
+
include Netzke
|
62
|
+
|
63
|
+
def setup
|
64
|
+
end
|
65
|
+
|
66
|
+
test "base class loaded" do
|
67
|
+
assert_kind_of Netzke::Base, Netzke::Base.new
|
68
|
+
end
|
69
|
+
|
70
|
+
test "short widget class name" do
|
71
|
+
assert_equal 'Widget', Widget.short_widget_class_name
|
72
|
+
end
|
73
|
+
|
74
|
+
test "api" do
|
75
|
+
widget_class = Widget
|
76
|
+
assert_equal [:load_aggregatee_with_cache, :method_one, :method_two], widget_class.api_points
|
77
|
+
end
|
78
|
+
|
79
|
+
test "aggregatees" do
|
80
|
+
widget = Widget.new(:name => 'my_widget')
|
81
|
+
|
82
|
+
# instantiate aggregatees
|
83
|
+
nested_widget_one = widget.aggregatee_instance(:nested_one)
|
84
|
+
nested_widget_two = widget.aggregatee_instance(:nested_two)
|
85
|
+
deep_nested_widget = widget.aggregatee_instance(:nested_two__nested)
|
86
|
+
|
87
|
+
# check the classes of aggregation instances
|
88
|
+
assert_kind_of NestedWidgetOne, nested_widget_one
|
89
|
+
assert_kind_of NestedWidgetTwo, nested_widget_two
|
90
|
+
assert_kind_of DeepNestedWidget, deep_nested_widget
|
91
|
+
|
92
|
+
# check the internal names of aggregation instances
|
93
|
+
assert_equal 'my_widget', widget.id_name
|
94
|
+
assert_equal 'my_widget__nested_one', nested_widget_one.id_name
|
95
|
+
assert_equal 'my_widget__nested_two', nested_widget_two.id_name
|
96
|
+
assert_equal 'my_widget__nested_two__nested', deep_nested_widget.id_name
|
97
|
+
end
|
98
|
+
|
99
|
+
# test "permissions" do
|
100
|
+
# widget = Widget.new
|
101
|
+
# assert_equal({:read => true, :update => true}, widget.permissions)
|
102
|
+
#
|
103
|
+
# widget = Widget.new(:prohibit => :all)
|
104
|
+
# assert_equal({:read => false, :update => false}, widget.permissions)
|
105
|
+
#
|
106
|
+
# widget = Widget.new(:prohibit => :read)
|
107
|
+
# assert_equal({:read => false, :update => true}, widget.permissions)
|
108
|
+
#
|
109
|
+
# widget = Widget.new(:prohibit => [:read, :update])
|
110
|
+
# assert_equal({:read => false, :update => false}, widget.permissions)
|
111
|
+
#
|
112
|
+
# widget = Widget.new(:prohibit => :all, :allow => :read)
|
113
|
+
# assert_equal({:read => true, :update => false}, widget.permissions)
|
114
|
+
#
|
115
|
+
# widget = Widget.new(:prohibit => :all, :allow => [:read, :update])
|
116
|
+
# assert_equal({:read => true, :update => true}, widget.permissions)
|
117
|
+
# end
|
118
|
+
|
119
|
+
test "default config" do
|
120
|
+
widget = Widget.new
|
121
|
+
assert_equal({:config_uno => true, :config_dos => false}, widget.config)
|
122
|
+
|
123
|
+
widget = Widget.new(:name => 'widget', :config_uno => false)
|
124
|
+
assert_equal({:name => 'widget', :config_uno => false, :config_dos => false}, widget.config)
|
125
|
+
end
|
126
|
+
|
127
|
+
test "dependencies calculated based on aggregations" do
|
128
|
+
widget = Widget.new
|
129
|
+
assert(widget.dependencies.include?('NestedWidgetOne'))
|
130
|
+
assert(widget.dependencies.include?('NestedWidgetTwo'))
|
131
|
+
assert(!widget.dependencies.include?('DeepNestedWidget'))
|
132
|
+
end
|
133
|
+
|
134
|
+
test "dependency classes" do
|
135
|
+
widget = Widget.new
|
136
|
+
# not testing the order
|
137
|
+
assert(%w{DeepNestedWidget NestedWidgetOne NestedWidgetTwo Widget}.inject(true){|r, k| r && widget.dependency_classes.include?(k)})
|
138
|
+
end
|
139
|
+
|
140
|
+
test "widget instance by config" do
|
141
|
+
widget = Netzke::Base.instance_by_config({:widget_class_name => 'Widget', :name => 'a_widget'})
|
142
|
+
assert(Widget, widget.class)
|
143
|
+
assert('a_widget', widget.name)
|
144
|
+
end
|
145
|
+
|
146
|
+
test "js inheritance" do
|
147
|
+
widget = JsInheritanceWidget.new
|
148
|
+
assert(widget.js_missing_code.index("Ext.netzke.cache.JsInheritanceWidget"))
|
149
|
+
assert(widget.js_missing_code.index("Ext.netzke.cache.Widget"))
|
150
|
+
end
|
151
|
+
|
152
|
+
test "class-level configuration" do
|
153
|
+
# predefined defaults
|
154
|
+
assert(1, Netzke::Widget.config[:pref_one])
|
155
|
+
assert(2, Netzke::Widget.config[:pref_two])
|
156
|
+
assert(-1, Netzke::InheritedWidget.config[:pref_one])
|
157
|
+
assert(2, Netzke::InheritedWidget.config[:pref_two])
|
158
|
+
|
159
|
+
Netzke::Widget.config[:pref_for_widget] = 1
|
160
|
+
Netzke::InheritedWidget.config[:pref_for_widget] = 2
|
161
|
+
|
162
|
+
assert(1, Netzke::Widget.config[:pref_for_widget])
|
163
|
+
assert(2, Netzke::InheritedWidget.config[:pref_for_widget])
|
164
|
+
|
165
|
+
end
|
166
|
+
|
167
|
+
end
|