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.
Files changed (48) hide show
  1. data/CHANGELOG +108 -0
  2. data/LICENSE +2 -19
  3. data/Manifest +50 -0
  4. data/README.rdoc +12 -0
  5. data/Rakefile +2 -3
  6. data/TODO +2 -0
  7. data/autotest/discover.rb +3 -0
  8. data/generators/netzke_core/netzke_core_generator.rb +6 -6
  9. data/generators/netzke_core/templates/create_netzke_preferences.rb +2 -2
  10. data/javascripts/core.js +474 -111
  11. data/lib/app/controllers/netzke_controller.rb +76 -0
  12. data/lib/app/models/netzke_preference.rb +128 -39
  13. data/lib/netzke-core.rb +23 -9
  14. data/lib/netzke/action_view_ext.rb +26 -0
  15. data/lib/netzke/base.rb +440 -102
  16. data/lib/netzke/base_js.rb +258 -0
  17. data/lib/netzke/controller_extensions.rb +80 -29
  18. data/lib/netzke/core_ext.rb +72 -21
  19. data/lib/netzke/feedback_ghost.rb +43 -0
  20. data/lib/netzke/routing.rb +9 -0
  21. data/netzke-core.gemspec +10 -11
  22. data/stylesheets/core.css +12 -0
  23. data/test/app_root/app/controllers/{application.rb → application_controller.rb} +0 -0
  24. data/test/app_root/app/models/role.rb +3 -0
  25. data/test/app_root/app/models/user.rb +3 -0
  26. data/test/app_root/config/boot.rb +2 -1
  27. data/test/app_root/config/database.yml +10 -0
  28. data/test/app_root/config/environment.rb +1 -0
  29. data/test/app_root/db/migrate/20081222035855_create_netzke_preferences.rb +18 -0
  30. data/test/app_root/db/migrate/20090423214303_create_roles.rb +11 -0
  31. data/test/app_root/db/migrate/20090423222114_create_users.rb +12 -0
  32. data/test/app_root/lib/console_with_fixtures.rb +4 -0
  33. data/test/app_root/script/console +1 -0
  34. data/test/fixtures/roles.yml +7 -0
  35. data/test/fixtures/users.yml +9 -0
  36. data/test/test_helper.rb +3 -2
  37. data/test/unit/core_ext_test.rb +66 -0
  38. data/test/unit/netzke_core_test.rb +167 -0
  39. data/test/unit/netzke_preference_test.rb +103 -0
  40. metadata +45 -30
  41. data/README.mdown +0 -11
  42. data/generators/netzke_core/templates/create_netzke_layouts.rb +0 -14
  43. data/generators/netzke_core/templates/netzke.html.erb +0 -10
  44. data/lib/app/models/netzke_layout.rb +0 -75
  45. data/lib/netzke/js_class_builder.rb +0 -114
  46. data/lib/vendor/facets/hash/recursive_merge.rb +0 -28
  47. data/test/core_ext_test.rb +0 -35
  48. 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
@@ -0,0 +1,9 @@
1
+ module Netzke
2
+ module Routing
3
+ module MapperExtensions
4
+ def netzke
5
+ @set.add_route("/netzke/:action.:format", {:controller => "netzke"})
6
+ end
7
+ end
8
+ end
9
+ end
@@ -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.0.2"
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{2008-12-28}
9
+ s.date = %q{2009-09-06}
10
10
  s.description = %q{Build ExtJS/Rails widgets with minimum effort}
11
- s.email = %q{sergei@writelesscode.com}
12
- s.extra_rdoc_files = ["CHANGELOG", "lib/app/controllers/netzke_controller.rb", "lib/app/models/netzke_layout.rb", "lib/app/models/netzke_preference.rb", "lib/netzke/base.rb", "lib/netzke/controller_extensions.rb", "lib/netzke/core_ext.rb", "lib/netzke/js_class_builder.rb", "lib/netzke-core.rb", "lib/vendor/facets/hash/recursive_merge.rb", "LICENSE", "README.mdown", "tasks/netzke_core_tasks.rake"]
13
- s.files = ["CHANGELOG", "generators/netzke_core/netzke_core_generator.rb", "generators/netzke_core/templates/create_netzke_layouts.rb", "generators/netzke_core/templates/create_netzke_preferences.rb", "generators/netzke_core/templates/netzke.html.erb", "generators/netzke_core/USAGE", "init.rb", "install.rb", "javascripts/core.js", "lib/app/controllers/netzke_controller.rb", "lib/app/models/netzke_layout.rb", "lib/app/models/netzke_preference.rb", "lib/netzke/base.rb", "lib/netzke/controller_extensions.rb", "lib/netzke/core_ext.rb", "lib/netzke/js_class_builder.rb", "lib/netzke-core.rb", "lib/vendor/facets/hash/recursive_merge.rb", "LICENSE", "Manifest", "netzke-core.gemspec", "Rakefile", "README.mdown", "tasks/netzke_core_tasks.rake", "test/app_root/app/controllers/application.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/script/console", "test/core_ext_test.rb", "test/netzke_core_test.rb", "test/test_helper.rb", "uninstall.rb"]
14
- s.has_rdoc = true
15
- s.homepage = %q{http://writelesscode.com}
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.1}
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 = 2
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
@@ -0,0 +1,12 @@
1
+ /*
2
+ This file gets loaded along with the rest of Ext library at the initial load
3
+ */
4
+
5
+ /* feedback */
6
+ .netzke-feedback {
7
+ position:fixed;
8
+ left:25%;
9
+ top:0;
10
+ width:300px;
11
+ z-index:20000;
12
+ }
@@ -0,0 +1,3 @@
1
+ class Role < ActiveRecord::Base
2
+ has_many :users
3
+ end
@@ -0,0 +1,3 @@
1
+ class User < ActiveRecord::Base
2
+ belongs_to :role
3
+ end
@@ -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.1.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,11 @@
1
+ class CreateRoles < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :roles do |t|
4
+ t.string :name
5
+ end
6
+ end
7
+
8
+ def self.down
9
+ drop_table :roles
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ class CreateUsers < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :users do |t|
4
+ t.string :login
5
+ t.integer :role_id
6
+ end
7
+ end
8
+
9
+ def self.down
10
+ drop_table :users
11
+ end
12
+ 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
@@ -3,4 +3,5 @@ libs = " -r irb/completion"
3
3
  libs << " -r test/test_helper"
4
4
  libs << " -r console_app"
5
5
  libs << " -r console_with_helpers"
6
+ libs << " -r console_with_fixtures"
6
7
  exec "#{irb} #{libs} --simple-prompt"
@@ -0,0 +1,7 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ one:
4
+ name: MyString
5
+
6
+ two:
7
+ name: MyString
@@ -0,0 +1,9 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ one:
4
+ login: MyString
5
+ role_id: 1
6
+
7
+ two:
8
+ login: MyString
9
+ role_id: 1
@@ -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
- Test::Unit::TestCase.class_eval do
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