refinerycms-core 2.0.10 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/refinery/admin.js.erb +126 -234
  3. data/app/assets/javascripts/refinery/ajaxy_pagination.js.coffee +1 -1
  4. data/app/assets/javascripts/refinery/boot_wym.js.erb +4 -8
  5. data/app/assets/javascripts/refinery/core.js +1 -1
  6. data/app/assets/javascripts/refinery/interface.js.coffee.erb +3 -16
  7. data/app/assets/javascripts/refinery/modal_dialogs.js.erb +0 -3
  8. data/app/assets/javascripts/refinery/nestedsortables.js +312 -312
  9. data/app/assets/javascripts/refinery/refinery.js.erb +14 -15
  10. data/app/assets/javascripts/refinery/site_bar.js +3 -9
  11. data/app/assets/javascripts/refinery/sortable_list.js +145 -0
  12. data/app/assets/javascripts/refinery/sortable_menu.js.coffee +3 -4
  13. data/app/assets/javascripts/refinery/submit_continue.js.coffee.erb +1 -2
  14. data/app/assets/javascripts/refinery/tree.js +3 -3
  15. data/app/assets/javascripts/refinery/wymeditor.js +6 -6
  16. data/{public → app/assets/javascripts}/wymeditor/GPL-license.txt +0 -0
  17. data/{public → app/assets/javascripts}/wymeditor/MIT-license.txt +0 -0
  18. data/{public → app/assets/javascripts}/wymeditor/README +0 -0
  19. data/app/assets/javascripts/wymeditor/browsers/mozilla.js.erb +10 -11
  20. data/app/assets/javascripts/wymeditor/browsers/webkit.js.erb +17 -18
  21. data/app/assets/javascripts/wymeditor/classes.js.erb +3 -5
  22. data/app/assets/javascripts/wymeditor/functions.js.erb +5 -1
  23. data/app/assets/javascripts/wymeditor/prototypes.js.erb +0 -3
  24. data/app/assets/javascripts/wymeditor/setup.js.erb +5 -5
  25. data/app/assets/javascripts/wymeditor/skins/refinery/skin.js +1 -4
  26. data/app/assets/javascripts/wymeditor/validators.js.erb +3 -2
  27. data/app/assets/stylesheets/{formatting.css.scss → refinery/formatting.css.scss} +0 -0
  28. data/app/assets/stylesheets/refinery/layout.css.scss +41 -11
  29. data/app/assets/stylesheets/{theme.css.scss → refinery/theme.css.scss} +0 -0
  30. data/app/controllers/refinery/sitemap_controller.rb +1 -5
  31. data/app/helpers/refinery/admin_helper.rb +6 -0
  32. data/app/helpers/refinery/image_helper.rb +2 -1
  33. data/app/helpers/refinery/menu_helper.rb +0 -49
  34. data/app/helpers/refinery/meta_helper.rb +7 -3
  35. data/app/helpers/refinery/site_bar_helper.rb +3 -15
  36. data/app/models/refinery/core/base_model.rb +2 -0
  37. data/{lib → app/presenters}/refinery/base_presenter.rb +1 -2
  38. data/app/views/layouts/application.html.erb +8 -7
  39. data/app/views/refinery/_content_page.html.erb +1 -1
  40. data/app/views/refinery/_google_analytics.html.erb +12 -5
  41. data/app/views/refinery/_head.html.erb +11 -15
  42. data/app/views/refinery/_header.html.erb +1 -4
  43. data/app/views/refinery/_javascripts.html.erb +14 -8
  44. data/app/views/refinery/_site_bar.html.erb +4 -4
  45. data/app/views/refinery/admin/_form_advanced_options_menu.html.erb +12 -0
  46. data/app/views/refinery/admin/_javascripts.html.erb +13 -1
  47. data/app/views/refinery/admin/_locale_picker.html.erb +11 -0
  48. data/app/views/refinery/admin/_make_sortable.html.erb +8 -5
  49. data/app/views/refinery/admin/_search.html.erb +1 -7
  50. data/app/views/refinery/admin/_search_header.html.erb +1 -0
  51. data/app/views/refinery/admin/_wysiwyg.html.erb +16 -0
  52. data/config/initializers/will_paginate_monkeypatch.rb +1 -1
  53. data/config/locales/bg.yml +5 -1
  54. data/config/locales/cs.yml +5 -1
  55. data/config/locales/da.yml +5 -1
  56. data/config/locales/de.yml +7 -3
  57. data/config/locales/el.yml +5 -1
  58. data/config/locales/en.yml +7 -1
  59. data/config/locales/es.yml +5 -1
  60. data/config/locales/fi.yml +5 -1
  61. data/config/locales/fr.yml +5 -1
  62. data/config/locales/hu.yml +82 -0
  63. data/config/locales/it.yml +38 -34
  64. data/config/locales/ja.yml +5 -1
  65. data/config/locales/ko.yml +5 -1
  66. data/config/locales/lt.yml +5 -1
  67. data/config/locales/lv.yml +5 -1
  68. data/config/locales/nb.yml +5 -1
  69. data/config/locales/nl.yml +36 -29
  70. data/config/locales/pl.yml +8 -1
  71. data/config/locales/pt-BR.yml +7 -3
  72. data/config/locales/pt.yml +82 -0
  73. data/config/locales/rs.yml +5 -1
  74. data/config/locales/ru.yml +5 -1
  75. data/config/locales/sk.yml +10 -3
  76. data/config/locales/sl.yml +5 -1
  77. data/config/locales/sv.yml +5 -1
  78. data/config/locales/tr.yml +82 -0
  79. data/config/locales/uk.yml +77 -0
  80. data/config/locales/vi.yml +5 -1
  81. data/config/locales/zh-CN.yml +5 -1
  82. data/config/locales/zh-TW.yml +5 -1
  83. data/config/routes.rb +3 -3
  84. data/lib/generators/refinery/cms/cms_generator.rb +29 -0
  85. data/lib/generators/refinery/cms/templates/.gitignore +1 -0
  86. data/lib/generators/refinery/cms/templates/app/views/sitemap/index.xml.builder +13 -13
  87. data/lib/generators/refinery/core/templates/config/initializers/refinery/core.rb.erb +8 -12
  88. data/lib/generators/refinery/dummy/templates/rails/database.yml +3 -3
  89. data/lib/generators/refinery/engine/engine_generator.rb +8 -12
  90. data/lib/generators/refinery/engine/templates/Gemfile +5 -39
  91. data/lib/generators/refinery/engine/templates/app/controllers/refinery/namespace/admin/plural_name_controller.rb.erb +4 -4
  92. data/lib/generators/refinery/engine/templates/app/models/refinery/namespace/singular_name.rb.erb +2 -3
  93. data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_actions.html.erb +1 -1
  94. data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_form.html.erb +31 -33
  95. data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_records.html.erb +1 -3
  96. data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_singular_name.html.erb +2 -2
  97. data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/index.html.erb +1 -1
  98. data/lib/generators/refinery/engine/templates/config/locales/cs.yml +28 -0
  99. data/lib/generators/refinery/engine/templates/config/locales/it.yml +28 -0
  100. data/lib/generators/refinery/engine/templates/config/locales/nl.yml +6 -6
  101. data/lib/generators/refinery/engine/templates/config/locales/tr.yml +28 -0
  102. data/lib/generators/refinery/engine/templates/config/routes.rb.erb +2 -2
  103. data/lib/generators/refinery/engine/templates/db/seeds.rb.erb +1 -1
  104. data/lib/generators/refinery/engine/templates/lib/generators/refinery/extension_plural_name_generator.rb.erb +1 -1
  105. data/lib/generators/refinery/engine/templates/lib/refinery/plural_name/engine.rb.erb +1 -1
  106. data/lib/generators/refinery/engine/templates/spec/{requests → features}/refinery/namespace/admin/plural_name_spec.rb.erb +1 -1
  107. data/lib/generators/refinery/engine/templates/spec/spec_helper.rb +25 -49
  108. data/lib/generators/refinery/form/form_generator.rb +1 -13
  109. data/lib/generators/refinery/form/templates/app/models/refinery/namespace/singular_name.rb.erb +0 -4
  110. data/lib/generators/refinery/form/templates/app/views/refinery/namespace/admin/plural_name/_records.html.erb +2 -2
  111. data/lib/generators/refinery/form/templates/app/views/refinery/namespace/admin/plural_name/spam.html.erb +7 -6
  112. data/lib/generators/refinery/form/templates/config/locales/nl.yml +29 -29
  113. data/lib/generators/refinery/form/templates/config/locales/tr.yml +78 -0
  114. data/lib/generators/refinery/form/templates/config/routes.rb.erb +1 -1
  115. data/lib/generators/refinery/form/templates/db/migrate/1_create_plural_name.rb.erb +2 -6
  116. data/lib/generators/refinery/form/templates/db/seeds.rb.erb +1 -1
  117. data/lib/generators/refinery/form/templates/lib/refinery/plural_name/engine.rb.erb +1 -1
  118. data/lib/generators/refinery/form/templates/refinerycms-plural_name.gemspec +2 -5
  119. data/lib/refinery.rb +191 -0
  120. data/lib/refinery/admin/base_controller.rb +27 -16
  121. data/lib/refinery/application_controller.rb +15 -47
  122. data/lib/refinery/cli.rb +48 -27
  123. data/lib/refinery/core.rb +7 -183
  124. data/lib/refinery/core/configuration.rb +17 -9
  125. data/lib/refinery/core/engine.rb +11 -47
  126. data/lib/refinery/crud.rb +81 -66
  127. data/lib/refinery/engine.rb +52 -55
  128. data/lib/refinery/ext/action_view/helpers/form_builder.rb +2 -0
  129. data/lib/refinery/extension_generation.rb +208 -110
  130. data/lib/refinery/menu.rb +16 -7
  131. data/lib/refinery/menu_item.rb +56 -54
  132. data/lib/refinery/plugin.rb +11 -3
  133. data/lib/refinery/plugins.rb +14 -1
  134. data/lib/refinery/version.rb +3 -3
  135. data/refinerycms-core.gemspec +11 -10
  136. data/spec/controllers/refinery/admin/dummy_controller_spec.rb +57 -0
  137. data/spec/controllers/refinery/admin/refinery_core_controller_spec.rb +3 -4
  138. data/spec/controllers/refinery/sitemap_controller_spec.rb +1 -14
  139. data/spec/{requests → features}/refinery/admin/custom_assets_spec.rb +1 -1
  140. data/spec/{requests → features}/refinery/admin/dialogs_spec.rb +1 -1
  141. data/spec/features/refinery/admin/xhr_paging_spec.rb +55 -0
  142. data/spec/features/refinery/application_layout_spec.rb +19 -0
  143. data/spec/features/refinery/core_spec.rb +14 -0
  144. data/spec/{requests → features}/refinery/site_bar_spec.rb +1 -1
  145. data/spec/helpers/refinery/meta_helper_spec.rb +25 -0
  146. data/spec/lib/generators/refinery/cms/cms_generator_spec.rb +61 -0
  147. data/spec/lib/generators/refinery/engine/engine_generator_multiple_resources_spec.rb +28 -1
  148. data/spec/lib/generators/refinery/engine/engine_generator_sanity_check_spec.rb +7 -7
  149. data/spec/lib/generators/refinery/engine/engine_generator_spec.rb +69 -8
  150. data/spec/lib/generators/refinery/engine/engine_generator_with_i18n_spec.rb +0 -2
  151. data/spec/lib/generators/refinery/form/form_generator_spec.rb +9 -1
  152. data/spec/lib/refinery/application_controller_spec.rb +48 -63
  153. data/spec/lib/refinery/cli_spec.rb +136 -0
  154. data/spec/lib/refinery/core/configuration_spec.rb +17 -0
  155. data/spec/lib/refinery/core_spec.rb +19 -13
  156. data/spec/lib/refinery/crud_spec.rb +0 -4
  157. data/spec/lib/refinery/menu_spec.rb +16 -26
  158. data/spec/support/refinery.rb +6 -1
  159. data/{app → vendor}/assets/javascripts/jquery/GPL-LICENSE.txt +0 -0
  160. data/{app → vendor}/assets/javascripts/jquery/MIT-LICENSE.txt +0 -0
  161. data/vendor/assets/javascripts/jquery/jquery.browser.js +49 -0
  162. data/{app → vendor}/assets/javascripts/jquery/jquery.html5-placeholder-shim.js +0 -0
  163. data/{app → vendor}/assets/javascripts/jquery/jquery.jcarousel.js +0 -0
  164. data/{app → vendor}/assets/javascripts/jquery/jquery.textTruncate.js +0 -0
  165. data/{app → vendor}/assets/javascripts/jquery/jquery.timers.js +0 -0
  166. data/{app → vendor}/assets/javascripts/modernizr-min.js +0 -0
  167. metadata +231 -78
  168. data/app/assets/images/refinery/resolve_digital_footer_logo.png +0 -0
  169. data/app/assets/javascripts/dd_belatedpng.js +0 -13
  170. data/app/assets/javascripts/jquery/jquery.corner.js +0 -345
  171. data/app/assets/stylesheets/application.css.scss +0 -55
  172. data/app/assets/stylesheets/home.css.scss +0 -3
  173. data/app/views/refinery/_ie6check.html.erb +0 -63
  174. data/app/views/refinery/_menu.html.erb +0 -20
  175. data/app/views/refinery/_menu_branch.html.erb +0 -19
  176. data/lib/generators/refinery/engine/templates/Guardfile +0 -27
  177. data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_locale_picker.html.erb +0 -11
  178. data/lib/refinery/catch_all_routes.rb +0 -3
  179. data/lib/tasks/yard.rake +0 -30
  180. data/spec/requests/refinery/admin/controller_restriction_spec.rb +0 -27
  181. data/spec/requests/refinery/search_spec.rb +0 -71
