netzke-core 0.6.3 → 0.6.4

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc CHANGED
@@ -1,4 +1,13 @@
1
- = v0.6.3 - EDGE
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 widget
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 Netzke Core!
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 : "endpoint_#{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) {
@@ -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
- # Actions to be used in the config
65
+ # All actions for this instance
53
66
  def actions
54
- # Call all the action related methods to collect the actions
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/persistence'
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 Persistence
31
+ include State
32
32
  include Configuration
33
33
  include Javascript
34
34
  include Services
@@ -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 = "_#{name}_component"
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
- define_method(method_name) do
58
- config
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
- # items if @components.nil? # simply trigger collecting @components from items
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 : "endpoint_#{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)
@@ -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
@@ -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
@@ -3,7 +3,7 @@ module Netzke
3
3
  module Version
4
4
  MAJOR = 0
5
5
  MINOR = 6
6
- PATCH = 3
6
+ PATCH = 4
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH].compact.join('.')
9
9
  end
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
@@ -8,10 +8,10 @@ class Symbol
8
8
  end
9
9
 
10
10
  def action(config = {})
11
- config.merge(:action => self.to_s)
11
+ config.merge(:action => self)
12
12
  end
13
13
 
14
14
  def component(config = {})
15
- config.merge(:component => self.to_s)
15
+ config.merge(:component => self)
16
16
  end
17
17
  end
@@ -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.endpoints - [:deliver_component]
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
@@ -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 is deprecated. Use the 'endpoint' approach instead", caller)
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
- add_endpoint(apip)
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
- 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
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
- add_endpoint(name)
38
- define_method name, &block if block # if no block is given, the method is supposed to be defined elsewhere
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 :"endpoint_#{name}" do |*args|
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 add_endpoint(ep)
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 endpoints
56
- read_inheritable_attribute(:endpoints)
55
+ def registered_endpoints
56
+ read_inheritable_attribute(:endpoints) || []
57
57
  end
58
58
  end
59
59
 
@@ -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.3"
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-02}
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 Netzke Core!
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
@@ -10,7 +10,7 @@ class ExtendedServerCaller < ServerCaller
10
10
  }
11
11
  JS
12
12
 
13
- def whats_up(params)
13
+ def whats_up_endpoint(params)
14
14
  orig = super
15
15
  orig.merge(:set_title => orig[:set_title] + ", shiny weather")
16
16
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 6
8
- - 3
9
- version: 0.6.3
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-02 00:00:00 +01:00
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 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\
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,8 +0,0 @@
1
- Description:
2
- Generates a netzke preferences migration
3
-
4
- Example:
5
- ./script/generate netzke-core
6
-
7
- This will create:
8
- A netzke preferences migration
@@ -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
@@ -1,8 +0,0 @@
1
- Description:
2
- Generates a netzke preferences migration
3
-
4
- Example:
5
- rails g netzke:core
6
-
7
- This will create:
8
- A netzke preferences migration
@@ -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
@@ -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