skozlov-netzke-core 0.1.0.2 → 0.4.1

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.
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