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.
Files changed (254) hide show
  1. data/.gitignore +31 -0
  2. data/Gemfile +15 -36
  3. data/History.rdoc +9 -3
  4. data/README.md +57 -30
  5. data/Rakefile +1 -44
  6. data/app/assets/javascripts/lolita/list.js +28 -0
  7. data/app/assets/javascripts/lolita/main.js +81 -12
  8. data/app/assets/javascripts/lolita/tab.js +37 -32
  9. data/app/assets/stylesheets/lolita/style.css.erb +58 -18
  10. data/app/controllers/lolita/field_data_controller.rb +13 -9
  11. data/app/controllers/lolita/info_controller.rb +3 -5
  12. data/app/controllers/lolita/rest_controller.rb +53 -24
  13. data/app/helpers/components/lolita/configuration_component.rb +1 -1
  14. data/app/views/components/lolita/configuration/action/_display.html.haml +1 -0
  15. data/app/views/components/lolita/configuration/column/_display.html.haml +4 -0
  16. data/app/views/components/lolita/configuration/column/_first.html.haml +2 -0
  17. data/app/views/components/lolita/configuration/column/_last.html.haml +5 -0
  18. data/app/views/components/lolita/configuration/column/header/_display.html.haml +5 -0
  19. data/app/views/components/lolita/configuration/column/header/_first.html.haml +1 -0
  20. data/app/views/components/lolita/configuration/column/header/_last.html.haml +1 -0
  21. data/app/views/components/lolita/configuration/column/header/_sort.html.haml +6 -0
  22. data/app/views/components/lolita/configuration/columns/_display.html.haml +2 -0
  23. data/app/views/components/lolita/configuration/columns/body/_display.html.haml +3 -0
  24. data/app/views/components/lolita/configuration/columns/body/row/_display.html.haml +5 -0
  25. data/app/views/components/lolita/configuration/columns/header/_display.html.haml +5 -0
  26. data/app/views/components/lolita/configuration/field/_display.html.haml +7 -0
  27. data/app/views/components/lolita/configuration/field/_label.html.haml +1 -0
  28. data/app/views/components/lolita/configuration/field/_object.html.haml +1 -0
  29. data/app/views/components/lolita/configuration/field/array/_display.html.haml +5 -0
  30. data/app/views/components/lolita/configuration/field/array/autocomplete/_display.html.haml +1 -1
  31. data/app/views/components/lolita/configuration/field/array/autocomplete/_input.html.haml +2 -2
  32. data/app/views/components/lolita/configuration/field/array/polymorphic/_display.html.haml +3 -3
  33. data/app/views/components/lolita/configuration/field/array/select/_display.html.haml +1 -0
  34. data/app/views/components/lolita/configuration/field/big_decimal/_display.html.haml +1 -0
  35. data/app/views/components/lolita/configuration/field/boolean/_display.html.haml +1 -0
  36. data/app/views/components/lolita/configuration/field/date/_display.html.haml +1 -0
  37. data/app/views/components/lolita/configuration/field/date_time/_display.html.haml +2 -0
  38. data/app/views/components/lolita/configuration/field/date_time/date/_display.html.haml +1 -0
  39. data/app/views/components/lolita/configuration/field/date_time/time/_display.html.haml +1 -0
  40. data/app/views/components/lolita/configuration/field/float/_display.html.haml +1 -0
  41. data/app/views/components/lolita/configuration/field/integer/_display.html.haml +1 -0
  42. data/app/views/components/lolita/configuration/field/string/_display.html.haml +1 -0
  43. data/app/views/components/lolita/configuration/field/string/disabled/_display.html.haml +2 -0
  44. data/app/views/components/lolita/configuration/field/string/hidden/_display.html.haml +1 -0
  45. data/app/views/components/lolita/configuration/field/string/password/_display.html.haml +1 -0
  46. data/app/views/components/lolita/configuration/field/string/text/_display.html.haml +7 -0
  47. data/app/views/components/lolita/configuration/field/time/_display.html.haml +1 -0
  48. data/app/views/components/lolita/configuration/field_set/_display.html.haml +3 -0
  49. data/app/views/components/lolita/configuration/filter/_display.html.haml +9 -0
  50. data/app/views/components/lolita/configuration/list/_display.html.haml +9 -0
  51. data/app/views/components/lolita/configuration/list/_new_resource.html.haml +4 -0
  52. data/app/views/components/lolita/configuration/list/_paginator.html.haml +1 -0
  53. data/app/views/components/lolita/configuration/list/_title.html.haml +6 -0
  54. data/app/views/components/lolita/configuration/nested_form/_display.html.haml +12 -0
  55. data/app/views/components/lolita/configuration/nested_form/_fields.html.haml +8 -0
  56. data/app/views/components/lolita/configuration/nested_list/_display.html.haml +7 -0
  57. data/app/views/components/lolita/configuration/nested_list/_paginator.html.haml +2 -0
  58. data/app/views/components/lolita/configuration/tab/_display.html.haml +4 -0
  59. data/app/views/components/lolita/configuration/tab/_error_msg.html.haml +14 -0
  60. data/app/views/components/lolita/configuration/tab/_fields.html.haml +6 -0
  61. data/app/views/components/lolita/configuration/tab/_form.html.haml +4 -0
  62. data/app/views/components/lolita/configuration/tab/_title.html.haml +3 -0
  63. data/app/views/components/lolita/configuration/tab/content/_display.html.haml +1 -0
  64. data/app/views/components/lolita/configuration/tab/default/_display.html.haml +2 -0
  65. data/app/views/components/lolita/configuration/tabs/_display.html.haml +10 -0
  66. data/app/views/components/lolita/configuration/tabs/_form.html.haml +7 -0
  67. data/app/views/components/lolita/navigation/_display.html.haml +2 -0
  68. data/app/views/components/lolita/navigation/_tree.html.haml +14 -0
  69. data/app/views/components/lolita/shared/_buttons.html.haml +6 -0
  70. data/app/views/components/lolita/shared/_flash.html.haml +3 -0
  71. data/app/views/components/lolita/shared/_header.html.haml +7 -0
  72. data/app/views/components/lolita/shared/_languages.html.haml +11 -0
  73. data/app/views/components/lolita/shared/_right_sidebar.html.haml +6 -0
  74. data/app/views/components/lolita/shared/_save_button.html.haml +1 -0
  75. data/app/views/layouts/lolita/application.html.haml +36 -0
  76. data/app/views/lolita/rest/form.html.haml +1 -0
  77. data/app/views/lolita/rest/index.html.haml +1 -0
  78. data/app/views/lolita/rest/index.js.erb +1 -0
  79. data/config/locales/en.yml +4 -0
  80. data/config/locales/lv.yml +5 -2
  81. data/lib/generators/lolita/uninstall_generator.rb +76 -0
  82. data/lib/lolita.rb +104 -170
  83. data/lib/lolita/adapter/abstract_adapter.rb +1 -0
  84. data/lib/lolita/adapter/active_record.rb +22 -55
  85. data/lib/lolita/adapter/common_helper.rb +252 -0
  86. data/lib/lolita/adapter/mongoid.rb +11 -55
  87. data/lib/lolita/base.rb +5 -0
  88. data/lib/lolita/builder.rb +3 -3
  89. data/lib/lolita/components/base.rb +12 -0
  90. data/lib/lolita/components/configuration/column_component.rb +31 -0
  91. data/lib/lolita/components/configuration/list_component.rb +11 -0
  92. data/lib/lolita/configuration.rb +61 -0
  93. data/lib/lolita/configuration/action.rb +53 -0
  94. data/lib/lolita/configuration/base.rb +23 -71
  95. data/lib/lolita/configuration/column.rb +50 -16
  96. data/lib/lolita/configuration/columns.rb +51 -23
  97. data/lib/lolita/configuration/core.rb +80 -0
  98. data/lib/lolita/configuration/factory/field.rb +8 -3
  99. data/lib/lolita/configuration/factory/tab.rb +12 -6
  100. data/lib/lolita/configuration/field.rb +8 -11
  101. data/lib/lolita/configuration/field/array.rb +7 -9
  102. data/lib/lolita/configuration/fields.rb +1 -1
  103. data/lib/lolita/configuration/filter.rb +26 -19
  104. data/lib/lolita/configuration/list.rb +143 -80
  105. data/lib/lolita/configuration/nested_list.rb +102 -0
  106. data/lib/lolita/configuration/search.rb +14 -0
  107. data/lib/lolita/configuration/tab.rb +13 -9
  108. data/lib/lolita/configuration/tab/content.rb +6 -0
  109. data/lib/lolita/configuration/tab/default.rb +2 -2
  110. data/lib/lolita/configuration/tabs.rb +35 -82
  111. data/lib/lolita/controller_additions.rb +4 -3
  112. data/lib/lolita/controllers.rb +13 -0
  113. data/lib/lolita/controllers/authentication_helpers.rb +17 -0
  114. data/lib/lolita/controllers/component_helpers.rb +9 -5
  115. data/lib/lolita/controllers/internal_helpers.rb +22 -97
  116. data/lib/lolita/controllers/rails_helpers.rb +132 -0
  117. data/lib/lolita/controllers/url_helpers.rb +1 -1
  118. data/lib/lolita/errors.rb +3 -0
  119. data/lib/lolita/extensions/authentication/default_adapter.rb +24 -0
  120. data/lib/lolita/extensions/authentication/devise_adapter.rb +58 -0
  121. data/lib/lolita/extensions/authentication/proxy.rb +60 -0
  122. data/lib/lolita/extensions/authorization/cancan_adapter.rb +45 -0
  123. data/lib/lolita/extensions/authorization/default_adapter.rb +29 -0
  124. data/lib/lolita/extensions/authorization/proxy.rb +48 -0
  125. data/lib/lolita/extensions/extensions.rb +66 -0
  126. data/lib/lolita/helpers.rb +12 -0
  127. data/lib/lolita/lazy_loader.rb +15 -10
  128. data/lib/lolita/mapping.rb +25 -19
  129. data/lib/lolita/navigation/branch.rb +29 -2
  130. data/lib/lolita/navigation/tree.rb +6 -0
  131. data/lib/lolita/observed_array.rb +1 -1
  132. data/lib/lolita/orm.rb +7 -0
  133. data/lib/lolita/processors/request_processor.rb +38 -0
  134. data/lib/lolita/rails/engine.rb +24 -0
  135. data/lib/lolita/{modules/rest.rb → rails/railtie.rb} +8 -2
  136. data/lib/lolita/rails/routes.rb +26 -29
  137. data/lib/lolita/register.rb +48 -0
  138. data/lib/lolita/ruby_ext/lolita_model_name.rb +37 -0
  139. data/lib/lolita/system_configuration/application.rb +1 -0
  140. data/lib/lolita/system_configuration/base.rb +12 -5
  141. data/lib/lolita/utils.rb +14 -0
  142. data/lib/lolita/version.rb +30 -0
  143. data/lolita.gemspec +26 -398
  144. data/spec/configuration/base_spec.rb +14 -35
  145. data/spec/configuration/column_spec.rb +51 -2
  146. data/spec/configuration/columns_spec.rb +13 -19
  147. data/spec/configuration/core_spec.rb +89 -0
  148. data/spec/configuration/field_spec.rb +17 -5
  149. data/spec/configuration/filter_spec.rb +76 -61
  150. data/spec/configuration/list_spec.rb +339 -45
  151. data/spec/configuration/nested_list_spec.rb +111 -0
  152. data/spec/configuration/search_spec.rb +1 -1
  153. data/spec/configuration/tabs_spec.rb +89 -74
  154. data/spec/controllers/configuration_spec.rb +15 -0
  155. data/spec/controllers/internal_helpers_spec.rb +1 -1
  156. data/spec/controllers/lolita_rest_spec.rb +31 -2
  157. data/spec/coverage_helper.rb +33 -0
  158. data/spec/extensions/authentication/default_adapter_spec.rb +34 -0
  159. data/spec/extensions/authentication/devise_adapter_spec.rb +94 -0
  160. data/spec/extensions/authentication/proxy_spec.rb +55 -0
  161. data/spec/extensions/authorization/cancan_adapter_spec.rb +94 -0
  162. data/spec/extensions/authorization/default_adapter_spec.rb +43 -0
  163. data/spec/extensions/authorization/proxy_spec.rb +60 -0
  164. data/spec/extensions/extensions_spec.rb +45 -0
  165. data/spec/fabricators/category_fabricator.rb +3 -0
  166. data/spec/fabricators/post_fabricator.rb +4 -0
  167. data/spec/fabricators/tag_fabricator.rb +3 -0
  168. data/spec/lolita_spec.rb +1 -0
  169. data/spec/orm/mongoid.rb +1 -0
  170. data/spec/rails_app/app/mongoid/category.rb +14 -1
  171. data/spec/rails_app/app/mongoid/post.rb +9 -1
  172. data/spec/rails_app/config/application.rb +0 -4
  173. data/spec/rails_app/config/boot.rb +1 -2
  174. data/spec/register_spec.rb +50 -0
  175. data/spec/search/simple_spec.rb +4 -4
  176. data/spec/simple_spec_helper.rb +2 -1
  177. data/spec/spec_helper.rb +22 -35
  178. data/vendor/assets/javascripts/tinymce_config.js +5 -3
  179. metadata +202 -180
  180. data/.document +0 -5
  181. data/GUIDELINES.rdoc +0 -22
  182. data/VERSION +0 -1
  183. data/app/helpers/lolita_helper.rb +0 -23
  184. data/app/views/components/lolita/configuration/column/_display.html.erb +0 -4
  185. data/app/views/components/lolita/configuration/column/_header.html.erb +0 -7
  186. data/app/views/components/lolita/configuration/column/_sort.html.erb +0 -7
  187. data/app/views/components/lolita/configuration/columns/_body.html.erb +0 -5
  188. data/app/views/components/lolita/configuration/columns/_display.html.erb +0 -2
  189. data/app/views/components/lolita/configuration/columns/_first.html.erb +0 -3
  190. data/app/views/components/lolita/configuration/columns/_first_column_header.html.erb +0 -3
  191. data/app/views/components/lolita/configuration/columns/_header.html.erb +0 -9
  192. data/app/views/components/lolita/configuration/columns/_last.html.erb +0 -4
  193. data/app/views/components/lolita/configuration/columns/_last_column_header.html.erb +0 -3
  194. data/app/views/components/lolita/configuration/columns/_row.html.erb +0 -7
  195. data/app/views/components/lolita/configuration/field/_display.html.erb +0 -13
  196. data/app/views/components/lolita/configuration/field/_label.html.erb +0 -1
  197. data/app/views/components/lolita/configuration/field/_object.html.erb +0 -1
  198. data/app/views/components/lolita/configuration/field/array/_display.html.erb +0 -5
  199. data/app/views/components/lolita/configuration/field/array/filter/_display.html.erb +0 -1
  200. data/app/views/components/lolita/configuration/field/array/select/_display.html.erb +0 -4
  201. data/app/views/components/lolita/configuration/field/big_decimal/_display.html.erb +0 -1
  202. data/app/views/components/lolita/configuration/field/boolean/_display.html.erb +0 -1
  203. data/app/views/components/lolita/configuration/field/boolean/filter/_display.html.erb +0 -2
  204. data/app/views/components/lolita/configuration/field/date/_display.html.erb +0 -1
  205. data/app/views/components/lolita/configuration/field/date_time/_display.html.erb +0 -1
  206. data/app/views/components/lolita/configuration/field/date_time/date/_display.html.erb +0 -1
  207. data/app/views/components/lolita/configuration/field/date_time/time/_display.html.erb +0 -1
  208. data/app/views/components/lolita/configuration/field/float/_display.html.erb +0 -1
  209. data/app/views/components/lolita/configuration/field/hidden/_display.html.erb +0 -1
  210. data/app/views/components/lolita/configuration/field/integer/_display.html.erb +0 -1
  211. data/app/views/components/lolita/configuration/field/string/_display.html.erb +0 -1
  212. data/app/views/components/lolita/configuration/field/string/disabled/_display.html.erb +0 -1
  213. data/app/views/components/lolita/configuration/field/string/password/_display.html.erb +0 -3
  214. data/app/views/components/lolita/configuration/field/string/text/_display.html.erb +0 -11
  215. data/app/views/components/lolita/configuration/field/time/_display.html.erb +0 -1
  216. data/app/views/components/lolita/configuration/field_set/_display.html.erb +0 -5
  217. data/app/views/components/lolita/configuration/list/_display.html.erb +0 -11
  218. data/app/views/components/lolita/configuration/list/_filter.html.erb +0 -8
  219. data/app/views/components/lolita/configuration/list/_new_resource.html.erb +0 -6
  220. data/app/views/components/lolita/configuration/list/_paginator.html.erb +0 -1
  221. data/app/views/components/lolita/configuration/list/_title.html.erb +0 -10
  222. data/app/views/components/lolita/configuration/nested_form/_display.html.erb +0 -15
  223. data/app/views/components/lolita/configuration/nested_form/_fields.html.erb +0 -13
  224. data/app/views/components/lolita/configuration/tab/_display.html.erb +0 -8
  225. data/app/views/components/lolita/configuration/tab/_error_msg.html.erb +0 -20
  226. data/app/views/components/lolita/configuration/tab/_fields.html.erb +0 -9
  227. data/app/views/components/lolita/configuration/tab/_form.html.erb +0 -8
  228. data/app/views/components/lolita/configuration/tab/content/_display.html.erb +0 -1
  229. data/app/views/components/lolita/configuration/tab/default/_display.html.erb +0 -3
  230. data/app/views/components/lolita/configuration/tabs/_display.html.erb +0 -11
  231. data/app/views/components/lolita/navigation/_display.html.erb +0 -3
  232. data/app/views/components/lolita/navigation/_tree.html.erb +0 -32
  233. data/app/views/components/lolita/shared/_flash.html.erb +0 -5
  234. data/app/views/components/lolita/shared/_header.html.erb +0 -9
  235. data/app/views/components/lolita/shared/_right_sidebar.html.erb +0 -9
  236. data/app/views/components/lolita/shared/_save_button.html.erb +0 -6
  237. data/app/views/layouts/lolita/application.html.erb +0 -37
  238. data/app/views/lolita/rest/form.html.erb +0 -1
  239. data/app/views/lolita/rest/index.html.erb +0 -1
  240. data/config/locales/default/lv.yml +0 -181
  241. data/db/seed.rb +0 -1
  242. data/features/create_page.feature +0 -20
  243. data/features/step_definitions/lolita_steps.rb +0 -7
  244. data/features/step_definitions/web_steps.rb +0 -219
  245. data/features/support/env.rb +0 -73
  246. data/features/support/paths.rb +0 -35
  247. data/lib/lolita/controllers/authorization_helpers.rb +0 -56
  248. data/lib/lolita/controllers/user_helpers.rb +0 -44
  249. data/lib/lolita/modules.rb +0 -6
  250. data/lib/lolita/rails.rb +0 -23
  251. data/lib/lolita/rails/all.rb +0 -11
  252. data/spec/support/factories/category.rb +0 -3
  253. data/spec/support/factories/post.rb +0 -4
  254. 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