@@ -4,15 +4,15 @@ module Refinery
4
4
  module Admin
5
5
  module BaseController
6
6
 
7
- extend ActiveSupport::Concern
7
+ def self.included(base)
8
+ base.layout :layout?
8
9
 
9
- included do
10
- layout :layout?
10
+ base.before_filter :require_refinery_users!, :force_ssl!,
11
+ :authenticate_refinery_user!, :restrict_plugins,
12
+ :restrict_controller
13
+ base.after_filter :store_location?, :only => [:index] # for redirect_back_or_default
11
14
 
12
- before_filter :authenticate_refinery_user!, :restrict_plugins, :restrict_controller
13
- after_filter :store_location?, :except => [:new, :create, :edit, :update, :destroy, :update_positions] # for redirect_back_or_default
14
-
15
- helper_method :searching?, :group_by_date
15
+ base.helper_method :searching?, :group_by_date
16
16
  end
17
17
 
18
18
  def admin?
@@ -23,7 +23,11 @@ module Refinery
23
23
  params[:search].present?
24
24
  end
25
25
 
26
- protected
26
+ protected
27
+
28
+ def force_ssl!
29
+ redirect_to :protocol => 'https' if Refinery::Core.force_ssl && !request.ssl?
30
+ end
27
31
 
28
32
  def group_by_date(records)
