netzke-core 0.6.7 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. data/CHANGELOG.rdoc +36 -1
  2. data/{README.markdown → README.md} +17 -15
  3. data/Rakefile +1 -1
  4. data/TODO +4 -4
  5. data/app/controllers/netzke_controller.rb +8 -3
  6. data/javascripts/base.js +71 -68
  7. data/javascripts/ext.js +182 -111
  8. data/lib/netzke/actions.rb +2 -1
  9. data/lib/netzke/base.rb +5 -1
  10. data/lib/netzke/composition.rb +2 -2
  11. data/lib/netzke/configuration.rb +1 -1
  12. data/lib/netzke/core/dynamic_assets.rb +7 -7
  13. data/lib/netzke/core/session.rb +4 -0
  14. data/lib/netzke/core/version.rb +2 -2
  15. data/lib/netzke/core.rb +23 -30
  16. data/lib/netzke/core_ext/symbol.rb +1 -1
  17. data/lib/netzke/embedding.rb +1 -1
  18. data/lib/netzke/ext_component.rb +2 -2
  19. data/lib/netzke/javascript.rb +70 -39
  20. data/lib/netzke/plugin.rb +15 -0
  21. data/lib/netzke/plugins.rb +29 -0
  22. data/lib/netzke/railz/action_view_ext/ext.rb +13 -16
  23. data/lib/netzke/railz/action_view_ext/touch.rb +3 -3
  24. data/lib/netzke/railz/action_view_ext.rb +0 -3
  25. data/lib/netzke/railz/engine.rb +34 -29
  26. data/lib/netzke/services.rb +1 -1
  27. data/lib/netzke/state.rb +2 -2
  28. data/lib/netzke-core.rb +1 -0
  29. data/netzke-core.gemspec +108 -9
  30. data/stylesheets/core.css +25 -5
  31. data/test/rails_app/Gemfile +1 -1
  32. data/test/rails_app/Gemfile.lock +37 -36
  33. data/test/rails_app/app/components/component_loader.rb +36 -24
  34. data/test/rails_app/app/components/component_with_js_mixin/javascripts/component_with_js_mixin.js +5 -0
  35. data/test/rails_app/app/components/component_with_js_mixin.rb +3 -1
  36. data/test/rails_app/app/components/component_with_nested_through.rb +28 -0
  37. data/test/rails_app/app/components/component_with_session_persistence.rb +7 -5
  38. data/test/rails_app/app/components/dynamic_tab_panel/javascripts/dynamic_tab_panel.js +9 -0
  39. data/test/rails_app/app/components/dynamic_tab_panel.rb +19 -0
  40. data/test/rails_app/app/components/extended_server_caller.rb +6 -5
  41. data/test/rails_app/app/components/loader_of_component_with_custom_css.rb +7 -8
  42. data/test/rails_app/app/components/localized_panel.rb +10 -1
  43. data/test/rails_app/app/components/nested_component.rb +18 -0
  44. data/test/rails_app/app/components/panel_with_plugin.rb +4 -0
  45. data/test/rails_app/app/components/panel_with_tools.rb +19 -0
  46. data/test/rails_app/app/components/plugin_with_components.rb +14 -0
  47. data/test/rails_app/app/components/server_caller.rb +1 -1
  48. data/test/rails_app/app/components/server_counter.rb +1 -1
  49. data/test/rails_app/app/components/simple_component.rb +2 -0
  50. data/test/rails_app/app/components/simple_tab_panel.rb +21 -21
  51. data/test/rails_app/app/components/simple_window.rb +1 -1
  52. data/test/rails_app/app/components/some_composite.rb +3 -2
  53. data/test/rails_app/app/components/some_plugin.rb +39 -0
  54. data/test/rails_app/app/controllers/application_controller.rb +1 -1
  55. data/test/rails_app/app/controllers/components_controller.rb +1 -1
  56. data/test/rails_app/app/views/layouts/touch.html.erb +1 -1
  57. data/test/rails_app/config/application.rb +0 -2
  58. data/test/rails_app/config/initializers/netzke.rb +2 -1
  59. data/test/rails_app/config/locales/es.yml +1 -0
  60. data/test/rails_app/features/{actions.feature → actions_and_tools.feature} +8 -0
  61. data/test/rails_app/features/client-server.feature +0 -1
  62. data/test/rails_app/features/complex_component.feature +1 -1
  63. data/test/rails_app/features/component_loader.feature +7 -0
  64. data/test/rails_app/features/composition.feature +2 -2
  65. data/test/rails_app/features/custom_css.feature +1 -1
  66. data/test/rails_app/features/i18n.feature +3 -0
  67. data/test/rails_app/features/js_include.feature +2 -0
  68. data/test/rails_app/features/nested_views.feature +5 -4
  69. data/test/rails_app/features/plugin.feature +16 -0
  70. data/test/rails_app/features/step_definitions/generic_steps.rb +21 -2
  71. data/test/rails_app/features/touch.feature +10 -10
  72. data/test/rails_app/spec/component/component_spec.rb +20 -0
  73. metadata +106 -10
  74. data/app/models/netzke_preference.rb +0 -170
