ab_admin 0.2.3 → 0.3.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 (221) hide show
  1. data/Gemfile +6 -6
  2. data/Guardfile +6 -6
  3. data/README.md +5 -5
  4. data/app/assets/images/admin/Jcrop.gif +0 -0
  5. data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +20 -19
  6. data/app/assets/javascripts/ab_admin/components/croppable_image.js.coffee +22 -38
  7. data/app/assets/javascripts/ab_admin/components/gmaps.js.coffee +2 -2
  8. data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +6 -2
  9. data/app/assets/stylesheets/ab_admin/components/_base.css.scss +17 -1
  10. data/app/assets/stylesheets/ab_admin/components/_form.css.scss +1 -1
  11. data/app/assets/stylesheets/ab_admin/main.css.scss +1 -0
  12. data/app/controllers/admin/assets_controller.rb +10 -10
  13. data/app/controllers/admin/base_controller.rb +39 -37
  14. data/app/controllers/admin/locators_controller.rb +5 -4
  15. data/app/controllers/admin/manager_controller.rb +11 -10
  16. data/app/controllers/admin/settings_controller.rb +4 -3
  17. data/app/controllers/admin/static_pages_controller.rb +1 -1
  18. data/app/controllers/admin/structures_controller.rb +2 -2
  19. data/app/views/ab_admin/devise/passwords/edit.html.slim +5 -5
  20. data/app/views/ab_admin/devise/passwords/new.html.slim +3 -3
  21. data/app/views/ab_admin/devise/sessions/new.html.slim +5 -5
  22. data/app/views/admin/admin_comments/_comment.html.slim +3 -3
  23. data/app/views/admin/admin_comments/_comments.html.slim +2 -2
  24. data/app/views/admin/admin_comments/_form.html.slim +5 -5
  25. data/app/views/admin/admin_comments/create.js.erb +1 -1
  26. data/app/views/admin/base/_form.html.slim +1 -1
  27. data/app/views/admin/base/_search_layout.html.slim +4 -4
  28. data/app/views/admin/base/_tree.html.slim +1 -1
  29. data/app/views/admin/base/create.js.erb +1 -1
  30. data/app/views/admin/base/index.html.slim +3 -3
  31. data/app/views/admin/base/update.js.erb +1 -1
  32. data/app/views/admin/dashboards/index.html.slim +15 -1
  33. data/app/views/admin/fileupload/_asset.html.slim +1 -1
  34. data/app/views/admin/fileupload/_container.html.slim +2 -2
  35. data/app/views/admin/fileupload/_file.html.slim +1 -1
  36. data/app/views/admin/fileupload/_tmpl.html.slim +1 -1
  37. data/app/views/admin/headers/_form.html.slim +3 -3
  38. data/app/views/admin/locators/edit.html.slim +4 -4
  39. data/app/views/admin/locators/show.html.slim +3 -3
  40. data/app/views/admin/manager/_form.html.slim +2 -1
  41. data/app/views/admin/manager/_table.html.slim +6 -3
  42. data/app/views/admin/settings/_form.html.slim +8 -8
  43. data/app/views/admin/shared/_batch_actions.html.slim +1 -1
  44. data/app/views/admin/static_pages/_form.html.slim +3 -3
  45. data/app/views/admin/structures/_form.html.slim +7 -7
  46. data/app/views/admin/users/_form.html.slim +9 -9
  47. data/app/views/admin/users/_search_form.html.slim +4 -4
  48. data/app/views/admin/users/_table.html.slim +3 -3
  49. data/app/views/layouts/admin/_footer.html.slim +4 -0
  50. data/app/views/layouts/admin/_navigation.html.slim +2 -2
  51. data/app/views/layouts/admin/application.html.slim +3 -3
  52. data/app/views/layouts/admin/devise.html.slim +2 -2
  53. data/config/locales/ru.yml +1 -0
  54. data/config/routes.rb +23 -23
  55. data/db/migrate/20130101000001_create_users.rb +11 -11
  56. data/db/migrate/20130101000003_create_assets.rb +8 -8
  57. data/db/migrate/20130101000004_create_headers.rb +3 -3
  58. data/db/migrate/20130101000005_create_static_pages.rb +2 -2
  59. data/db/migrate/20130101000006_create_structures.rb +8 -8
  60. data/db/migrate/20130101000007_base_translations.rb +3 -3
  61. data/db/migrate/20130101000008_create_admin_comments.rb +3 -3
  62. data/features/dsl/action_items.feature +1 -1
  63. data/features/dsl/admin_comments.feature +2 -2
  64. data/features/dsl/batch_actions.feature +1 -1
  65. data/features/dsl/config.feature +2 -2
  66. data/features/dsl/custom_actions.feature +5 -5
  67. data/features/dsl/form.feature +4 -4
  68. data/features/dsl/in_place_edit.feature +1 -1
  69. data/features/dsl/list_edit.feature +1 -1
  70. data/features/dsl/resource_action_items.feature +1 -1
  71. data/features/dsl/table.feature +3 -3
  72. data/features/dsl/tree.feature +3 -3
  73. data/features/locators.feature +1 -1
  74. data/features/menu.feature +3 -3
  75. data/features/step_definitions/dsl/action_items_steps.rb +3 -3
  76. data/features/step_definitions/dsl/admin_comments_steps.rb +1 -1
  77. data/features/step_definitions/dsl/batch_actions_steps.rb +1 -1
  78. data/features/step_definitions/dsl/parent_resource_steps.rb +2 -2
  79. data/features/step_definitions/dsl/table_steps.rb +3 -3
  80. data/features/step_definitions/dsl/tree_steps.rb +3 -3
  81. data/features/step_definitions/menu_steps.rb +3 -3
  82. data/features/step_definitions/structure_steps.rb +1 -1
  83. data/features/step_definitions/user_steps.rb +7 -7
  84. data/features/step_definitions/web_steps/browsing_steps.rb +2 -2
  85. data/features/step_definitions/web_steps/form_steps.rb +7 -7
  86. data/features/support/selectors.rb +5 -5
  87. data/features/support/tolerance_for_selenium_sync_issues.rb +1 -1
  88. data/lib/ab_admin/abstract_resource.rb +3 -3
  89. data/lib/ab_admin/carrierwave/base_uploader.rb +7 -7
  90. data/lib/ab_admin/carrierwave/file_size_validator.rb +4 -4
  91. data/lib/ab_admin/carrierwave/glue.rb +1 -1
  92. data/lib/ab_admin/concerns/admin_addition.rb +17 -13
  93. data/lib/ab_admin/concerns/headerable.rb +2 -2
  94. data/lib/ab_admin/concerns/nested_set.rb +23 -1
  95. data/lib/ab_admin/concerns/reloadable.rb +56 -0
  96. data/lib/ab_admin/concerns/utilities.rb +3 -3
  97. data/lib/ab_admin/concerns/validations.rb +2 -2
  98. data/lib/ab_admin/config/base.rb +5 -5
  99. data/lib/ab_admin/config/optional_display.rb +4 -4
  100. data/lib/ab_admin/controllers/callbacks.rb +1 -1
  101. data/lib/ab_admin/controllers/can_can_manager_resource.rb +1 -1
  102. data/lib/ab_admin/controllers/head_options.rb +5 -9
  103. data/lib/ab_admin/controllers/tree.rb +2 -2
  104. data/lib/ab_admin/core_ext/other.rb +2 -2
  105. data/lib/ab_admin/core_ext/string.rb +2 -2
  106. data/lib/ab_admin/devise.rb +3 -3
  107. data/lib/ab_admin/engine.rb +1 -1
  108. data/lib/ab_admin/hooks/paginate_hooks.rb +2 -2
  109. data/lib/ab_admin/hooks/simple_form_hooks.rb +2 -2
  110. data/lib/ab_admin/i18n_tools/google_translate.rb +5 -5
  111. data/lib/ab_admin/i18n_tools/model_translator.rb +7 -7
  112. data/lib/ab_admin/i18n_tools/translate_app.rb +1 -1
  113. data/lib/ab_admin/menu_builder.rb +3 -3
  114. data/lib/ab_admin/models/asset.rb +14 -6
  115. data/lib/ab_admin/models/attachment_file.rb +2 -2
  116. data/lib/ab_admin/models/header.rb +1 -1
  117. data/lib/ab_admin/models/locator.rb +3 -3
  118. data/lib/ab_admin/models/structure.rb +8 -8
  119. data/lib/ab_admin/models/type_model.rb +3 -3
  120. data/lib/ab_admin/models/user.rb +7 -7
  121. data/lib/ab_admin/utils/csv_document.rb +2 -2
  122. data/lib/ab_admin/utils/logger.rb +1 -1
  123. data/lib/ab_admin/utils/xls_document.rb +4 -4
  124. data/lib/ab_admin/utils.rb +11 -11
  125. data/lib/ab_admin/version.rb +1 -1
  126. data/lib/ab_admin/views/admin_helpers.rb +13 -13
  127. data/lib/ab_admin/views/admin_navigation_helpers.rb +26 -26
  128. data/lib/ab_admin/views/form_builder.rb +36 -22
  129. data/lib/ab_admin/views/helpers.rb +6 -6
  130. data/lib/ab_admin/views/inputs/ckeditor_input.rb +1 -1
  131. data/lib/ab_admin/views/inputs/color_input.rb +1 -1
  132. data/lib/ab_admin/views/inputs/date_time_input.rb +7 -7
  133. data/lib/ab_admin/views/manager_helpers.rb +3 -3
  134. data/lib/ab_admin/views/search_form_builder.rb +18 -18
  135. data/lib/ab_admin/views/url_for_routes.rb +4 -4
  136. data/lib/ab_admin.rb +1 -2
  137. data/lib/generators/ab_admin/glob/glob_generator.rb +1 -1
  138. data/lib/generators/ab_admin/install/install_generator.rb +2 -2
  139. data/lib/generators/ab_admin/install/templates/config/admin_menu.rb +2 -0
  140. data/lib/generators/ab_admin/install/templates/config/seeds.rb +1 -1
  141. data/lib/generators/ab_admin/install/templates/config/unicorn_config.rb +3 -3
  142. data/lib/generators/ab_admin/install/templates/helpers/admin/structures_helper.rb +2 -2
  143. data/lib/generators/ab_admin/install/templates/models/ability.rb +4 -4
  144. data/lib/generators/ab_admin/install/templates/models/admin_comment.rb +4 -4
  145. data/lib/generators/ab_admin/install/templates/models/asset.rb +2 -1
  146. data/lib/generators/ab_admin/install/templates/models/attachment_file.rb +1 -1
  147. data/lib/generators/ab_admin/install/templates/models/avatar.rb +2 -2
  148. data/lib/generators/ab_admin/install/templates/models/locator.rb +3 -0
  149. data/lib/generators/ab_admin/install/templates/models/picture.rb +2 -2
  150. data/lib/generators/ab_admin/install/templates/models/settings.rb +3 -0
  151. data/lib/generators/ab_admin/install/templates/models/static_page.rb +3 -3
  152. data/lib/generators/ab_admin/install/templates/models/structure.rb +2 -2
  153. data/lib/generators/ab_admin/install/templates/models/user.rb +2 -2
  154. data/lib/generators/ab_admin/install/templates/spec/spec_helper.rb +2 -2
  155. data/lib/generators/ab_admin/install/templates/spec/support/shared_connection.rb +1 -1
  156. data/lib/generators/ab_admin/install/templates/uploaders/avatar_uploader.rb +2 -2
  157. data/lib/generators/ab_admin/install/templates/uploaders/picture_uploader.rb +4 -3
  158. data/lib/generators/ab_admin/model/model_generator.rb +4 -2
  159. data/lib/generators/ab_admin/model/templates/resource.erb +6 -6
  160. data/lib/generators/ab_admin/resource/resource_generator.rb +9 -9
  161. data/lib/generators/ab_admin/resource/templates/_form.haml.erb +10 -14
  162. data/lib/generators/ab_admin/resource/templates/_form.slim.erb +11 -11
  163. data/lib/generators/ab_admin/resource/templates/_search_form.haml.erb +1 -1
  164. data/lib/generators/ab_admin/resource/templates/_search_form.slim.erb +1 -1
  165. data/lib/generators/ab_admin/resource/templates/controller.erb +1 -1
  166. data/lib/generators/template.rb +8 -8
  167. data/lib/tasks/assets.rake +5 -5
  168. data/lib/tasks/cache.rake +1 -1
  169. data/lib/tasks/i18n.rake +1 -1
  170. data/spec/ab_admin_spec.rb +3 -3
  171. data/spec/dummy/app/models/ab_admin/ab_admin_catalogue.rb +1 -1
  172. data/spec/dummy/app/models/ab_admin/ab_admin_collection.rb +6 -6
  173. data/spec/dummy/app/models/ab_admin/ab_admin_product.rb +14 -14
  174. data/spec/dummy/app/models/admin_menu.rb +2 -2
  175. data/spec/dummy/app/models/ckeditor/asset.rb +1 -1
  176. data/spec/dummy/app/models/ckeditor/attachment_file.rb +1 -1
  177. data/spec/dummy/app/models/ckeditor/picture.rb +1 -1
  178. data/spec/dummy/app/models/collection.rb +5 -5
  179. data/spec/dummy/app/models/product.rb +5 -5
  180. data/spec/dummy/app/uploaders/ckeditor_attachment_file_uploader.rb +1 -1
  181. data/spec/dummy/app/uploaders/ckeditor_picture_uploader.rb +3 -3
  182. data/spec/dummy/app/views/layouts/application.html.erb +2 -2
  183. data/spec/dummy/config/application.rb +2 -2
  184. data/spec/dummy/config/environments/test.rb +1 -1
  185. data/spec/dummy/config/initializers/ckeditor.rb +2 -2
  186. data/spec/dummy/config/initializers/devise.rb +5 -5
  187. data/spec/dummy/config/initializers/session_store.rb +1 -1
  188. data/spec/dummy/config/initializers/simple_form.rb +8 -8
  189. data/spec/dummy/config/initializers/simple_form_bootstrap.rb +14 -14
  190. data/spec/dummy/config/initializers/wrap_parameters.rb +1 -1
  191. data/spec/dummy/config/routes.rb +2 -2
  192. data/spec/dummy/db/migrate/20130129151853_create_ckeditor_assets.rb +5 -5
  193. data/spec/dummy/db/migrate/20130130161853_create_collections.rb +2 -2
  194. data/spec/dummy/db/migrate/20130130162046_create_products.rb +2 -2
  195. data/spec/dummy/db/migrate/20130130175446_create_globalize_collection_product.rb +2 -2
  196. data/spec/dummy/db/migrate/20130207224516_create_catalogues.rb +3 -3
  197. data/spec/dummy/db/migrate/20130209223506_add_lat_lon_zoom_to_products.rb +1 -1
  198. data/spec/dummy/db/seeds.rb +5 -5
  199. data/spec/dummy/lib/capybara_irb.rb +10 -10
  200. data/spec/dummy/lib/tasks/cucumber.rake +10 -10
  201. data/spec/dummy/lib/templates/slim/scaffold/_form.html.slim +2 -2
  202. data/spec/factories/assets.rb +9 -9
  203. data/spec/factories/catalogues.rb +1 -1
  204. data/spec/factories/collections.rb +1 -1
  205. data/spec/factories/products.rb +2 -2
  206. data/spec/factories/structures.rb +2 -2
  207. data/spec/generators/ckeditor_assets_generator_spec.rb +1 -1
  208. data/spec/generators/install_generator_spec.rb +1 -1
  209. data/spec/generators/model_generator_spec.rb +2 -2
  210. data/spec/generators/resource_generator_spec.rb +1 -1
  211. data/spec/models/avatar_spec.rb +1 -1
  212. data/spec/models/picture_uploader_spec.rb +1 -1
  213. data/spec/models/structure_spec.rb +2 -2
  214. data/spec/models/user_spec.rb +1 -1
  215. data/spec/spec_helper.rb +3 -3
  216. data/spec/support/shared_connection.rb +1 -1
  217. data/vendor/assets/javascripts/ab_admin/jquery.Jcrop.js +1083 -0
  218. data/vendor/assets/stylesheets/ab_admin/jquery.Jcrop.min.css.scss +28 -0
  219. metadata +8 -6
  220. data/lib/ab_admin/views/inputs/association_input.rb +0 -13
  221. data/lib/ab_admin/views/inputs/tree_select_input.rb +0 -16