29
33
  new_records = []
@@ -37,6 +41,10 @@ module Refinery
37
41
  new_records
38
42
  end
39
43
 
44
+ def require_refinery_users!
45
+ redirect_to refinery.signup_path if just_installed? && controller_name != 'users'
46
+ end
47
+
40
48
  def restrict_plugins
41
49
  current_length = (plugins = current_refinery_user.authorized_plugins).length
42
50
 
@@ -51,26 +59,29 @@ module Refinery
51
59
  end
52
60
 
53
61
  def restrict_controller
54
- # We need to remove the admin/ section since the path is silent for the
55
- # namespace.
56
- path = params[:controller].gsub('admin/', '')
57
- unless ::Refinery::Plugins.active.any? {|plugin| path =~ Regexp.new(plugin.menu_match) }
58
- logger.warn "'#{current_refinery_user.username}' tried to access '#{path}' but was rejected."
62
+ unless allow_controller? params[:controller].gsub 'admin/', ''
63
+ logger.warn "'#{current_refinery_user.username}' tried to access '#{params[:controller]}' but was rejected."
59
64
  error_404
60
65
  end
61
66
  end
62
67
 
63
- private
68
+ private
69
+
70
+ def allow_controller?(controller_path)
71
+ ::Refinery::Plugins.active.any? {|plugin|
72
+ Regexp.new(plugin.menu_match) === controller_path
73
+ }
74
+ end
64
75
 
