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,53 @@
|
|
1
|
+
module Lolita
|
2
|
+
module Configuration
|
3
|
+
class Action
|
4
|
+
|
5
|
+
include Lolita::Builder
|
6
|
+
lolita_accessor :url
|
7
|
+
attr_writer :title,:html
|
8
|
+
attr_reader :name
|
9
|
+
|
10
|
+
def initialize(dbi,name, options ={}, &block)
|
11
|
+
@dbi = dbi
|
12
|
+
@name = name
|
13
|
+
options.each do |key,value|
|
14
|
+
self.send(:"#{key}=",value)
|
15
|
+
end
|
16
|
+
instance_eval(&block) if block_given?
|
17
|
+
end
|
18
|
+
|
19
|
+
def html attributes = nil
|
20
|
+
if attributes
|
21
|
+
@html = attributes
|
22
|
+
else
|
23
|
+
result = {}
|
24
|
+
(@html || {}).each{|k,v|
|
25
|
+
result[k] = v.respond_to?(:call) ? v.call : v
|
26
|
+
}
|
27
|
+
result
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def title value=nil
|
32
|
+
if value
|
33
|
+
@title = value
|
34
|
+
else
|
35
|
+
if @title
|
36
|
+
@title.respond_to?(:call) ? @title.call : @title
|
37
|
+
else
|
38
|
+
::I18n.t("#{@dbi.klass.to_s.underscore}.actions.#{@name}")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def view_url view, record
|
44
|
+
if @url.respond_to?(:call)
|
45
|
+
@url.call(view,record)
|
46
|
+
else
|
47
|
+
@url
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -1,89 +1,41 @@
|
|
1
|
-
# Every class that include Lolita::Configuration this module assign
|
2
|
-
# #lolita and #lolita= methods. First one is for normal Lolita configuration
|
3
|
-
# definition, and the other one made to assing Lolita to class as a Lolita::Configuration::Base
|
4
|
-
# object. You may want to do that to change configuration or for testing purpose.
|
5
1
|
module Lolita
|
6
2
|
module Configuration
|
7
|
-
#
|
8
|
-
# * ActiveRecord::Base
|
9
|
-
# * Mongoid::Document
|
10
|
-
# Main block can hold these methods:
|
11
|
-
# <tt>list</tt> - List definition, see Lolitia::Configuration::List
|
12
|
-
# <tt>tab</tt> - Tab definition, see Lolita::Configuration::Tab
|
13
|
-
# <tt>tabs</tt> - Tabs definition, see Lolita::Configuration::Tabs
|
3
|
+
# This is superclass of other configuration classes, that is used to configure different parts of resource.
|
14
4
|
class Base
|
5
|
+
include Lolita::Builder
|
6
|
+
attr_reader :dbi
|
7
|
+
attr_writer :component
|
8
|
+
alias :dbp :dbi
|
15
9
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
class << self
|
20
|
-
|
21
|
-
def add_generator(method)
|
22
|
-
@@generators<<method.to_sym
|
23
|
-
end
|
24
|
-
end
|
25
|
-
# When configuration is defined in class than you don't need to worry about
|
26
|
-
# creating new object, because Lolita itself create it for that class.
|
27
|
-
# New object is created like when you define it in class, but <i>parent_class</i>
|
28
|
-
# must be given.
|
29
|
-
# ====Example
|
30
|
-
# class Person < ActiveRecord::Base
|
31
|
-
# include Lolita::Configuration
|
32
|
-
# lolita
|
33
|
-
# end
|
34
|
-
# Person.lolita.klass #=> Person
|
35
|
-
# # Init Lolita by youself
|
36
|
-
#
|
37
|
-
# class Person < ActiveRecord::Base
|
38
|
-
# include Lolita::Configuration
|
39
|
-
# end
|
40
|
-
# Person.lolita=Lolita::Configuration::Base.new(Person)
|
41
|
-
# Person.lolita.klass #=> Person
|
42
|
-
def initialize(orm_class,&block)
|
43
|
-
@in_callback_mode = false
|
44
|
-
@klass=orm_class
|
45
|
-
@dbi=Lolita::DBI::Base.create(orm_class)
|
46
|
-
block_given? ? self.instance_eval(&block) : self.generate!
|
47
|
-
end
|
48
|
-
|
49
|
-
|
50
|
-
# Create list variable for ::Base class and create lazy object of Lolita::LazyLoader.
|
51
|
-
# See Lolita::Configuration::List for more information.
|
52
|
-
def list &block
|
53
|
-
Lolita::LazyLoader.lazy_load(self,:@list,Lolita::Configuration::List,@dbi,&block)
|
10
|
+
def initialize(dbp, *args)
|
11
|
+
set_and_validate_dbp dbp
|
12
|
+
set_attributes *args
|
54
13
|
end
|
55
14
|
|
56
|
-
def
|
57
|
-
@
|
15
|
+
def component
|
16
|
+
@component ||= "Lolita::Components::#{self.class.to_s.sub("Lolita::","")}Component".constantize.new(self)
|
58
17
|
end
|
59
18
|
|
60
|
-
|
61
|
-
# See Lolita::Configuration::Tabs for details.
|
62
|
-
def tabs &block
|
63
|
-
Lolita::LazyLoader.lazy_load(self, :@tabs,Lolita::Configuration::Tabs,@dbi,&block)
|
64
|
-
end
|
19
|
+
private
|
65
20
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
self.tabs<<Lolita::Configuration::Factory::Tab.add(@dbi,*args,&block)
|
71
|
-
end
|
72
|
-
|
73
|
-
# Call all supported instance metods to set needed variables and initialize object with them.
|
74
|
-
def generate!
|
75
|
-
@@generators.each{|generator|
|
76
|
-
self.send(generator)
|
77
|
-
}
|
21
|
+
def set_and_validate_dbp(dbp)
|
22
|
+
@dbp = dbp
|
23
|
+
@dbi = dbp
|
24
|
+
raise Lolita::UnknownDBPError.new("No DBP specified for #{self.class.to_s.split("::").last}") unless @dbp
|
78
25
|
end
|
79
26
|
|
80
|
-
|
27
|
+
alias :set_and_validate_dbi :set_and_validate_dbp
|
81
28
|
|
82
|
-
|
83
|
-
|
29
|
+
# Used to set attributes if block not given.
|
30
|
+
def set_attributes(*args)
|
31
|
+
options = args && args.extract_options! || {}
|
32
|
+
options.each do |attr_name,value|
|
33
|
+
self.send("#{attr_name}=".to_sym,value)
|
34
|
+
end
|
84
35
|
end
|
85
36
|
|
86
37
|
end
|
38
|
+
|
87
39
|
end
|
88
40
|
end
|
89
41
|
|
@@ -1,48 +1,72 @@
|
|
1
1
|
module Lolita
|
2
2
|
module Configuration
|
3
|
-
class Column
|
4
|
-
|
5
|
-
include Lolita::Builder
|
3
|
+
class Column < Lolita::Configuration::Base
|
6
4
|
|
7
5
|
MAX_TEXT_SIZE=20
|
8
|
-
|
6
|
+
attr_reader :list_association_name
|
7
|
+
lolita_accessor :name,:title,:type,:options,:sortable, :association
|
9
8
|
|
10
9
|
def initialize(dbi,*args,&block)
|
11
|
-
|
10
|
+
set_and_validate_dbi(dbi)
|
12
11
|
self.set_attributes(*args)
|
13
12
|
self.instance_eval(&block) if block_given?
|
14
13
|
validate
|
14
|
+
normalize_attributes
|
15
|
+
detect_association
|
16
|
+
end
|
17
|
+
|
18
|
+
def list *args, &block
|
19
|
+
if args && args.any? || block_given?
|
20
|
+
detect_association
|
21
|
+
list_association = args[0] && @dbi.associations[args[0].to_s.to_sym] || self.association
|
22
|
+
list_dbi = list_association && Lolita::DBI::Base.create(list_association.klass)
|
23
|
+
raise Lolita::UnknownDBPError.new("DBI is not specified for list in column #{self}") unless list_dbi
|
24
|
+
@list_association_name = list_association.name
|
25
|
+
Lolita::LazyLoader.lazy_load(self,:@list,Lolita::Configuration::NestedList, list_dbi, self, :association_name => list_association.name, &block)
|
26
|
+
else
|
27
|
+
@list
|
28
|
+
end
|
15
29
|
end
|
16
30
|
|
31
|
+
# Return value of column from given record. When record matches foreign key patter, then foreign key is used.
|
32
|
+
# In other cases it just ask for attribute with same name as column.
|
17
33
|
def value(record)
|
18
|
-
if self.
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
elsif
|
23
|
-
|
34
|
+
if self.association
|
35
|
+
if self.association.macro == :one && dbi.klass.respond_to?(:human_attribute_name)
|
36
|
+
dbi.klass.human_attribute_name(association.name)
|
37
|
+
# dbi.record(record.send(association.name)).title
|
38
|
+
elsif dbi.klass.respond_to?(:human_attribute_name)
|
39
|
+
"#{dbi.klass.human_attribute_name(association.name)} (#{record.send(association.name).count})"
|
24
40
|
else
|
25
|
-
record.send(
|
41
|
+
"#{association.name} (#{record.send(association.name).count})"
|
26
42
|
end
|
27
43
|
else
|
28
44
|
record.send(self.name)
|
29
45
|
end
|
30
46
|
end
|
31
47
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
35
|
-
|
48
|
+
def formatted_value(record,view)
|
49
|
+
self.formatter.with(self.value(record),record,self)
|
50
|
+
end
|
51
|
+
|
52
|
+
# Set/Get title. Getter return title what was set or ask for human_attribute_name to model.
|
53
|
+
def title(new_title=nil)
|
54
|
+
if new_title
|
55
|
+
@title = new_title
|
56
|
+
end
|
57
|
+
Lolita::Utils.dynamic_string(@title, :default => @name && @dbi.klass.human_attribute_name(@name))
|
36
58
|
end
|
37
59
|
|
38
60
|
def sortable?
|
39
61
|
@sortable
|
40
62
|
end
|
41
63
|
|
64
|
+
# Find if any of received sort options matches this column.
|
42
65
|
def current_sort_state(params)
|
43
66
|
@sortable && sort_pairs(params).detect{|pair| pair[0]==self.name.to_s} || []
|
44
67
|
end
|
45
68
|
|
69
|
+
# Return string with sort options for column if column is sortable.
|
46
70
|
def sort_params params
|
47
71
|
if @sortable
|
48
72
|
pairs = sort_pairs(params)
|
@@ -62,6 +86,7 @@ module Lolita
|
|
62
86
|
end
|
63
87
|
end
|
64
88
|
|
89
|
+
# Create array of sort information from params.
|
65
90
|
def sort_pairs params
|
66
91
|
(params[:s] || "").split("|").map{|pair| pair.split(",")}
|
67
92
|
end
|
@@ -104,7 +129,16 @@ module Lolita
|
|
104
129
|
|
105
130
|
private
|
106
131
|
|
132
|
+
def detect_association
|
133
|
+
@association ||= dbi.associations[self.name]
|
134
|
+
end
|
135
|
+
|
136
|
+
def normalize_attributes
|
137
|
+
@name = @name.to_sym
|
138
|
+
end
|
139
|
+
|
107
140
|
def validate
|
141
|
+
raise Lolita::UnknownDBIError.new("DBI is not specified for column #{self}") unless self.dbi
|
108
142
|
raise ArgumentError.new("Column must have name.") unless self.name
|
109
143
|
end
|
110
144
|
end
|
@@ -5,17 +5,34 @@ module Lolita
|
|
5
5
|
include Enumerable
|
6
6
|
include ObservedArray
|
7
7
|
include Lolita::Builder
|
8
|
-
|
9
|
-
attr_accessor :list
|
8
|
+
|
10
9
|
attr_reader :dbi
|
10
|
+
attr_accessor :parent
|
11
11
|
|
12
|
-
def initialize(
|
13
|
-
@
|
14
|
-
@dbi=dbi || list.dbi
|
12
|
+
def initialize(dbi, *args, &block)
|
13
|
+
@dbi=dbi
|
15
14
|
@columns=[]
|
15
|
+
@generated_yet = (block_given? || (args && args.any?))
|
16
|
+
set_attributes(*args)
|
17
|
+
self.instance_eval(&block) if block_given?
|
18
|
+
end
|
19
|
+
|
20
|
+
# Add column to columns Array. Receive attributes for column as Hash and/or block.
|
21
|
+
def column *args, &block
|
22
|
+
@columns << build_element(*args,&block)
|
23
|
+
@columns.last
|
24
|
+
end
|
25
|
+
|
26
|
+
# Find first column by name
|
27
|
+
def by_name(name)
|
28
|
+
name = name.to_sym
|
29
|
+
self.detect do |column|
|
30
|
+
column.name == name
|
31
|
+
end
|
16
32
|
end
|
17
33
|
|
18
34
|
def each
|
35
|
+
self.populate
|
19
36
|
@columns.each_with_index{|column,index|
|
20
37
|
if column.is_a?(Lolita::Configuration::Column)
|
21
38
|
yield column
|
@@ -25,41 +42,52 @@ module Lolita
|
|
25
42
|
}
|
26
43
|
end
|
27
44
|
|
45
|
+
|
28
46
|
def generate!
|
47
|
+
@generated_yet = true
|
29
48
|
@columns.clear
|
30
49
|
@dbi.fields.each_with_index{|field,index|
|
31
50
|
unless field.technical?
|
32
|
-
|
51
|
+
column(field)
|
33
52
|
end
|
34
53
|
}
|
35
54
|
end
|
36
55
|
|
37
|
-
def
|
38
|
-
if
|
39
|
-
@columns<<build_element(&block)
|
40
|
-
else
|
41
|
-
@columns<<build_element(attributes)
|
42
|
-
end
|
43
|
-
self
|
56
|
+
def populate
|
57
|
+
self.generate! if @columns.empty? && !@generated_yet
|
44
58
|
end
|
45
59
|
|
46
60
|
private
|
47
61
|
|
62
|
+
def set_attributes(*args)
|
63
|
+
if args && args.any?
|
64
|
+
options = args.extract_options! || {}
|
65
|
+
args.each do |col_name|
|
66
|
+
column col_name
|
67
|
+
end
|
68
|
+
options.each do |key,value|
|
69
|
+
if key == :column
|
70
|
+
column value
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def generate_collection_elements!
|
77
|
+
self.populate
|
78
|
+
end
|
79
|
+
|
48
80
|
def collection_variable
|
49
81
|
@columns
|
50
82
|
end
|
51
83
|
|
52
|
-
def build_element(column
|
53
|
-
if column.is_a?(Lolita::Configuration::Column)
|
54
|
-
column
|
55
|
-
elsif column.is_a?(Proc)
|
56
|
-
Lolita::Configuration::Column.new(@dbi,&column)
|
57
|
-
elsif block_given?
|
58
|
-
Lolita::Configuration::Column.new(@dbi,&block)
|
59
|
-
elsif [Symbol,String,Hash].include?(column.class)
|
60
|
-
Lolita::Configuration::Column.new(@dbi,column)
|
84
|
+
def build_element(*column,&block)
|
85
|
+
if column[0].is_a?(Lolita::Configuration::Column)
|
86
|
+
column[0]
|
87
|
+
elsif column[0].is_a?(Proc)
|
88
|
+
Lolita::Configuration::Column.new(@dbi,&column[0])
|
61
89
|
else
|
62
|
-
|
90
|
+
Lolita::Configuration::Column.new(@dbi,*column, &block)
|
63
91
|
end
|
64
92
|
end
|
65
93
|
|
@@ -0,0 +1,80 @@
|
|
1
|
+
module Lolita
|
2
|
+
module Configuration
|
3
|
+
|
4
|
+
# This is class of lolita instance.
|
5
|
+
# Main block can hold these methods:
|
6
|
+
# <tt>list</tt> - List definition, see Lolitia::Configuration::List
|
7
|
+
# <tt>tab</tt> - Tab definition, see Lolita::Configuration::Tab
|
8
|
+
# <tt>tabs</tt> - Tabs definition, see Lolita::Configuration::Tabs
|
9
|
+
class Core
|
10
|
+
attr_reader :dbi,:klass
|
11
|
+
@@generators=[:tabs,:list]
|
12
|
+
|
13
|
+
# When configuration is defined in class than you don't need to worry about
|
14
|
+
# creating new object, because Lolita itself create it for that class.
|
15
|
+
# New object is created like when you define it in class, but <i>parent_class</i>
|
16
|
+
# must be given.
|
17
|
+
# ====Example
|
18
|
+
# class Person < ActiveRecord::Base
|
19
|
+
# include Lolita::Configuration
|
20
|
+
# lolita
|
21
|
+
# end
|
22
|
+
# Person.lolita.klass #=> Person
|
23
|
+
# # Init Lolita by youself
|
24
|
+
#
|
25
|
+
# class Person < ActiveRecord::Base
|
26
|
+
# include Lolita::Configuration
|
27
|
+
# end
|
28
|
+
# Person.lolita=Lolita::Configuration::Base.new(Person)
|
29
|
+
# Person.lolita.klass #=> Person
|
30
|
+
def initialize(orm_class,&block)
|
31
|
+
@klass = orm_class
|
32
|
+
@dbp = Lolita::DBI::Base.create(orm_class)
|
33
|
+
@dbi = @dbp
|
34
|
+
block_given? ? self.instance_eval(&block) : self.generate!
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
# Create list variable for ::Base class and create lazy object of Lolita::LazyLoader.
|
39
|
+
# See Lolita::Configuration::List for more information.
|
40
|
+
def list &block
|
41
|
+
Lolita::LazyLoader.lazy_load(self,:@list,Lolita::Configuration::List,@dbp,&block)
|
42
|
+
end
|
43
|
+
|
44
|
+
def list=(new_list)
|
45
|
+
@list = new_list if new_list.is_a?(Lolita::Configuration::List)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Create collection of Lolita::Configuration::Tab, loading lazy.
|
49
|
+
# See Lolita::Configuration::Tabs for details.
|
50
|
+
def tabs &block
|
51
|
+
Lolita::LazyLoader.lazy_load(self, :@tabs,Lolita::Configuration::Tabs,@dbp,&block)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Shortcut for Lolita::Configuration::Tabs <<.
|
55
|
+
# Tabs should not be defined in lolita block to create onew or more Lolita::Configuration::Tab
|
56
|
+
# See Lolita::Configuration::Tab for details of defination.
|
57
|
+
def tab *args, &block
|
58
|
+
self.tabs << Lolita::Configuration::Factory::Tab.add(@dbp,*args,&block)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Call all supported instance metods to set needed variables and initialize object with them.
|
62
|
+
def generate!
|
63
|
+
generators.each{|generator|
|
64
|
+
self.send(generator)
|
65
|
+
}
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def generators
|
71
|
+
@@generators
|
72
|
+
end
|
73
|
+
|
74
|
+
def after_initialize
|
75
|
+
@dbp.klass.run(:after_lolita_loaded, :once => self)
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|