netzke-core 0.7.5 → 0.7.6
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/.travis.yml +19 -0
- data/CHANGELOG.rdoc +3 -0
- data/README.md +17 -9
- data/Rakefile +6 -2
- data/config/ci/before-travis.sh +11 -0
- data/lib/netzke/actions.rb +5 -8
- data/lib/netzke/base.rb +0 -4
- data/lib/netzke/composition.rb +92 -99
- data/lib/netzke/config_to_dsl_delegator.rb +12 -10
- data/lib/netzke/configuration.rb +82 -80
- data/lib/netzke/core/version.rb +1 -1
- data/lib/netzke/core_ext/symbol.rb +4 -0
- data/lib/netzke/core_ext.rb +2 -1
- data/lib/netzke/inheritance.rb +10 -10
- data/lib/netzke/javascript.rb +92 -79
- data/lib/netzke/plugins.rb +7 -7
- data/lib/netzke/services.rb +7 -8
- data/lib/netzke/stylesheets.rb +6 -8
- data/netzke-core.gemspec +8 -5
- data/test/core_test_app/.powrc +4 -0
- data/test/core_test_app/.rvmrc +1 -1
- data/test/core_test_app/Gemfile +4 -3
- data/test/core_test_app/Gemfile.lock +88 -89
- data/test/core_test_app/config/database.yml.travis +13 -0
- data/test/core_test_app/gemfiles/rails3_1.gemfile +16 -0
- data/test/core_test_app/gemfiles/rails3_2.gemfile +16 -0
- data/test/core_test_app/spec/component/composition_spec.rb +10 -10
- data/test/test_helper.rb +3 -21
- data/test/unit/core_ext_test.rb +1 -13
- data/test/unit/netzke_core_test.rb +1 -1
- metadata +10 -7
- data/test/fixtures/roles.yml +0 -7
- data/test/fixtures/users.yml +0 -9
- data/test/unit/netzke_preference_test.rb +0 -103
data/lib/netzke/core_ext.rb
CHANGED
data/lib/netzke/inheritance.rb
CHANGED
@@ -12,18 +12,18 @@ module Netzke
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
# Same as +
|
16
|
-
def
|
17
|
-
res =
|
18
|
-
# We don't want here any values from the superclass (which is the consequence of using
|
19
|
-
res == self.superclass.
|
15
|
+
# Same as +class_attribute+ returning a hash, but returns empty hash when it's equal to superclass's
|
16
|
+
def clean_class_attribute_hash(attr_name)
|
17
|
+
res = self.send(attr_name)
|
18
|
+
# We don't want here any values from the superclass (which is the consequence of using class attributes).
|
19
|
+
res == self.superclass.send(attr_name) ? {} : res
|
20
20
|
end
|
21
21
|
|
22
|
-
# Same as +
|
23
|
-
def
|
24
|
-
res =
|
25
|
-
# We don't want here any values from the superclass (which is the consequence of using
|
26
|
-
res == self.superclass.
|
22
|
+
# Same as +class_attribute+ returning an array, but returns empty array when it's equal to superclass's
|
23
|
+
def clean_class_attribute_array(attr_name)
|
24
|
+
res = self.send(attr_name) || []
|
25
|
+
# We don't want here any values from the superclass (which is the consequence of using class attributes).
|
26
|
+
res == self.superclass.send(attr_name) ? [] : res
|
27
27
|
end
|
28
28
|
|
29
29
|
end
|
data/lib/netzke/javascript.rb
CHANGED
@@ -20,6 +20,23 @@ module Netzke
|
|
20
20
|
|
21
21
|
class_attribute :js_included_files
|
22
22
|
self.js_included_files = []
|
23
|
+
|
24
|
+
# Returns all JS method definitions in a hash
|
25
|
+
class_attribute :js_methods_attr
|
26
|
+
self.js_methods_attr = {}
|
27
|
+
|
28
|
+
class_attribute :js_properties_attr
|
29
|
+
self.js_properties_attr = {}
|
30
|
+
|
31
|
+
# Returns all objects to be mixed in (as array of strings)
|
32
|
+
class_attribute :js_mixins_attr
|
33
|
+
self.js_mixins_attr = []
|
34
|
+
|
35
|
+
class_attribute :js_translated_properties_attr
|
36
|
+
self.js_translated_properties_attr = {}
|
37
|
+
|
38
|
+
class_attribute :js_base_class_attr
|
39
|
+
self.js_base_class_attr = 'Ext.panel.Panel'
|
23
40
|
end
|
24
41
|
|
25
42
|
module ClassMethods
|
@@ -32,7 +49,7 @@ module Netzke
|
|
32
49
|
#
|
33
50
|
# If called without parameters, returns the JS base class declared for the component.
|
34
51
|
def js_base_class(class_name = nil)
|
35
|
-
class_name.nil? ?
|
52
|
+
class_name.nil? ? self.js_base_class_attr : self.js_base_class_attr = class_name
|
36
53
|
end
|
37
54
|
|
38
55
|
# Use it to define a public method of the component's JavaScript class, e.g.:
|
@@ -46,14 +63,13 @@ module Netzke
|
|
46
63
|
# This will effectively result in definition of a public method called +doSomething+ in the JavaScript class (note the conversion from underscore_name to camelCaseName).
|
47
64
|
def js_method(name, definition = nil)
|
48
65
|
definition = yield.l if block_given?
|
49
|
-
current_js_methods =
|
50
|
-
current_js_methods.merge
|
51
|
-
write_inheritable_attribute(:js_methods, current_js_methods)
|
66
|
+
current_js_methods = clean_class_attribute_hash(:js_methods_attr).dup
|
67
|
+
self.js_methods_attr = current_js_methods.merge(name => definition.l)
|
52
68
|
end
|
53
69
|
|
54
70
|
# Returns all JS method definitions in a hash
|
55
71
|
def js_methods
|
56
|
-
|
72
|
+
clean_class_attribute_hash(:js_methods_attr)
|
57
73
|
end
|
58
74
|
|
59
75
|
# Use it to specify JS files to be loaded before this component's JS code. Useful when using external extensions required by this component.
|
@@ -72,7 +88,7 @@ module Netzke
|
|
72
88
|
def js_include(*args)
|
73
89
|
callr = caller.first
|
74
90
|
|
75
|
-
self.js_included_files
|
91
|
+
self.js_included_files |= args.map{ |a| a.is_a?(Symbol) ? expand_js_include_path(a, callr) : a }
|
76
92
|
end
|
77
93
|
|
78
94
|
# Used to define default properties of the JavaScript class, e.g.:
|
@@ -87,11 +103,10 @@ module Netzke
|
|
87
103
|
# Note, that not all the configuration options can be defined on the prototype of the class. For example, defining +items+ on the prototype won't take any effect, so, +items+ should be passed as a configuration option at the moment of instantiation (see Netzke::Base#configuration and Netzke::Base#default_config).
|
88
104
|
def js_properties(hsh = nil)
|
89
105
|
if hsh.nil?
|
90
|
-
|
106
|
+
clean_class_attribute_hash(:js_properties_attr)
|
91
107
|
else
|
92
|
-
current_js_properties =
|
93
|
-
current_js_properties.merge
|
94
|
-
write_inheritable_attribute(:js_properties, current_js_properties)
|
108
|
+
current_js_properties = clean_class_attribute_hash(:js_properties_attr).dup
|
109
|
+
self.js_properties_attr = current_js_properties.merge(hsh)
|
95
110
|
end
|
96
111
|
end
|
97
112
|
|
@@ -100,11 +115,11 @@ module Netzke
|
|
100
115
|
def js_property(name, value = nil)
|
101
116
|
name = name.to_sym
|
102
117
|
if value.nil?
|
103
|
-
(
|
118
|
+
clean_class_attribute_hash(:js_properties_attr)[name]
|
104
119
|
else
|
105
|
-
current_js_properties =
|
120
|
+
current_js_properties = clean_class_attribute_hash(:js_properties_attr).dup
|
106
121
|
current_js_properties[name] = value
|
107
|
-
|
122
|
+
self.js_properties_attr = current_js_properties
|
108
123
|
end
|
109
124
|
end
|
110
125
|
|
@@ -122,9 +137,9 @@ module Netzke
|
|
122
137
|
# TODO: make the name of the root property configurable
|
123
138
|
def js_translate(*properties)
|
124
139
|
if properties.empty?
|
125
|
-
|
140
|
+
clean_class_attribute_hash(:js_translated_properties_attr)
|
126
141
|
else
|
127
|
-
current_translated_properties =
|
142
|
+
current_translated_properties = clean_class_attribute_hash(:js_translated_properties_attr).dup
|
128
143
|
properties.each do |p|
|
129
144
|
if p.is_a?(Hash)
|
130
145
|
# TODO: make it possible to nest translated objects
|
@@ -133,7 +148,7 @@ module Netzke
|
|
133
148
|
end
|
134
149
|
end
|
135
150
|
|
136
|
-
|
151
|
+
self.js_translated_properties_attr = current_translated_properties
|
137
152
|
end
|
138
153
|
end
|
139
154
|
|
@@ -160,15 +175,15 @@ module Netzke
|
|
160
175
|
# With no parameters, will assume :component_class_name_underscored.
|
161
176
|
def js_mixin(*args)
|
162
177
|
args << name.split("::").last.underscore.to_sym if args.empty? # if no args provided, component_class_underscored_name is assumed
|
163
|
-
current_mixins =
|
178
|
+
current_mixins = clean_class_attribute_array(:js_mixins_attr)
|
164
179
|
callr = caller.first
|
165
180
|
args.each{ |a| current_mixins << (a.is_a?(Symbol) ? File.read(expand_js_include_path(a, callr)) : File.read(a))}
|
166
|
-
|
181
|
+
self.js_mixins_attr = current_mixins
|
167
182
|
end
|
168
183
|
|
169
184
|
# Returns all objects to be mixed in (as array of strings)
|
170
185
|
def js_mixins
|
171
|
-
|
186
|
+
clean_class_attribute_array(:js_mixins_attr)
|
172
187
|
end
|
173
188
|
|
174
189
|
# Builds this component's xtype
|
@@ -286,84 +301,82 @@ Netzke.cache.push('#{js_xtype}');
|
|
286
301
|
|
287
302
|
end
|
288
303
|
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
end
|
304
|
+
# The result of this method (a hash) is converted to a JSON object and passed as options
|
305
|
+
# to the constructor of our JavaScript class. Override it when you want to pass any extra configuration
|
306
|
+
# to the JavaScript side.
|
307
|
+
def js_config
|
308
|
+
{}.tap do |res|
|
309
|
+
# Unique id of the component
|
310
|
+
res[:id] = global_id
|
311
|
+
|
312
|
+
# Non-lazy-loaded components
|
313
|
+
comp_hash = {}
|
314
|
+
eager_loaded_components.each_pair do |comp_name, comp_config|
|
315
|
+
comp_instance = component_instance(comp_name.to_sym)
|
316
|
+
comp_instance.before_load
|
317
|
+
comp_hash[comp_name] = comp_instance.js_config
|
318
|
+
end
|
305
319
|
|
306
|
-
|
307
|
-
|
320
|
+
# Configuration for all of our non-lazy-loaded children specified here. We can refer to them in +items+ so they get instantiated by Ext.
|
321
|
+
res[:netzke_components] = comp_hash unless comp_hash.empty?
|
308
322
|
|
309
|
-
|
310
|
-
|
311
|
-
|
323
|
+
# Endpoints (besides the default "deliver_component" - JavaScript side already knows about it)
|
324
|
+
endpoints = self.class.endpoints.keys - [:deliver_component]
|
325
|
+
res[:endpoints] = endpoints unless endpoints.empty?
|
312
326
|
|
313
|
-
|
314
|
-
|
327
|
+
# Inform the JavaScript side if persistent_config is enabled
|
328
|
+
# res[:persistent_config] = persistence_enabled?
|
315
329
|
|
316
|
-
|
317
|
-
|
330
|
+
# Include our xtype
|
331
|
+
res[:xtype] = self.class.js_xtype
|
318
332
|
|
319
|
-
|
320
|
-
|
333
|
+
# Include our alias: Ext.createByAlias may be used to instantiate the component.
|
334
|
+
res[:alias] = self.class.js_alias
|
321
335
|
|
322
|
-
|
323
|
-
|
336
|
+
# Merge with the rest of config options, besides those that are only meant for the server side
|
337
|
+
res.merge!(config.reject{ |k,v| self.class.server_side_config_options.include?(k.to_sym) })
|
324
338
|
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
339
|
+
if config[:ext_config].present?
|
340
|
+
::ActiveSupport::Deprecation.warn("Using ext_config option is deprecated. All config options must be specified at the same level in the hash.", caller)
|
341
|
+
res.merge!(config[:ext_config])
|
342
|
+
end
|
329
343
|
|
330
|
-
|
331
|
-
|
344
|
+
# Items (nested Ext/Netzke components)
|
345
|
+
res[:items] = items unless items.blank?
|
332
346
|
|
333
|
-
|
334
|
-
|
347
|
+
# So we can use getComponent(<component_name>) to retrieve a child component
|
348
|
+
res[:item_id] ||= name
|
335
349
|
|
336
|
-
|
350
|
+
res[:i18n] = js_translate_properties if js_translate_properties.present?
|
337
351
|
|
338
|
-
|
339
|
-
end
|
352
|
+
res[:netzke_plugins] = plugins.map{ |p| p.to_s.camelcase(:lower) } if plugins.present?
|
340
353
|
end
|
354
|
+
end
|
341
355
|
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
end
|
348
|
-
code.blank? ? nil : code
|
356
|
+
# All the JS-code required by this instance of the component to be instantiated in the browser.
|
357
|
+
# It includes JS-classes for the parents, non-lazy-loaded child components, and itself.
|
358
|
+
def js_missing_code(cached = [])
|
359
|
+
code = dependency_classes.inject("") do |r,k|
|
360
|
+
cached.include?(k.js_xtype) ? r : r + k.js_code#.strip_js_comments
|
349
361
|
end
|
362
|
+
code.blank? ? nil : code
|
363
|
+
end
|
350
364
|
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
365
|
+
# DEPRECATED. Helper to access config[:ext_config].
|
366
|
+
def ext_config
|
367
|
+
::ActiveSupport::Deprecation.warn("Using ext_config is deprecated. All config options must be specified at the same level in the hash.", caller)
|
368
|
+
config[:ext_config] || {}
|
369
|
+
end
|
356
370
|
|
357
|
-
|
371
|
+
private
|
358
372
|
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
end
|
373
|
+
# Merges all the translations in the class hierarchy
|
374
|
+
def js_translate_properties
|
375
|
+
@js_translate_properties ||= self.class.class_ancestors.inject({}) do |r,klass|
|
376
|
+
hsh = klass.js_translate.keys.inject({}) { |h,t| h.merge(t => I18n.t("#{klass.i18n_id}.#{t}")) }
|
377
|
+
r.merge(hsh)
|
365
378
|
end
|
379
|
+
end
|
366
380
|
|
367
|
-
end
|
368
381
|
end
|
369
382
|
end
|
data/lib/netzke/plugins.rb
CHANGED
@@ -2,6 +2,12 @@ module Netzke
|
|
2
2
|
module Plugins
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
|
+
included do
|
6
|
+
# Returns registered plugins
|
7
|
+
class_attribute :registered_plugins
|
8
|
+
self.registered_plugins = []
|
9
|
+
end
|
10
|
+
|
5
11
|
module ClassMethods
|
6
12
|
# Defines a plugin
|
7
13
|
def plugin(name, config = {}, &block)
|
@@ -11,15 +17,9 @@ module Netzke
|
|
11
17
|
|
12
18
|
# Register a plugin
|
13
19
|
def register_plugin(name)
|
14
|
-
|
15
|
-
current_plugins << name
|
16
|
-
write_inheritable_attribute(:plugins, current_plugins.uniq)
|
20
|
+
self.registered_plugins |= [name]
|
17
21
|
end
|
18
22
|
|
19
|
-
# Returns registered plugins
|
20
|
-
def registered_plugins
|
21
|
-
read_inheritable_attribute(:plugins) || []
|
22
|
-
end
|
23
23
|
end
|
24
24
|
|
25
25
|
def plugins
|
data/lib/netzke/services.rb
CHANGED
@@ -3,6 +3,12 @@ module Netzke
|
|
3
3
|
module Services
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
|
+
included do
|
7
|
+
# Returns all endpoints as a hash
|
8
|
+
class_attribute :endpoints
|
9
|
+
self.endpoints = {}
|
10
|
+
end
|
11
|
+
|
6
12
|
module ClassMethods
|
7
13
|
# Defines an endpoint - a connection point between the client side of a component and its server side. For example:
|
8
14
|
#
|
@@ -44,11 +50,6 @@ module Netzke
|
|
44
50
|
end
|
45
51
|
end
|
46
52
|
|
47
|
-
# Returns all endpoints as a hash
|
48
|
-
def endpoints
|
49
|
-
read_inheritable_attribute(:endpoints) || {}
|
50
|
-
end
|
51
|
-
|
52
53
|
def api(*api_points) #:nodoc:
|
53
54
|
::ActiveSupport::Deprecation.warn("Using the 'api' call has no longer effect. Define endpoints instead.", caller)
|
54
55
|
end
|
@@ -57,9 +58,7 @@ module Netzke
|
|
57
58
|
|
58
59
|
# Registers an endpoint
|
59
60
|
def register_endpoint(ep, options)
|
60
|
-
|
61
|
-
current_endpoints.merge!(ep => options)
|
62
|
-
write_inheritable_attribute(:endpoints, current_endpoints)
|
61
|
+
self.endpoints = self.endpoints.dup.merge(ep => options)
|
63
62
|
end
|
64
63
|
|
65
64
|
end
|
data/lib/netzke/stylesheets.rb
CHANGED
@@ -54,14 +54,12 @@ module Netzke
|
|
54
54
|
|
55
55
|
end
|
56
56
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
cached.include?(k.js_xtype) ? r : r + k.css_code(cached)
|
61
|
-
end
|
62
|
-
code.blank? ? nil : code
|
57
|
+
def css_missing_code(cached = [])
|
58
|
+
code = dependency_classes.inject("") do |r,k|
|
59
|
+
cached.include?(k.js_xtype) ? r : r + k.css_code(cached)
|
63
60
|
end
|
64
|
-
|
61
|
+
code.blank? ? nil : code
|
65
62
|
end
|
63
|
+
|
66
64
|
end
|
67
|
-
end
|
65
|
+
end
|
data/netzke-core.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "netzke-core"
|
8
|
-
s.version = "0.7.
|
8
|
+
s.version = "0.7.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["NomadCoder"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-07-27"
|
13
13
|
s.description = "Allows building DRY ExtJS/Rails applications by enabling modular development"
|
14
14
|
s.email = "nmcoder@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
]
|
19
19
|
s.files = [
|
20
20
|
".autotest",
|
21
|
+
".travis.yml",
|
21
22
|
"CHANGELOG.rdoc",
|
22
23
|
"LICENSE",
|
23
24
|
"Manifest",
|
@@ -25,6 +26,7 @@ Gem::Specification.new do |s|
|
|
25
26
|
"Rakefile",
|
26
27
|
"TODO.md",
|
27
28
|
"app/controllers/netzke_controller.rb",
|
29
|
+
"config/ci/before-travis.sh",
|
28
30
|
"init.rb",
|
29
31
|
"install.rb",
|
30
32
|
"javascripts/base.js",
|
@@ -71,6 +73,7 @@ Gem::Specification.new do |s|
|
|
71
73
|
"netzke-core.gemspec",
|
72
74
|
"stylesheets/core.css",
|
73
75
|
"test/core_test_app/.gitignore",
|
76
|
+
"test/core_test_app/.powrc",
|
74
77
|
"test/core_test_app/.rvmrc",
|
75
78
|
"test/core_test_app/Gemfile",
|
76
79
|
"test/core_test_app/Gemfile.lock",
|
@@ -150,6 +153,7 @@ Gem::Specification.new do |s|
|
|
150
153
|
"test/core_test_app/config/application.rb",
|
151
154
|
"test/core_test_app/config/boot.rb",
|
152
155
|
"test/core_test_app/config/database.yml",
|
156
|
+
"test/core_test_app/config/database.yml.travis",
|
153
157
|
"test/core_test_app/config/environment.rb",
|
154
158
|
"test/core_test_app/config/environments/development.rb",
|
155
159
|
"test/core_test_app/config/environments/production.rb",
|
@@ -192,6 +196,8 @@ Gem::Specification.new do |s|
|
|
192
196
|
"test/core_test_app/features/support/env.rb",
|
193
197
|
"test/core_test_app/features/support/paths.rb",
|
194
198
|
"test/core_test_app/features/touch.feature",
|
199
|
+
"test/core_test_app/gemfiles/rails3_1.gemfile",
|
200
|
+
"test/core_test_app/gemfiles/rails3_2.gemfile",
|
195
201
|
"test/core_test_app/lib/tasks/.gitkeep",
|
196
202
|
"test/core_test_app/public/404.html",
|
197
203
|
"test/core_test_app/public/422.html",
|
@@ -212,12 +218,9 @@ Gem::Specification.new do |s|
|
|
212
218
|
"test/core_test_app/spec/spec_helper.rb",
|
213
219
|
"test/core_test_app/tmp/restart.txt",
|
214
220
|
"test/core_test_app/vendor/plugins/.gitkeep",
|
215
|
-
"test/fixtures/roles.yml",
|
216
|
-
"test/fixtures/users.yml",
|
217
221
|
"test/test_helper.rb",
|
218
222
|
"test/unit/core_ext_test.rb",
|
219
223
|
"test/unit/netzke_core_test.rb",
|
220
|
-
"test/unit/netzke_preference_test.rb",
|
221
224
|
"uninstall.rb"
|
222
225
|
]
|
223
226
|
s.homepage = "http://netzke.org"
|
data/test/core_test_app/.rvmrc
CHANGED
@@ -1 +1 @@
|
|
1
|
-
rvm 1.9.
|
1
|
+
rvm 1.9.3
|
data/test/core_test_app/Gemfile
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
source 'http://rubygems.org'
|
2
2
|
|
3
|
-
gem 'rails', '3.
|
3
|
+
gem 'rails', '3.2.3'
|
4
|
+
gem 'netzke-persistence'
|
4
5
|
|
5
6
|
gem 'sqlite3'
|
6
7
|
|
@@ -22,10 +23,10 @@ gem 'sqlite3'
|
|
22
23
|
# Bundle gems for the local environment. Make sure to
|
23
24
|
# put test-only gems in this group so their generators
|
24
25
|
# and rake tasks are available in development mode:
|
25
|
-
group :
|
26
|
+
group :test do
|
26
27
|
gem 'capybara'
|
27
28
|
gem 'database_cleaner'
|
28
|
-
gem 'cucumber-rails'
|
29
|
+
gem 'cucumber-rails', :require => false
|
29
30
|
gem 'cucumber'
|
30
31
|
gem 'rspec-rails'
|
31
32
|
gem 'spork'
|