netzke-core 0.6.3 → 0.6.4
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.rdoc +12 -3
- data/Rakefile +1 -1
- data/app/controllers/netzke_controller.rb +1 -1
- data/javascripts/core.js +7 -0
- data/lib/netzke/actions.rb +17 -8
- data/lib/netzke/base.rb +2 -2
- data/lib/netzke/composition.rb +26 -14
- data/lib/netzke/configuration.rb +1 -1
- data/lib/netzke/core/session.rb +0 -9
- data/lib/netzke/core/version.rb +1 -1
- data/lib/netzke/core.rb +12 -1
- data/lib/netzke/core_ext/symbol.rb +2 -2
- data/lib/netzke/javascript.rb +1 -1
- data/lib/netzke/services.rb +19 -19
- data/lib/netzke/state.rb +64 -0
- data/lib/netzke-core.rb +1 -0
- data/netzke-core.gemspec +4 -10
- data/test/rails_app/app/components/extended_server_caller.rb +1 -1
- metadata +5 -11
- data/generators/netzke_core/USAGE +0 -8
- data/generators/netzke_core/netzke_core_generator.rb +0 -18
- data/lib/generators/migration_helper.rb +0 -32
- data/lib/generators/netzke/USAGE +0 -8
- data/lib/generators/netzke/core_generator.rb +0 -24
- data/lib/netzke/persistence.rb +0 -118
- data/templates/core/create_netzke_preferences.rb +0 -18
data/CHANGELOG.rdoc
CHANGED
@@ -1,4 +1,13 @@
|
|
1
|
-
= v0.6.
|
1
|
+
= v0.6.4 - 2010-11-05
|
2
|
+
* enhancements
|
3
|
+
* Implemented Netzke.isLoading(), useful for testing
|
4
|
+
* Persistence support
|
5
|
+
|
6
|
+
* API change
|
7
|
+
* +endpoint+ DSL call now results in a method called <endpoint_name>_endpoint, _not_ just <endpoint_name> (beware when overriding endpoint definitions, or calling endpoint methods on child components)
|
8
|
+
* Using +api+ for endpoint declaration is gone
|
9
|
+
|
10
|
+
= v0.6.3 - 2010-11-02
|
2
11
|
* The +ext_config+ option is back, deprecated.
|
3
12
|
|
4
13
|
= v0.6.2 - 2010-10-27
|
@@ -122,7 +131,7 @@
|
|
122
131
|
* New: String#to_b converts a string to true/false
|
123
132
|
* New: Netzke::Base.session introduced for session data
|
124
133
|
* 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)
|
125
|
-
* Fix: (degradation) flash message is now shown again in case of erroneous attempt to load a
|
134
|
+
* Fix: (degradation) flash message is now shown again in case of erroneous attempt to load a widge
|
126
135
|
* New: widgets now can check session[:netzke_just_logged_in] and session[:netzke_just_logged_out] automatically set by Netzke after login/logout
|
127
136
|
|
128
137
|
= v0.2.11
|
@@ -213,4 +222,4 @@
|
|
213
222
|
* Meta work: replacing underscore with dash in the name
|
214
223
|
|
215
224
|
= v0.1.0 - 2008-12-11
|
216
|
-
* Initial release
|
225
|
+
* Initial release
|
data/Rakefile
CHANGED
@@ -14,7 +14,7 @@ begin
|
|
14
14
|
|
15
15
|
========================================================================
|
16
16
|
|
17
|
-
Thanks for installing
|
17
|
+
Thanks for installing netzke-core!
|
18
18
|
|
19
19
|
Netzke home page: http://netzke.org
|
20
20
|
Netzke Google Groups: http://groups.google.com/group/netzke
|
@@ -49,7 +49,7 @@ class NetzkeController < ApplicationController
|
|
49
49
|
if action
|
50
50
|
w_instance = Netzke::Base.instance_by_config(Netzke::Core.session[:netzke_components][component_name])
|
51
51
|
# only component's actions starting with "endpoint_" are accessible from outside (security)
|
52
|
-
endpoint_action = action.to_s.index('__') ? action : "
|
52
|
+
endpoint_action = action.to_s.index('__') ? action : "_#{action}_ep_wrapper"
|
53
53
|
render :text => w_instance.send(endpoint_action, params), :layout => false
|
54
54
|
else
|
55
55
|
super
|
data/javascripts/core.js
CHANGED
@@ -10,6 +10,11 @@ At this time the following constants have been set by Rails:
|
|
10
10
|
Ext.BLANK_IMAGE_URL = Netzke.RelativeExtUrl + "/resources/images/default/s.gif";
|
11
11
|
Ext.ns('Ext.netzke'); // namespace for extensions that depend on Ext
|
12
12
|
|
13
|
+
Netzke.isLoading=function () {
|
14
|
+
return Netzke.runningRequests!=0;
|
15
|
+
}
|
16
|
+
Netzke.runningRequests=0
|
17
|
+
|
13
18
|
Netzke.deprecationWarning = function(msg){
|
14
19
|
if (typeof console == 'undefined') {
|
15
20
|
// no console defined
|
@@ -479,6 +484,7 @@ Netzke.componentMixin = function(receiver){
|
|
479
484
|
|
480
485
|
// Does the call to the server and processes the response
|
481
486
|
callServer : function(intp, params, callback, scope){
|
487
|
+
Netzke.runningRequests++;
|
482
488
|
if (!params) params = {};
|
483
489
|
Ext.Ajax.request({
|
484
490
|
params: params,
|
@@ -497,6 +503,7 @@ Netzke.componentMixin = function(receiver){
|
|
497
503
|
},
|
498
504
|
scope : this
|
499
505
|
});
|
506
|
+
Netzke.runningRequests--;
|
500
507
|
},
|
501
508
|
|
502
509
|
setResult: function(result) {
|
data/lib/netzke/actions.rb
CHANGED
@@ -22,7 +22,6 @@ module Netzke
|
|
22
22
|
extend ActiveSupport::Concern
|
23
23
|
|
24
24
|
ACTION_METHOD_NAME = "%s_action"
|
25
|
-
ACTION_METHOD_REGEXP = /^(.+)_action$/
|
26
25
|
|
27
26
|
included do
|
28
27
|
alias_method_chain :js_config, :actions
|
@@ -30,6 +29,7 @@ module Netzke
|
|
30
29
|
|
31
30
|
module ClassMethods
|
32
31
|
def action(name, config = {}, &block)
|
32
|
+
register_action(name)
|
33
33
|
config[:name] = name.to_s
|
34
34
|
method_name = ACTION_METHOD_NAME % name
|
35
35
|
|
@@ -47,15 +47,24 @@ module Netzke
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
50
|
+
|
51
|
+
# Register an action
|
52
|
+
def register_action(name)
|
53
|
+
current_actions = read_inheritable_attribute(:actions) || []
|
54
|
+
current_actions << name
|
55
|
+
write_inheritable_attribute(:actions, current_actions.uniq)
|
56
|
+
end
|
57
|
+
|
58
|
+
# Returns registered actions
|
59
|
+
def registered_actions
|
60
|
+
read_inheritable_attribute(:actions) || []
|
61
|
+
end
|
62
|
+
|
50
63
|
end
|
51
64
|
|
52
|
-
#
|
65
|
+
# All actions for this instance
|
53
66
|
def actions
|
54
|
-
|
55
|
-
self.class.instance_methods.grep(ACTION_METHOD_REGEXP).inject({}) do |r, m|
|
56
|
-
m.match(ACTION_METHOD_REGEXP)
|
57
|
-
r.merge($1.to_sym => normalize_action_config(send(m)))
|
58
|
-
end
|
67
|
+
@actions ||= self.class.registered_actions.inject({}){ |res, name| res.merge(name.to_sym => normalize_action_config(send(ACTION_METHOD_NAME % name))) }
|
59
68
|
end
|
60
69
|
|
61
70
|
def js_config_with_actions #:nodoc
|
@@ -99,4 +108,4 @@ module Netzke
|
|
99
108
|
# end
|
100
109
|
|
101
110
|
end
|
102
|
-
end
|
111
|
+
end
|
data/lib/netzke/base.rb
CHANGED
@@ -5,7 +5,7 @@ require 'netzke/stylesheets'
|
|
5
5
|
require 'netzke/services'
|
6
6
|
require 'netzke/composition'
|
7
7
|
require 'netzke/configuration'
|
8
|
-
require 'netzke/
|
8
|
+
require 'netzke/state'
|
9
9
|
require 'netzke/embedding'
|
10
10
|
require 'netzke/actions'
|
11
11
|
require 'netzke/session'
|
@@ -28,7 +28,7 @@ module Netzke
|
|
28
28
|
self.default_instance_config = {}
|
29
29
|
|
30
30
|
include Session
|
31
|
-
include
|
31
|
+
include State
|
32
32
|
include Configuration
|
33
33
|
include Javascript
|
34
34
|
include Services
|
data/lib/netzke/composition.rb
CHANGED
@@ -4,6 +4,8 @@ module Netzke
|
|
4
4
|
module Composition
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
|
+
COMPONENT_METHOD_NAME = "%s_component"
|
8
|
+
|
7
9
|
included do
|
8
10
|
|
9
11
|
# Loads a component on browser's request. Every Nettzke component gets this endpoint.
|
@@ -46,16 +48,23 @@ module Netzke
|
|
46
48
|
# {:data_class => "Book", :title => orig[:title] + ", extended"}
|
47
49
|
# end
|
48
50
|
def component(name, config = {}, &block)
|
51
|
+
register_component(name)
|
49
52
|
config = config.dup
|
50
53
|
config[:class_name] ||= name.to_s.camelize
|
51
54
|
config[:name] = name.to_s
|
52
|
-
method_name =
|
55
|
+
method_name = COMPONENT_METHOD_NAME % name
|
53
56
|
|
54
57
|
if block_given?
|
55
58
|
define_method(method_name, &block)
|
56
59
|
else
|
57
|
-
|
58
|
-
|
60
|
+
if superclass.instance_methods.map(&:to_s).include?(method_name)
|
61
|
+
define_method(method_name) do
|
62
|
+
super().merge(config)
|
63
|
+
end
|
64
|
+
else
|
65
|
+
define_method(method_name) do
|
66
|
+
config
|
67
|
+
end
|
59
68
|
end
|
60
69
|
end
|
61
70
|
end
|
@@ -67,6 +76,18 @@ module Netzke
|
|
67
76
|
config.merge(:component => name)
|
68
77
|
end
|
69
78
|
|
79
|
+
# Register a component
|
80
|
+
def register_component(name)
|
81
|
+
current_components = read_inheritable_attribute(:components) || []
|
82
|
+
current_components << name
|
83
|
+
write_inheritable_attribute(:components, current_components.uniq)
|
84
|
+
end
|
85
|
+
|
86
|
+
# Returns registered components
|
87
|
+
def registered_components
|
88
|
+
read_inheritable_attribute(:components) || []
|
89
|
+
end
|
90
|
+
|
70
91
|
end
|
71
92
|
|
72
93
|
module InstanceMethods
|
@@ -81,16 +102,7 @@ module Netzke
|
|
81
102
|
|
82
103
|
# All components for this instance, which includes components defined on class level, and components detected in :items
|
83
104
|
def components
|
84
|
-
|
85
|
-
# self.class.components.merge(@components || {})
|
86
|
-
|
87
|
-
@components ||= begin
|
88
|
-
method_regexp = /^_(.+)_component$/
|
89
|
-
self.class.instance_methods.grep(method_regexp).inject({}) do |r, m|
|
90
|
-
m.match(method_regexp)
|
91
|
-
r.merge($1.to_sym => send(m))
|
92
|
-
end
|
93
|
-
end
|
105
|
+
@components ||= self.class.registered_components.inject({}){ |res, name| res.merge(name.to_sym => send(COMPONENT_METHOD_NAME % name)) }
|
94
106
|
end
|
95
107
|
|
96
108
|
def non_late_components
|
@@ -211,7 +223,7 @@ module Netzke
|
|
211
223
|
if action
|
212
224
|
if components[component]
|
213
225
|
# only actions starting with "endpoint_" are accessible
|
214
|
-
endpoint_action = action.to_s.index('__') ? action : "
|
226
|
+
endpoint_action = action.to_s.index('__') ? action : "_#{action}_ep_wrapper"
|
215
227
|
component_instance(component).send(endpoint_action, params)
|
216
228
|
else
|
217
229
|
component_missing(component)
|
data/lib/netzke/configuration.rb
CHANGED
@@ -48,7 +48,7 @@ module Netzke
|
|
48
48
|
|
49
49
|
# Config that is not overridden by parents and sessions
|
50
50
|
def independent_config
|
51
|
-
@independent_config ||= initial_config.merge(weak_independent_options).merge(persistent_options)
|
51
|
+
@independent_config ||= initial_config.merge(weak_independent_options).merge(initial_config[:persistence] ? persistent_options : {})
|
52
52
|
end
|
53
53
|
|
54
54
|
def session_config
|
data/lib/netzke/core/session.rb
CHANGED
@@ -1,15 +1,6 @@
|
|
1
1
|
module Netzke
|
2
2
|
module Core
|
3
3
|
module Session
|
4
|
-
# Access to controller sessions
|
5
|
-
def session
|
6
|
-
@@session ||= {}
|
7
|
-
end
|
8
|
-
|
9
|
-
def session=(s)
|
10
|
-
@@session = s
|
11
|
-
end
|
12
|
-
|
13
4
|
# Should be called by session controller at the moment of successfull login
|
14
5
|
def login
|
15
6
|
session[:_netzke_next_request_is_first_after_login] = true
|
data/lib/netzke/core/version.rb
CHANGED
data/lib/netzke/core.rb
CHANGED
@@ -21,7 +21,12 @@ module Netzke
|
|
21
21
|
extend Session
|
22
22
|
extend Masquerading
|
23
23
|
|
24
|
+
# set in Netzke::ControllerExtensions
|
24
25
|
mattr_accessor :controller
|
26
|
+
|
27
|
+
# set in Netzke::ControllerExtensions
|
28
|
+
mattr_accessor :session
|
29
|
+
@@session = {}
|
25
30
|
|
26
31
|
mattr_accessor :javascripts
|
27
32
|
@@javascripts = ["#{File.dirname(__FILE__)}/../../javascripts/core.js"]
|
@@ -32,8 +37,8 @@ module Netzke
|
|
32
37
|
mattr_accessor :external_css
|
33
38
|
@@external_css = []
|
34
39
|
|
40
|
+
# Set in the Engine after_initialize callback
|
35
41
|
mattr_accessor :ext_location
|
36
|
-
|
37
42
|
mattr_accessor :with_icons
|
38
43
|
|
39
44
|
mattr_accessor :icons_uri
|
@@ -42,6 +47,12 @@ module Netzke
|
|
42
47
|
mattr_accessor :javascript_on_main_page
|
43
48
|
@@javascript_on_main_page = true
|
44
49
|
|
50
|
+
mattr_accessor :persistence_manager
|
51
|
+
@@persistence_manager = "NetzkeComponentState"
|
52
|
+
|
53
|
+
# Set in the Engine after_initialize callback
|
54
|
+
mattr_accessor :persistence_manager_class
|
55
|
+
|
45
56
|
def self.setup
|
46
57
|
yield self
|
47
58
|
end
|
data/lib/netzke/javascript.rb
CHANGED
@@ -217,7 +217,7 @@ module Netzke
|
|
217
217
|
res[:components] = comp_hash unless comp_hash.empty?
|
218
218
|
|
219
219
|
# Api (besides the default "deliver_component" - JavaScript side already knows about it)
|
220
|
-
endpoints = self.class.
|
220
|
+
endpoints = self.class.registered_endpoints - [:deliver_component]
|
221
221
|
res.merge!(:endpoints => endpoints) unless endpoints.empty?
|
222
222
|
|
223
223
|
# Inform the JavaScript side if persistent_config is enabled
|
data/lib/netzke/services.rb
CHANGED
@@ -15,45 +15,45 @@ module Netzke
|
|
15
15
|
# See netzke-basepack's GridPanel for an example.
|
16
16
|
#
|
17
17
|
def api(*api_points)
|
18
|
-
::ActiveSupport::Deprecation.warn("Using the 'api' call
|
18
|
+
::ActiveSupport::Deprecation.warn("Using the 'api' call has no longer effect. Define endpoints instead.", caller)
|
19
19
|
|
20
|
-
api_points.each do |apip|
|
21
|
-
|
22
|
-
end
|
20
|
+
# api_points.each do |apip|
|
21
|
+
# register_endpoint(apip)
|
22
|
+
# end
|
23
23
|
|
24
24
|
# It may be needed later for security
|
25
|
-
api_points.each do |apip|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
25
|
+
# api_points.each do |apip|
|
26
|
+
# module_eval <<-END, __FILE__, __LINE__
|
27
|
+
# def endpoint_#{apip}(*args)
|
28
|
+
# before_api_call_result = defined?(before_api_call) && before_api_call('#{apip}', *args) || {}
|
29
|
+
# (before_api_call_result.empty? ? #{apip}(*args) : before_api_call_result).to_nifty_json
|
30
|
+
# end
|
31
|
+
# END
|
32
|
+
# end
|
33
33
|
end
|
34
34
|
|
35
35
|
# Defines an endpoint
|
36
36
|
def endpoint(name, options = {}, &block)
|
37
|
-
|
38
|
-
define_method
|
37
|
+
register_endpoint(name)
|
38
|
+
define_method("#{name}_endpoint", &block) if block # if no block is given, the method is supposed to be defined elsewhere
|
39
39
|
|
40
40
|
# define_method name, &block if block # if no block is given, the method is supposed to be defined elsewhere
|
41
|
-
define_method :"
|
42
|
-
res = send(name, *args)
|
41
|
+
define_method :"_#{name}_ep_wrapper" do |*args|
|
42
|
+
res = send("#{name}_endpoint", *args)
|
43
43
|
res.respond_to?(:to_nifty_json) && res.to_nifty_json || ""
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
47
|
# Register an endpoint
|
48
|
-
def
|
48
|
+
def register_endpoint(ep)
|
49
49
|
current_endpoints = read_inheritable_attribute(:endpoints) || []
|
50
50
|
current_endpoints << ep
|
51
51
|
write_inheritable_attribute(:endpoints, current_endpoints.uniq)
|
52
52
|
end
|
53
53
|
|
54
54
|
# Returns registered endpoints
|
55
|
-
def
|
56
|
-
read_inheritable_attribute(:endpoints)
|
55
|
+
def registered_endpoints
|
56
|
+
read_inheritable_attribute(:endpoints) || []
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
data/lib/netzke/state.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
2
|
+
module Netzke
|
3
|
+
# When a persistence subsystem (such as {netzke-persistence}[https://github.com/skozlov/netzke-persistence]) is used, a widget can store its state using the +update_state+ method that accepts a hash, e.g.:
|
4
|
+
# update_state(:position => {:x => 100, :y => 200})
|
5
|
+
#
|
6
|
+
# Later the state can be retrieved by calling the +state+ method:
|
7
|
+
#
|
8
|
+
# state[:position] #=> {:x => 100, :y => 200}
|
9
|
+
#
|
10
|
+
# To enable persistence for a specific component, configure it with +persistence+ option set to +true+.
|
11
|
+
#
|
12
|
+
# == Sharing state
|
13
|
+
#
|
14
|
+
# Different components can share the state by sharing the persistence key, which can be provided as configuration option, e.g.:
|
15
|
+
#
|
16
|
+
# netzke :books, :class_name => "Basepack::GridPanel", :persistence_key => "books_state_identifier"
|
17
|
+
# netzke :deleted_books, :class_name => "Basepack::GridPanel", :persistence_key => "books_state_identifier"
|
18
|
+
#
|
19
|
+
# Make sure that the provided persistence_key has effect on _application_ level, _not_ only within the view.
|
20
|
+
# By default persistence_key is set to component's global id. Thus, <i>two components named equally will share the state even being used in different views</i>.
|
21
|
+
#
|
22
|
+
module State
|
23
|
+
# A string which will identify the component in persistence subsystem.
|
24
|
+
# If +persistence_key+ is passed, use it. Otherwise use global_id.
|
25
|
+
def persistence_key
|
26
|
+
initial_config[:persistence_key] ? initial_config[:persistence_key] : global_id
|
27
|
+
end
|
28
|
+
|
29
|
+
# Component's persistent state.
|
30
|
+
def state
|
31
|
+
@state ||= (state_manager.state || {}).symbolize_keys
|
32
|
+
end
|
33
|
+
|
34
|
+
# Merges passed hash into component's state.
|
35
|
+
def update_state(hsh)
|
36
|
+
state_manager.update_state!(hsh)
|
37
|
+
@state = nil # reset cache
|
38
|
+
end
|
39
|
+
|
40
|
+
# Options merged into component's configuration right after default and user-passed config, thus being reflected in +Netzke::Base#independent_config+ (see Netzke::Configuration).
|
41
|
+
def persistent_options
|
42
|
+
(state[:persistent_options] || {}).symbolize_keys
|
43
|
+
end
|
44
|
+
|
45
|
+
# Updates +persistent_options+
|
46
|
+
def update_persistent_options(hsh)
|
47
|
+
new_persistent_options = persistent_options.merge(hsh)
|
48
|
+
new_persistent_options.delete_if{ |k,v| v.nil? } # setting values to nil means deleting them
|
49
|
+
update_state(:persistent_options => new_persistent_options)
|
50
|
+
end
|
51
|
+
|
52
|
+
protected
|
53
|
+
|
54
|
+
# Initialized state manager class. At this moment this class has current_user, component, and session set.
|
55
|
+
def state_manager
|
56
|
+
@state_manager ||= Netzke::Core.persistence_manager_class.init({
|
57
|
+
:component => persistence_key,
|
58
|
+
:current_user => Netzke::Core.controller.respond_to?(:current_user) && Netzke::Core.controller.current_user,
|
59
|
+
:session => Netzke::Core.session
|
60
|
+
})
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
data/lib/netzke-core.rb
CHANGED
@@ -14,6 +14,7 @@ module Netzke
|
|
14
14
|
# Do some initialization which is only possible after Rails is initialized
|
15
15
|
Netzke::Core.ext_location ||= ::Rails.root.join("public", "extjs")
|
16
16
|
Netzke::Core.with_icons = File.exists?("#{Rails.root}/public#{Netzke::Core.icons_uri}") if Netzke::Core.with_icons.nil?
|
17
|
+
Netzke::Core.persistence_manager_class = Netzke::Core.persistence_manager.constantize rescue nil
|
17
18
|
end
|
18
19
|
end
|
19
20
|
end
|
data/netzke-core.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{netzke-core}
|
8
|
-
s.version = "0.6.
|
8
|
+
s.version = "0.6.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Sergei Kozlov"]
|
12
|
-
s.date = %q{2010-11-
|
12
|
+
s.date = %q{2010-11-05}
|
13
13
|
s.description = %q{Allows building ExtJS/Rails reusable code in a DRY way}
|
14
14
|
s.email = %q{sergei@playcode.nl}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -45,14 +45,9 @@ Gem::Specification.new do |s|
|
|
45
45
|
"features/step_definitions/web_steps.rb",
|
46
46
|
"features/support/env.rb",
|
47
47
|
"features/support/paths.rb",
|
48
|
-
"generators/netzke_core/USAGE",
|
49
|
-
"generators/netzke_core/netzke_core_generator.rb",
|
50
48
|
"init.rb",
|
51
49
|
"install.rb",
|
52
50
|
"javascripts/core.js",
|
53
|
-
"lib/generators/migration_helper.rb",
|
54
|
-
"lib/generators/netzke/USAGE",
|
55
|
-
"lib/generators/netzke/core_generator.rb",
|
56
51
|
"lib/netzke-core.rb",
|
57
52
|
"lib/netzke/actions.rb",
|
58
53
|
"lib/netzke/base.rb",
|
@@ -71,12 +66,12 @@ Gem::Specification.new do |s|
|
|
71
66
|
"lib/netzke/embedding.rb",
|
72
67
|
"lib/netzke/ext_component.rb",
|
73
68
|
"lib/netzke/javascript.rb",
|
74
|
-
"lib/netzke/persistence.rb",
|
75
69
|
"lib/netzke/rails/action_view_ext.rb",
|
76
70
|
"lib/netzke/rails/controller_extensions.rb",
|
77
71
|
"lib/netzke/rails/routes.rb",
|
78
72
|
"lib/netzke/services.rb",
|
79
73
|
"lib/netzke/session.rb",
|
74
|
+
"lib/netzke/state.rb",
|
80
75
|
"lib/netzke/stylesheets.rb",
|
81
76
|
"lib/tasks/netzke_core_tasks.rake",
|
82
77
|
"netzke-core.gemspec",
|
@@ -88,7 +83,6 @@ Gem::Specification.new do |s|
|
|
88
83
|
"spec/spec.opt",
|
89
84
|
"spec/spec_helper.rb",
|
90
85
|
"stylesheets/core.css",
|
91
|
-
"templates/core/create_netzke_preferences.rb",
|
92
86
|
"test/fixtures/roles.yml",
|
93
87
|
"test/fixtures/users.yml",
|
94
88
|
"test/rails_app/.gitignore",
|
@@ -166,7 +160,7 @@ Gem::Specification.new do |s|
|
|
166
160
|
s.post_install_message = %q{
|
167
161
|
========================================================================
|
168
162
|
|
169
|
-
Thanks for installing
|
163
|
+
Thanks for installing netzke-core!
|
170
164
|
|
171
165
|
Netzke home page: http://netzke.org
|
172
166
|
Netzke Google Groups: http://groups.google.com/group/netzke
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 6
|
8
|
-
-
|
9
|
-
version: 0.6.
|
8
|
+
- 4
|
9
|
+
version: 0.6.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Sergei Kozlov
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-11-
|
17
|
+
date: 2010-11-05 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -70,14 +70,9 @@ files:
|
|
70
70
|
- features/step_definitions/web_steps.rb
|
71
71
|
- features/support/env.rb
|
72
72
|
- features/support/paths.rb
|
73
|
-
- generators/netzke_core/USAGE
|
74
|
-
- generators/netzke_core/netzke_core_generator.rb
|
75
73
|
- init.rb
|
76
74
|
- install.rb
|
77
75
|
- javascripts/core.js
|
78
|
-
- lib/generators/migration_helper.rb
|
79
|
-
- lib/generators/netzke/USAGE
|
80
|
-
- lib/generators/netzke/core_generator.rb
|
81
76
|
- lib/netzke-core.rb
|
82
77
|
- lib/netzke/actions.rb
|
83
78
|
- lib/netzke/base.rb
|
@@ -96,12 +91,12 @@ files:
|
|
96
91
|
- lib/netzke/embedding.rb
|
97
92
|
- lib/netzke/ext_component.rb
|
98
93
|
- lib/netzke/javascript.rb
|
99
|
-
- lib/netzke/persistence.rb
|
100
94
|
- lib/netzke/rails/action_view_ext.rb
|
101
95
|
- lib/netzke/rails/controller_extensions.rb
|
102
96
|
- lib/netzke/rails/routes.rb
|
103
97
|
- lib/netzke/services.rb
|
104
98
|
- lib/netzke/session.rb
|
99
|
+
- lib/netzke/state.rb
|
105
100
|
- lib/netzke/stylesheets.rb
|
106
101
|
- lib/tasks/netzke_core_tasks.rake
|
107
102
|
- netzke-core.gemspec
|
@@ -113,7 +108,6 @@ files:
|
|
113
108
|
- spec/spec.opt
|
114
109
|
- spec/spec_helper.rb
|
115
110
|
- stylesheets/core.css
|
116
|
-
- templates/core/create_netzke_preferences.rb
|
117
111
|
- test/fixtures/roles.yml
|
118
112
|
- test/fixtures/users.yml
|
119
113
|
- test/rails_app/.gitignore
|
@@ -191,7 +185,7 @@ homepage: http://netzke.org
|
|
191
185
|
licenses: []
|
192
186
|
|
193
187
|
post_install_message: "\n\
|
194
|
-
========================================================================\n\n Thanks for installing
|
188
|
+
========================================================================\n\n Thanks for installing netzke-core!\n\n Netzke home page: http://netzke.org\n Netzke Google Groups: http://groups.google.com/group/netzke\n Netzke tutorials: http://blog.writelesscode.com\n\n\
|
195
189
|
========================================================================\n\n"
|
196
190
|
rdoc_options: []
|
197
191
|
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# class NetzkeCoreGenerator < Rails::Generator::NamedBase
|
2
|
-
class NetzkeCoreGenerator < Rails::Generator::Base
|
3
|
-
def manifest
|
4
|
-
record do |m|
|
5
|
-
m.migration_template 'create_netzke_preferences.rb', 'db/migrate', :assigns => {
|
6
|
-
:migration_name => "CreateNetzkePreferences"
|
7
|
-
}, :migration_file_name => "create_netzke_preferences"
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.gem_root
|
12
|
-
File.expand_path('../../../', __FILE__)
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.source_root
|
16
|
-
File.join(gem_root, 'templates', 'core')
|
17
|
-
end
|
18
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module MigrationHelper
|
2
|
-
include Rails::Generators::Migration
|
3
|
-
|
4
|
-
module ClassMethods
|
5
|
-
def migration_lookup_at(dirname) #:nodoc:
|
6
|
-
Dir.glob("#{dirname}/[0-9]*_*.rb")
|
7
|
-
end
|
8
|
-
|
9
|
-
def migration_exists?(dirname, file_name) #:nodoc:
|
10
|
-
migration_lookup_at(dirname).grep(/\d+_#{file_name}.rb$/).first
|
11
|
-
end
|
12
|
-
|
13
|
-
def current_migration_number(dirname) #:nodoc:
|
14
|
-
migration_lookup_at(dirname).collect do |file|
|
15
|
-
File.basename(file).split("_").first.to_i
|
16
|
-
end.max.to_i
|
17
|
-
end
|
18
|
-
|
19
|
-
def next_migration_number(dirname) #:nodoc:
|
20
|
-
orm = Rails.configuration.generators.options[:rails][:orm]
|
21
|
-
require "rails/generators/#{orm}"
|
22
|
-
"#{orm.to_s.camelize}::Generators::Base".constantize.next_migration_number(dirname)
|
23
|
-
rescue
|
24
|
-
raise NotImplementedError
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.included(base) #:nodoc:
|
29
|
-
puts "MigrationHelper included by #{base}"
|
30
|
-
base.extend ClassMethods
|
31
|
-
end
|
32
|
-
end
|
data/lib/generators/netzke/USAGE
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'rails/generators'
|
2
|
-
require 'rails/generators/migration'
|
3
|
-
require 'generators/migration_helper'
|
4
|
-
|
5
|
-
module Netzke
|
6
|
-
module Generators
|
7
|
-
class CoreGenerator < Rails::Generators::Base
|
8
|
-
include ::MigrationHelper
|
9
|
-
|
10
|
-
def execute
|
11
|
-
migration_template 'create_netzke_preferences.rb', 'db/migrate/create_netzke_preferences.rb'
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.source_root
|
15
|
-
File.join(gem_root, 'templates', 'core')
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.gem_root
|
19
|
-
File.expand_path("../../../../", __FILE__)
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
data/lib/netzke/persistence.rb
DELETED
@@ -1,118 +0,0 @@
|
|
1
|
-
module Netzke
|
2
|
-
# TODO:
|
3
|
-
# rename persistence_ to persistence_
|
4
|
-
module Persistence
|
5
|
-
|
6
|
-
module ClassMethods
|
7
|
-
# Persistent config manager class
|
8
|
-
def persistence_manager_class
|
9
|
-
Netzke::Base.persistence_manager.try(:constantize)
|
10
|
-
rescue NameError
|
11
|
-
nil
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
15
|
-
|
16
|
-
module InstanceMethods
|
17
|
-
|
18
|
-
# If the component has persistent config in its disposal
|
19
|
-
def persistence_enabled?
|
20
|
-
!persistence_manager_class.nil? && initial_config[:persistent_config]
|
21
|
-
end
|
22
|
-
|
23
|
-
# Access to own persistent config, e.g.:
|
24
|
-
# persistent_config["window.size"] = 100
|
25
|
-
# persistent_config["window.size"] => 100
|
26
|
-
# This method is user/role-aware
|
27
|
-
# def persistent_config
|
28
|
-
# if persistence_enabled?
|
29
|
-
# config_class = self.class.persistence_manager_class
|
30
|
-
# config_class.component_name = persistence_key.to_s # pass to the config class our unique name
|
31
|
-
# config_class
|
32
|
-
# else
|
33
|
-
# # if we can't use presistent config, all the calls to it will always return nil,
|
34
|
-
# # and the "="-operation will be ignored
|
35
|
-
# logger.debug "==> NETZKE: no persistent config is set up for component '#{global_id}'"
|
36
|
-
# {}
|
37
|
-
# end
|
38
|
-
# end
|
39
|
-
|
40
|
-
# Access to the global persistent config (e.g. of another component)
|
41
|
-
def global_persistent_config(owner = nil)
|
42
|
-
config_class = self.class.persistence_manager_class
|
43
|
-
config_class.component_name = owner
|
44
|
-
config_class
|
45
|
-
end
|
46
|
-
|
47
|
-
# A string which will identify NetzkePreference records for this component.
|
48
|
-
# If <tt>persistence_key</tt> is passed, use it. Otherwise use global component's id.
|
49
|
-
def persistence_key #:nodoc:
|
50
|
-
# initial_config[:persistence_key] ? parent.try(:persistence_key) ? "#{parent.persistence_key}__#{initial_config[:persistence_key]}".to_sym : initial_config[:persistence_key] : global_id.to_sym
|
51
|
-
initial_config[:persistence_key] ? initial_config[:persistence_key] : global_id.to_sym
|
52
|
-
end
|
53
|
-
|
54
|
-
# def update_persistent_ext_config(hsh)
|
55
|
-
# current_config = persistent_config[:ext_config] || {}
|
56
|
-
# current_config.deep_merge!(hsh.deep_convert_keys{ |k| k.to_s }) # first, recursively stringify the keys
|
57
|
-
# persistent_config[:ext_config] = current_config
|
58
|
-
# end
|
59
|
-
|
60
|
-
# Returns a hash built from all persistent config values for the current component, following the double underscore
|
61
|
-
# naming convention. E.g., if we have the following persistent config pairs:
|
62
|
-
# enabled => true
|
63
|
-
# layout__width => 100
|
64
|
-
# layout__header__height => 20
|
65
|
-
#
|
66
|
-
# this method will return the following hash:
|
67
|
-
# {:enabled => true, :layout => {:width => 100, :header => {:height => 20}}}
|
68
|
-
# def persistence_hash_OLD
|
69
|
-
# return {} if !persistence_enabled?
|
70
|
-
#
|
71
|
-
# @persistence_hash ||= begin
|
72
|
-
# prefs = NetzkePreference.find_all_for_component(persistence_key.to_s)
|
73
|
-
# res = {}
|
74
|
-
# prefs.each do |p|
|
75
|
-
# hsh_levels = p.name.split("__").map(&:to_sym)
|
76
|
-
# tmp_res = {} # it decends into itself, building itself
|
77
|
-
# anchor = {} # it will keep the tail of tmp_res
|
78
|
-
# hsh_levels.each do |level_prefix|
|
79
|
-
# tmp_res[level_prefix] ||= level_prefix == hsh_levels.last ? p.normalized_value : {}
|
80
|
-
# anchor = tmp_res[level_prefix] if level_prefix == hsh_levels.first
|
81
|
-
# tmp_res = tmp_res[level_prefix]
|
82
|
-
# end
|
83
|
-
# # Now 'anchor' is a hash that represents the path to the single value,
|
84
|
-
# # for example: {:ext_config => {:title => 100}} (which corresponds to ext_config__title)
|
85
|
-
# # So we need to recursively merge it into the final result
|
86
|
-
# res.deep_merge!(hsh_levels.first => anchor)
|
87
|
-
# end
|
88
|
-
# res.deep_convert_keys{ |k| k.to_sym } # recursively symbolize the keys
|
89
|
-
# end
|
90
|
-
# end
|
91
|
-
|
92
|
-
def update_persistent_options(hash)
|
93
|
-
if persistence_enabled?
|
94
|
-
options = persistent_options
|
95
|
-
persistence_manager_class.pref_to_write(global_id).update_attribute(:value, options.deep_merge(hash))
|
96
|
-
else
|
97
|
-
logger && logger.debug("Netzke warning: No persistence enabled for component '#{global_id}'")
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def persistent_options
|
102
|
-
return {} if !persistence_enabled?
|
103
|
-
persistence_manager_class.pref_to_read(global_id).try(:value) || {}
|
104
|
-
end
|
105
|
-
|
106
|
-
# A convenience method for instances
|
107
|
-
def persistence_manager_class
|
108
|
-
self.class.persistence_manager_class
|
109
|
-
end
|
110
|
-
|
111
|
-
end
|
112
|
-
|
113
|
-
def self.included(receiver)
|
114
|
-
receiver.extend ClassMethods
|
115
|
-
receiver.send :include, InstanceMethods
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
class CreateNetzkePreferences < ActiveRecord::Migration
|
2
|
-
def self.up
|
3
|
-
drop_table(:netzke_preferences) if table_exists?(:netzke_preferences)
|
4
|
-
|
5
|
-
create_table :netzke_preferences do |t|
|
6
|
-
t.string :key
|
7
|
-
t.text :value
|
8
|
-
t.integer :user_id
|
9
|
-
t.integer :role_id
|
10
|
-
|
11
|
-
t.timestamps
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.down
|
16
|
-
drop_table :netzke_preferences
|
17
|
-
end
|
18
|
-
end
|