@@ -24,7 +24,7 @@ module WillPaginate
24
24
  module Pagination
25
25
  def paginate(options)
26
26
  options = options.dup
27
- pagenum = options.fetch(:page) { raise ArgumentError, ":page parameter required" }
27
+ pagenum = options.fetch(:page) { raise ArgumentError, ':page parameter required' }
28
28
  per_page = options.delete(:per_page) || self.per_page
29
29
  total = options.delete(:total_entries)
30
30
  large = options.delete(:large)
@@ -38,7 +38,7 @@ module WillPaginate
38
38
  rel.total_entries = total.to_i unless total.blank?
39
39
 
40
40
  if large
41
- new_rel = rel.except(:limit, :offset, :where).where(:id => rel.pluck("#{quoted_table_name}.id"))
41
+ new_rel = rel.except(:limit, :offset, :where).where(id: rel.pluck("#{quoted_table_name}.id"))
42
42
  new_rel.paginate_limit = rel.limit_value.to_i
43
43
  new_rel.paginate_offset = rel.offset_value.to_i
44
44
  new_rel.total_entries = rel.total_entries
@@ -2,14 +2,14 @@
2
2
 
3
3
  #module WrappedButton
4
4
  # def wrapped_button(*args, &block)
5
- # template.content_tag :div, :class => "form-actions" do
5
+ # template.content_tag :div, class: "form-actions" do
6
6
  # options = args.extract_options!