@@ -1,208 +1,142 @@
1
1
 
2
- $:<<File.dirname(__FILE__) unless $:.include?(File.dirname(__FILE__))
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
- module SystemConfiguration
42
- autoload :Base, 'lolita/system_configuration/base'
43
- autoload :Application, 'lolita/system_configuration/application'
44
- end
6
+ CONFIGURATIONS = {}
7
+ DEFAULT_CONFIGURATION_NAME = :default
45
8
 
46
- module Adapter
47
- autoload :FieldHelper, 'lolita/adapter/field_helper'
48
- autoload :AbstractAdapter, 'lolita/adapter/abstract_adapter'
49
- autoload :ActiveRecord, 'lolita/adapter/active_record'
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
- module DBI
54
- autoload :Base, 'lolita/dbi/base'
15
+ def self.setup
16
+ self.run(:before_setup)
17
+ yield configuration
18
+ self.run(:after_setup)
55
19
  end
56
20
 
57
- module Hooks
58
- autoload :NamedHook, "lolita/hooks/named_hook"
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
- module Tab
91
- autoload :Base, 'lolita/configuration/tab'
92
- ["tab"].each do |type|
93
- Dir["#{File.dirname(__FILE__)}/lolita/configuration/#{type}/**/*.*"].each do |path|
94
- base_name=File.basename(path,".rb")
95
- autoload :"#{base_name.camelize}", "lolita/configuration/#{type}/#{base_name}"
96
- end
97
- end
98
- end
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
- end
36
+ LOLITA_SETUP
37
+ configuration.send(method_name,*args,&block)
125
38
  end
