netzke-core 0.2.11 → 0.3.0
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/CHANGELOG +10 -0
- data/Manifest +12 -6
- data/TODO +1 -1
- data/autotest/discover.rb +3 -0
- data/generators/netzke_core/netzke_core_generator.rb +1 -4
- data/javascripts/core.js +1 -1
- data/lib/app/models/netzke_preference.rb +98 -10
- data/lib/netzke/base.rb +59 -14
- data/lib/netzke/controller_extensions.rb +21 -4
- data/lib/netzke/core_ext.rb +17 -0
- data/lib/netzke/feedback_ghost.rb +4 -4
- data/netzke-core.gemspec +7 -7
- 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 -1
- 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 +10 -1
- data/test/{core_ext_test.rb → unit/core_ext_test.rb} +12 -0
- data/test/{netzke_core_test.rb → unit/netzke_core_test.rb} +1 -44
- data/test/unit/netzke_preference_test.rb +103 -0
- metadata +21 -14
- data/generators/netzke_core/templates/create_netzke_layouts.rb +0 -14
- data/lib/app/models/netzke_layout.rb +0 -40
- data/test/netzke_preference_test.rb +0 -36
data/CHANGELOG
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
v0.3.0
|
2
|
+
Refactor: got rid of NetzkeLayout model, now all layouts are stored in netzke_preferences
|
3
|
+
New: persistent_config now has a method for_widget that accepts a block
|
4
|
+
autotest compatibility
|
5
|
+
New: String#to_b converts a string to true/false
|
6
|
+
New: Netzke::Base.session introduced for session data
|
7
|
+
New: weak_children_config and strong_children_config can now be declared by a widget, which specifies weak and strong configuration that every child of this widget will receive (e.g. display/hide configuration tool)
|
8
|
+
Fix: (degradation) flash message is now shown again in case of erroneous attempt to load a widget
|
9
|
+
New: widgets now can check session[:netzke_just_logged_in] and session[:netzke_just_logged_out] automatically set by Netzke after login/logout
|
10
|
+
|
1
11
|
v0.2.11
|
2
12
|
Introduction of getOwnerWidget()-method to Ext.Component. It provides the Netzke widget this Component belongs to.
|
3
13
|
|
data/Manifest
CHANGED
@@ -1,13 +1,12 @@
|
|
1
|
+
autotest/discover.rb
|
1
2
|
CHANGELOG
|
2
3
|
generators/netzke_core/netzke_core_generator.rb
|
3
|
-
generators/netzke_core/templates/create_netzke_layouts.rb
|
4
4
|
generators/netzke_core/templates/create_netzke_preferences.rb
|
5
5
|
generators/netzke_core/USAGE
|
6
6
|
init.rb
|
7
7
|
install.rb
|
8
8
|
javascripts/core.js
|
9
9
|
lib/app/controllers/netzke_controller.rb
|
10
|
-
lib/app/models/netzke_layout.rb
|
11
10
|
lib/app/models/netzke_preference.rb
|
12
11
|
lib/netzke/action_view_ext.rb
|
13
12
|
lib/netzke/base.rb
|
@@ -26,7 +25,9 @@ Rakefile
|
|
26
25
|
README.mdown
|
27
26
|
stylesheets/core.css
|
28
27
|
tasks/netzke_core_tasks.rake
|
29
|
-
test/app_root/app/controllers/
|
28
|
+
test/app_root/app/controllers/application_controller.rb
|
29
|
+
test/app_root/app/models/role.rb
|
30
|
+
test/app_root/app/models/user.rb
|
30
31
|
test/app_root/config/boot.rb
|
31
32
|
test/app_root/config/database.yml
|
32
33
|
test/app_root/config/environment.rb
|
@@ -37,10 +38,15 @@ test/app_root/config/environments/sqlite.rb
|
|
37
38
|
test/app_root/config/environments/sqlite3.rb
|
38
39
|
test/app_root/config/routes.rb
|
39
40
|
test/app_root/db/migrate/20081222035855_create_netzke_preferences.rb
|
41
|
+
test/app_root/db/migrate/20090423214303_create_roles.rb
|
42
|
+
test/app_root/db/migrate/20090423222114_create_users.rb
|
43
|
+
test/app_root/lib/console_with_fixtures.rb
|
40
44
|
test/app_root/script/console
|
41
|
-
test/
|
42
|
-
test/
|
43
|
-
test/netzke_preference_test.rb
|
45
|
+
test/fixtures/roles.yml
|
46
|
+
test/fixtures/users.yml
|
44
47
|
test/test_helper.rb
|
48
|
+
test/unit/core_ext_test.rb
|
49
|
+
test/unit/netzke_core_test.rb
|
50
|
+
test/unit/netzke_preference_test.rb
|
45
51
|
TODO
|
46
52
|
uninstall.rb
|
data/TODO
CHANGED
@@ -1 +1 @@
|
|
1
|
-
* Re-factor JS-level inheritance mechanisms
|
1
|
+
* Re-factor JS-level inheritance mechanisms
|
@@ -3,13 +3,10 @@ class NetzkeCoreGenerator < Rails::Generator::Base
|
|
3
3
|
def manifest
|
4
4
|
record do |m|
|
5
5
|
# FIXME: how do we avoid getting the same migration timestamps?
|
6
|
-
# m.migration_template 'create_netzke_preferences.rb', "db/migrate", {:migration_file_name => "create_netzke_preferences"}
|
7
|
-
# m.migration_template 'create_netzke_layouts.rb', "db/migrate", {:migration_file_name => "create_netzke_layouts"}
|
8
|
-
|
9
6
|
# Work-around
|
10
7
|
time = Time.now.utc.strftime("%Y%m%d%H%M%S")
|
11
8
|
m.directory 'db/migrate'
|
12
|
-
m.file 'create_netzke_layouts.rb', "db/migrate/#{time}_create_netzke_layouts.rb"
|
9
|
+
# m.file 'create_netzke_layouts.rb', "db/migrate/#{time}_create_netzke_layouts.rb"
|
13
10
|
m.file 'create_netzke_preferences.rb', "db/migrate/#{time.to_i+1}_create_netzke_preferences.rb"
|
14
11
|
end
|
15
12
|
end
|
data/javascripts/core.js
CHANGED
@@ -317,7 +317,7 @@ Ext.override(Ext.Panel, {
|
|
317
317
|
|
318
318
|
} else {
|
319
319
|
// we didn't get normal response - desplay the flash with eventual errors
|
320
|
-
this.
|
320
|
+
this.getOwnerWidget().feedback(responseObj.flash);
|
321
321
|
}
|
322
322
|
|
323
323
|
// reenable the panel
|
@@ -1,18 +1,19 @@
|
|
1
1
|
#
|
2
|
-
# TODO: would be great to support
|
2
|
+
# TODO: would be great to support something like this:
|
3
3
|
# NetzkePreference["name"].merge!({:a => 1, :b => 2}) # if NetzkePreference["name"] returns a hash
|
4
4
|
# or
|
5
5
|
# NetzkePreference["name"] << 2 # if NetzkePreference["name"] returns an array
|
6
6
|
# etc
|
7
7
|
#
|
8
8
|
class NetzkePreference < ActiveRecord::Base
|
9
|
-
|
9
|
+
belongs_to :user
|
10
|
+
belongs_to :role
|
10
11
|
|
11
12
|
ELEMENTARY_CONVERTION_METHODS= {'Fixnum' => 'to_i', 'String' => 'to_s', 'Float' => 'to_f', 'Symbol' => 'to_sym'}
|
12
13
|
|
13
|
-
def self.user_id
|
14
|
-
|
15
|
-
end
|
14
|
+
# def self.user_id
|
15
|
+
# Netzke::Base.user && Netzke::Base.user.id
|
16
|
+
# end
|
16
17
|
|
17
18
|
def self.widget_name=(value)
|
18
19
|
@@widget_name = value
|
@@ -48,25 +49,112 @@ class NetzkePreference < ActiveRecord::Base
|
|
48
49
|
|
49
50
|
def self.[](pref_name)
|
50
51
|
pref_name = normalize_preference_name(pref_name)
|
51
|
-
|
52
|
-
pref = self.find(:first, :conditions => conditions)
|
52
|
+
pref = self.pref_to_read(pref_name)
|
53
53
|
pref && pref.normalized_value
|
54
54
|
end
|
55
55
|
|
56
56
|
def self.[]=(pref_name, new_value)
|
57
57
|
pref_name = normalize_preference_name(pref_name)
|
58
|
-
|
59
|
-
pref = self.find(:first, :conditions => conditions)
|
58
|
+
pref = self.pref_to_write(pref_name)
|
60
59
|
|
61
60
|
# if assigning nil, simply delete the eventually found preference
|
62
61
|
if new_value.nil?
|
63
62
|
pref && pref.destroy
|
64
63
|
else
|
65
|
-
pref ||= self.new(conditions)
|
64
|
+
# pref ||= self.new(conditions(pref_name))
|
66
65
|
pref.normalized_value = new_value
|
67
66
|
pref.save!
|
68
67
|
end
|
69
68
|
end
|
69
|
+
|
70
|
+
# execute set/get operation for a specified widget, e.g.:
|
71
|
+
# NetzkePreference.for_widget('my_widget') { |p| p[:key] = "value" }
|
72
|
+
def self.for_widget(widget, &block)
|
73
|
+
raise ArgumentError, "Block is required for #{self.name}\#for_widget" if !block_given?
|
74
|
+
backup_widget_name = self.widget_name
|
75
|
+
self.widget_name = widget
|
76
|
+
res = yield(self)
|
77
|
+
self.widget_name = backup_widget_name
|
78
|
+
res
|
79
|
+
end
|
80
|
+
|
81
|
+
#
|
82
|
+
# Overwrite pref_to_read, pref_to_write methods, and find_all_for_widget if you want a different way of
|
83
|
+
# identifying the proper preference based on your own authorization strategy.
|
84
|
+
#
|
85
|
+
# The default strategy is:
|
86
|
+
# 1) if no masq_user or masq_role defined
|
87
|
+
# pref_to_read will search for the preference for user first, then for user's role
|
88
|
+
# pref_to_write will always find or create a preference for the current user (never for its role)
|
89
|
+
# 2) if masq_user or masq_role is defined
|
90
|
+
# pref_to_read and pref_to_write will always take the masquerade into account, e.g. reads/writes will go to
|
91
|
+
# the user/role specified
|
92
|
+
#
|
93
|
+
def self.pref_to_read(name)
|
94
|
+
name = name.to_s
|
95
|
+
session = Netzke::Base.session
|
96
|
+
cond = {:name => name, :widget_name => self.widget_name}
|
97
|
+
|
98
|
+
if session[:masq_user]
|
99
|
+
# first, get the prefs for this user it they exist
|
100
|
+
res = self.find(:first, :conditions => cond.merge({:user_id => session[:masq_user].id}))
|
101
|
+
# if it doesn't exist, get them for the user's role
|
102
|
+
res ||= self.find(:first, :conditions => cond.merge({:role_id => session[:masq_user].role.id}))
|
103
|
+
elsif session[:masq_role]
|
104
|
+
res = self.find(:first, :conditions => cond.merge({:role_id => session[:masq_role].id}))
|
105
|
+
elsif session[:user]
|
106
|
+
res = self.find(:first, :conditions => cond.merge({:user_id => session[:user].id}))
|
107
|
+
res ||= self.find(:first, :conditions => cond.merge({:role_id => session[:user].role.try(:id)}))
|
108
|
+
else
|
109
|
+
res = self.find(:first, :conditions => cond)
|
110
|
+
end
|
111
|
+
|
112
|
+
res
|
113
|
+
end
|
114
|
+
|
115
|
+
def self.pref_to_write(name)
|
116
|
+
name = name.to_s
|
117
|
+
session = Netzke::Base.session
|
118
|
+
cond = {:name => name, :widget_name => self.widget_name}
|
119
|
+
|
120
|
+
if session[:masq_user]
|
121
|
+
cond.merge!({:user_id => session[:masq_user].id})
|
122
|
+
res = self.find(:first, :conditions => cond)
|
123
|
+
res ||= self.new(cond)
|
124
|
+
elsif session[:masq_role]
|
125
|
+
# first, delete all the corresponding preferences for the users that have this role
|
126
|
+
Role.find(session[:masq_role].id).users.each do |u|
|
127
|
+
self.delete_all(cond.merge({:user_id => u.id}))
|
128
|
+
end
|
129
|
+
cond.merge!({:role_id => session[:masq_role].id})
|
130
|
+
res = self.find(:first, :conditions => cond)
|
131
|
+
res ||= self.new(cond)
|
132
|
+
elsif session[:user]
|
133
|
+
res = self.find(:first, :conditions => cond.merge({:user_id => session[:user].id}))
|
134
|
+
res ||= self.new(cond.merge({:user_id => session[:user].id}))
|
135
|
+
else
|
136
|
+
res = self.find(:first, :conditions => cond)
|
137
|
+
res ||= self.new(cond)
|
138
|
+
end
|
139
|
+
res
|
140
|
+
end
|
141
|
+
|
142
|
+
def self.find_all_for_widget(name)
|
143
|
+
session = Netzke::Base.session
|
144
|
+
cond = {:widget_name => name}
|
145
|
+
|
146
|
+
if session[:masq_user] || session[:masq_role]
|
147
|
+
cond.merge!({:user_id => session[:masq_user].try(:id), :role_id => session[:masq_role].try(:id)})
|
148
|
+
res = self.find(:all, :conditions => cond)
|
149
|
+
elsif session[:user]
|
150
|
+
res = self.find(:all, :conditions => cond.merge({:user_id => session[:user].id}))
|
151
|
+
res += self.find(:all, :conditions => cond.merge({:role_id => session[:user].role.try(:id)}))
|
152
|
+
else
|
153
|
+
res = self.find(:all, :conditions => cond)
|
154
|
+
end
|
155
|
+
|
156
|
+
res
|
157
|
+
end
|
70
158
|
|
71
159
|
private
|
72
160
|
def self.normalize_preference_name(name)
|
data/lib/netzke/base.rb
CHANGED
@@ -11,7 +11,6 @@ module Netzke
|
|
11
11
|
:javascripts => [],
|
12
12
|
:stylesheets => [],
|
13
13
|
|
14
|
-
:layout_manager => "NetzkeLayout",
|
15
14
|
:persistent_config_manager => "NetzkePreference",
|
16
15
|
|
17
16
|
:ext_location => defined?(RAILS_ROOT) && "#{RAILS_ROOT}/public/extjs"
|
@@ -28,7 +27,7 @@ module Netzke
|
|
28
27
|
self.name.split("::").last
|
29
28
|
end
|
30
29
|
|
31
|
-
# Multi-user support
|
30
|
+
# Multi-user support (deprecated in favor of controller sessions)
|
32
31
|
def user
|
33
32
|
@@user ||= nil
|
34
33
|
end
|
@@ -37,6 +36,25 @@ module Netzke
|
|
37
36
|
@@user = user
|
38
37
|
end
|
39
38
|
|
39
|
+
# Access to controller sessions
|
40
|
+
def session
|
41
|
+
@@session ||= {}
|
42
|
+
end
|
43
|
+
|
44
|
+
def session=(s)
|
45
|
+
@@session = s
|
46
|
+
end
|
47
|
+
|
48
|
+
# called by controller at the moment of successfull login
|
49
|
+
def login
|
50
|
+
session[:_netzke_next_request_is_first_after_login] = true
|
51
|
+
end
|
52
|
+
|
53
|
+
# called by controller at the moment of logout
|
54
|
+
def logout
|
55
|
+
session[:_netzke_next_request_is_first_after_logout] = true
|
56
|
+
end
|
57
|
+
|
40
58
|
#
|
41
59
|
# Use this class method to declare connection points between client side of a widget and its server side. A method in a widget class with the same name will be (magically) called by the client side of the widget. See Grid widget for an example
|
42
60
|
#
|
@@ -76,12 +94,7 @@ module Netzke
|
|
76
94
|
nil
|
77
95
|
end
|
78
96
|
|
79
|
-
|
80
|
-
Netzke::Base.config[:layout_manager].constantize
|
81
|
-
rescue NameError
|
82
|
-
nil
|
83
|
-
end
|
84
|
-
|
97
|
+
|
85
98
|
private
|
86
99
|
def set_default_config(default_config)
|
87
100
|
@@config ||= {}
|
@@ -92,12 +105,22 @@ module Netzke
|
|
92
105
|
end
|
93
106
|
extend ClassMethods
|
94
107
|
|
95
|
-
attr_accessor :config, :server_confg, :parent, :logger, :id_name, :permissions
|
108
|
+
attr_accessor :config, :server_confg, :parent, :logger, :id_name, :permissions, :session
|
96
109
|
attr_reader :pref
|
97
110
|
|
98
111
|
def initialize(config = {}, parent = nil)
|
112
|
+
@session = Netzke::Base.session
|
113
|
+
|
114
|
+
# Uncomment for application-wide weak/strong default config for widgets
|
115
|
+
# @config = (session[:weak_default_config] || {}).
|
116
|
+
# recursive_merge(initial_config).
|
117
|
+
# recursive_merge(config).
|
118
|
+
# recursive_merge(session[:strong_default_config] || {})
|
119
|
+
|
99
120
|
@config = initial_config.recursive_merge(config)
|
121
|
+
|
100
122
|
@parent = parent
|
123
|
+
|
101
124
|
@id_name = parent.nil? ? config[:name].to_s : "#{parent.id_name}__#{config[:name]}"
|
102
125
|
|
103
126
|
@flash = []
|
@@ -111,6 +134,24 @@ module Netzke
|
|
111
134
|
def logger
|
112
135
|
Rails.logger
|
113
136
|
end
|
137
|
+
|
138
|
+
# configuration of all children will get recursive_merge'd with strong_children_config
|
139
|
+
def strong_children_config= (c)
|
140
|
+
@strong_children_config = c
|
141
|
+
end
|
142
|
+
|
143
|
+
def strong_children_config
|
144
|
+
@strong_children_config ||= {}
|
145
|
+
end
|
146
|
+
|
147
|
+
# configuration of all children will get reverse_recursive_merge'd with weak_children_config
|
148
|
+
def weak_children_config= (c)
|
149
|
+
@weak_children_config = c
|
150
|
+
end
|
151
|
+
|
152
|
+
def weak_children_config
|
153
|
+
@weak_children_config ||= {}
|
154
|
+
end
|
114
155
|
|
115
156
|
def dependency_classes
|
116
157
|
res = []
|
@@ -194,7 +235,15 @@ module Netzke
|
|
194
235
|
short_class_name = aggregator.aggregatees[aggr][:widget_class_name]
|
195
236
|
raise ArgumentError, "No widget_class_name specified for aggregatee #{aggr} of #{aggregator.config[:name]}" if short_class_name.nil?
|
196
237
|
widget_class = "Netzke::#{short_class_name}".constantize
|
197
|
-
|
238
|
+
|
239
|
+
conf = weak_children_config.
|
240
|
+
recursive_merge(aggregator.aggregatees[aggr]).
|
241
|
+
recursive_merge(strong_children_config).
|
242
|
+
merge(:name => aggr)
|
243
|
+
|
244
|
+
aggregator = widget_class.new(conf, aggregator) # params: config, parent
|
245
|
+
aggregator.weak_children_config = weak_children_config
|
246
|
+
aggregator.strong_children_config = strong_children_config
|
198
247
|
end
|
199
248
|
aggregator
|
200
249
|
end
|
@@ -284,10 +333,6 @@ module Netzke
|
|
284
333
|
end
|
285
334
|
|
286
335
|
# some convenience for instances
|
287
|
-
def layout_manager_class
|
288
|
-
self.class.layout_manager_class
|
289
|
-
end
|
290
|
-
|
291
336
|
def persistent_config_manager_class
|
292
337
|
self.class.persistent_config_manager_class
|
293
338
|
end
|
@@ -2,12 +2,29 @@ module Netzke
|
|
2
2
|
module ControllerExtensions
|
3
3
|
def self.included(base)
|
4
4
|
base.extend ControllerClassMethods
|
5
|
-
base.send(:before_filter, :
|
5
|
+
base.send(:before_filter, :set_session_data)
|
6
6
|
end
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
def set_session_data
|
9
|
+
Netzke::Base.session = session
|
10
|
+
session[:user] = defined?(current_user) ? current_user : nil
|
11
|
+
|
12
|
+
Netzke::Base.user = session[:user] # for backward compatibility (TODO: eliminate the need for this)
|
13
|
+
|
14
|
+
# set netzke_just_logged_in and netzke_just_logged_out states (may be used by Netzke widgets)
|
15
|
+
if session[:_netzke_next_request_is_first_after_login]
|
16
|
+
session[:netzke_just_logged_in] = true
|
17
|
+
session[:_netzke_next_request_is_first_after_login] = false
|
18
|
+
else
|
19
|
+
session[:netzke_just_logged_in] = false
|
20
|
+
end
|
21
|
+
|
22
|
+
if session[:_netzke_next_request_is_first_after_logout]
|
23
|
+
session[:netzke_just_logged_out] = true
|
24
|
+
session[:_netzke_next_request_is_first_after_logout] = false
|
25
|
+
else
|
26
|
+
session[:netzke_just_logged_out] = false
|
27
|
+
end
|
11
28
|
end
|
12
29
|
|
13
30
|
def method_missing(method_name)
|
data/lib/netzke/core_ext.rb
CHANGED
@@ -29,6 +29,18 @@ class Hash
|
|
29
29
|
h
|
30
30
|
end
|
31
31
|
end
|
32
|
+
|
33
|
+
# Javascrit-like access to Hash values
|
34
|
+
def method_missing(method, *args)
|
35
|
+
if method.to_s =~ /=$/
|
36
|
+
method_base = method.to_s.sub(/=$/,'').to_sym
|
37
|
+
key = self[method_base.to_s].nil? ? method_base : method_base.to_s
|
38
|
+
self[key] = args.first
|
39
|
+
else
|
40
|
+
key = self[method.to_s].nil? ? method : method.to_s
|
41
|
+
self[key]
|
42
|
+
end
|
43
|
+
end
|
32
44
|
|
33
45
|
end
|
34
46
|
|
@@ -72,6 +84,11 @@ class String
|
|
72
84
|
regexp = /^\s*\n/
|
73
85
|
self.gsub!(regexp, '')
|
74
86
|
end
|
87
|
+
|
88
|
+
# "false" => false, "whatever_else" => true
|
89
|
+
def to_b
|
90
|
+
self != "false"
|
91
|
+
end
|
75
92
|
end
|
76
93
|
|
77
94
|
class Symbol
|
@@ -20,7 +20,7 @@ module Netzke
|
|
20
20
|
}
|
21
21
|
|
22
22
|
var showBox = function(msg, lvl){
|
23
|
-
if (!lvl) lvl = 'notice';
|
23
|
+
if (!lvl) {lvl = 'notice'};
|
24
24
|
var msgCt = Ext.DomHelper.insertFirst(document.body, {'class':'netzke-feedback'}, true);
|
25
25
|
var m = Ext.DomHelper.append(msgCt, {html:createBox(msg,lvl)}, true);
|
26
26
|
m.slideIn('t').pause(2).ghost("b", {remove:true});
|
@@ -30,10 +30,10 @@ module Netzke
|
|
30
30
|
var compoundMsg = "";
|
31
31
|
Ext.each(msg, function(m){
|
32
32
|
compoundMsg += m.msg + '<br>';
|
33
|
-
})
|
34
|
-
if (compoundMsg != "") showBox(compoundMsg, null) // the second parameter will be level
|
33
|
+
});
|
34
|
+
if (compoundMsg != "") showBox(compoundMsg, null); // the second parameter will be level
|
35
35
|
} else {
|
36
|
-
showBox(msg)
|
36
|
+
showBox(msg);
|
37
37
|
}
|
38
38
|
}
|
39
39
|
JS
|
data/netzke-core.gemspec
CHANGED
@@ -2,27 +2,27 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{netzke-core}
|
5
|
-
s.version = "0.
|
5
|
+
s.version = "0.3.0"
|
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{2009-
|
9
|
+
s.date = %q{2009-05-07}
|
10
10
|
s.description = %q{Build ExtJS/Rails widgets with minimum effort}
|
11
11
|
s.email = %q{sergei@writelesscode.com}
|
12
|
-
s.extra_rdoc_files = ["CHANGELOG", "lib/app/controllers/netzke_controller.rb", "lib/app/models/
|
13
|
-
s.files = ["
|
12
|
+
s.extra_rdoc_files = ["CHANGELOG", "lib/app/controllers/netzke_controller.rb", "lib/app/models/netzke_preference.rb", "lib/netzke/action_view_ext.rb", "lib/netzke/base.rb", "lib/netzke/base_extras/interface.rb", "lib/netzke/base_extras/js_builder.rb", "lib/netzke/controller_extensions.rb", "lib/netzke/core_ext.rb", "lib/netzke/feedback_ghost.rb", "lib/netzke/routing.rb", "lib/netzke-core.rb", "lib/vendor/facets/hash/recursive_merge.rb", "LICENSE", "README.mdown", "tasks/netzke_core_tasks.rake", "TODO"]
|
13
|
+
s.files = ["autotest/discover.rb", "CHANGELOG", "generators/netzke_core/netzke_core_generator.rb", "generators/netzke_core/templates/create_netzke_preferences.rb", "generators/netzke_core/USAGE", "init.rb", "install.rb", "javascripts/core.js", "lib/app/controllers/netzke_controller.rb", "lib/app/models/netzke_preference.rb", "lib/netzke/action_view_ext.rb", "lib/netzke/base.rb", "lib/netzke/base_extras/interface.rb", "lib/netzke/base_extras/js_builder.rb", "lib/netzke/controller_extensions.rb", "lib/netzke/core_ext.rb", "lib/netzke/feedback_ghost.rb", "lib/netzke/routing.rb", "lib/netzke-core.rb", "lib/vendor/facets/hash/recursive_merge.rb", "LICENSE", "Manifest", "netzke-core.gemspec", "Rakefile", "README.mdown", "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", "TODO", "uninstall.rb"]
|
14
14
|
s.has_rdoc = true
|
15
15
|
s.homepage = %q{http://writelesscode.com}
|
16
16
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Netzke-core", "--main", "README.mdown"]
|
17
17
|
s.require_paths = ["lib"]
|
18
18
|
s.rubyforge_project = %q{netzke-core}
|
19
|
-
s.rubygems_version = %q{1.3.
|
19
|
+
s.rubygems_version = %q{1.3.2}
|
20
20
|
s.summary = %q{Build ExtJS/Rails widgets with minimum effort}
|
21
|
-
s.test_files = ["test/core_ext_test.rb", "test/netzke_core_test.rb", "test/netzke_preference_test.rb"]
|
21
|
+
s.test_files = ["test/unit/core_ext_test.rb", "test/unit/netzke_core_test.rb", "test/unit/netzke_preference_test.rb"]
|
22
22
|
|
23
23
|
if s.respond_to? :specification_version then
|
24
24
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
25
|
-
s.specification_version =
|
25
|
+
s.specification_version = 3
|
26
26
|
|
27
27
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
28
28
|
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,7 +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 = {
|
6
|
+
config.action_controller.session = {:key => 'rails_session', :secret => 'd229e4d22437432705ab3985d4d246'}
|
7
7
|
config.plugin_locators.unshift(
|
8
8
|
Class.new(Rails::Plugin::Locator) do
|
9
9
|
def plugins
|
@@ -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
@@ -9,4 +9,13 @@ require 'test_help'
|
|
9
9
|
silence_warnings {RAILS_ENV = ENV['RAILS_ENV']}
|
10
10
|
|
11
11
|
# Run the migrations
|
12
|
-
ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate")
|
12
|
+
ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate")
|
13
|
+
|
14
|
+
# Set default fixture loading properties
|
15
|
+
ActiveSupport::TestCase.class_eval do
|
16
|
+
self.use_transactional_fixtures = true
|
17
|
+
self.use_instantiated_fixtures = false
|
18
|
+
self.fixture_path = "#{File.dirname(__FILE__)}/fixtures"
|
19
|
+
|
20
|
+
fixtures :all
|
21
|
+
end
|
@@ -30,4 +30,16 @@ class CoreExtTest < ActiveSupport::TestCase
|
|
30
30
|
{:aB => 1, :cDD => [{:lookMa => true},{:wowNow => true}]}
|
31
31
|
],[:a_b => 1, :c_d_d => [{:look_ma => true},{:wow_now => true}]].convert_keys{|k| k.camelize(:lower)})
|
32
32
|
end
|
33
|
+
|
34
|
+
test "javascript-like access to hash data" do
|
35
|
+
a = {}
|
36
|
+
a["key"] = 100
|
37
|
+
assert_equal(100, a.key)
|
38
|
+
|
39
|
+
a.key = 200
|
40
|
+
assert_equal(200, a["key"])
|
41
|
+
|
42
|
+
a.another_key = 300
|
43
|
+
assert_equal(300, a[:another_key])
|
44
|
+
end
|
33
45
|
end
|
@@ -1,8 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
|
-
|
3
2
|
require 'netzke-core'
|
4
3
|
|
5
|
-
# test widgets
|
6
4
|
module Netzke
|
7
5
|
class Widget < Base
|
8
6
|
interface :method_one, :method_two
|
@@ -46,24 +44,10 @@ module Netzke
|
|
46
44
|
end
|
47
45
|
end
|
48
46
|
|
49
|
-
# mocking the User class
|
50
|
-
class User
|
51
|
-
attr_accessor :id
|
52
|
-
def initialize(id)
|
53
|
-
@id = id
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
47
|
class NetzkeCoreTest < ActiveSupport::TestCase
|
58
48
|
include Netzke
|
59
49
|
|
60
50
|
def setup
|
61
|
-
# object = mock()
|
62
|
-
# object.stubs(:normalized_value)
|
63
|
-
# object.stubs(:normalized_value=)
|
64
|
-
# # object.stubs(:save!)
|
65
|
-
# NetzkePreference.stubs(:find).returns(object)
|
66
|
-
|
67
51
|
end
|
68
52
|
|
69
53
|
test "base class loaded" do
|
@@ -134,14 +118,6 @@ class NetzkeCoreTest < ActiveSupport::TestCase
|
|
134
118
|
assert(!widget.dependencies.include?('DeepNestedWidget'))
|
135
119
|
end
|
136
120
|
|
137
|
-
# test "dependencies in JS class generators" do
|
138
|
-
# widget = Widget.new
|
139
|
-
# assert(widget.js_missing_code.index("Ext.netzke.cache['NestedWidgetOne']"))
|
140
|
-
# assert(widget.js_missing_code.index("Ext.netzke.cache['NestedWidgetTwo']"))
|
141
|
-
# assert(widget.js_missing_code.index("Ext.netzke.cache['DeepNestedWidget']"))
|
142
|
-
# assert(widget.js_missing_code.index("Ext.netzke.cache['Widget']"))
|
143
|
-
# end
|
144
|
-
|
145
121
|
test "dependency classes" do
|
146
122
|
widget = Widget.new
|
147
123
|
# not testing the order
|
@@ -154,29 +130,10 @@ class NetzkeCoreTest < ActiveSupport::TestCase
|
|
154
130
|
assert('a_widget', widget.config[:name])
|
155
131
|
end
|
156
132
|
|
157
|
-
test "class configuration" do
|
158
|
-
assert_equal(NetzkeLayout, Netzke::Base.layout_manager_class)
|
159
|
-
end
|
160
|
-
|
161
133
|
test "js inheritance" do
|
162
134
|
widget = JsInheritanceWidget.new
|
163
135
|
assert(widget.js_missing_code.index("Ext.netzke.cache.JsInheritanceWidget"))
|
164
136
|
assert(widget.js_missing_code.index("Ext.netzke.cache.Widget"))
|
165
137
|
end
|
166
|
-
|
167
|
-
# Netzke::Base.current_user = User.new(1)
|
168
|
-
# Widget.new(:prohibit => :all, :name => 'widget')
|
169
|
-
#
|
170
|
-
# Netzke::Base.current_user = User.new(2)
|
171
|
-
# Widget.new(:prohibit => :read, :name => 'widget')
|
172
|
-
#
|
173
|
-
# Netzke::Base.current_user = User.new(1)
|
174
|
-
# widget = Widget.new(:name => 'widget')
|
175
|
-
# assert_equal({:read => false, :update => false}, widget.permissions)
|
176
|
-
#
|
177
|
-
# Netzke::Base.current_user = User.new(2)
|
178
|
-
# widget = Widget.new(:name => 'widget')
|
179
|
-
# assert_equal({:read => false, :update => true}, widget.permissions)
|
180
|
-
#
|
181
|
-
# end
|
138
|
+
|
182
139
|
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'netzke-core'
|
3
|
+
class NetzkePreferenceTest < ActiveSupport::TestCase
|
4
|
+
test "pref to read-write" do
|
5
|
+
p = NetzkePreference
|
6
|
+
session = Netzke::Base.session
|
7
|
+
session.clear
|
8
|
+
|
9
|
+
assert_not_nil(p.pref_to_write(:test))
|
10
|
+
p[:test] = "a value"
|
11
|
+
assert_not_nil(p.pref_to_read(:test))
|
12
|
+
end
|
13
|
+
|
14
|
+
test "basic values" do
|
15
|
+
an_integer = 1976
|
16
|
+
a_float = 1976.1345
|
17
|
+
a_symbol = :a_symbol
|
18
|
+
a_true = true
|
19
|
+
a_false = false
|
20
|
+
a_nil = nil
|
21
|
+
a_hash = {"a" => an_integer, "b" => a_true, "c" => nil, "d" => a_float}
|
22
|
+
an_array = [1, "a", a_hash, [1,3,4], a_true, a_false, a_nil, a_float]
|
23
|
+
|
24
|
+
|
25
|
+
p = NetzkePreference
|
26
|
+
p[:a_hash] = a_hash
|
27
|
+
p["an_integer"] = an_integer
|
28
|
+
p[:a_true] = a_true
|
29
|
+
p[:a_false] = a_false
|
30
|
+
p[:a_nil] = a_nil
|
31
|
+
p[:an_array] = an_array
|
32
|
+
p[:a_symbol] = a_symbol
|
33
|
+
p[:a_float] = a_float
|
34
|
+
|
35
|
+
assert_equal(a_hash, p[:a_hash])
|
36
|
+
assert_equal(an_integer, p[:an_integer])
|
37
|
+
assert_equal(a_true, p[:a_true])
|
38
|
+
assert_equal(a_false, p[:a_false])
|
39
|
+
assert_equal(an_array, p[:an_array])
|
40
|
+
assert_equal(a_nil, p[:a_nil])
|
41
|
+
assert_equal(a_symbol, p[:a_symbol])
|
42
|
+
assert_equal(a_float, p[:a_float])
|
43
|
+
|
44
|
+
assert_equal(nil, p[:non_existing])
|
45
|
+
end
|
46
|
+
|
47
|
+
test "multi-user/multi-role support" do
|
48
|
+
p = NetzkePreference
|
49
|
+
session = Netzke::Base.session
|
50
|
+
|
51
|
+
admin_role = Role.create(:name => 'admin')
|
52
|
+
user_role = Role.create(:name => 'user')
|
53
|
+
|
54
|
+
admin1 = User.create(:login => 'admin1', :role => admin_role)
|
55
|
+
user1 = User.create(:login => 'user1', :role => user_role)
|
56
|
+
user2 = User.create(:login => 'user2', :role => user_role)
|
57
|
+
|
58
|
+
#
|
59
|
+
# assign a value for a role, then read it back by users with the same role
|
60
|
+
#
|
61
|
+
session.clear
|
62
|
+
session[:masq_role] = user_role
|
63
|
+
p[:test] = 100
|
64
|
+
|
65
|
+
# first user
|
66
|
+
session.clear
|
67
|
+
session[:user] = user1
|
68
|
+
assert_equal(100, p[:test])
|
69
|
+
|
70
|
+
# second user
|
71
|
+
session.clear
|
72
|
+
session[:user] = user2
|
73
|
+
assert_equal(100, p[:test])
|
74
|
+
|
75
|
+
#
|
76
|
+
# now overwrite the value for user2
|
77
|
+
#
|
78
|
+
p[:test] = 200
|
79
|
+
assert_equal(200, p[:test])
|
80
|
+
# .. and check that its still the same for user1
|
81
|
+
session.clear
|
82
|
+
session[:user] = user1
|
83
|
+
assert_equal(100, p[:test])
|
84
|
+
|
85
|
+
#
|
86
|
+
# now overwrite it for user1 by means of masq_user
|
87
|
+
#
|
88
|
+
session.clear
|
89
|
+
session[:masq_user] = user1
|
90
|
+
p[:test] = 300
|
91
|
+
assert_equal(300, p[:test])
|
92
|
+
# .. and check it's still the same for user2
|
93
|
+
session.clear
|
94
|
+
session[:masq_user] = user2
|
95
|
+
assert_equal(200, p[:test])
|
96
|
+
# .. and that a new user with role 'user' will still read the original value assigned for the role
|
97
|
+
user3 = User.create(:login => "user3", :role => user_role)
|
98
|
+
session.clear
|
99
|
+
session[:user] = user3
|
100
|
+
assert_equal(100, p[:test])
|
101
|
+
|
102
|
+
end
|
103
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: netzke-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergei Kozlov
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-05-07 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -22,7 +22,6 @@ extensions: []
|
|
22
22
|
extra_rdoc_files:
|
23
23
|
- CHANGELOG
|
24
24
|
- lib/app/controllers/netzke_controller.rb
|
25
|
-
- lib/app/models/netzke_layout.rb
|
26
25
|
- lib/app/models/netzke_preference.rb
|
27
26
|
- lib/netzke/action_view_ext.rb
|
28
27
|
- lib/netzke/base.rb
|
@@ -39,16 +38,15 @@ extra_rdoc_files:
|
|
39
38
|
- tasks/netzke_core_tasks.rake
|
40
39
|
- TODO
|
41
40
|
files:
|
41
|
+
- autotest/discover.rb
|
42
42
|
- CHANGELOG
|
43
43
|
- generators/netzke_core/netzke_core_generator.rb
|
44
|
-
- generators/netzke_core/templates/create_netzke_layouts.rb
|
45
44
|
- generators/netzke_core/templates/create_netzke_preferences.rb
|
46
45
|
- generators/netzke_core/USAGE
|
47
46
|
- init.rb
|
48
47
|
- install.rb
|
49
48
|
- javascripts/core.js
|
50
49
|
- lib/app/controllers/netzke_controller.rb
|
51
|
-
- lib/app/models/netzke_layout.rb
|
52
50
|
- lib/app/models/netzke_preference.rb
|
53
51
|
- lib/netzke/action_view_ext.rb
|
54
52
|
- lib/netzke/base.rb
|
@@ -67,7 +65,9 @@ files:
|
|
67
65
|
- README.mdown
|
68
66
|
- stylesheets/core.css
|
69
67
|
- tasks/netzke_core_tasks.rake
|
70
|
-
- test/app_root/app/controllers/
|
68
|
+
- test/app_root/app/controllers/application_controller.rb
|
69
|
+
- test/app_root/app/models/role.rb
|
70
|
+
- test/app_root/app/models/user.rb
|
71
71
|
- test/app_root/config/boot.rb
|
72
72
|
- test/app_root/config/database.yml
|
73
73
|
- test/app_root/config/environment.rb
|
@@ -78,15 +78,22 @@ files:
|
|
78
78
|
- test/app_root/config/environments/sqlite3.rb
|
79
79
|
- test/app_root/config/routes.rb
|
80
80
|
- test/app_root/db/migrate/20081222035855_create_netzke_preferences.rb
|
81
|
+
- test/app_root/db/migrate/20090423214303_create_roles.rb
|
82
|
+
- test/app_root/db/migrate/20090423222114_create_users.rb
|
83
|
+
- test/app_root/lib/console_with_fixtures.rb
|
81
84
|
- test/app_root/script/console
|
82
|
-
- test/
|
83
|
-
- test/
|
84
|
-
- test/netzke_preference_test.rb
|
85
|
+
- test/fixtures/roles.yml
|
86
|
+
- test/fixtures/users.yml
|
85
87
|
- test/test_helper.rb
|
88
|
+
- test/unit/core_ext_test.rb
|
89
|
+
- test/unit/netzke_core_test.rb
|
90
|
+
- test/unit/netzke_preference_test.rb
|
86
91
|
- TODO
|
87
92
|
- uninstall.rb
|
88
93
|
has_rdoc: true
|
89
94
|
homepage: http://writelesscode.com
|
95
|
+
licenses: []
|
96
|
+
|
90
97
|
post_install_message:
|
91
98
|
rdoc_options:
|
92
99
|
- --line-numbers
|
@@ -112,11 +119,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
119
|
requirements: []
|
113
120
|
|
114
121
|
rubyforge_project: netzke-core
|
115
|
-
rubygems_version: 1.3.
|
122
|
+
rubygems_version: 1.3.2
|
116
123
|
signing_key:
|
117
|
-
specification_version:
|
124
|
+
specification_version: 3
|
118
125
|
summary: Build ExtJS/Rails widgets with minimum effort
|
119
126
|
test_files:
|
120
|
-
- test/core_ext_test.rb
|
121
|
-
- test/netzke_core_test.rb
|
122
|
-
- test/netzke_preference_test.rb
|
127
|
+
- test/unit/core_ext_test.rb
|
128
|
+
- test/unit/netzke_core_test.rb
|
129
|
+
- test/unit/netzke_preference_test.rb
|
@@ -1,14 +0,0 @@
|
|
1
|
-
class CreateNetzkeLayouts < ActiveRecord::Migration
|
2
|
-
def self.up
|
3
|
-
create_table :netzke_layouts do |t|
|
4
|
-
t.string :widget_name
|
5
|
-
t.string :items_class
|
6
|
-
t.integer :user_id
|
7
|
-
t.timestamps
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.down
|
12
|
-
drop_table :netzke_layouts
|
13
|
-
end
|
14
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
class NetzkeLayout < ActiveRecord::Base
|
2
|
-
EXT_UNRELATED_ATTRIBUTES = %w{ id layout_id position created_at updated_at }
|
3
|
-
|
4
|
-
# Multi user support
|
5
|
-
def self.user_id
|
6
|
-
Netzke::Base.user && Netzke::Base.user.id
|
7
|
-
end
|
8
|
-
|
9
|
-
# normal create, but with a user_id merged-in
|
10
|
-
def self.create_with_user(config)
|
11
|
-
create(config.merge(:user_id => user_id))
|
12
|
-
end
|
13
|
-
|
14
|
-
def items
|
15
|
-
items_class.constantize.find_all_by_layout_id(id, :order => 'position')
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.by_widget(widget_name)
|
19
|
-
self.find(:first, :conditions => {:widget_name => widget_name.to_s, :user_id => user_id})
|
20
|
-
end
|
21
|
-
|
22
|
-
def move_item(old_index, new_index)
|
23
|
-
layout_item = items[old_index]
|
24
|
-
layout_item.remove_from_list
|
25
|
-
layout_item.insert_at(new_index + 1)
|
26
|
-
end
|
27
|
-
|
28
|
-
def items_arry
|
29
|
-
unrelated_attrs_eraser = EXT_UNRELATED_ATTRIBUTES.inject({}){|h,el| h.merge(el => nil)} # => {:id => nil, :layout_id => nil, ...}
|
30
|
-
items.map(&:attributes).map do |i|
|
31
|
-
# delete unrelated attributes
|
32
|
-
i.merge(unrelated_attrs_eraser).convert_keys {|k| k.to_sym}
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def items_arry_without_hidden
|
37
|
-
items_arry.reject{|i| i[:hidden] && !i[:name] == :id} # 'id' is exceptional, should always be sent
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'netzke-core'
|
3
|
-
class NetzkePreferenceTest < ActiveSupport::TestCase
|
4
|
-
test "basic values" do
|
5
|
-
an_integer = 1976
|
6
|
-
a_float = 1976.1345
|
7
|
-
a_symbol = :a_symbol
|
8
|
-
a_true = true
|
9
|
-
a_false = false
|
10
|
-
a_nil = nil
|
11
|
-
a_hash = {"a" => an_integer, "b" => a_true, "c" => nil, "d" => a_float}
|
12
|
-
an_array = [1, "a", a_hash, [1,3,4], a_true, a_false, a_nil, a_float]
|
13
|
-
|
14
|
-
|
15
|
-
p = NetzkePreference
|
16
|
-
p[:a_hash] = a_hash
|
17
|
-
p["an_integer"] = an_integer
|
18
|
-
p[:a_true] = a_true
|
19
|
-
p[:a_false] = a_false
|
20
|
-
p[:a_nil] = a_nil
|
21
|
-
p[:an_array] = an_array
|
22
|
-
p[:a_symbol] = a_symbol
|
23
|
-
p[:a_float] = a_float
|
24
|
-
|
25
|
-
assert_equal(a_hash, p[:a_hash])
|
26
|
-
assert_equal(an_integer, p[:an_integer])
|
27
|
-
assert_equal(a_true, p[:a_true])
|
28
|
-
assert_equal(a_false, p[:a_false])
|
29
|
-
assert_equal(an_array, p[:an_array])
|
30
|
-
assert_equal(a_nil, p[:a_nil])
|
31
|
-
assert_equal(a_symbol, p[:a_symbol])
|
32
|
-
assert_equal(a_float, p[:a_float])
|
33
|
-
|
34
|
-
assert_equal(nil, p[:non_existing])
|
35
|
-
end
|
36
|
-
end
|