7
7
  # loading = self.object.new_record? ? I18n.t('simple_form.creating') : I18n.t('simple_form.updating')
8
8
  # options[:"data-loading-text"] = [loading, options[:"data-loading-text"]].compact
9
9
  # options[:class] = ['btn-primary', options[:class]].compact
10
10
  # args << options
11
11
  # if cancel = options.delete(:cancel)
12
- # submit(*args, &block) + ' ' + template.link_to(I18n.t('simple_form.buttons.cancel'), cancel, :class => 'btn')
12
+ # submit(*args, &block) + ' ' + template.link_to(I18n.t('simple_form.buttons.cancel'), cancel, class: 'btn')
13
13
  # else
14
14
  # submit(*args, &block)
15
15
  # end
@@ -10,11 +10,11 @@ module AbAdmin
10
10
  return text if from == to
11
11
  base = 'https://www.googleapis.com/language/translate/v2'
12
12
  params = {
13
- :key => configatron.else.retrieve(:google_api_key, ENV['GOOGLE_API_KEY']),
14
- :format => 'html',
15
- :source => from,
16
- :target => to,
17
- :q => text
13
+ key: configatron.else.retrieve(:google_api_key, ENV['GOOGLE_API_KEY']),
14
+ format: 'html',
15
+ source: from,
16
+ target: to,
17
+ q: text
18
18
  }
