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,76 @@
|
|
1
|
+
module Lolita
|
2
|
+
module Generators
|
3
|
+
class UninstallGenerator < Rails::Generators::Base
|
4
|
+
ROUTE_NAME = "lolita_for"
|
5
|
+
INCLUDE_MODULE = "Lolita::Configuration"
|
6
|
+
MODEL_METHOD = "lolita"
|
7
|
+
|
8
|
+
desc "Uninstall Lolita and remove all dependencies"
|
9
|
+
|
10
|
+
def ask_to_continue
|
11
|
+
#ask("Do you want to remove initializer, clear routes and remove Lolita from models? [y]es/[n]o")
|
12
|
+
end
|
13
|
+
# Remove lolita initializer file
|
14
|
+
def remove_initializer
|
15
|
+
if File.exist?(Rails.root + "config/initializers/lolita.rb")
|
16
|
+
remove_file "config/initializers/lolita.rb"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Remove all not-commented lines that begins with lolita_for
|
21
|
+
def clear_routes
|
22
|
+
gsub_file File.join(Rails.root,"config","routes.rb"), /^\s*#{ROUTE_NAME}.*/ do |match|
|
23
|
+
match.clear
|
24
|
+
match
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Remove configuration include line and lolita block or single lolita method call.
|
29
|
+
# Block will be removed correctly if it starts with _do_ and ends with _end_.
|
30
|
+
def clear_models
|
31
|
+
Dir[File.join(Rails.root,"app","models","*.rb")].each do |file_name|
|
32
|
+
matched = false
|
33
|
+
gsub_file file_name, /^\s*include\s+#{INCLUDE_MODULE}.*/ do |match|
|
34
|
+
matched = true
|
35
|
+
match.clear
|
36
|
+
match
|
37
|
+
end
|
38
|
+
if matched
|
39
|
+
new_lines = []
|
40
|
+
File.open(file_name,"r") do |file|
|
41
|
+
do_count = nil
|
42
|
+
file.each_line do |line|
|
43
|
+
if do_count.nil?
|
44
|
+
if line.match(/^(\s*)lolita\s+(do)?/)
|
45
|
+
if $2 == "do"
|
46
|
+
do_count = 1
|
47
|
+
else
|
48
|
+
do_count = 0
|
49
|
+
end
|
50
|
+
else
|
51
|
+
new_lines << line
|
52
|
+
end
|
53
|
+
elsif do_count > 0
|
54
|
+
if line.match(/(^|\s+)do(\s+|$)/)
|
55
|
+
do_count +=1
|
56
|
+
elsif line.match(/(^|\s+)end(\s+|$)/)
|
57
|
+
do_count -=1
|
58
|
+
end
|
59
|
+
else
|
60
|
+
new_lines << line
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
File.open(file_name,"w") do |file|
|
65
|
+
new_lines.each do |line|
|
66
|
+
file.puts(line)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
data/lib/lolita.rb
CHANGED
@@ -1,208 +1,142 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
LOLITA_VERSION=File.read(File.expand_path("../../VERSION",__FILE__)).gsub(/[^.\w]/,"")
|
4
|
-
FRAMEWORK = if defined?(Rails)
|
5
|
-
" with Rails #{::Rails::VERSION::STRING}"
|
6
|
-
end
|
7
|
-
puts "=> Lolita #{LOLITA_VERSION} starting#{FRAMEWORK}"
|
8
|
-
|
9
|
-
require "rubygems"
|
10
|
-
require 'abstract'
|
11
|
-
|
12
|
-
require 'active_support'
|
13
|
-
require 'active_support/core_ext/numeric/time'
|
14
|
-
require 'active_support/core_ext/date_time/conversions'
|
15
|
-
require 'active_support/concern'
|
16
|
-
require 'active_support/callbacks'
|
17
|
-
require 'active_support/dependencies'
|
18
|
-
require 'active_support/inflector'
|
19
|
-
|
20
|
-
|
21
|
-
require 'lolita/errors'
|
22
|
-
require "lolita/hooks"
|
23
|
-
# Require all ruby extensions
|
24
|
-
Dir["#{File.dirname(__FILE__)}/lolita/ruby_ext/**/*.*"].each do |path|
|
25
|
-
require path
|
26
|
-
end
|
2
|
+
require 'lolita/version'
|
27
3
|
|
28
4
|
module Lolita
|
29
|
-
include Lolita::Hooks
|
30
|
-
add_hook :before_setup, :after_setup, :after_routes_loaded,:before_routes_loaded
|
31
|
-
|
32
|
-
autoload(:LazyLoader,'lolita/lazy_loader')
|
33
|
-
autoload(:VERSION,'lolita/version')
|
34
|
-
autoload(:ObservedArray,'lolita/observed_array')
|
35
|
-
autoload(:Builder,'lolita/builder')
|
36
|
-
autoload(:ControllerAdditions,'lolita/controller_additions')
|
37
|
-
module Builder
|
38
|
-
autoload(:Custom, 'lolita/builder')
|
39
|
-
end
|
40
5
|
|
41
|
-
|
42
|
-
|
43
|
-
autoload :Application, 'lolita/system_configuration/application'
|
44
|
-
end
|
6
|
+
CONFIGURATIONS = {}
|
7
|
+
DEFAULT_CONFIGURATION_NAME = :default
|
45
8
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
autoload :Mongoid, 'lolita/adapter/mongoid'
|
9
|
+
def self.configuration name = nil
|
10
|
+
name ||= DEFAULT_CONFIGURATION_NAME
|
11
|
+
CONFIGURATIONS[name] ||= Lolita::SystemConfiguration::Base.new(name)
|
12
|
+
CONFIGURATIONS[name]
|
51
13
|
end
|
52
14
|
|
53
|
-
|
54
|
-
|
15
|
+
def self.setup
|
16
|
+
self.run(:before_setup)
|
17
|
+
yield configuration
|
18
|
+
self.run(:after_setup)
|
55
19
|
end
|
56
20
|
|
57
|
-
|
58
|
-
|
21
|
+
def self.root
|
22
|
+
@@root||=File.expand_path("#{__FILE__}/../..")
|
59
23
|
end
|
60
|
-
|
61
|
-
# Keep all configuration classes and modules, that is used to configure classes with lolita.
|
62
|
-
module Configuration
|
63
|
-
|
64
|
-
autoload :Base, 'lolita/configuration/base'
|
65
|
-
autoload :Column, 'lolita/configuration/column'
|
66
|
-
autoload :Columns, 'lolita/configuration/columns'
|
67
|
-
autoload :Fields, 'lolita/configuration/fields'
|
68
|
-
autoload :FieldSet, 'lolita/configuration/field_set'
|
69
|
-
autoload :List, 'lolita/configuration/list'
|
70
|
-
autoload :Tabs, 'lolita/configuration/tabs'
|
71
|
-
autoload :Filter, 'lolita/configuration/filter'
|
72
|
-
autoload :NestedForm, 'lolita/configuration/nested_form'
|
73
|
-
autoload :Search, 'lolita/configuration/search'
|
74
|
-
|
75
|
-
# Module contains classes that is used to create specific type class based on given arguments.
|
76
|
-
module Factory
|
77
|
-
autoload :Field, "lolita/configuration/factory/field"
|
78
|
-
autoload :Tab, "lolita/configuration/factory/tab"
|
79
|
-
end
|
80
|
-
|
81
|
-
# Contains all supported field types. Class name is Lolita::Configuration::Field::[FieldType]
|
82
|
-
module Field
|
83
|
-
autoload :Base,'lolita/configuration/field'
|
84
|
-
Dir["#{File.dirname(__FILE__)}/lolita/configuration/field/**/*.*"].each do |path|
|
85
|
-
base_name=File.basename(path,".rb")
|
86
|
-
autoload :"#{base_name.camelize}", "lolita/configuration/field/#{base_name}"
|
87
|
-
end
|
88
|
-
end
|
89
24
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
def self.included(base)
|
101
|
-
base.class_eval do
|
102
|
-
include Lolita::Hooks
|
103
|
-
add_hook :after_lolita_loaded
|
104
|
-
|
105
|
-
extend ClassMethods
|
106
|
-
def lolita
|
107
|
-
self.class.lolita
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
module ClassMethods
|
113
|
-
def lolita(&block)
|
114
|
-
Lolita::LazyLoader.lazy_load(self,:@lolita,Lolita::Configuration::Base,self,&block)
|
115
|
-
end
|
116
|
-
|
117
|
-
def lolita=(value)
|
118
|
-
if value.is_a?(Lolita::Configuration::Base)
|
119
|
-
@lolita=value
|
120
|
-
else
|
121
|
-
raise ArgumentError.new("Only Lolita::Configuration::Base is acceptable.")
|
25
|
+
def self.app_root
|
26
|
+
@@app_root||=File.join(File.expand_path("#{__FILE__}/../.."),"app")
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.method_missing method_name, *args, &block
|
30
|
+
self.class_eval <<-LOLITA_SETUP,__FILE__,__LINE__+1
|
31
|
+
class << self
|
32
|
+
def #{method_name}(*args,&block)
|
33
|
+
configuration.send(:#{method_name},*args,&block)
|
122
34
|
end
|
123
35
|
end
|
124
|
-
|
36
|
+
LOLITA_SETUP
|
37
|
+
configuration.send(method_name,*args,&block)
|
125
38
|
end
|
126
39
|
|
127
|
-
|
128
|
-
|
129
|
-
|
40
|
+
def self.load!
|
41
|
+
load_frameworks!
|
42
|
+
load_dependencies!
|
43
|
+
load_base!
|
44
|
+
|
45
|
+
self.send(:include, Lolita::Hooks)
|
46
|
+
self.send(:add_hook, :before_setup, :after_setup, :after_routes_loaded,:before_routes_loaded)
|
47
|
+
|
130
48
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
autoload :ComponentHelpers, 'lolita/controllers/component_helpers'
|
136
|
-
autoload :AuthorizationHelpers, 'lolita/controllers/authorization_helpers'
|
49
|
+
if rails?
|
50
|
+
load_rails!
|
51
|
+
end
|
52
|
+
load_modules!
|
137
53
|
end
|
138
54
|
|
139
|
-
|
140
|
-
|
141
|
-
|
55
|
+
def self.load_frameworks!
|
56
|
+
frameworks.each do |framework|
|
57
|
+
begin
|
58
|
+
require framework
|
59
|
+
puts " => Loading Lolita #{version} with #{framework}"
|
60
|
+
rescue Execption => e
|
61
|
+
raise "Can't load #{framework}. Check you Gemfile."
|
62
|
+
end
|
63
|
+
end
|
142
64
|
end
|
143
65
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
66
|
+
def self.frameworks
|
67
|
+
frameworks = []
|
68
|
+
if rails?
|
69
|
+
frameworks << "rails"
|
70
|
+
end
|
71
|
+
frameworks
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.load_dependencies!
|
75
|
+
require 'abstract'
|
76
|
+
require 'observer'
|
77
|
+
require 'ostruct'
|
78
|
+
require "base64"
|
79
|
+
require 'active_support'
|
80
|
+
require 'active_support/core_ext/numeric/time'
|
81
|
+
require 'active_support/core_ext/date_time/conversions'
|
82
|
+
require 'active_support/concern'
|
83
|
+
require 'active_support/callbacks'
|
84
|
+
require 'active_support/dependencies'
|
85
|
+
require 'active_support/inflector'
|
86
|
+
end
|
87
|
+
|
88
|
+
def self.load_base!
|
89
|
+
Dir["#{File.dirname(__FILE__)}/lolita/ruby_ext/**/*.*"].each do |path|
|
90
|
+
require path
|
148
91
|
end
|
92
|
+
require 'lolita/errors'
|
93
|
+
require 'lolita/utils'
|
94
|
+
require 'lolita/hooks'
|
95
|
+
require 'lolita/mapping'
|
96
|
+
require 'lolita/hooks/named_hook'
|
97
|
+
require 'lolita/system_configuration/base'
|
98
|
+
require 'lolita/system_configuration/application'
|
99
|
+
require 'lolita/extensions/extensions'
|
149
100
|
end
|
150
101
|
|
151
|
-
|
152
|
-
|
153
|
-
|
102
|
+
def self.load_modules!
|
103
|
+
require 'lolita/base'
|
104
|
+
require 'lolita/orm'
|
105
|
+
require 'lolita/configuration'
|
106
|
+
require 'lolita/helpers'
|
107
|
+
require 'lolita/processors/request_processor'
|
108
|
+
require 'lolita/navigation/tree'
|
109
|
+
require 'lolita/navigation/branch'
|
154
110
|
|
155
|
-
|
111
|
+
require 'lolita/test/matchers'
|
112
|
+
require 'lolita/support/formatter'
|
113
|
+
require 'lolita/support/formatter/rails'
|
156
114
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
@@scopes[name]
|
115
|
+
require 'lolita/search/simple'
|
116
|
+
require 'lolita/components/base'
|
117
|
+
require 'lolita/components/configuration/column_component'
|
161
118
|
end
|
162
119
|
|
163
|
-
def self.
|
164
|
-
|
165
|
-
|
166
|
-
|
120
|
+
def self.load_rails!
|
121
|
+
require 'kaminari'
|
122
|
+
require 'tinymce-rails'
|
123
|
+
require 'jquery-rails'
|
124
|
+
require 'lolita/rails/railtie'
|
125
|
+
require 'lolita/rails/engine'
|
167
126
|
end
|
168
127
|
|
169
|
-
def self.
|
170
|
-
|
171
|
-
end
|
172
|
-
|
173
|
-
def self.root
|
174
|
-
@@root||=File.expand_path("#{__FILE__}/../..")
|
128
|
+
def self.version
|
129
|
+
Lolita::Version::STRING
|
175
130
|
end
|
176
131
|
|
177
|
-
def self.
|
178
|
-
|
179
|
-
end
|
180
|
-
|
181
|
-
def self.method_missing method_name, *args, &block
|
182
|
-
self.class_eval <<-LOLITA_SETUP,__FILE__,__LINE__+1
|
183
|
-
class << self
|
184
|
-
def #{method_name}(*args,&block)
|
185
|
-
scope.send(:#{method_name},*args,&block)
|
186
|
-
end
|
187
|
-
end
|
188
|
-
LOLITA_SETUP
|
189
|
-
scope.send(method_name,*args,&block)
|
132
|
+
def self.rails?
|
133
|
+
defined?(::Rails)
|
190
134
|
end
|
191
135
|
|
192
136
|
def self.rails3?
|
193
137
|
defined?(::Rails) && ::Rails::VERSION::MAJOR == 3
|
194
138
|
end
|
195
|
-
|
196
|
-
module Generators
|
197
|
-
autoload :FileHelper, File.join(Lolita.root,"lib","generators","helpers","file_helper")
|
198
|
-
end
|
199
|
-
|
200
139
|
end
|
201
140
|
|
202
|
-
|
203
|
-
|
204
|
-
require 'kaminari'
|
205
|
-
require 'tinymce-rails'
|
206
|
-
require 'jquery-rails'
|
207
|
-
require 'lolita/rails/all'
|
208
|
-
end
|
141
|
+
|
142
|
+
Lolita.load!
|
@@ -23,14 +23,30 @@ module Lolita
|
|
23
23
|
@association.send(method,*args,&block)
|
24
24
|
end
|
25
25
|
|
26
|
-
def key
|
27
|
-
if @association.macro == :
|
28
|
-
|
26
|
+
def key # maybe this isn't neccessery any more
|
27
|
+
if @association.macro == :has_and_belongs_to_many || through?
|
28
|
+
association_key
|
29
29
|
else
|
30
|
-
@association.
|
30
|
+
@association.foreign_key
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
def association_key
|
35
|
+
@association.association_foreign_key
|
36
|
+
end
|
37
|
+
|
38
|
+
def foreign_key
|
39
|
+
@association.foreign_key
|
40
|
+
end
|
41
|
+
|
42
|
+
def through
|
43
|
+
@association.options[:through]
|
44
|
+
end
|
45
|
+
|
46
|
+
def through?
|
47
|
+
@association.options.has_key?(:through)
|
48
|
+
end
|
49
|
+
|
34
50
|
def polymorphic?
|
35
51
|
@association.options[:polymorphic]
|
36
52
|
end
|
@@ -61,20 +77,6 @@ module Lolita
|
|
61
77
|
@associations
|
62
78
|
end
|
63
79
|
|
64
|
-
# Return all association class names
|
65
|
-
def associations_class_names
|
66
|
-
self.associations.map{|name,association|
|
67
|
-
association.class_name
|
68
|
-
}
|
69
|
-
end
|
70
|
-
|
71
|
-
# Detect if class reflect on association by name
|
72
|
-
def reflect_on_association(name)
|
73
|
-
if orm_association = klass.reflect_on_association(name)
|
74
|
-
Association.new(orm_association,self)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
80
|
# Each field from ORM is changed to this class instance.
|
79
81
|
class Field
|
80
82
|
include Lolita::Adapter::FieldHelper
|
@@ -141,6 +143,8 @@ module Lolita
|
|
141
143
|
end
|
142
144
|
end # end of field
|
143
145
|
|
146
|
+
include Lolita::Adapter::CommonHelper
|
147
|
+
|
144
148
|
def fields
|
145
149
|
@fields||=self.klass.columns.collect{|column|
|
146
150
|
Field.new(column,self)
|
@@ -163,43 +167,6 @@ module Lolita
|
|
163
167
|
end
|
164
168
|
end
|
165
169
|
|
166
|
-
def find_by_id(id)
|
167
|
-
self.klass.unscoped.find_by_id(id)
|
168
|
-
end
|
169
|
-
|
170
|
-
# This method is used to paginate, main reason is for list and for index action.
|
171
|
-
# Method accepts three arguments
|
172
|
-
# <tt>page</tt> - page that should be shown (integer)
|
173
|
-
# <tt>per</tt> - how many records there should be in page
|
174
|
-
# <tt>options</tt> - Hash with optional information.
|
175
|
-
# By default, Lolita::Configuration::List passes request, with current request information.
|
176
|
-
# Also it passes <i>:pagination_method</i> that is used to detect if there is special method(-s) in model
|
177
|
-
# that should be used for creating page.
|
178
|
-
def paginate(page,per,options ={})
|
179
|
-
scope = nil
|
180
|
-
if options[:pagination_method]
|
181
|
-
if options[:pagination_method].respond_to?(:each)
|
182
|
-
options[:pagination_method].each do |method_name|
|
183
|
-
options[:previous_scope] = scope
|
184
|
-
if new_scope = pagination_scope_from_klass(method_name,page,per,options)
|
185
|
-
scope = scope ? scope.merge(new_scope) : new_scope
|
186
|
-
end
|
187
|
-
end
|
188
|
-
else
|
189
|
-
scope = pagination_scope_from_klass(options[:pagination_method],page,per,options)
|
190
|
-
end
|
191
|
-
scope
|
192
|
-
else
|
193
|
-
klass.unscoped.page(page).per(per)
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
def pagination_scope_from_klass(method_name,page,per,options)
|
198
|
-
if klass.respond_to?(method_name)
|
199
|
-
klass.send(method_name,page,per,options)
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
170
|
def search(query, options = {})
|
204
171
|
#TODO raise error or warn when there are lot of records and no index on field
|
205
172
|
unless query.blank?
|