126
39
 
127
- module Test
128
- autoload :Matchers, 'lolita/test/matchers'
129
- end
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
- module Controllers
132
- autoload :InternalHelpers, 'lolita/controllers/internal_helpers'
133
- autoload :UserHelpers, 'lolita/controllers/user_helpers'
134
- autoload :UrlHelpers, 'lolita/controllers/url_helpers'
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
- module Navigation
140
- autoload :Tree, "lolita/navigation/tree"
141
- autoload :Branch, "lolita/navigation/branch"
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
- module Support
145
- autoload :Formatter, 'lolita/support/formatter'
146
- class Formatter
147
- autoload :Rails, 'lolita/support/formatter/rails'
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
- module Search
152
- autoload :Simple, 'lolita/search/simple'
153
- end
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
- @@scopes={}
111
+ require 'lolita/test/matchers'
112
+ require 'lolita/support/formatter'
113
+ require 'lolita/support/formatter/rails'
156
114
 
157
- def self.scope name=nil
158
- name||=scope_name
159
- @@scopes[name]||=Lolita::SystemConfiguration::Base.new(name)
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.setup
164
- self.run(:before_setup)
165
- yield scope
166
- self.run(:after_setup)
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.scope_name
170
- :default
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.app_root
178
- @@app_root||=File.join(File.expand_path("#{__FILE__}/../.."),"app")
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
- if Lolita.rails3?
203
- require "base64"
204
- require 'kaminari'
205
- require 'tinymce-rails'
206
- require 'jquery-rails'
207
- require 'lolita/rails/all'
208
- end
141
+
142
+ Lolita.load!
@@ -9,6 +9,7 @@ module Lolita
9
9
  abstract_method 'name',:reflect_on_association,:field_by_name,:field_by_association
10
10
  abstract_method 'id',:find_by_id
11
11
  abstract_method 'query', :search
12
+ abstract_method 'access_modes_for', :record
12
13
  end
13
14
  end
14
15
  end
@@ -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 == :belongs_to
28
- @association.foreign_key
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.association_foreign_key
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?