19
19
  response = RestClient.post(base, params, 'X-HTTP-Method-Override' => 'GET')
20
20
 
@@ -18,11 +18,11 @@ module AbAdmin
18
18
 
19
19
  models_hash = @models.each_with_object({}) do |model, h|
20
20
  model_i18n = {
21
- 'zero' => model.model_name.human(:count => 0),
22
- 'one' => model.model_name.human(:count => 1),
23
- 'few' => (model.model_name.human(:count => 2) rescue model.model_name.human(:count => 1)),
24
- 'many' => (model.model_name.human(:count => 9) rescue model.model_name.human(:count => 1)),
25
- 'other' => (model.model_name.human(:count => 9) rescue model.model_name.human(:count => 1))
21
+ 'zero' => model.model_name.human(count: 0),
22
+ 'one' => model.model_name.human(count: 1),
23
+ 'few' => (model.model_name.human(count: 2) rescue model.model_name.human(count: 1)),
24
+ 'many' => (model.model_name.human(count: 9) rescue model.model_name.human(count: 1)),
25
+ 'other' => (model.model_name.human(count: 9) rescue model.model_name.human(count: 1))
26
26
  }
27
27
  @models_i18n_hash[locale]['activerecord']['models'][model.model_name.i18n_key.to_s]= model_i18n
28
28
  attributes = model.columns.map(&:name)
@@ -35,7 +35,7 @@ module AbAdmin
35
35
  end
36
36
  if model.new.respond_to?("#{attr}_#{locale.to_s}".to_sym)
37
37
  @locales.each do |locale_1|
38
- o["#{attr}_#{locale_1.to_s}"] = "#{ha(model, attr, locale)} (#{I18n.t(locale_1, :scope => [:attrs])})"
38
+ o["#{attr}_#{locale_1.to_s}"] = "#{ha(model, attr, locale)} (#{I18n.t(locale_1, scope: [:attrs])})"
39
39
  end
40
40
  end
41
41
  end.sort.to_hash
@@ -46,7 +46,7 @@ module AbAdmin
46
46
  end
47
47
 
48
48
  def ha(model, attr, locale)
49
- model.human_attribute_name(attr, :locale => locale)
49
+ model.human_attribute_name(attr, locale: locale)
50
50
  end
51
51
 
52
52
  def write_yaml
@@ -5,7 +5,7 @@ module AbAdmin
5
5
  def self.call(env)
6
6
  if env['warden'].user
7
7
  params = Rack::Request.new(env).params
8
- body = {:text => AbAdmin::I18nTools::GoogleTranslate.t(params['q'], params['from'], params['to'])}
8
+ body = {text: AbAdmin::I18nTools::GoogleTranslate.t(params['q'], params['from'], params['to'])}
9
9
  [200, {'Content-Type' => 'application/json'}, body.to_json]
10
10
  else
11
11
  [401, {'Content-Type' => 'application/json'}, '']
@@ -9,7 +9,7 @@ module AbAdmin
9
9
  end
10
10
 
11
11
  def model(model, options={})
12
- title = model.model_name.human(:count => 9)
12
+ title = model.model_name.human(count: 9)
13
13
  path = options[:url] || "/admin/#{model.model_name.plural}"
14
14
  @menu_tree << MenuItem.new(title, path, options)
15
15
  end
@@ -48,7 +48,7 @@ module AbAdmin
48
48
  class MenuGroup < BaseMenuGroup
49
49
  def initialize(title, options, &block)
50
50
  @menu_tree = []
51
- @title = title.is_a?(Symbol) ? I18n.t(title, :scope => [:admin, :navigation]) : title
51
+ @title = title.is_a?(Symbol) ? I18n.t(title, scope: [:admin, :navigation]) : title
52
52
  @options = options
53
53
  instance_eval &block if block_given?
54
54
  end
@@ -70,7 +70,7 @@ module AbAdmin
70
70
  include ::AbAdmin::Utils::EvalHelpers
71
71
 
72
72
  def initialize(title, path, options)
73
- @title = title.is_a?(Symbol) ? I18n.t(title, :scope => [:admin, :navigation]) : title
73
+ @title = title.is_a?(Symbol) ? I18n.t(title, scope: [:admin, :navigation]) : title
74
74
  @path = path
75
75
  @options = options
76
76
  end
@@ -5,12 +5,12 @@ module AbAdmin
5
5
 
6
6
  included do
7
7
  belongs_to :user
8
- belongs_to :assetable, :polymorphic => true
8
+ belongs_to :assetable, polymorphic: true
9
9
 
10
10
  # Store options for image manipulation
11
11
  attr_reader :cropper_geometry, :rotate_degrees
12
12
 
13
- delegate :url, :original_filename, :to => :data
13
+ delegate :url, :original_filename, to: :data
14
14
 
15
15
  class_attribute :thumb_size, :max_size
16
16
  self.thumb_size = :thumb
@@ -43,15 +43,15 @@ module AbAdmin
43
43
  end
44
44
 
45
45
  def format_created_at
