lolita 3.2.0.rc.7 → 3.2.0.rc.9
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +31 -0
- data/Gemfile +15 -36
- data/History.rdoc +9 -3
- data/README.md +57 -30
- data/Rakefile +1 -44
- data/app/assets/javascripts/lolita/list.js +28 -0
- data/app/assets/javascripts/lolita/main.js +81 -12
- data/app/assets/javascripts/lolita/tab.js +37 -32
- data/app/assets/stylesheets/lolita/style.css.erb +58 -18
- data/app/controllers/lolita/field_data_controller.rb +13 -9
- data/app/controllers/lolita/info_controller.rb +3 -5
- data/app/controllers/lolita/rest_controller.rb +53 -24
- data/app/helpers/components/lolita/configuration_component.rb +1 -1
- data/app/views/components/lolita/configuration/action/_display.html.haml +1 -0
- data/app/views/components/lolita/configuration/column/_display.html.haml +4 -0
- data/app/views/components/lolita/configuration/column/_first.html.haml +2 -0
- data/app/views/components/lolita/configuration/column/_last.html.haml +5 -0
- data/app/views/components/lolita/configuration/column/header/_display.html.haml +5 -0
- data/app/views/components/lolita/configuration/column/header/_first.html.haml +1 -0
- data/app/views/components/lolita/configuration/column/header/_last.html.haml +1 -0
- data/app/views/components/lolita/configuration/column/header/_sort.html.haml +6 -0
- data/app/views/components/lolita/configuration/columns/_display.html.haml +2 -0
- data/app/views/components/lolita/configuration/columns/body/_display.html.haml +3 -0
- data/app/views/components/lolita/configuration/columns/body/row/_display.html.haml +5 -0
- data/app/views/components/lolita/configuration/columns/header/_display.html.haml +5 -0
- data/app/views/components/lolita/configuration/field/_display.html.haml +7 -0
- data/app/views/components/lolita/configuration/field/_label.html.haml +1 -0
- data/app/views/components/lolita/configuration/field/_object.html.haml +1 -0
- data/app/views/components/lolita/configuration/field/array/_display.html.haml +5 -0
- data/app/views/components/lolita/configuration/field/array/autocomplete/_display.html.haml +1 -1
- data/app/views/components/lolita/configuration/field/array/autocomplete/_input.html.haml +2 -2
- data/app/views/components/lolita/configuration/field/array/polymorphic/_display.html.haml +3 -3
- data/app/views/components/lolita/configuration/field/array/select/_display.html.haml +1 -0
- data/app/views/components/lolita/configuration/field/big_decimal/_display.html.haml +1 -0
- data/app/views/components/lolita/configuration/field/boolean/_display.html.haml +1 -0
- data/app/views/components/lolita/configuration/field/date/_display.html.haml +1 -0
- data/app/views/components/lolita/configuration/field/date_time/_display.html.haml +2 -0
- data/app/views/components/lolita/configuration/field/date_time/date/_display.html.haml +1 -0
- data/app/views/components/lolita/configuration/field/date_time/time/_display.html.haml +1 -0
- data/app/views/components/lolita/configuration/field/float/_display.html.haml +1 -0
- data/app/views/components/lolita/configuration/field/integer/_display.html.haml +1 -0
- data/app/views/components/lolita/configuration/field/string/_display.html.haml +1 -0
- data/app/views/components/lolita/configuration/field/string/disabled/_display.html.haml +2 -0
- data/app/views/components/lolita/configuration/field/string/hidden/_display.html.haml +1 -0
- data/app/views/components/lolita/configuration/field/string/password/_display.html.haml +1 -0
- data/app/views/components/lolita/configuration/field/string/text/_display.html.haml +7 -0
- data/app/views/components/lolita/configuration/field/time/_display.html.haml +1 -0
- data/app/views/components/lolita/configuration/field_set/_display.html.haml +3 -0
- data/app/views/components/lolita/configuration/filter/_display.html.haml +9 -0
- data/app/views/components/lolita/configuration/list/_display.html.haml +9 -0
- data/app/views/components/lolita/configuration/list/_new_resource.html.haml +4 -0
- data/app/views/components/lolita/configuration/list/_paginator.html.haml +1 -0
- data/app/views/components/lolita/configuration/list/_title.html.haml +6 -0
- data/app/views/components/lolita/configuration/nested_form/_display.html.haml +12 -0
- data/app/views/components/lolita/configuration/nested_form/_fields.html.haml +8 -0
- data/app/views/components/lolita/configuration/nested_list/_display.html.haml +7 -0
- data/app/views/components/lolita/configuration/nested_list/_paginator.html.haml +2 -0
- data/app/views/components/lolita/configuration/tab/_display.html.haml +4 -0
- data/app/views/components/lolita/configuration/tab/_error_msg.html.haml +14 -0
- data/app/views/components/lolita/configuration/tab/_fields.html.haml +6 -0
- data/app/views/components/lolita/configuration/tab/_form.html.haml +4 -0
- data/app/views/components/lolita/configuration/tab/_title.html.haml +3 -0
- data/app/views/components/lolita/configuration/tab/content/_display.html.haml +1 -0
- data/app/views/components/lolita/configuration/tab/default/_display.html.haml +2 -0
- data/app/views/components/lolita/configuration/tabs/_display.html.haml +10 -0
- data/app/views/components/lolita/configuration/tabs/_form.html.haml +7 -0
- data/app/views/components/lolita/navigation/_display.html.haml +2 -0
- data/app/views/components/lolita/navigation/_tree.html.haml +14 -0
- data/app/views/components/lolita/shared/_buttons.html.haml +6 -0
- data/app/views/components/lolita/shared/_flash.html.haml +3 -0
- data/app/views/components/lolita/shared/_header.html.haml +7 -0
- data/app/views/components/lolita/shared/_languages.html.haml +11 -0
- data/app/views/components/lolita/shared/_right_sidebar.html.haml +6 -0
- data/app/views/components/lolita/shared/_save_button.html.haml +1 -0
- data/app/views/layouts/lolita/application.html.haml +36 -0
- data/app/views/lolita/rest/form.html.haml +1 -0
- data/app/views/lolita/rest/index.html.haml +1 -0
- data/app/views/lolita/rest/index.js.erb +1 -0
- data/config/locales/en.yml +4 -0
- data/config/locales/lv.yml +5 -2
- data/lib/generators/lolita/uninstall_generator.rb +76 -0
- data/lib/lolita.rb +104 -170
- data/lib/lolita/adapter/abstract_adapter.rb +1 -0
- data/lib/lolita/adapter/active_record.rb +22 -55
- data/lib/lolita/adapter/common_helper.rb +252 -0
- data/lib/lolita/adapter/mongoid.rb +11 -55
- data/lib/lolita/base.rb +5 -0
- data/lib/lolita/builder.rb +3 -3
- data/lib/lolita/components/base.rb +12 -0
- data/lib/lolita/components/configuration/column_component.rb +31 -0
- data/lib/lolita/components/configuration/list_component.rb +11 -0
- data/lib/lolita/configuration.rb +61 -0
- data/lib/lolita/configuration/action.rb +53 -0
- data/lib/lolita/configuration/base.rb +23 -71
- data/lib/lolita/configuration/column.rb +50 -16
- data/lib/lolita/configuration/columns.rb +51 -23
- data/lib/lolita/configuration/core.rb +80 -0
- data/lib/lolita/configuration/factory/field.rb +8 -3
- data/lib/lolita/configuration/factory/tab.rb +12 -6
- data/lib/lolita/configuration/field.rb +8 -11
- data/lib/lolita/configuration/field/array.rb +7 -9
- data/lib/lolita/configuration/fields.rb +1 -1
- data/lib/lolita/configuration/filter.rb +26 -19
- data/lib/lolita/configuration/list.rb +143 -80
- data/lib/lolita/configuration/nested_list.rb +102 -0
- data/lib/lolita/configuration/search.rb +14 -0
- data/lib/lolita/configuration/tab.rb +13 -9
- data/lib/lolita/configuration/tab/content.rb +6 -0
- data/lib/lolita/configuration/tab/default.rb +2 -2
- data/lib/lolita/configuration/tabs.rb +35 -82
- data/lib/lolita/controller_additions.rb +4 -3
- data/lib/lolita/controllers.rb +13 -0
- data/lib/lolita/controllers/authentication_helpers.rb +17 -0
- data/lib/lolita/controllers/component_helpers.rb +9 -5
- data/lib/lolita/controllers/internal_helpers.rb +22 -97
- data/lib/lolita/controllers/rails_helpers.rb +132 -0
- data/lib/lolita/controllers/url_helpers.rb +1 -1
- data/lib/lolita/errors.rb +3 -0
- data/lib/lolita/extensions/authentication/default_adapter.rb +24 -0
- data/lib/lolita/extensions/authentication/devise_adapter.rb +58 -0
- data/lib/lolita/extensions/authentication/proxy.rb +60 -0
- data/lib/lolita/extensions/authorization/cancan_adapter.rb +45 -0
- data/lib/lolita/extensions/authorization/default_adapter.rb +29 -0
- data/lib/lolita/extensions/authorization/proxy.rb +48 -0
- data/lib/lolita/extensions/extensions.rb +66 -0
- data/lib/lolita/helpers.rb +12 -0
- data/lib/lolita/lazy_loader.rb +15 -10
- data/lib/lolita/mapping.rb +25 -19
- data/lib/lolita/navigation/branch.rb +29 -2
- data/lib/lolita/navigation/tree.rb +6 -0
- data/lib/lolita/observed_array.rb +1 -1
- data/lib/lolita/orm.rb +7 -0
- data/lib/lolita/processors/request_processor.rb +38 -0
- data/lib/lolita/rails/engine.rb +24 -0
- data/lib/lolita/{modules/rest.rb → rails/railtie.rb} +8 -2
- data/lib/lolita/rails/routes.rb +26 -29
- data/lib/lolita/register.rb +48 -0
- data/lib/lolita/ruby_ext/lolita_model_name.rb +37 -0
- data/lib/lolita/system_configuration/application.rb +1 -0
- data/lib/lolita/system_configuration/base.rb +12 -5
- data/lib/lolita/utils.rb +14 -0
- data/lib/lolita/version.rb +30 -0
- data/lolita.gemspec +26 -398
- data/spec/configuration/base_spec.rb +14 -35
- data/spec/configuration/column_spec.rb +51 -2
- data/spec/configuration/columns_spec.rb +13 -19
- data/spec/configuration/core_spec.rb +89 -0
- data/spec/configuration/field_spec.rb +17 -5
- data/spec/configuration/filter_spec.rb +76 -61
- data/spec/configuration/list_spec.rb +339 -45
- data/spec/configuration/nested_list_spec.rb +111 -0
- data/spec/configuration/search_spec.rb +1 -1
- data/spec/configuration/tabs_spec.rb +89 -74
- data/spec/controllers/configuration_spec.rb +15 -0
- data/spec/controllers/internal_helpers_spec.rb +1 -1
- data/spec/controllers/lolita_rest_spec.rb +31 -2
- data/spec/coverage_helper.rb +33 -0
- data/spec/extensions/authentication/default_adapter_spec.rb +34 -0
- data/spec/extensions/authentication/devise_adapter_spec.rb +94 -0
- data/spec/extensions/authentication/proxy_spec.rb +55 -0
- data/spec/extensions/authorization/cancan_adapter_spec.rb +94 -0
- data/spec/extensions/authorization/default_adapter_spec.rb +43 -0
- data/spec/extensions/authorization/proxy_spec.rb +60 -0
- data/spec/extensions/extensions_spec.rb +45 -0
- data/spec/fabricators/category_fabricator.rb +3 -0
- data/spec/fabricators/post_fabricator.rb +4 -0
- data/spec/fabricators/tag_fabricator.rb +3 -0
- data/spec/lolita_spec.rb +1 -0
- data/spec/orm/mongoid.rb +1 -0
- data/spec/rails_app/app/mongoid/category.rb +14 -1
- data/spec/rails_app/app/mongoid/post.rb +9 -1
- data/spec/rails_app/config/application.rb +0 -4
- data/spec/rails_app/config/boot.rb +1 -2
- data/spec/register_spec.rb +50 -0
- data/spec/search/simple_spec.rb +4 -4
- data/spec/simple_spec_helper.rb +2 -1
- data/spec/spec_helper.rb +22 -35
- data/vendor/assets/javascripts/tinymce_config.js +5 -3
- metadata +202 -180
- data/.document +0 -5
- data/GUIDELINES.rdoc +0 -22
- data/VERSION +0 -1
- data/app/helpers/lolita_helper.rb +0 -23
- data/app/views/components/lolita/configuration/column/_display.html.erb +0 -4
- data/app/views/components/lolita/configuration/column/_header.html.erb +0 -7
- data/app/views/components/lolita/configuration/column/_sort.html.erb +0 -7
- data/app/views/components/lolita/configuration/columns/_body.html.erb +0 -5
- data/app/views/components/lolita/configuration/columns/_display.html.erb +0 -2
- data/app/views/components/lolita/configuration/columns/_first.html.erb +0 -3
- data/app/views/components/lolita/configuration/columns/_first_column_header.html.erb +0 -3
- data/app/views/components/lolita/configuration/columns/_header.html.erb +0 -9
- data/app/views/components/lolita/configuration/columns/_last.html.erb +0 -4
- data/app/views/components/lolita/configuration/columns/_last_column_header.html.erb +0 -3
- data/app/views/components/lolita/configuration/columns/_row.html.erb +0 -7
- data/app/views/components/lolita/configuration/field/_display.html.erb +0 -13
- data/app/views/components/lolita/configuration/field/_label.html.erb +0 -1
- data/app/views/components/lolita/configuration/field/_object.html.erb +0 -1
- data/app/views/components/lolita/configuration/field/array/_display.html.erb +0 -5
- data/app/views/components/lolita/configuration/field/array/filter/_display.html.erb +0 -1
- data/app/views/components/lolita/configuration/field/array/select/_display.html.erb +0 -4
- data/app/views/components/lolita/configuration/field/big_decimal/_display.html.erb +0 -1
- data/app/views/components/lolita/configuration/field/boolean/_display.html.erb +0 -1
- data/app/views/components/lolita/configuration/field/boolean/filter/_display.html.erb +0 -2
- data/app/views/components/lolita/configuration/field/date/_display.html.erb +0 -1
- data/app/views/components/lolita/configuration/field/date_time/_display.html.erb +0 -1
- data/app/views/components/lolita/configuration/field/date_time/date/_display.html.erb +0 -1
- data/app/views/components/lolita/configuration/field/date_time/time/_display.html.erb +0 -1
- data/app/views/components/lolita/configuration/field/float/_display.html.erb +0 -1
- data/app/views/components/lolita/configuration/field/hidden/_display.html.erb +0 -1
- data/app/views/components/lolita/configuration/field/integer/_display.html.erb +0 -1
- data/app/views/components/lolita/configuration/field/string/_display.html.erb +0 -1
- data/app/views/components/lolita/configuration/field/string/disabled/_display.html.erb +0 -1
- data/app/views/components/lolita/configuration/field/string/password/_display.html.erb +0 -3
- data/app/views/components/lolita/configuration/field/string/text/_display.html.erb +0 -11
- data/app/views/components/lolita/configuration/field/time/_display.html.erb +0 -1
- data/app/views/components/lolita/configuration/field_set/_display.html.erb +0 -5
- data/app/views/components/lolita/configuration/list/_display.html.erb +0 -11
- data/app/views/components/lolita/configuration/list/_filter.html.erb +0 -8
- data/app/views/components/lolita/configuration/list/_new_resource.html.erb +0 -6
- data/app/views/components/lolita/configuration/list/_paginator.html.erb +0 -1
- data/app/views/components/lolita/configuration/list/_title.html.erb +0 -10
- data/app/views/components/lolita/configuration/nested_form/_display.html.erb +0 -15
- data/app/views/components/lolita/configuration/nested_form/_fields.html.erb +0 -13
- data/app/views/components/lolita/configuration/tab/_display.html.erb +0 -8
- data/app/views/components/lolita/configuration/tab/_error_msg.html.erb +0 -20
- data/app/views/components/lolita/configuration/tab/_fields.html.erb +0 -9
- data/app/views/components/lolita/configuration/tab/_form.html.erb +0 -8
- data/app/views/components/lolita/configuration/tab/content/_display.html.erb +0 -1
- data/app/views/components/lolita/configuration/tab/default/_display.html.erb +0 -3
- data/app/views/components/lolita/configuration/tabs/_display.html.erb +0 -11
- data/app/views/components/lolita/navigation/_display.html.erb +0 -3
- data/app/views/components/lolita/navigation/_tree.html.erb +0 -32
- data/app/views/components/lolita/shared/_flash.html.erb +0 -5
- data/app/views/components/lolita/shared/_header.html.erb +0 -9
- data/app/views/components/lolita/shared/_right_sidebar.html.erb +0 -9
- data/app/views/components/lolita/shared/_save_button.html.erb +0 -6
- data/app/views/layouts/lolita/application.html.erb +0 -37
- data/app/views/lolita/rest/form.html.erb +0 -1
- data/app/views/lolita/rest/index.html.erb +0 -1
- data/config/locales/default/lv.yml +0 -181
- data/db/seed.rb +0 -1
- data/features/create_page.feature +0 -20
- data/features/step_definitions/lolita_steps.rb +0 -7
- data/features/step_definitions/web_steps.rb +0 -219
- data/features/support/env.rb +0 -73
- data/features/support/paths.rb +0 -35
- data/lib/lolita/controllers/authorization_helpers.rb +0 -56
- data/lib/lolita/controllers/user_helpers.rb +0 -44
- data/lib/lolita/modules.rb +0 -6
- data/lib/lolita/rails.rb +0 -23
- data/lib/lolita/rails/all.rb +0 -11
- data/spec/support/factories/category.rb +0 -3
- data/spec/support/factories/post.rb +0 -4
- data/spec/support/factories/tag.rb +0 -3
@@ -0,0 +1,45 @@
|
|
1
|
+
module Lolita
|
2
|
+
module Extensions
|
3
|
+
module Authorization
|
4
|
+
|
5
|
+
class CanCanAdapter
|
6
|
+
|
7
|
+
def initialize context, options={}
|
8
|
+
raise NameError, "CanCan is not defined" unless defined?(CanCan)
|
9
|
+
raise Lolita::NoAuthorizationDefinedError, "Lolita.authorization is not defined" unless Lolita.authorization
|
10
|
+
@context = context
|
11
|
+
@options = options
|
12
|
+
set_default_options
|
13
|
+
current_ability
|
14
|
+
end
|
15
|
+
|
16
|
+
def can? *args
|
17
|
+
current_ability.can?(*args)
|
18
|
+
end
|
19
|
+
|
20
|
+
def cannot? *args
|
21
|
+
current_ability.cannot?(*args)
|
22
|
+
end
|
23
|
+
|
24
|
+
def current_ability *args
|
25
|
+
unless @current_ability
|
26
|
+
@current_ability = Lolita.ability_class.new(@options[:current_user])
|
27
|
+
@context && @context.instance_variable_set(:"@current_ability",@current_ability)
|
28
|
+
end
|
29
|
+
@current_ability
|
30
|
+
end
|
31
|
+
|
32
|
+
def authorize! *args
|
33
|
+
current_ability && @context && @context.authorize!(*args) || current_ability.authorize!(*args)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def set_default_options
|
39
|
+
@options[:current_user] ||= @context && @context.authentication_proxy.current_user
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Lolita
|
2
|
+
module Extensions
|
3
|
+
module Authorization
|
4
|
+
|
5
|
+
class DefaultAdapter
|
6
|
+
|
7
|
+
def initialize *args
|
8
|
+
end
|
9
|
+
|
10
|
+
def can? *args
|
11
|
+
true
|
12
|
+
end
|
13
|
+
|
14
|
+
def cannot? *args
|
15
|
+
false
|
16
|
+
end
|
17
|
+
|
18
|
+
def current_ability *args
|
19
|
+
end
|
20
|
+
|
21
|
+
def authorize! *args
|
22
|
+
true
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/default_adapter"
|
2
|
+
require "#{File.dirname(__FILE__)}/cancan_adapter"
|
3
|
+
|
4
|
+
module Lolita
|
5
|
+
class NoAuthorizationDefinedError < ArgumentError ; end
|
6
|
+
|
7
|
+
module Extensions
|
8
|
+
module Authorization
|
9
|
+
|
10
|
+
class Proxy
|
11
|
+
attr_accessor :adapter
|
12
|
+
|
13
|
+
def initialize context,options={}
|
14
|
+
@context = context
|
15
|
+
@options = options
|
16
|
+
@adapter = get_adapter()
|
17
|
+
end
|
18
|
+
|
19
|
+
def can? *args
|
20
|
+
@adapter.can? *args
|
21
|
+
end
|
22
|
+
|
23
|
+
def cannot? *args
|
24
|
+
@adapter.cannot? *args
|
25
|
+
end
|
26
|
+
|
27
|
+
def authorize! *args
|
28
|
+
@adapter.authorize! *args
|
29
|
+
end
|
30
|
+
|
31
|
+
def current_ability *args
|
32
|
+
@adapter.current_ability *args
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def get_adapter
|
38
|
+
if Lolita.authorization
|
39
|
+
"Lolita::Extensions::Authorization::#{Lolita.authorization}Adapter".constantize.new @context, @options
|
40
|
+
else
|
41
|
+
Lolita::Extensions::Authorization::DefaultAdapter.new @context, @options
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Lolita
|
2
|
+
# This module provides functionality for extension machinery in Lolita. It loads proxies on demand.
|
3
|
+
module Extensions
|
4
|
+
EXTENSIONS = []
|
5
|
+
|
6
|
+
def method_missing method_name, *args, &block
|
7
|
+
if method_name[/_proxy$/]
|
8
|
+
type = method_name.to_s.sub(/_proxy$/,"")
|
9
|
+
self.class_eval <<-EXTENSION,__FILE__,__LINE__+1
|
10
|
+
def #{method_name}(*args,&block)
|
11
|
+
unless __extensions_proxies[:#{type}]
|
12
|
+
load_extension_proxy(:#{type},self,__proxy_options_from_context)
|
13
|
+
end
|
14
|
+
__extensions_proxies[:#{type}]
|
15
|
+
end
|
16
|
+
EXTENSION
|
17
|
+
send(method_name)
|
18
|
+
else
|
19
|
+
super
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def load_extensions_proxies(context=self, options={})
|
24
|
+
EXTENSIONS.each do |type|
|
25
|
+
load_extension_proxy(type,context,options)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def load_extension_proxy type,context=self,options={}
|
30
|
+
proxy_class = "Lolita::Extensions::#{type.to_s.camelize}::Proxy".constantize
|
31
|
+
initialize_arity = proxy_class.instance_method(:initialize).arity
|
32
|
+
__extensions_proxies[type] = if initialize_arity < 0 || initialize_arity > 1
|
33
|
+
proxy_class.new(context,options)
|
34
|
+
elsif initialize_arity == 0
|
35
|
+
proxy_class.new
|
36
|
+
else
|
37
|
+
proxy_class.new(context)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.add type
|
42
|
+
EXTENSIONS << type unless EXTENSIONS.include?(type)
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def __proxy_options_from_context
|
48
|
+
if defined?(::ActionController::Base) && self.is_a?(::ActionController::Base)
|
49
|
+
{:controller => self, :request => request}
|
50
|
+
elsif defined?(::ActionView::Base) && self.is_a?(::ActionView::Base)
|
51
|
+
{:request => request}
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def __extensions_proxies
|
56
|
+
@proxies ||= {}
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
Lolita::Extensions.add :authentication
|
63
|
+
Lolita::Extensions.add :authorization
|
64
|
+
|
65
|
+
require 'lolita/extensions/authorization/proxy'
|
66
|
+
require 'lolita/extensions/authentication/proxy'
|
data/lib/lolita/lazy_loader.rb
CHANGED
@@ -4,19 +4,23 @@ module Lolita
|
|
4
4
|
#attr_reader :lazy_class,:eval_block,:class_instance
|
5
5
|
|
6
6
|
def self.lazy_load(instance_name,var_name,lazy_class,*args,&block)
|
7
|
-
temp_var=instance_name.instance_variable_get(var_name)
|
8
|
-
|
9
|
-
|
7
|
+
temp_var = instance_name.instance_variable_get(var_name)
|
8
|
+
is_loader = temp_var.to_s =~ /Lolita::LazyLoader/
|
9
|
+
if !temp_var || ((args && args.any? && is_loader && temp_var.__is_args_diff__(args)) || block_given?)
|
10
|
+
temp_var = instance_name.instance_variable_set(var_name,self.new(lazy_class,*args,&block))
|
10
11
|
end
|
11
|
-
if temp_var.to_s
|
12
|
-
instance_name.instance_variable_set(var_name,temp_var.class_instance)
|
13
|
-
else
|
14
|
-
temp_var
|
12
|
+
if temp_var.to_s =~ /Lolita::LazyLoader/
|
13
|
+
temp_var = instance_name.instance_variable_set(var_name,temp_var.class_instance)
|
15
14
|
end
|
15
|
+
temp_var
|
16
|
+
end
|
17
|
+
|
18
|
+
def __is_args_diff__(args)
|
19
|
+
@args != args
|
16
20
|
end
|
17
21
|
|
18
22
|
def initialize(lazy_class,*args,&block)
|
19
|
-
@args=args
|
23
|
+
@args = args || []
|
20
24
|
@lazy_class=lazy_class
|
21
25
|
@eval_block=block
|
22
26
|
end
|
@@ -27,6 +31,7 @@ module Lolita
|
|
27
31
|
|
28
32
|
def method_missing(method_name,*args,&block)
|
29
33
|
unless @class_instance
|
34
|
+
@args = @args.empty? && [nil] || @args
|
30
35
|
arity=@lazy_class.instance_method(:initialize).arity
|
31
36
|
if arity==-1 # when expectign *args
|
32
37
|
@class_instance=@lazy_class.new(*@args,&@eval_block)
|
@@ -37,13 +42,13 @@ module Lolita
|
|
37
42
|
end
|
38
43
|
end
|
39
44
|
if @class_instance.respond_to?(:after_initialize,true)
|
40
|
-
@class_instance.
|
45
|
+
@class_instance.__send__(:after_initialize)
|
41
46
|
end
|
42
47
|
@class_instance.__send__(method_name,*args,&block)
|
43
48
|
end
|
44
49
|
|
45
50
|
instance_methods.each { |method|
|
46
|
-
next if ["hash","respond_to?","__id__","__send__","to_s","object_id","method_missing","class_instance","initialize"].include?(method.to_s)
|
51
|
+
next if ["!","__is_args_diff__","hash","respond_to?","__id__","__send__","to_s","object_id","method_missing","class_instance","initialize", "__args__"].include?(method.to_s)
|
47
52
|
eval("undef :#{method}")
|
48
53
|
}
|
49
54
|
end
|
data/lib/lolita/mapping.rb
CHANGED
@@ -17,33 +17,39 @@ module Lolita
|
|
17
17
|
# what controller to use, what model is related with it and so on. This is used to generate urls and paths.
|
18
18
|
# Also eahc request containers information with mapping related to it.
|
19
19
|
class Mapping
|
20
|
-
attr_reader :class_name,:path,:singular,:plural,:path_prefix,:module,:controllers
|
21
|
-
attr_reader :visible, :only, :append_to
|
20
|
+
attr_reader :class_name,:path,:singular,:plural,:path_prefix,:module,:as,:controllers
|
21
|
+
attr_reader :visible, :only, :append_to, :title
|
22
22
|
alias :name :singular
|
23
23
|
|
24
24
|
|
25
25
|
def initialize(name,options={})
|
26
26
|
# TODO how it is when lolita plugin extend default path and there is module is this not break the logic?
|
27
|
-
@as=options[:as]
|
28
|
-
@
|
29
|
-
@
|
30
|
-
@
|
31
|
-
@
|
32
|
-
@
|
33
|
-
@
|
34
|
-
@
|
35
|
-
@
|
36
|
-
@
|
37
|
-
@
|
38
|
-
|
39
|
-
@
|
40
|
-
|
27
|
+
@as = options[:as]
|
28
|
+
@title = options[:title]
|
29
|
+
@to = options[:to].is_a?(String) ? options[:to].constantize : options[:to]
|
30
|
+
@visible = options.keys.include?(:visible) ? options[:visible] : true
|
31
|
+
@append_to = options[:append_to]
|
32
|
+
@only = options[:only] || nil
|
33
|
+
@plural = (options[:as] ? options[:as] : name).to_sym
|
34
|
+
@singular = (options[:singular] || @plural.to_s.singularize).to_sym
|
35
|
+
@class_name = (options[:class_name] || name.to_s.classify).to_s
|
36
|
+
@ref = @class_name.to_s.camelize
|
37
|
+
@path_prefix = options[:path_prefix]
|
38
|
+
@path = (options[:path] || "lolita").to_s
|
39
|
+
@module = options[:module]
|
40
|
+
@default_mod = @module || "lolita"
|
41
|
+
@controllers = Hash.new{|h,k|
|
42
|
+
h[k]=options[:controller] || "#{!@module && "lolita/"}#{k}"
|
41
43
|
}
|
42
44
|
end
|
43
45
|
|
46
|
+
def controller
|
47
|
+
"#{@default_mod}#{@default_mod && "/"}#{@plural}"
|
48
|
+
end
|
49
|
+
|
44
50
|
# Return class that is related with mapping.
|
45
51
|
def to
|
46
|
-
@ref.constantize
|
52
|
+
@to || (@ref.constantize rescue nil)
|
47
53
|
end
|
48
54
|
|
49
55
|
# full path of current mapping
|
@@ -56,7 +62,7 @@ module Lolita
|
|
56
62
|
end
|
57
63
|
|
58
64
|
def add_to_navigation_tree
|
59
|
-
tree = Lolita
|
65
|
+
tree = Lolita.navigation
|
60
66
|
if self.visible
|
61
67
|
if self.append_to
|
62
68
|
parent_branch = tree.branches.detect{|b| b.options[:system_name] == self.append_to}
|
@@ -69,7 +75,7 @@ module Lolita
|
|
69
75
|
tree = parent_branch.children
|
70
76
|
end
|
71
77
|
unless tree.branches.detect{|b| b.object.is_a?(Lolita::Mapping) && b.object.to==self.to}
|
72
|
-
tree.append(self)
|
78
|
+
tree.append(self, :title => @title)
|
73
79
|
end
|
74
80
|
end
|
75
81
|
end
|
@@ -26,7 +26,9 @@ module Lolita
|
|
26
26
|
if @title && @title.respond_to?(:call)
|
27
27
|
@title.call(self)
|
28
28
|
else
|
29
|
-
@title ||
|
29
|
+
@title ||
|
30
|
+
(self.object.to && (self.object.to.lolita_model_name.human(:count=>2)) || self.object.to.to_s) ||
|
31
|
+
::I18n.t("lolita.navigation.#{object.name}")
|
30
32
|
end
|
31
33
|
end
|
32
34
|
|
@@ -63,6 +65,31 @@ module Lolita
|
|
63
65
|
self.children.branches.any?
|
64
66
|
end
|
65
67
|
|
68
|
+
def populate_url(view)
|
69
|
+
self.options[:url] = calculate_url(view)
|
70
|
+
end
|
71
|
+
|
72
|
+
def calculate_url(view)
|
73
|
+
if self.options[:url].respond_to?(:call)
|
74
|
+
self.options[:url].call(view,self)
|
75
|
+
elsif self.options[:url]
|
76
|
+
self.options[:url]
|
77
|
+
elsif self.object.is_a?(Lolita::Mapping)
|
78
|
+
view.send(:lolita_resources_path, self.object)
|
79
|
+
else
|
80
|
+
self.first_url_in_subtree(view)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def first_url_in_subtree(view)
|
85
|
+
if self.subtree?
|
86
|
+
subtree_branch = self.children.branches.detect{|branch|
|
87
|
+
branch.visible?(view)
|
88
|
+
}
|
89
|
+
subtree_branch.calculate_url(view) if subtree_branch
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
66
93
|
def siblings
|
67
94
|
index=self.index
|
68
95
|
{
|
@@ -102,7 +129,7 @@ module Lolita
|
|
102
129
|
|
103
130
|
def visible?(view)
|
104
131
|
self_visible = if self.object && self.object.respond_to?(:to)
|
105
|
-
view.send(:can?,:read,self.object.to)
|
132
|
+
view.send(:authorization_proxy).send(:can?,:read,self.object.to)
|
106
133
|
elsif self.options[:visible]
|
107
134
|
if self.options[:visible].respond_to?(:call)
|
108
135
|
self.options[:visible].call(view,self,branch)
|
@@ -33,6 +33,7 @@ module Lolita
|
|
33
33
|
module ObservedArray
|
34
34
|
|
35
35
|
def method_missing(method,*args,&block)
|
36
|
+
generate_collection_elements! if self.respond_to?(:generate_collection_elements!)
|
36
37
|
collection_variable.__send__(method,*args,&block)
|
37
38
|
end
|
38
39
|
|
@@ -61,7 +62,6 @@ module Lolita
|
|
61
62
|
collection_variable.each{|collection_element| yield collection_element}
|
62
63
|
end
|
63
64
|
|
64
|
-
|
65
65
|
private
|
66
66
|
|
67
67
|
def collection_variable
|
data/lib/lolita/orm.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
module Lolita
|
2
|
+
module Processors
|
3
|
+
class RequestProcessor
|
4
|
+
|
5
|
+
attr_accessor :scope
|
6
|
+
|
7
|
+
def self.respond_to(mapping,scope,action)
|
8
|
+
action_processor = "Lolita::Processors::RequestProcessor::#{action.to_s.camelize}ActionProcessor".constantize.new(mapping,scope)
|
9
|
+
action_processor.respond
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(mapping,scope)
|
13
|
+
@mapping = mapping
|
14
|
+
@scope = scope
|
15
|
+
end
|
16
|
+
|
17
|
+
def resource_class
|
18
|
+
@scope.resource_class
|
19
|
+
end
|
20
|
+
|
21
|
+
class IndexActionProcessor < self
|
22
|
+
|
23
|
+
def respond
|
24
|
+
build_response = resource_class.lolita.list.build(:page => page)
|
25
|
+
scope.instance_variable_set(:"@component_builder",build_response)
|
26
|
+
scope.haml :"lolita/rest/index.html", :layout => :"layouts/lolita/application.html"
|
27
|
+
end
|
28
|
+
|
29
|
+
def page
|
30
|
+
resource_class.lolita.list.paginate(1)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|