65
76
  def layout?
66
- "refinery/admin#{"_dialog" if from_dialog?}"
77
+ "refinery/admin#{'_dialog' if from_dialog?}"
67
78
  end
68
79
 
69
80
  # Check whether it makes sense to return the user to the last page they
70
81
  # were at instead of the default e.g. refinery_admin_pages_path
71
82
  # right now we just want to snap back to index actions and definitely not to dialogues.
72
83
  def store_location?
73
- store_location unless action_name !~ /index/ or request.xhr? or from_dialog?
84
+ store_location unless request.xhr? || from_dialog?
74
85
  end
75
86
 
76
87
  # Override authorized? so that only users with the Refinery role can admin the website.
@@ -1,42 +1,29 @@
1
1
  module Refinery
2
2
  module ApplicationController
3
3
 
4
- extend ActiveSupport::Concern
4
+ def self.included(base) # Extend controller
5
+ base.helper_method :home_page?, :local_request?, :just_installed?,
6
+ :from_dialog?, :admin?, :login?
5
7
 
6
- included do # Extend controller
7
- helper_method :home_page?,
8
- :local_request?,
9
- :just_installed?,
10
- :from_dialog?,
11
- :admin?,
12
- :login?
8
+ base.protect_from_forgery # See ActionController::RequestForgeryProtection
13
9
 
14
- protect_from_forgery # See ActionController::RequestForgeryProtection
15
-
16
- send :include, Refinery::Crud # basic create, read, update and delete methods
17
-
18
- send :before_filter, :refinery_user_required?
19
-
20
- send :before_filter, :force_ssl?, :if => :admin?
21
-
22
- send :after_filter, :store_current_location!,
23
- :if => Proc.new {|c| send(:refinery_user?) }
10
+ base.send :include, Refinery::Crud # basic create, read, update and delete methods
24
11
 
25
12
  if Refinery::Core.rescue_not_found