data/lib/netzke/core.rb CHANGED
@@ -23,11 +23,14 @@ module Netzke
23
23
  extend Session
24
24
  extend Masquerading
25
25
 
26
+ # Use Ext 3 compatibility layer
27
+ mattr_accessor :ext3_compat_uri
28
+
26
29
  # Configuration specified at the initialization times (set in the Engine in case of Rails)
27
30
  mattr_accessor :config
28
31
  @@config = {}
29
32
 
30
- # Ext or Touch
33
+ # :ext or :touch
31
34
  mattr_accessor :platform
32
35
  @@platform = :ext
33
36
 
@@ -44,12 +47,6 @@ module Netzke
44
47
  mattr_accessor :ext_stylesheets
45
48
  @@ext_stylesheets = []
46
49
 
47
- mattr_accessor :touch_javascripts
48
- @@touch_javascripts = []
49
-
50
- mattr_accessor :touch_stylesheets
51
- @@touch_stylesheets = []
52
-
53
50
  # Stylesheets that cannot be loaded dynamically along with the rest of the component, e.g. due to that relative paths are used in them
54
51
  mattr_accessor :external_ext_css
55
52
  @@external_ext_css = []
@@ -57,22 +54,35 @@ module Netzke
57
54
  mattr_accessor :icons_uri
58
55
  @@icons_uri = "/images/icons"
59
56
 
57
+ mattr_accessor :ext_uri
58
+ @@ext_uri = "/extjs"
59
+
60
+ mattr_accessor :ext_path
61
+
62
+ mattr_accessor :current_user_method
63
+ @@current_user_method = :current_user
64
+
60
65
  mattr_accessor :persistence_manager
61
66
  @@persistence_manager = "NetzkeComponentState"
62
67
 
63
68
  # The amount of retries that the direct remoting provider will attempt in case of failure
64
69
  mattr_accessor :js_direct_max_retries
65
- @@js_direct_max_retries = 0
66
-
67
- # Set in the Engine after_initialize callback
68
- mattr_accessor :ext_location # TODO: rename to ext_path
69
-
70
- mattr_accessor :touch_location # TODO: rename to touch_path
70
+ @@js_direct_max_retries = 2
71
71
 
72
72
  mattr_accessor :with_icons
73
73
 
74
74
  mattr_accessor :persistence_manager_class
75
75
 
76
+ # Sencha Touch specific
77
+ mattr_accessor :touch_javascripts
78
+ @@touch_javascripts = []
79
+
80
+ mattr_accessor :touch_stylesheets
81
+ @@touch_stylesheets = []
82
+
83
+ mattr_accessor :touch_uri
84
+ @@touch_uri = "/sencha-touch"
85
+
76
86
  def self.setup
77
87
  yield self
78
88
  end
@@ -80,22 +90,5 @@ module Netzke
80
90
  def self.reset_components_in_session
81
91
  Netzke::Core.session[:netzke_components].try(:clear)
82
92
  end
83
-
84
- def self.ext_js
85
- res = initial_dynamic_javascript << "\n"
86
-
87
- include_base_js(res)
88
-
89
- # Ext-specific JavaScript
90
- res << File.new(File.expand_path("../../../javascripts/ext.js", __FILE__)).read
91
-
92
- # Pluggable JavaScript (used by other Netzke-powered gems like netzke-basepack)
93
- Netzke::Core.ext_javascripts.each do |path|
94
- f = File.new(path)
95
- res << f.read
96
- end
97
-
98
- render :text => defined?(::Rails) && ::Rails.env.production? ? res.strip_js_comments : res
99
- end
100
93
  end