46
- I18n.l(created_at, :format => '%d.%m.%Y %H:%M')
46
+ I18n.l(created_at, format: '%d.%m.%Y %H:%M')
47
47
  end
48
48
 
49
49
  def as_json(options = nil)
50
50
  options = {
51
- :only => [:id, :guid, :assetable_id, :assetable_type, :user_id,
51
+ only: [:id, :guid, :assetable_id, :assetable_type, :user_id,
52
52
  :data_file_size, :data_content_type, :is_main, :original_name],
53
- :root => 'asset',
54
- :methods => [:filename, :url, :thumb_url, :width, :height]
53
+ root: 'asset',
54
+ methods: [:filename, :url, :thumb_url, :width, :height]
55
55
  }.merge(options || {})
56
56
 
57
57
  super
@@ -80,6 +80,14 @@ module AbAdmin
80
80
  self
81
81
  end
82
82
 
83
+ def crop!(geometry)
84
+ rename!
85
+ self.cropper_geometry = geometry
86
+ save!
87
+ refresh_assetable
88
+ self
89
+ end
90
+
83
91
  def rename!
84
92
  rename
85
93
  save!
@@ -21,11 +21,11 @@ module AbAdmin
21
21
  end
22
22
 
23
23
  def human_date
24
- I18n.l(created_at, :format => '%d %B %Y')
24
+ I18n.l(created_at, format: '%d %B %Y')
25
25
  end
26
26
 
27
27
  def as_json(options={})
28
- options.reverse_merge!(:methods => [:filename, :url, :preview_url, :thumb_url, :width, :height,
28
+ options.reverse_merge!(methods: [:filename, :url, :preview_url, :thumb_url, :width, :height,
29
29
  :file_css_class, :human_filesize, :created_at])
30
30
  super
31
31
  end
@@ -4,7 +4,7 @@ module AbAdmin
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
- belongs_to :headerable, :polymorphic => true
7
+ belongs_to :headerable, polymorphic: true
8
8
  end
9
9
 
10
10
  def empty?
@@ -24,8 +24,8 @@ module AbAdmin
24
24
  def prepare_data(path)
25
25
  data = YAML.load_file(path)
26
26
  locale = data.keys.first
27
- OpenStruct.new({:locale => locale.to_sym, :data => data[locale], :flat_data => flat_hash(data[locale]),
28
- :filename => File.basename(path), :path => path, :dir => File.dirname(path)})
27
+ OpenStruct.new({locale: locale.to_sym, data: data[locale], flat_data: flat_hash(data[locale]),
28
+ filename: File.basename(path), path: path, dir: File.dirname(path)})
29
29
  end
30
30
 
31
31
  def flat_hash(hash, k = [])
@@ -65,7 +65,7 @@ module AbAdmin
65
65
  end
66
66
  end
67
67
  end
68
- {:message => message}
68
+ {message: message}
69
69
  end
70
70
 
71
71
  end
@@ -7,18 +7,18 @@ module AbAdmin
7
7
  include AbAdmin::Concerns::Headerable
8
8
  include AbAdmin::Concerns::NestedSet
9
9
 
10
- enumerated_attribute :structure_type, :id_attribute => :kind
11
- enumerated_attribute :position_type, :id_attribute => :position
10
+ enumerated_attribute :structure_type, id_attribute: :kind
11
+ enumerated_attribute :position_type, id_attribute: :position
12
12
 
13
13
  validates_presence_of :title
14
- validates_numericality_of :position, :only_integer => true
14
+ validates_numericality_of :position, only_integer: true
15
15
 
16
- has_one :static_page, :dependent => :destroy
17
- has_many :visible_children, :class_name => name, :foreign_key => 'parent_id', :conditions => {:is_visible => true}
16
+ has_one :static_page, dependent: :destroy
17
+ has_many :visible_children, class_name: name, foreign_key: 'parent_id', conditions: {is_visible: true}
18
18
 
19
- scope :visible, where(:is_visible => true)
20
- scope :with_kind, proc {|structure_type| where(:kind => structure_type.id) }
21
- scope :with_position, proc {|position_type| where(:position => position_type.id).order('lft DESC') }
19
+ scope :visible, where(is_visible: true)
20
+ scope :with_kind, proc {|structure_type| where(kind: structure_type.id) }
21
+ scope :with_position, proc {|position_type| where(position: position_type.id).order('lft DESC') }
22
22
  end
23
23
 
24
24
  def redirect?
@@ -5,7 +5,7 @@ module AbAdmin
5
5
 
6
6
  attr_reader :code
7
7
 
8
- class_attribute :codes, :i18n_scope, :instance_writer => false
8
+ class_attribute :codes, :i18n_scope, instance_writer: false
9
9
  self.codes = []
10
10
  self.i18n_scope = [:admin, :type_model]
11
11
 
@@ -16,13 +16,13 @@ module AbAdmin
16
16
  def self.define_enum_by_codes
17
17
  define_enum do |builder|
18
18
  codes.each do |kind|
19
- builder.member kind, :object => new(kind.to_s)
19
+ builder.member kind, object: new(kind.to_s)
20
20
  end
21
21
  end
22
22
  end
23
23
 
24
24
  def title
25
- I18n.t(@code, :scope => i18n_scope)
25
+ I18n.t(@code, scope: i18n_scope)
26
26
  end
27
27
 
28
28
  def self.legal?(value)
@@ -4,20 +4,20 @@ module AbAdmin
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
- has_one :avatar, :as => :assetable, :dependent => :destroy, :autosave => true
7
+ has_one :avatar, as: :assetable, dependent: :destroy, autosave: true
8
8
 
9
- scope :managers, where(:user_role_id => [::UserRoleType.admin.id, ::UserRoleType.moderator.id])
10
- scope :active, where(:trust_state => ::UserState.active.id)
9
+ scope :managers, where(user_role_id: [::UserRoleType.admin.id, ::UserRoleType.moderator.id])
10
+ scope :active, where(trust_state: ::UserState.active.id)
11
11
  scope :admin, includes(:avatar)
12
12
 
13
13
  after_initialize :init
14
14
  before_validation :generate_login
15
- before_validation :set_default_role, :unless => :user_role_id?
15
+ before_validation :set_default_role, unless: :user_role_id?
16
16
 
17
17
  validate :check_role
18
18
 
19
- enumerated_attribute :user_role_type, :id_attribute => :user_role_id, :class => ::UserRoleType
20
- enumerated_attribute :trust_state_type, :id_attribute => :trust_state, :class => ::UserState
19
+ enumerated_attribute :user_role_type, id_attribute: :user_role_id, class: ::UserRoleType
20
+ enumerated_attribute :trust_state_type, id_attribute: :trust_state, class: ::UserState
21
21
  end
22
22
 
23
23
  def set_default_role
@@ -27,7 +27,7 @@ module AbAdmin
27
27
  def generate_password!
28
28
  raw_password = Rails.env.test? ? '654321' : Devise.friendly_token[0..7]
29
29
  self.password = self.password_confirmation = raw_password
30
- self.save(:validate => false)
30
+ self.save(validate: false)
31
31
  raw_password
32
32
  end
33
33
 
@@ -28,11 +28,11 @@ module AbAdmin
28
28
  end
29
29
 
30
30
  def render
31
- ::CSV.generate(:col_sep => @options[:column_separator] || ',') do |csv|
31
+ ::CSV.generate(col_sep: @options[:column_separator] || ',') do |csv|
32
32
  csv << columns_names
33
33
 
34
34
  each_record do |item|
35
- csv << column_data.map { |column| AbAdmin.pretty_data call_method_or_proc_on(item, column, :exec => false) }
35
+ csv << column_data.map { |column| AbAdmin.pretty_data call_method_or_proc_on(item, column, exec: false) }
36
36
  end
37
37
  end
38
38
  end
@@ -4,7 +4,7 @@ module AbAdmin
4
4
 
5
5
  class ShortFormatter < ::Logger::Formatter
6
6
  def call(severity, time, progname, msg)
7
- "[#{time.strftime("%Y-%m-%dT%H:%M:%S")}] #{msg}\n"
7
+ "[#{time.strftime('%Y-%m-%dT%H:%M:%S')}] #{msg}\n"
8
8
  end
9
9
  end
10
10
 
@@ -22,14 +22,14 @@ module AbAdmin
22
22
  end
23
23
 
24
24
  def render
25
- date_format = workbook.add_format(:num_format => 'dd.mm.yyyy')
26
- time_format = workbook.add_format(:num_format => 'dd.mm.yyyy HH:MM')
25
+ date_format = workbook.add_format(num_format: 'dd.mm.yyyy')
26
+ time_format = workbook.add_format(num_format: 'dd.mm.yyyy HH:MM')
27
27
 
28
28
  each_with_index do |item, index|
29
29
  row = index + 1
30
30
 
31
31
  column_data.each_with_index do |column, num|
32
- value = call_method_or_proc_on(item, column, :exec => false)
32
+ value = call_method_or_proc_on(item, column, exec: false)
33
33
 
34
34
  case value
35
35
  when Date
@@ -44,7 +44,7 @@ module AbAdmin
44
44
  end
45
45
  end
46
46
 
47
- bold = workbook.add_format(:bold => 1)
47
+ bold = workbook.add_format(bold: 1)
48
48
  worksheet.write('A1', columns_names, bold)
49
49
 
50
50
  super
@@ -11,7 +11,7 @@ module AbAdmin
11
11
  end
12
12
  end
13
13
 
14
- def bm(message = "Benchmarking", options = {})
14
+ def bm(message = 'Benchmarking', options = {})
15
15
  result = nil
16
16
  ms = Benchmark.ms { result = yield }
17
17
  Rails.logger.debug '%s (%.3fms)' % [message, ms]
@@ -40,8 +40,8 @@ module AbAdmin
40
40
  end
41
41
 
42
42
  def truncate_text(raw_text, size=200)
43
- text = raw_text.to_s.gsub(/&quot;|&laquo;|&raquo;|&#x27;/, "'").gsub(/&nbsp;/, ' ').gsub(/&mdash;/, '-').no_html.squish
44
- text.truncate(size, :separator => ' ')
43
+ text = raw_text.to_s.gsub(/&quot;|&laquo;|&raquo;|&#x27;/, '\'').gsub(/&nbsp;/, ' ').gsub(/&mdash;/, '-').no_html.squish
44
+ text.truncate(size, separator: ' ')
45
45
  end
46
46
 
47
47
  def l_path(locale=nil)
@@ -71,12 +71,12 @@ module AbAdmin
71
71
 
72
72
  def js_date_data
73
73
  {
74
- :formats => I18n.t('date.formats'),
75
- :day_names => I18n.t('date.day_names'),
76
- :abbr_day_names => I18n.t('date.common_abbr_day_names'),
77
- :month_names => I18n.t('date.common_month_names'),
78
- :standalone_month_names => I18n.t('date.standalone_month_names'),
79
- :abbr_month_names => I18n.t('date.abbr_month_names')
74
+ formats: I18n.t('date.formats'),
75
+ day_names: I18n.t('date.day_names'),
76
+ abbr_day_names: I18n.t('date.common_abbr_day_names'),
77
+ month_names: I18n.t('date.common_month_names'),
78
+ standalone_month_names: I18n.t('date.standalone_month_names'),
79
+ abbr_month_names: I18n.t('date.abbr_month_names')
80
80
  }
81
81
  end
82
82
 
@@ -85,7 +85,7 @@ module AbAdmin
85
85
 
86
86
  def normalize_html(raw_html)
87
87
  return '' if raw_html.blank?
88
- html = sanitize(raw_html.gsub(/<!--(.*?)-->[\n]?/m, ""))
88
+ html = sanitize(raw_html.gsub(/<!--(.*?)-->[\n]?/m, ''))
89
89
  doc = Nokogiri::HTML.fragment(html)
90
90
  #doc.xpath('comment()').each { |c| c.remove }
91
91
  doc.search('div').each { |el| el.name = 'p' }
@@ -116,7 +116,7 @@ module AbAdmin
116
116
  when FalseClass
117
117
  '-'
118
118
  when Date, DateTime, Time, ActiveSupport::TimeWithZone
119
- I18n.l(object, :format => :long)
119
+ I18n.l(object, format: :long)
120
120
  when NilClass
121
121
  ''
122
122
  else
@@ -1,3 +1,3 @@
1
1
  module AbAdmin
2
- VERSION = '0.2.3'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -33,19 +33,19 @@ module AbAdmin
33
33
  end
34
34
  options[:source] ||= {'true' => 'yes', 'false' => 'no'} if options[:type] == 'select'
35
35
  data = {
36
- :type => options[:type], :source => options[:source].try(:to_json),
37
- :model => resource_class.model_name.singular, :url => resource_path(item),
38
- :name => attr, :value => item[attr]
36
+ type: options[:type], source: options[:source].try(:to_json),
37
+ model: resource_class.model_name.singular, url: resource_path(item),
38
+ name: attr, value: item[attr]
39
39
  }
40
- link_to admin_pretty_data(item[attr]).html_safe, '#', :class => 'editable', :data => data
40
+ link_to admin_pretty_data(item[attr]).html_safe, '#', class: 'editable', data: data
41
41
  end
42
42
 
43
43
  def options_for_ckeditor(options = {})
44
- {:width => 930, :height => 200, :toolbar => 'VeryEasy', :namespace => ''}.update(options)
44
+ {width: 930, height: 200, toolbar: 'VeryEasy', namespace: ''}.update(options)
45
45
  end
46
46
 
47
47
  def admin_tree_item(item)
48
- render 'tree_item', :item => item, :child_tree => admin_tree(item.cached_children)
48
+ render 'tree_item', item: item, child_tree: admin_tree(item.cached_children)
49
49
  end
50
50
 
51
51
  def admin_tree(items)
@@ -80,7 +80,7 @@ module AbAdmin
80
80
  when TrueClass, FalseClass
81
81
  color_bool(object)
82
82
  when Date, DateTime, Time, ActiveSupport::TimeWithZone
83
- I18n.l(object, :format => :long)
83
+ I18n.l(object, format: :long)
84
84
  when NilClass
85
85
  ''
86
86
  when ActiveRecord::Base
@@ -95,22 +95,22 @@ module AbAdmin
95
95
  end
96
96
 
97
97
  def item_image_link(item, options={})
98
- options.reverse_merge!(:url => resource_path(item), :assoc => :picture)
98
+ options.reverse_merge!(url: resource_path(item), assoc: :picture)
99
99
  image = item.send(options[:assoc])
100
100
  return nil unless image
101
101
  version = options[:version] || image.class.thumb_size
102
- popover_data = {:content => "<img src='#{image.url}'></img>", :title => item.name}
103
- link_to image_tag(image.url(version)), options[:url], :data => popover_data, :rel => 'popover'
102
+ popover_data = {content: "<img src='#{image.url}'></img>", title: item.name}
103
+ link_to image_tag(image.url(version)), options[:url], data: popover_data, rel: 'popover'
104
104
  end
105
105
 
106
106
  def item_image(item, assoc=:photo, size=:thumb)
107
107
  image_tag_if(item.send(assoc).try(:url, size))
108
108
  end
109
109
 
110
- # input_set 'title', :legend_class => 'do_sort', :label_class => 'label-info' do
110
+ # input_set 'title', legend_class: 'do_sort', label_class: 'label-info' do
111
111
  def input_set(title, options={}, &block)
112
- options.reverse_merge!(:class => "inputs well well-small #{options.delete(:legend_class) || 'do_sort'}", :id => options.delete(:legend_id))
113
- html = content_tag(:label, title, :class => "input_set label #{options.delete(:label_class)}")
112
+ options.reverse_merge!(class: "inputs well well-small #{options.delete(:legend_class) || 'do_sort'}", id: options.delete(:legend_id))
113
+ html = content_tag(:label, title, class: "input_set label #{options.delete(:label_class)}")
114
114
  html.concat(capture(&block)) if block_given?
115
115
  content_tag(:fieldset, html, options)
116
116
  end
@@ -36,7 +36,7 @@ module AbAdmin
36
36
 
37
37
  html_options = args.first.is_a?(Hash) ? args.shift.dup : {}
38
38
  html_options[:class] = ['sort_link', current_dir, html_options[:class]].compact.join(' ')
39
- options.merge!(:q => search_params.merge(:s => "#{attr_name} #{new_dir}"))
39
+ options.merge!(q: search_params.merge(s: "#{attr_name} #{new_dir}"))
40
40
 
41
41
  link_to [name, order_indicator_for(current_dir)].join(' ').html_safe, url_for(options), html_options
42
42
  end
@@ -54,18 +54,18 @@ module AbAdmin
54
54
  def short_action_link(action, item)
55
55
  case action
56
56
  when :edit
57
- item_link_to_can? :update, item, icon('pencil', true), edit_resource_path(item), :remote => settings[:list_edit],
58
- :class => 'btn btn-primary', :title => t('admin.actions.edit.link')
57
+ item_link_to_can? :update, item, icon('pencil', true), edit_resource_path(item), remote: settings[:list_edit],
58
+ class: 'btn btn-primary', title: t('admin.actions.edit.link')
59
59
  when :destroy
60
- item_link_to_can? :destroy, item, icon('trash', true), resource_path(item, :return_to => request.url),
61
- :method => :delete, :data => {:confirm => t('admin.delete_confirmation')},
62
- :class => 'btn btn-danger', :title => t('admin.actions.destroy.link')
60
+ item_link_to_can? :destroy, item, icon('trash', true), resource_path(item, return_to: request.url),
61
+ method: :delete, data: {confirm: t('admin.delete_confirmation')},
62
+ class: 'btn btn-danger', title: t('admin.actions.destroy.link')
63
63
  when :show
64
64
  item_link_to_can? :show, item, icon('info-sign', true), resource_path(item),
65
- :class => 'btn btn-info', :title => t('admin.actions.show.link')
65
+ class: 'btn btn-info', title: t('admin.actions.show.link')
66
66
  when :preview
67
67
  if path = preview_resource_path(item)
68
- link_to icon('eye-open', true), path, :class => 'btn btn-small btn-inverse', :title => t('admin.actions.preview.link'), :target => '_blank'
68
+ link_to icon('eye-open', true), path, class: 'btn btn-small btn-inverse', title: t('admin.actions.preview.link'), target: '_blank'
69
69
  end
70
70
  when AbAdmin::Config::ActionItem
71
71
  instance_exec(item, &action.data) if action.for_context?(self)
@@ -78,17 +78,17 @@ module AbAdmin
78
78
  def action_link(action)
79
79
  case action
80
80
  when :new
81
- link_to_can? :create, t('admin.actions.new.link'), new_resource_path, :class => 'btn btn-primary new_resource', :remote => settings[:list_edit]
81
+ link_to_can? :create, t('admin.actions.new.link'), new_resource_path, class: 'btn btn-primary new_resource', remote: settings[:list_edit]
82
82
  when :edit
83
- link_to_can? :update, t('admin.actions.edit.link'), edit_resource_path, :class => 'btn btn-primary'
83
+ link_to_can? :update, t('admin.actions.edit.link'), edit_resource_path, class: 'btn btn-primary'
84
84
  when :destroy
85
- link_to_can? :destroy, t('admin.actions.destroy.link'), resource_path, :method => :delete, :data => {:confirm => t('admin.delete_confirmation')},
86
- :class => 'btn btn-danger'
85
+ link_to_can? :destroy, t('admin.actions.destroy.link'), resource_path, method: :delete, data: {confirm: t('admin.delete_confirmation')},
86
+ class: 'btn btn-danger'
87
87
  when :show
88
- link_to_can? :show, t('admin.actions.show.link'), resource_path, :class => 'btn btn-info'
88
+ link_to_can? :show, t('admin.actions.show.link'), resource_path, class: 'btn btn-info'
89
89
  when :preview
90
90
  if path = preview_resource_path(resource)
91
- link_to t('admin.actions.preview.link'), path, :class => 'btn btn-inverse', :title => t('admin.actions.preview.link'), :target => '_blank'
91
+ link_to t('admin.actions.preview.link'), path, class: 'btn btn-inverse', title: t('admin.actions.preview.link'), target: '_blank'
92
92
  end
93
93
  when AbAdmin::Config::ActionItem
94
94
  instance_exec(&action.data) if action.for_context?(self)
@@ -113,20 +113,20 @@ module AbAdmin
113
113
  end
114
114
 
115
115
  def model_admin_menu_link(model)
116
- content_tag :li, :class => ('active' if controller_name.split('/').last == model.model_name.plural) do
117
- link_to model.model_name.human(:count => 9), "/admin/#{model.model_name.plural}"
118
- #link_to model.model_name.human(:count => 9), {:action => :index, :controller => "admin/#{model.model_name.plural}"}
116
+ content_tag :li, class: ('active' if controller_name.split('/').last == model.model_name.plural) do
117
+ link_to model.model_name.human(count: 9), "/admin/#{model.model_name.plural}"
118
+ #link_to model.model_name.human(count: 9), {action: :index, controller: "admin/#{model.model_name.plural}"}
119
119
  end
120
120
  end
121
121
 
122
122
  def admin_menu_link(name, path)
123
- content_tag :li, :class => ('active' if path == request.path_info.split('/')[2]) do
123
+ content_tag :li, class: ('active' if path == request.path_info.split('/')[2]) do
124
124
  link_to name, "/admin/#{path}"
125
125
  end
126
126
  end
127
127
 
128
128
  def admin_menu_link_without_model(name, path, path_name)
129
- content_tag :li, :class => ('active' if path_name == request.url.split('/').last) do
129
+ content_tag :li, class: ('active' if path_name == request.url.split('/').last) do
130
130
  link_to name, path
131
131
  end
132
132
  end
@@ -138,7 +138,7 @@ module AbAdmin
138
138
  t('will_paginate.pagination_info_empty')
139
139
  else
140
140
  per_page = (params[:per_page] || resource_class.per_page).to_i
141
- t('will_paginate.pagination_info', :from => offset + 1, :to => [offset + per_page, total_entries].min, :count => total_entries).html_safe
141
+ t('will_paginate.pagination_info', from: offset + 1, to: [offset + per_page, total_entries].min, count: total_entries).html_safe
142
142
  end
143
143
  end
144
144
 
@@ -151,7 +151,7 @@ module AbAdmin
151
151
  def batch_action_toggle
152
152
  if settings[:batch]
153
153
  content_tag :th do
154
- check_box_tag '', '', false, :id => nil, :class => 'toggle'
154
+ check_box_tag '', '', false, id: nil, class: 'toggle'
155
155
  end
156
156
  end
157
157
  end
@@ -159,14 +159,14 @@ module AbAdmin
159
159
  def batch_action_item(item)
160
160
  if settings[:batch]
161
161
  content_tag :td do
162
- check_box_tag 'ids[]', item.id, false, :id => "batch_action_item_#{item.id}"
162
+ check_box_tag 'ids[]', item.id, false, id: "batch_action_item_#{item.id}"
163
163
  end
164
164
  end
165
165
  end
166
166
 
167
- def id_link(item)
168
- opts = {:remote => settings[:list_edit], :class => 'resource_id_link'}
169
- if can?(:edit, item)
167
+ def id_link(item, edit=true)
168
+ opts = {remote: settings[:list_edit], class: 'resource_id_link'}
169
+ if edit && can?(:edit, item)
170
170
  link_to item.id, edit_resource_path(item), opts
171
171
  elsif can?(:read, item)
172
172
  link_to item.id, resource_path(item), opts
@@ -196,7 +196,7 @@ module AbAdmin
196
196
  def admin_record_link(record, action, options={})
197
197
  return unless record
198
198
  record_title = options.delete(:title) || AbAdmin.display_name(record)
199
- #url_options = {:controller => record.class.model_name.plural, :action => action, :id => record.id}
199
+ #url_options = {controller: record.class.model_name.plural, action: action, id: record.id}
200
200
  action_url_part = action == :show ? '' : "/#{action}"
201
201
  url = "/admin/#{record.class.model_name.plural}/#{record.id}#{action_url_part}"
202
202
  html_options = options.delete(:html_options) || {}