26
- send :rescue_from, ActiveRecord::RecordNotFound,
27
- ::AbstractController::ActionNotFound,
28
- ActionView::MissingTemplate,
29
- :with => :error_404
13
+ base.rescue_from ActiveRecord::RecordNotFound,
14
+ ::AbstractController::ActionNotFound,
15
+ ActionView::MissingTemplate,
16
+ :with => :error_404
30
17
  end
31
18
  end
32
19
 
33
20
  def admin?
34
- controller_name =~ %r{^admin/}
21
+ %r{^admin/} === controller_name
35
22
  end
36
23
 
37
24
  def error_404(exception=nil)
38
25
  # fallback to the default 404.html page.
39
- file = Rails.root.join('public', '404.html')
26
+ file = Rails.root.join 'public', '404.html'
40
27
  file = Refinery.roots(:'refinery/core').join('public', '404.html') unless file.exist?
41
28
  render :file => file.cleanpath.to_s.gsub(%r{#{file.extname}$}, ''),
42
29
  :layout => false, :status => 404, :formats => [:html]
@@ -48,7 +35,7 @@ module Refinery
48
35
  end
49
36
 
50
37
  def home_page?
51
- refinery.root_path =~ /^#{Regexp.escape(request.path.sub("//", "/"))}\/?/
38
+ %r{^#{Regexp.escape(request.path)}} === refinery.root_path
52
39
  end
53
40
 
54
41
  def just_installed?
@@ -56,45 +43,26 @@ module Refinery
56
43
  end
57
44
 
58
45
  def local_request?
59
- Rails.env.development? or request.remote_ip =~ /(::1)|(127.0.0.1)|((192.168).*)/
46
+ Rails.env.development? || /(::1)|(127.0.0.1)|((192.168).*)/ === request.remote_ip
60
47
  end
61
48
 
62
49
  def login?
63
- (controller_name =~ /^(user|session)(|s)/ and not admin?) or just_installed?
50
+ (/^(user|session)(|s)/ === controller_name && !admin?) || just_installed?
64
51
  end
65
52
 
66
53
  protected
67
54
 
68
- def force_ssl?
69
- redirect_to :protocol => 'https' if !request.ssl? && Refinery::Core.force_ssl
70
- end
71
-
72
55
  # use a different model for the meta information.
73
56
  def present(model)
74
57
  @meta = presenter_for(model).new(model)
75
58
  end
76
59
 
77
- def presenter_for(model, default = BasePresenter)
60
+ def presenter_for(model, default=BasePresenter)
78
61
  return default if model.nil?
79
62
 
80
63
  "#{model.class.name}Presenter".constantize
81
64
  rescue NameError
82
65
  default
83
66
  end
84
-
85
- def refinery_user_required?
86
- if just_installed? and controller_name != 'users'
87
- redirect_to refinery.new_refinery_user_registration_path
88
- end
89
- end
90
-
91
- private
92
-
93
- def store_current_location!
94
- if admin? and request.get? and !request.xhr? and !from_dialog?
95
- # ensure that we don't redirect to AJAX or POST/PUT/DELETE urls
96
- session[:refinery_return_to] = request.path.sub('//', '/')
97
- end
98
- end
99
67
  end
100
68
  end
data/lib/refinery/cli.rb CHANGED
@@ -4,6 +4,14 @@ module Refinery
4
4
  class CLI < Thor
5
5
  include Thor::Actions
6
6
 
7
+ no_tasks do
8
+ def source_paths
9
+ Refinery::Plugins.registered.pathnames.map{|p|
10
+ %w(app vendor).map{|dir| p.join(dir, @override_kind[:dir])}
11
+ }.flatten.uniq
12
+ end
13
+ end
14
+
7
15
  OVERRIDES = {
8
16
  :view => {
9
17
  :glob => '*.{erb,builder}',
@@ -20,6 +28,11 @@ module Refinery
20
28
  :dir => 'models',
21
29
  :desc => 'model',
22
30
  },
31
+ :helper => {
32
+ :glob => '*.rb',
33
+ :dir => 'helpers',
34
+ :desc => 'helper',
35
+ },
23
36
  :presenter => {
24
37
  :glob => '*.rb',
25
38
  :dir => 'presenters',
@@ -31,7 +44,7 @@ module Refinery
31
44
  :desc => 'javascript',
32
45
  },
33
46
  :stylesheet => {
34
- :glob => '*.css.scss',
47
+ :glob => '*.css{,.scss}',
35
48
  :dir => 'assets/stylesheets',
36
49
  :desc => 'stylesheet',
37
50
  },
@@ -52,6 +65,7 @@ module Refinery
52
65
  :stylesheet => %w(home refinery/site_bar),
53
66
  :controller => %w(pages),
54
67
  :model => %w(page refinery/page),
68
+ :helper => %w(site_bar refinery/site_bar_helper),
55
69
  :presenter => %w(refinery/page_presenter)
56
70
  }.each do |type, examples|
57
71
  examples.each do |example|
@@ -62,7 +76,7 @@ module Refinery
62
76
 
63
77
  desc "uncrudify", "shows you the code that your controller using crudify is running for a given action"
64
78
  def uncrudify(controller, action)
65
- unless (controller_name = controller).present? and (action = action).present?
79
+ unless (controller_name = controller).present? && (action = action).present?
66
80
  abort <<-HELPDOC.strip_heredoc
67
81
  You didn't specify anything to uncrudify. Here's some examples:
68
82
  rake refinery:uncrudify controller=refinery/admin/pages action=create
@@ -78,19 +92,19 @@ module Refinery
78
92
  end
79
93
 
80
94
  crud_lines = Refinery.roots(:'refinery/core').join('lib', 'refinery', 'crud.rb').read
81
- if (matches = crud_lines.scan(/(\ +)(def #{action}.+?protected)/m).first).present? and
95
+ if (matches = crud_lines.scan(/(\ +)(def #{action}.+?protected)/m).first).present? &&
82
96
  (method_lines = "#{matches.last.split(%r{^#{matches.first}end}).first.strip}\nend".split("\n")).many?
83
- indent = method_lines.second.index(%r{[^ ]})
84
- crud_method = method_lines.join("\n").gsub(/^#{" " * indent}/, " ")
97
+ indent = method_lines.second.index %r{[^ ]}
98
+ crud_method = method_lines.join("\n").gsub /^#{" " * indent}/, " "
85
99
 
86
100
  crud_options = controller_class.try(:crudify_options) || {}
87
- crud_method.gsub!('#{options[:redirect_to_url]}', crud_options[:redirect_to_url].to_s)
88
- crud_method.gsub!('#{options[:conditions].inspect}', crud_options[:conditions].inspect)
89
- crud_method.gsub!('#{options[:title_attribute]}', crud_options[:title_attribute])
90
- crud_method.gsub!('#{singular_name}', crud_options[:singular_name])
91
- crud_method.gsub!('#{class_name}', crud_options[:class_name])
92
- crud_method.gsub!('#{plural_name}', crud_options[:plural_name])
93
- crud_method.gsub!('\\#{', '#{')
101
+ crud_method.gsub! '#{options[:redirect_to_url]}', crud_options[:redirect_to_url].to_s
102
+ crud_method.gsub! '#{options[:conditions].inspect}', crud_options[:conditions].inspect
103
+ crud_method.gsub! '#{options[:title_attribute]}', crud_options[:title_attribute]
104
+ crud_method.gsub! '#{singular_name}', crud_options[:singular_name]
105
+ crud_method.gsub! '#{class_name}', crud_options[:class_name]
106
+ crud_method.gsub! '#{plural_name}', crud_options[:plural_name]
107
+ crud_method.gsub! '\\#{', '#{'
94
108
 
95
109
  puts crud_method
96
110
  end
@@ -99,26 +113,33 @@ module Refinery
99
113
  private
100
114
 
101
115
  def _override(kind, which)
102
- override_kind = OVERRIDES[kind]
103
- pattern = "{refinery#{File::SEPARATOR},}#{which.split("/").join(File::SEPARATOR)}#{override_kind[:glob]}"
104
- looking_for = ::Refinery::Plugins.registered.pathnames.map{|p| p.join("app", override_kind[:dir], pattern).to_s}
105
-
106
- # copy in the matches
107
- if (matches = looking_for.map{|d| Dir[d]}.flatten.compact.uniq).any?
108
- matches.each do |match|
109
- dir = match.split("/app/#{override_kind[:dir]}/").last.split('/')
110
- file = dir.pop # get rid of the file.
111
- dir = dir.join(File::SEPARATOR) # join directory back together
116
+ @override_kind = OVERRIDES[kind]
112
117
 
113
- destination_dir = Rails.root.join('app', override_kind[:dir], dir)
114
- FileUtils.mkdir_p(destination_dir)
115
- FileUtils.cp match, (destination = File.join(destination_dir, file))
118
+ matcher = [
119
+ "{refinery#{File::SEPARATOR},}",
120
+ which.split('/').join(File::SEPARATOR),
121
+ @override_kind[:glob]
122
+ ].flatten.join
116
123
 
117
- puts "Copied #{override_kind[:desc]} file to #{destination.gsub("#{Rails.root.to_s}#{File::SEPARATOR}", '')}"
124
+ if (matches = find_relative_matches(matcher)).present?
125
+ matches.each do |match|
126
+ copy_file match, Rails.root.join('app', @override_kind[:dir], match)
118
127
  end
119
128
  else
120
- puts "Couldn't match any #{override_kind[:desc]} files in any extensions like #{which}"
129
+ puts "Couldn't match any #{@override_kind[:desc]} files in any extensions like #{which}"
121
130
  end
122
131
  end
132
+
133
+ def find_matches(pattern)
134
+ Set.new source_paths.map {|path| Dir[path.join(pattern)] }.flatten
135
+ end
136
+
137
+ def find_relative_matches(pattern)
138
+ find_matches(pattern).map {|match| strip_source_paths(match) }
139
+ end
140
+
141
+ def strip_source_paths(match)
142
+ match.gsub Regexp.new(source_paths.join('\/?|')), ''
143
+ end
123
144
  end
124
145
  end
data/lib/refinery/core.rb CHANGED
@@ -1,190 +1,9 @@
1
- require 'rails/all'
2
- require 'rbconfig'
1
+ require File.expand_path('../../refinery', __FILE__)
3
2
  require 'truncate_html'
4
3
  require 'will_paginate'
4
+ require 'refinery/i18n'
5
5
 
6
6
  module Refinery
7
- WINDOWS = !!(RbConfig::CONFIG['host_os'] =~ %r!(msdos|mswin|djgpp|mingw)!) unless defined? WINDOWS
8
-
9
- require 'refinery/errors'
10
-
11
- autoload :Activity, 'refinery/activity'
12
- autoload :ApplicationController, 'refinery/application_controller'
13
- autoload :Engine, 'refinery/engine'
14
- autoload :Menu, 'refinery/menu'
15
- autoload :MenuItem, 'refinery/menu_item'
16
- autoload :Plugin, 'refinery/plugin'
17
- autoload :Plugins, 'refinery/plugins'
18
- autoload :Version, 'refinery/version'
19
- autoload :Crud, 'refinery/crud'
20
- autoload :BasePresenter, 'refinery/base_presenter'
21
-
22
- require 'refinery/ext/action_view/helpers/form_builder'
23
- require 'refinery/ext/action_view/helpers/form_helper'
24
- require 'refinery/ext/action_view/helpers/form_tag_helper'
25
-
26
- module Admin
27
- autoload :BaseController, 'refinery/admin/base_controller'
28
- end
29
-
30
- autoload :CmsGenerator, 'generators/refinery/cms/cms_generator'
31
- autoload :DummyGenerator, 'generators/refinery/dummy/dummy_generator'
32
- autoload :CoreGenerator, 'generators/refinery/core/core_generator'
33
- autoload :EngineGenerator, 'generators/refinery/engine/engine_generator'
34
-
35
- class << self
36
- @@extensions = []
37
-
38
- # Returns an array of modules representing currently registered Refinery Engines
39
- #
40
- # Example:
41
- # Refinery.extensions => [Refinery::Core, Refinery::Pages]
42
- def extensions
43
- @@extensions
44
- end
45
-
46
- # Register an extension with Refinery
47
- #
48
- # Example:
49
- # Refinery.register_extension(Refinery::Core)
50
- def register_extension(const)
51
- return if extension_registered?(const)
52
-
53
- validate_extension!(const)
54
-
55
- @@extensions << const
56
- end
57
- alias_method :register_engine, :register_extension
58
-
59
- # Unregister an extension from Refinery
60
- #
61
- # Example:
62
- # Refinery.unregister_extension(Refinery::Core)
63
- def unregister_extension(const)
64
- @@extensions.delete(const)
65
- end
66
-
67
- # Returns true if an extension is currently registered with Refinery
68
- #
69
- # Example:
70
- # Refinery.extension_registered?(Refinery::Core)
71
- def extension_registered?(const)
72
- @@extensions.include?(const)
73
- end
74
-
75
- # Constructs a deprecation warning message and warns with Kernel#warn
76
- #
77
- # Example:
78
- # Refinery.deprecate('foo') => "The use of 'foo' is deprecated"
79
- #
80
- # An options parameter can be specified to construct a more detailed deprecation message
81
- #
82
- # Options:
83
- # when - version that this deprecated feature will be removed
84
- # replacement - a replacement for what is being deprecated
85
- # caller - who called the deprecated feature
86
- #
87
- # Example:
88
- # Refinery.deprecate('foo', :when => 'tomorrow', :replacement => 'bar') =>
89
- # "The use of 'foo' is deprecated and will be removed at version 2.0. Please use 'bar' instead."
90
- def deprecate(what, options = {})
91
- # Build a warning.
92
- warning = "\n-- DEPRECATION WARNING --\n"
93
- warning << "The use of '#{what}' is deprecated"
94
- warning << " and will be removed at version #{options[:when]}" if options[:when]
95
- warning << "."
96
- warning << "\nPlease use #{options[:replacement]} instead." if options[:replacement]
97
-
98
- # See if we can trace where this happened
99
- if options[:caller]
100
- whos_calling = options[:caller].detect{|c| c =~ %r{#{Rails.root.to_s}}}.inspect.to_s.split(':in').first
101
- warning << "\nCalled from: #{whos_calling}\n"
102
- end
103
-
104
- # Give stern talking to.
105
- warn warning
106
- end
107
-
108
- def i18n_enabled?
109
- !!(defined?(::Refinery::I18n) && ::Refinery::I18n.enabled?)
110
- end
111
-
112
- # Returns a Pathname to the root of the Refinery CMS project
113
- def root
114
- @root ||= Pathname.new(File.expand_path('../../../../', __FILE__))
115
- end
116
-
117
- # Returns an array of Pathnames pointing to the root directory of each extension that
118
- # has been registered with Refinery.
119
- #
120
- # Example:
121
- # Refinery.roots => [#<Pathname:/Users/Reset/Code/refinerycms/core>, #<Pathname:/Users/Reset/Code/refinerycms/pages>]
122
- #
123
- # An optional extension_name parameter can be specified to return just the Pathname for
124
- # the specified extension. This can be represented in Constant, Symbol, or String form.
125
- #
126
- # Example:
127
- # Refinery.roots(Refinery::Core) => #<Pathname:/Users/Reset/Code/refinerycms/core>
128
- # Refinery.roots(:'refinery/core') => #<Pathname:/Users/Reset/Code/refinerycms/core>
129
- # Refinery.roots("refinery/core") => #<Pathname:/Users/Reset/Code/refinerycms/core>
130
- def roots(extension_name = nil)
131
- return @roots ||= self.extensions.map(&:root) if extension_name.nil?
132
-
133
- extension_name.to_s.camelize.constantize.root
134
- end
135
-
136
- def version
137
- Refinery::Version.to_s
138
- end
139
-
140
- # Returns string version of url helper path. We need this to temporarily support namespaces
141
- # like Refinery::Image and Refinery::Blog::Post
142
- #
143
- # Example:
144
- # Refinery.route_for_model(Refinery::Image) => "admin_image_path"
145
- # Refinery.route_for_model(Refinery::Image, {:plural => true}) => "admin_images_path"
146
- # Refinery.route_for_model(Refinery::Blog::Post) => "blog_admin_post_path"
147
- # Refinery.route_for_model(Refinery::Blog::Post, {:plural => true}) => "blog_admin_posts_path"
148
- # Refinery.route_for_model(Refinery::Blog::Post, {:admin => false}) => "blog_post_path"
149
- def route_for_model(klass, options = {})
150
- if [TrueClass, FalseClass].include? options.class
151
- options = {:plural => options}
152
- Refinery.deprecate "[Refinery.route_for_model] 'plural' argument",
153
- :when => '2.1',
154
- :replacement => '{:plural => false}'
155
- end
156
-
157
- options = {:plural => false, :admin => true}.merge options
158
-
159
- klass = klass.constantize if klass.respond_to?(:constantize)
160
- active_name = ActiveModel::Name.new klass, (Refinery if klass.parents.include?(Refinery))
161
-
162
- if options[:admin]
163
- # Most of the time this gets rid of 'refinery'
164
- parts = active_name.underscore.split('/').reject{|name|
165
- active_name.singular_route_key.exclude?(name)
166
- }
167
-
168
- # Get the singular resource_name from the url parts
169
- resource_name = parts.pop
170
- resource_name = resource_name.pluralize if options[:plural]
171
-
172
- [parts.join("_"), "admin", resource_name, "path"].reject(&:blank?).join "_"
173
- else
174
- path = options[:plural] ? active_name.route_key : active_name.singular_route_key
175
-
176
- [path, 'path'].join '_'
177
- end
178
- end
179
-
180
- private
181
- def validate_extension!(const)
182
- unless const.respond_to?(:root) && const.root.is_a?(Pathname)
183
- raise InvalidEngineError, "Engine must define a root accessor that returns a pathname to its root"
184
- end
185
- end
186
- end
187
-
188
7
  module Core
189
8
  require 'refinery/core/engine'
190
9
  require 'refinery/core/configuration'
@@ -196,3 +15,8 @@ module Refinery
196
15
  end
197
16
  end
198
17
  end
18
+
19
+ # this require has to be down here
20
+ # see https://github.com/refinery/refinerycms/issues/2273
21
+ require 'decorators'
22
+ require 'jquery-rails'