101
94
  end
@@ -12,6 +12,6 @@ class Symbol
12
12
  end
13
13
 
14
14
  def component(config = {})
15
- config.merge(:component => self)
15
+ config.merge(:netzke_component => self)
16
16
  end
17
17
  end
@@ -4,7 +4,7 @@ module Netzke
4
4
 
5
5
  # Instantiating
6
6
  def js_component_instance
7
- %Q{Netzke.page.#{name.jsonify} = Ext.create(#{js_config.to_nifty_json});}
7
+ %Q{Netzke.page.#{name.jsonify} = Ext.create("#{self.class.js_alias}", #{js_config.to_nifty_json});}
8
8
  end
9
9
 
10
10
  # Rendering
@@ -13,7 +13,7 @@ module Netzke
13
13
 
14
14
  # Rendering
15
15
  def js_component_render
16
- %Q{Ext.ComponentMgr.create(#{config.to_nifty_json}).render("ext-#{name.to_s.split('_').join('-')}");}
16
+ %Q{Ext.ComponentManager.create("#{js_full_class_name}", #{config.to_nifty_json}).render("ext-#{name.to_s.split('_').join('-')}");}
17
17
  end
18
18
 
19
19
  # Container for rendering
@@ -22,4 +22,4 @@ module Netzke
22
22
  end
23
23
 
24
24
  end
25
- end
25
+ end
@@ -157,7 +157,9 @@ module Netzke
157
157
  # }
158
158
  #
159
159
  # Also accepts a string, which will be interpreted as a full path to the file (useful for sharing mixins between classes).
160
+ # With no parameters, will assume :component_class_name_underscored.
160
161
  def js_mixin(*args)
162
+ args << name.split("::").last.underscore.to_sym if args.empty? # if no args provided, component_class_underscored_name is assumed
161
163
  current_mixins = read_clean_inheritable_array(:js_mixins) || []
162
164
  callr = caller.first
163
165
  args.each{ |a| current_mixins << (a.is_a?(Symbol) ? File.read(expand_js_include_path(a, callr)) : File.read(a))}
@@ -175,6 +177,20 @@ module Netzke
175
177
  name.gsub("::", "").downcase
176
178
  end
177
179
 
180
+ # Alias prefix. Overridden for plugins.
181
+ def js_alias_prefix
182
+ "widget"
183
+ end
184
+
185
+ # Builds this component's alias
186
+ # E.g.: netzke.basepack.window, netzke.basepack.gridpanel
187
+ #
188
+ # MAV from http://stackoverflow.com/questions/5380770/replacing-ext-reg-xtype-in-extjs4
189
+ # "When you use an xtype in Ext JS 4 it looks for a class with an alias of 'widget.[xtype]'"
190
+ def js_alias
191
+ [js_alias_prefix, js_xtype].join(".")
192
+ end
193
+
178
194
  # Component's JavaScript class declaration.
179
195
  # It gets stored in the JS class cache storage (Netzke.classes) at the client side to be reused at the moment of component instantiation.
180
196
  def js_class
@@ -184,7 +200,10 @@ module Netzke
184
200
 
185
201
  res << (extends_netzke_component? ? js_class_declaration_extending_component : js_class_declaration_new_component)
186
202
 
187
- res << %(Netzke.reg("#{js_xtype}", #{js_full_class_name});)
203
+ # Store created class xtype in the cache
204
+ res << %(
205
+ Netzke.cache.push('#{js_xtype}');
206
+ )
188
207
 
189
208
  res.join("\n")
190
209
  end
@@ -232,13 +251,16 @@ module Netzke
232
251
  # Generates declaration of the JS class as direct extension of a Ext component
233
252
  def js_class_declaration_new_component
234
253
  mixins = js_mixins.empty? ? "" : %(#{js_mixins.join(", \n")}, )
235
- %(#{js_full_class_name} = function(config){
236
- Netzke.aliasMethodChain(this, "initComponent", "netzke");
237
- #{js_full_class_name}.superclass.constructor.call(this, config);
238
- };
239
254
 
240
- Ext.extend(#{js_full_class_name}, #{js_base_class}, Netzke.chainApply(Netzke.componentMixin, #{mixins}
241
- #{js_extend_properties.to_nifty_json}));)
255
+ # Resulting JS:
256
+ %(Ext.define('#{js_full_class_name}', Netzke.chainApply({
257
+ extend: '#{js_base_class}',
258
+ alias: '#{js_alias}',
259
+ constructor: function(config) {
260
+ Netzke.aliasMethodChain(this, "initComponent", "netzke");
261
+ #{js_full_class_name}.superclass.constructor.call(this, config);
262
+ }
263
+ }, Netzke.componentMixin,\n#{mixins} #{js_extend_properties.to_nifty_json}));)
242
264
  end
243
265
 
244
266
  # Generates declaration of the JS class as extension of another Netzke component
@@ -247,7 +269,11 @@ module Netzke
247
269
 
248
270
  mixins = js_mixins.empty? ? "" : %(#{js_mixins.join(", \n")}, )
249
271
 
250
- %{#{js_full_class_name} = Ext.extend(#{base_class}, Netzke.chainApply(#{mixins}#{js_extend_properties.to_nifty_json}));}
272
+ # Resulting JS:
273
+ %(Ext.define('#{js_full_class_name}', Netzke.chainApply(#{mixins}#{js_extend_properties.to_nifty_json}, {
274
+ extend: '#{base_class}',
275
+ alias: '#{js_alias}'
276
+ }));)
251
277
  end
252
278
 
253
279
  def expand_js_include_path(sym, callr) # :nodoc:
@@ -261,51 +287,56 @@ module Netzke
261
287
  end
262
288
 
263
289
  module InstanceMethods
264
- # The result of this method (a hash) is converted to a JSON object and passed as the configuration parameter
290
+ # The result of this method (a hash) is converted to a JSON object and passed as options
265
291
  # to the constructor of our JavaScript class. Override it when you want to pass any extra configuration
266
292
  # to the JavaScript side.
267
293
  def js_config
268
- res = {}
294
+ {}.tap do |res|
295
+ # Unique id of the component
296
+ res[:id] = global_id
297
+
298
+ # Non-lazy-loaded components
299
+ comp_hash = {}
300
+ eager_loaded_components.each_pair do |comp_name, comp_config|
301
+ comp_instance = component_instance(comp_name.to_sym)
302
+ comp_instance.before_load
303
+ comp_hash[comp_name] = comp_instance.js_config
304
+ end
269
305
 
270
- # Unique id of the component
271
- res[:id] = global_id
306
+ # Configuration for all of our non-lazy-loaded children specified here. We can refer to them in +items+ so they get instantiated by Ext.
307
+ res[:netzke_components] = comp_hash unless comp_hash.empty?
272
308
 
273
- # Non-lazy-loaded components
274
- comp_hash = {}
275
- eager_loaded_components.each_pair do |comp_name, comp_config|
276
- comp_instance = component_instance(comp_name.to_sym)
277
- comp_instance.before_load
278
- comp_hash[comp_name] = comp_instance.js_config
279
- end
309
+ # Endpoints (besides the default "deliver_component" - JavaScript side already knows about it)
310
+ endpoints = self.class.endpoints.keys - [:deliver_component]
311
+ res[:endpoints] = endpoints unless endpoints.empty?
280
312
 
281
- # All our non-lazy-loaded children are specified here, while in +items+ we barely reference them, because
282
- # +items+, generally, only contain a subset of all non-lazy-loaded children.
283
- res[:components] = comp_hash unless comp_hash.empty?
313
+ # Inform the JavaScript side if persistent_config is enabled
314
+ # res[:persistent_config] = persistence_enabled?
284
315
 
285
- # Endpoints (besides the default "deliver_component" - JavaScript side already knows about it)
286
- endpoints = self.class.endpoints.keys - [:deliver_component]
287
- res[:endpoints] = endpoints unless endpoints.empty?
316
+ # Include our xtype
317
+ res[:xtype] = self.class.js_xtype
288
318
 
289
- # Inform the JavaScript side if persistent_config is enabled
290
- # res[:persistent_config] = persistence_enabled?
319
+ # Include our alias: Ext.createByAlias may be used to instantiate the component.
320
+ res[:alias] = self.class.js_alias
291
321
 
292
- # Include our xtype
293
- res[:xtype] = self.class.js_xtype
322
+ # Merge with the rest of config options, besides those that are only meant for the server side
323
+ res.merge!(config.reject{ |k,v| self.class.server_side_config_options.include?(k.to_sym) })
294
324
 
295
- # Merge with the rest of config options, besides those that are only meant for the server side
296
- res.merge!(config.reject{ |k,v| self.class.server_side_config_options.include?(k.to_sym) })
325
+ if config[:ext_config].present?
326
+ ::ActiveSupport::Deprecation.warn("Using ext_config option is deprecated. All config options must be specified at the same level in the hash.", caller)
327
+ res.merge!(config[:ext_config])
328
+ end
297
329
 
298
- if config[:ext_config].present?
299
- ::ActiveSupport::Deprecation.warn("Using ext_config option is deprecated. All config options must be specified at the same level in the hash.", caller)
300
- res.merge!(config[:ext_config])
301
- end
330
+ # Items (nested Ext/Netzke components)
331
+ res[:items] = items unless items.blank?
302
332
 
303
- # Items (nested Ext/Netzke components)
304
- res[:items] = items unless items.blank?
333
+ # So we can use getComponent(<component_name>) to retrieve a child component
334
+ res[:item_id] ||= name
305
335
 
306
- res[:i18n] = js_translate_properties if js_translate_properties.present?
336
+ res[:i18n] = js_translate_properties if js_translate_properties.present?
307
337
 
308
- res
338
+ res[:netzke_plugins] = plugins.map{ |p| p.to_s.camelcase(:lower) } if plugins.present?
339
+ end
309
340
  end
310
341
 
311
342
  # All the JS-code required by this instance of the component to be instantiated in the browser.
@@ -0,0 +1,15 @@
1
+ module Netzke
2
+ class Plugin < Base
3
+ js_base_class "Ext.Component"
4
+
5
+ def self.js_alias_prefix
6
+ "plugin"
7
+ end
8
+
9
+ js_method :init, <<-JS
10
+ function(cmp){
11
+ this.cmp = cmp;
12
+ }
13
+ JS
14
+ end
15
+ end
@@ -0,0 +1,29 @@
1
+ module Netzke
2
+ module Plugins
3
+ extend ActiveSupport::Concern
4
+
5
+ module ClassMethods
6
+ # Defines a plugin
7
+ def plugin(name, config = {}, &block)
8
+ component(name, config, &block)
9
+ register_plugin(name)
10
+ end
11
+
12
+ # Register a plugin
13
+ def register_plugin(name)
14
+ current_plugins = read_inheritable_attribute(:plugins) || []
15
+ current_plugins << name
16
+ write_inheritable_attribute(:plugins, current_plugins.uniq)
17
+ end
18
+
19
+ # Returns registered plugins
20
+ def registered_plugins
21
+ read_inheritable_attribute(:plugins) || []
22
+ end
23
+ end
24
+
25
+ def plugins
26
+ self.class.registered_plugins
27
+ end
28
+ end
29
+ end
@@ -8,10 +8,7 @@ module Netzke
8
8
 
9
9
  def netzke_ext_css_include(params)
10
10
  # ExtJS base
11
- res = ["/extjs/resources/css/ext-all"]
12
-
13
- # ExtJS theming
14
- res << "/extjs/resources/css/xtheme-#{params[:theme]}" if params[:theme]
11
+ res = ["#{Netzke::Core.ext_uri}/resources/css/ext-all"]
15
12
 
16
13
  # Netzke-related dynamic css
17
14
  res << "/netzke/ext"
@@ -22,19 +19,20 @@ module Netzke
22
19
  end
23
20
 
24
21
  def netzke_ext_js_include(params)
25
- # ExtJS stuff
26
- res = if ENV['RAILS_ENV'] == 'development'
27
- [
28
- "/extjs/adapter/ext/ext-base-debug",
29
- "/extjs/ext-all-debug"
30
- ]
31
- else
32
- [
33
- "/extjs/adapter/ext/ext-base",
34
- "/extjs/ext-all"
35
- ]
22
+ res = []
23
+
24
+ # ExtJS
25
+ res << (ENV['RAILS_ENV'] == 'development' ? ["#{Netzke::Core.ext_uri}/ext-all-debug"] : ["#{Netzke::Core.ext_uri}/ext-all"])
26
+
27
+ # ExtJS 3 compatibility layer
28
+ if compat_uri = Netzke::Core.ext3_compat_uri
29
+ res << "#{compat_uri}/ext3-core-compat"
30
+ res << "#{compat_uri}/ext3-compat"
36
31
  end
37
32
 
33
+ # Ext I18n
34
+ res << "#{Netzke::Core.ext_uri}/locale/ext-lang-#{I18n.locale}" if I18n.locale != :en
35
+
38
36
  # Netzke-related dynamic JavaScript
39
37
  res << "/netzke/ext"
40
38
 
@@ -44,7 +42,6 @@ module Netzke
44
42
  def netzke_ext_js(params)
45
43
  res = []
46
44
  res << content_for(:netzke_js_classes)
47
- res << "\n"
48
45
 
49
46
  res << "Ext.onReady(function(){"
50
47
  res << content_for(:netzke_on_ready)
@@ -9,7 +9,7 @@ module Netzke
9
9
  def netzke_touch_css_include(params)
10
10
  # Note: no themes for now
11
11
 
12
- res = stylesheet_link_tag("/sencha-touch/resources/css/sencha-touch")
12
+ res = stylesheet_link_tag("#{Netzke::Core.touch_uri}/resources/css/sencha-touch")
13
13
 
14
14
  # Netzke-related (dynamically generated by NetzkeController)
15
15
  res << "\n" << stylesheet_link_tag("/netzke/touch")
@@ -35,9 +35,9 @@ module Netzke
35
35
  def netzke_touch_js_include(params)
36
36
  # ExtJS
37
37
  res = if ENV['RAILS_ENV'] == 'development'
38
- ["/sencha-touch/sencha-touch-debug.js"]
38
+ ["#{Netzke::Core.touch_uri}/sencha-touch-debug.js"]
39
39
  else
40
- ["/sencha-touch/sencha-touch"]
40
+ ["#{Netzke::Core.touch_uri}/sencha-touch"]
41
41
  end
42
42
 
43
43
  # Netzke
@@ -22,9 +22,6 @@ module Netzke
22
22
  Netzke::Core.platform = params[:platform] || :ext
23
23
  theme = params[:theme] || params[:ext_theme]
24
24
 
25
- # Rails' forgery protection
26
- content_for :netzke_js_classes, %Q(\n\nExt.Ajax.extraParams = {authenticity_token: '#{form_authenticity_token}'};)
27
-
28
25
  raw([netzke_css_include(params), netzke_css(params), netzke_js_include(params), netzke_js(params)].join("\n"))
29
26
  end
30
27
 
@@ -3,41 +3,46 @@ module Netzke
3
3
  class Engine < Rails::Engine
4
4
  config.netzke = Netzke::Core::OptionsHash.new
5
5
 
6
- # before loading initializers and classes (in app/**)
7
- config.before_initialize do
8
- Netzke::Core.config = config.netzke
9
- Netzke::Core.ext_location = Rails.root.join("public", "extjs")
10
- Netzke::Core.touch_location = Rails.root.join("public", "sencha-touch")
6
+ initializer "netzke.core" do |app|
7
+ app.config.eager_load_paths -= ["#{app.config.root}/app/components"]
8
+ app.config.autoload_paths += ["#{app.config.root}/app/components"]
9
+ end
10
+
11
+ # before loading initializers
12
+ config.before_initialize do |app|
13
+ Netzke::Core.config = config.netzke # passing app-level config to Netzke::Core
11
14
  Netzke::Core.persistence_manager_class = Netzke::Core.persistence_manager.constantize rescue nil
12
15
  end
13
16
 
14
- # after loading initializers and classes
17
+ # after loading initializers
15
18
  config.after_initialize do
19
+ Netzke::Core.ext_path = Rails.root.join('public', Netzke::Core.ext_uri[1..-1])
16
20
  Netzke::Core.with_icons = File.exists?("#{::Rails.root}/public#{Netzke::Core.icons_uri}") if Netzke::Core.with_icons.nil?
17
21
 
18
- dynamic_assets = %w[ext.js ext.css touch.js touch.css]
19
-
20
- if Rails.configuration.cache_classes
21
- # Memoize Netzke::Base.constantize_class_name for performance
22
- class << Netzke::Base
23
- memoize :constantize_class_name
24
- end
25
-
26
- # Generate dynamic assets and put them into public/netzke
27
- require 'fileutils'
28
- FileUtils.mkdir_p(Rails.root.join('public', 'netzke'))
29
-
30
- dynamic_assets.each do |asset|
31
- File.open(Rails.root.join('public', 'netzke', asset), 'w') {|f| f.write(Netzke::Core::DynamicAssets.send(asset.sub(".", "_"))) }
32
- end
33
- else
34
- dynamic_assets.each do |asset|
35
- file_path = Rails.root.join('public', 'netzke', asset)
36
- File.delete(file_path) if File.exists?(file_path)
37
- end
38
- end
39
-
22
+ # Dynamic generation of Netzke js and css.
23
+ # WIP: the problem with this is that on Heroku, for example, you don't have write access to 'public'.
24
+ # dynamic_assets = %w[ext.js ext.css touch.js touch.css]
25
+ #
26
+ # if Rails.configuration.cache_classes
27
+ # # Memoize Netzke::Base.constantize_class_name for performance
28
+ # class << Netzke::Base
29
+ # memoize :constantize_class_name
30
+ # end
31
+ #
32
+ # # Generate dynamic assets and put them into public/netzke
33
+ # require 'fileutils'
34
+ # FileUtils.mkdir_p(Rails.root.join('public', 'netzke'))
35
+ #
36
+ # dynamic_assets.each do |asset|
37
+ # File.open(Rails.root.join('public', 'netzke', asset), 'w') {|f| f.write(Netzke::Core::DynamicAssets.send(asset.sub(".", "_"))) }
38
+ # end
39
+ # else
40
+ # dynamic_assets.each do |asset|
41
+ # file_path = Rails.root.join('public', 'netzke', asset)
42
+ # File.delete(file_path) if File.exists?(file_path)
43
+ # end
44
+ # end
40
45
  end
41
46
  end
42
47
  end
43
- end
48
+ end
@@ -99,4 +99,4 @@ module Netzke
99
99
  end
100
100
 
101
101
  end
102
- end
102
+ end
data/lib/netzke/state.rb CHANGED
@@ -71,7 +71,7 @@ module Netzke
71
71
 
72
72
  # Initialized state manager class. At this moment this class has current_user, component, and session set.
73
73
  def state_manager
74
- @state_manager ||= Netzke::Core.persistence_manager_class && Netzke::Core.persistence_manager_class.init({
74
+ Netzke::Core.persistence_manager_class && Netzke::Core.persistence_manager_class.init({
75
75
  :component => persistence_key,
76
76
  :current_user => Netzke::Core.controller.respond_to?(:current_user) && Netzke::Core.controller.current_user,
77
77
  :session => Netzke::Core.session
@@ -80,7 +80,7 @@ module Netzke
80
80
 
81
81
  # Initialized state manager class, configured for managing global (not component specific) settings. At this moment this class has current_user and session set.
82
82
  def global_state_manager
83
- @global_state_manager ||= Netzke::Core.persistence_manager_class && Netzke::Core.persistence_manager_class.init({
83
+ Netzke::Core.persistence_manager_class && Netzke::Core.persistence_manager_class.init({
84
84
  :current_user => Netzke::Core.controller.respond_to?(:current_user) && Netzke::Core.controller.current_user,
85
85
  :session => Netzke::Core.session
86
86
  })
data/lib/netzke-core.rb CHANGED
@@ -2,6 +2,7 @@ $LOAD_PATH << File.dirname(__FILE__)
2
2
 
3
3
  require 'netzke/core'
4
4
  require 'netzke/base'
5
+ require 'netzke/plugin'
5
6
 
6
7
  module Netzke
7
8
  autoload :Core, 'netzke/core'