admin_it 1.0.11 → 1.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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile +8 -1
  4. data/README.md +4 -2
  5. data/admin_it.gemspec +1 -0
  6. data/lib/admin_it.rb +7 -5
  7. data/lib/admin_it/actions/action.rb +5 -2
  8. data/lib/admin_it/config.rb +1 -0
  9. data/lib/admin_it/context/collection_context.rb +10 -4
  10. data/lib/admin_it/context/context.rb +12 -13
  11. data/lib/admin_it/context/show_context.rb +6 -5
  12. data/lib/admin_it/context/single_context.rb +19 -8
  13. data/lib/admin_it/context/table_context.rb +9 -7
  14. data/lib/admin_it/context/tiles_context.rb +1 -0
  15. data/lib/admin_it/controller.rb +3 -1
  16. data/lib/admin_it/data.rb +4 -2
  17. data/lib/admin_it/data/active_record.rb +10 -301
  18. data/lib/admin_it/data/active_record/collection_context.rb +47 -0
  19. data/lib/admin_it/data/active_record/field.rb +64 -0
  20. data/lib/admin_it/data/active_record/filter.rb +36 -0
  21. data/lib/admin_it/data/active_record/resource.rb +66 -0
  22. data/lib/admin_it/data/active_record/single_context.rb +102 -0
  23. data/lib/admin_it/data/data_behavior.rb +2 -0
  24. data/lib/admin_it/data/hash.rb +3 -0
  25. data/lib/admin_it/data/mongoid.rb +14 -0
  26. data/lib/admin_it/data/mongoid/field.rb +58 -0
  27. data/lib/admin_it/data/mongoid/resource.rb +67 -0
  28. data/lib/admin_it/data/object.rb +3 -0
  29. data/lib/admin_it/engine.rb +4 -1
  30. data/lib/admin_it/env.rb +21 -2
  31. data/lib/admin_it/field/field.rb +15 -26
  32. data/lib/admin_it/filters/field_filter.rb +1 -0
  33. data/lib/admin_it/filters/filter.rb +8 -13
  34. data/lib/admin_it/filters/value_filter.rb +1 -0
  35. data/lib/admin_it/helpers.rb +2 -0
  36. data/lib/admin_it/helpers/field.rb +3 -3
  37. data/lib/admin_it/helpers/input.rb +1 -0
  38. data/lib/admin_it/helpers/page.rb +2 -0
  39. data/lib/admin_it/helpers/table.rb +12 -8
  40. data/lib/admin_it/helpers/tiles.rb +2 -0
  41. data/lib/admin_it/helpers/toolbar.rb +4 -0
  42. data/lib/admin_it/helpers/top_menu.rb +3 -0
  43. data/lib/admin_it/resource.rb +16 -21
  44. data/lib/admin_it/version.rb +1 -1
  45. data/lib/extend_it.rb +8 -4
  46. data/lib/extend_it/array_of.rb +12 -10
  47. data/lib/extend_it/base.rb +9 -8
  48. data/lib/extend_it/callbacks.rb +11 -12
  49. data/lib/extend_it/dsl.rb +33 -44
  50. data/spec/extend_it/dsl_spec.rb +21 -32
  51. data/spec/lib/data/mongoid/field_spec.rb +28 -0
  52. data/spec/lib/data/mongoid/resource_spec.rb +50 -0
  53. data/spec/spec_helper.rb +8 -3
  54. data/spec/support/module_helpers.rb +20 -0
  55. metadata +30 -13
  56. data/.ruby-version +0 -1
  57. data/lib/admin_it/definitions.rb +0 -89
  58. data/lib/admin_it/utils.rb +0 -21
  59. data/lib/extend_it/asserts.rb +0 -40
  60. data/lib/extend_it/caller.rb +0 -35
  61. data/lib/extend_it/config.rb +0 -30
  62. data/lib/extend_it/ensures.rb +0 -193
  63. data/spec/extend_it/config_spec.rb +0 -52
  64. data/spec/extend_it/ensures_spec.rb +0 -39
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 29a6d776198ded9d1cf8d3bf12731a86219e2d71
4
- data.tar.gz: 675c20d9e4f38cca59e19e690f99ed6d565bfcad
3
+ metadata.gz: 65d9841e47dc5873e0e1b358138f1736ff6dbbe0
4
+ data.tar.gz: a517d4d77720694fccb35cd9742b4d9812516f07
5
5
  SHA512:
6
- metadata.gz: 72e6c716d4821a967a2bd4639733aca51e8a12833771199fc901d305e0347af72a1ec4cdb5bb1904ae3543180cc9b127519e428e6692c7611db84625cfdaf6e8
7
- data.tar.gz: e2d9330e064c19f681c2d1e48e6a1a4d39cc9e74a54cd14b75f8e56841c662860beb09bca479514e4e441ce5b7d1267b595a8f5c5a9257d1f214a5e8b6a6af7e
6
+ metadata.gz: a2ae93d3c5dfdbc6bb519dcb3945e2306136a62d43982e099bf8c181d99fa3254e63a21b2cc570065c36d84d3c71bfbefdcd54c7abae3ea3c629f700aa8ff5f7
7
+ data.tar.gz: c598b3285ab2dfefdf9a92bc50fb7f3207178c3936f506c25d364a1113b35189aa23c5b8d420d18b1fd0970ceee82748b1102f2b9187fe199a146baf8460fb47
data/.gitignore CHANGED
@@ -3,6 +3,7 @@
3
3
  .bundle
4
4
  .config
5
5
  .yardoc
6
+ .ruby-version
6
7
  Gemfile.lock
7
8
  Gemfile.*.lock
8
9
  InstalledFiles
data/Gemfile CHANGED
@@ -2,4 +2,11 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- # gem 'wrap_it', path: '../wrap_it'
5
+ # integration includes
6
+ gem 'activerecord' if ENV['USE_ACTIVERECORD']
7
+ if ENV['USE_MONGOID']
8
+ gem 'mongoid', github: 'mongoid/mongoid'
9
+ gem 'bson_ext'
10
+ gem 'bson'
11
+ gem 'moped', github: 'mongoid/moped'
12
+ end
data/README.md CHANGED
@@ -27,10 +27,8 @@ bundle install
27
27
 
28
28
  # Todo
29
29
 
30
- * use_fields not working in root resource context
31
30
  * human-readable date and time fields
32
31
  * Test coverage
33
- * Entities editing/creating
34
32
 
35
33
  ## Longtime plans
36
34
 
@@ -38,6 +36,10 @@ bundle install
38
36
 
39
37
  # Changes
40
38
 
39
+ `1.1.0`
40
+ * ensure_it integration
41
+ * mongoid integration
42
+
41
43
  `1.0.10`
42
44
 
43
45
  * added: sorting indicator in table column header
data/admin_it.gemspec CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.add_dependency 'rails', '~> 4.0'
26
26
  spec.add_dependency 'devise'
27
27
  spec.add_dependency 'wrap_it'
28
+ spec.add_dependency 'ensure_it'
28
29
 
29
30
  spec.add_development_dependency 'bundler', '~> 1.3'
30
31
  spec.add_development_dependency 'sqlite3'
data/lib/admin_it.rb CHANGED
@@ -1,15 +1,18 @@
1
+ if !defined?(EnsureIt) && RUBY_VERSION >= '2.1.0'
2
+ require 'ensure_it_refined'
3
+ else
4
+ require 'ensure_it'
5
+ end
6
+
1
7
  require 'extend_it'
2
- require File.join %w(extend_it ensures)
3
8
 
9
+ #
4
10
  module AdminIt
5
- using ExtendIt::Ensures if ExtendIt.config.use_refines?
6
-
7
11
  LAYOUTS = %i(dialog)
8
12
  end
9
13
 
10
14
  require File.join %w(admin_it env)
11
15
  require File.join %w(admin_it errors)
12
- require File.join %w(admin_it utils)
13
16
  require File.join %w(admin_it config)
14
17
  require File.join %w(admin_it shared)
15
18
  require File.join %w(admin_it data)
@@ -19,6 +22,5 @@ require File.join %w(admin_it filters)
19
22
  require File.join %w(admin_it resource)
20
23
  require File.join %w(admin_it context)
21
24
  require File.join %w(admin_it controller)
22
- require File.join %w(admin_it definitions)
23
25
  require File.join %w(admin_it engine)
24
26
  require File.join %w(admin_it helpers)
@@ -1,4 +1,8 @@
1
+ #
1
2
  module AdminIt
3
+ using EnsureIt if EnsureIt.refined?
4
+
5
+ #
2
6
  class Action
3
7
  extend ExtendIt::Base
4
8
  include ExtendIt::Dsl
@@ -12,8 +16,7 @@ module AdminIt
12
16
  attr_reader :layout
13
17
 
14
18
  def layout=(value)
15
- value = value.ensure_symbol
16
- @layout = value.nil? || LAYOUTS.include?(value) ? value : nil
19
+ @layout = value.ensure_symbol(values: LAYOUTS)
17
20
  end
18
21
  end
19
22
  end
@@ -1,4 +1,5 @@
1
1
  module AdminIt
2
+ #
2
3
  module Config
3
4
  def self.root
4
5
  @root ||= Rails.root.join('app', 'admin_it')
@@ -1,7 +1,11 @@
1
1
  require 'json'
2
2
  require 'csv'
3
3
 
4
+ #
4
5
  module AdminIt
6
+ using EnsureIt if EnsureIt.refined?
7
+
8
+ #
5
9
  class CollectionContext < Context
6
10
  extend FiltersHolder
7
11
 
@@ -39,13 +43,14 @@ module AdminIt
39
43
  end
40
44
 
41
45
  def self.sortable_fields(*names)
42
- names = names.ensure_symbols
46
+ names = names.ensure_array(:flatten, :ensure_symbol, :compact, :uniq)
43
47
  fields.each do |_field|
44
48
  _field.sortable = names.include?(_field.field_name)
45
49
  end
46
50
  end
47
51
 
48
52
  attr_accessor :entity
53
+ attr_writer :entities
49
54
  class_attr_reader :entities_getter, :path, :show_in_dialog?
50
55
 
51
56
  before_load do |store: {}, params: {}|
@@ -165,9 +170,9 @@ module AdminIt
165
170
  self.entities = collection
166
171
  end
167
172
 
168
- def entities=(value)
169
- @entities = value
170
- end
173
+ # def entities=(value)
174
+ # @entities = value
175
+ # end
171
176
 
172
177
  def entities
173
178
  self.entity = nil
@@ -196,6 +201,7 @@ module AdminIt
196
201
  end
197
202
  end
198
203
 
204
+ #
199
205
  class ListContext < CollectionContext
200
206
  def self.path
201
207
  AdminIt::Engine.routes.url_helpers.send("list_#{resource.plural}_path")
@@ -3,9 +3,11 @@ require File.join %w(extend_it dsl)
3
3
  require File.join %w(extend_it base)
4
4
  require File.join %w(extend_it callbacks)
5
5
 
6
- using ExtendIt::Ensures
7
-
6
+ #
8
7
  module AdminIt
8
+ using EnsureIt if EnsureIt.refined?
9
+
10
+ #
9
11
  class Context
10
12
  extend ExtendIt::Base
11
13
  extend ExtendIt::Dsl
@@ -27,7 +29,7 @@ module AdminIt
27
29
  define_callbacks :initialize, :load, :save
28
30
 
29
31
  def self.create(context_name, _resource)
30
- fail ArgumentError, 'Wrong resource' unless _resource.is_a?(Resource)
32
+ _resource.ensure_instance_of!(Resource)
31
33
  base = self
32
34
  Class.new(base) do
33
35
  @resource = _resource
@@ -101,9 +103,7 @@ module AdminIt
101
103
  store = store[name] ||= {}
102
104
  end
103
105
 
104
- if params.nil?
105
- params = controller.request.query_parameters
106
- end
106
+ params = controller.request.query_parameters if params.nil?
107
107
  params = Hash[params.map { |k, v| [k.to_sym, v] }]
108
108
 
109
109
  run_callbacks :load, arguments: { params: params, store: store } do
@@ -158,10 +158,11 @@ module AdminIt
158
158
  def layout=(value)
159
159
  value = value.to_sym if value.is_a?(String)
160
160
  return unless value.is_a?(Symbol)
161
- @layout = case value
162
- when :dialog then 'dialog'
163
- else ''
164
- end
161
+ @layout =
162
+ case value
163
+ when :dialog then 'dialog'
164
+ else ''
165
+ end
165
166
  end
166
167
 
167
168
  def parent=(value)
@@ -196,9 +197,7 @@ module AdminIt
196
197
  end
197
198
 
198
199
  def url_params(**params)
199
- unless @parent.nil?
200
- params.merge!(parent: @parent.send(:context_param))
201
- end
200
+ params.merge!(parent: @parent.send(:context_param)) unless @parent.nil?
202
201
  params
203
202
  end
204
203
 
@@ -1,4 +1,8 @@
1
+ #
1
2
  module AdminIt
3
+ using EnsureIt if EnsureIt.refined?
4
+
5
+ #
2
6
  class ShowContext < SingleContext
3
7
  extend Renderable
4
8
  include Identifiable
@@ -22,9 +26,7 @@ module AdminIt
22
26
  end
23
27
 
24
28
  def self.read(entity)
25
- unless @read.nil?
26
- @read.call(entity)
27
- end
29
+ @read.call(entity) unless @read.nil?
28
30
  end
29
31
 
30
32
  attr_reader :confirm
@@ -34,8 +36,7 @@ module AdminIt
34
36
  end
35
37
 
36
38
  def confirm=(value)
37
- value = value.downcase.to_sym if value.is_a?(String)
38
- return unless value.is_a?(Symbol) && CONFIRMS.include?(value)
39
+ value = value.ensure_symbol(downcase: true, values: CONFIRMS) || return
39
40
  @confirm = value
40
41
  end
41
42
 
@@ -1,4 +1,8 @@
1
+ #
1
2
  module AdminIt
3
+ using EnsureIt if EnsureIt.refined?
4
+
5
+ #
2
6
  class Section
3
7
  extend ExtendIt::Base
4
8
  include ExtendIt::Dsl
@@ -11,16 +15,17 @@ module AdminIt
11
15
  dsl_boolean :visible
12
16
 
13
17
  def use_fields(*names, except: nil)
14
- names = names.ensure_symbols
18
+ names = names.ensure_array(:flatten, :ensure_symbol, :compact, :uniq)
19
+ except = except.ensure_array(:flatten, :ensure_symbol, :compact, :uniq)
15
20
  fields =
16
- if names.nil? || names.empty?
21
+ if names.empty?
17
22
  dsl_get(:fields, default: [])
18
23
  else
19
24
  context = dsl_get(:context, default: nil)
20
25
  names & context.fields.map(&:field_name)
21
26
  end
22
- fields -= except.ensure_symbols unless except.nil?
23
- dsl_set(:fields, fields.uniq)
27
+ fields -= except
28
+ dsl_set(:fields, fields)
24
29
  end
25
30
  end
26
31
 
@@ -40,6 +45,7 @@ module AdminIt
40
45
  end
41
46
  end
42
47
 
48
+ #
43
49
  module Identifiable
44
50
  def self.included(base)
45
51
  base.extend(ClassMethods)
@@ -53,10 +59,12 @@ module AdminIt
53
59
  identity.nil? ? super : "#{super}(#{identity})"
54
60
  end
55
61
 
62
+ #
56
63
  module ClassMethods
57
64
  end
58
65
  end
59
66
 
67
+ #
60
68
  class SingleContext < Context
61
69
  dsl do
62
70
  dsl_block :entity_getter, :entity_saver, :entity_destroyer
@@ -64,7 +72,7 @@ module AdminIt
64
72
  dsl_hash_of_objects :sections, single: :section do |name, **opts|
65
73
  if @sections.empty?
66
74
  # TODO: require this and other files after I18n config in engine.rb
67
- #general.display_name(I18n.t('admin_it.collection.no_data'))
75
+ # general.display_name(I18n.t('admin_it.collection.no_data'))
68
76
  general = Section.new(
69
77
  :general,
70
78
  self,
@@ -91,7 +99,8 @@ module AdminIt
91
99
  )
92
100
  end
93
101
 
94
- class_attr_reader :entity_getter, :entity_saver, :entity_destroyer, :sections
102
+ class_attr_reader :entity_getter, :entity_saver, :entity_destroyer,
103
+ :sections
95
104
  attr_accessor :entity
96
105
 
97
106
  after_load do |store: {}, params: {}|
@@ -117,8 +126,7 @@ module AdminIt
117
126
  end
118
127
 
119
128
  def section=(value)
120
- value = value.downcase.to_sym if value.is_a?(String)
121
- return unless value.is_a?(Symbol)
129
+ value = value.ensure_symbol(downcase: true) || return
122
130
  if sections.empty?
123
131
  return if section != :none
124
132
  else
@@ -153,6 +161,7 @@ module AdminIt
153
161
  end
154
162
  end
155
163
 
164
+ #
156
165
  class SavableSingleContext < SingleContext
157
166
  def self.save_action; end
158
167
 
@@ -177,6 +186,7 @@ module AdminIt
177
186
  def do_save_entity; end
178
187
  end
179
188
 
189
+ #
180
190
  class EditContext < SavableSingleContext
181
191
  include Identifiable
182
192
 
@@ -203,6 +213,7 @@ module AdminIt
203
213
  end
204
214
  end
205
215
 
216
+ #
206
217
  class NewContext < SavableSingleContext
207
218
  def self.path
208
219
  AdminIt::Engine.routes.url_helpers.send("new_#{resource.name}_path")
@@ -1,4 +1,5 @@
1
1
  module AdminIt
2
+ #
2
3
  class TableContext < CollectionContext
3
4
  dsl do
4
5
  dsl_accessor :page_size, default: 10
@@ -50,13 +51,14 @@ module AdminIt
50
51
 
51
52
  def page=(value)
52
53
  if value.is_a?(String)
53
- value = case value.downcase
54
- when 'next' then page + 1
55
- when 'prev', 'previous' then page - 1
56
- when 'first' then 1
57
- when 'last' then pages
58
- else value.to_i
59
- end
54
+ value =
55
+ case value.downcase
56
+ when 'next' then page + 1
57
+ when 'prev', 'previous' then page - 1
58
+ when 'first' then 1
59
+ when 'last' then pages
60
+ else value.to_i
61
+ end
60
62
  end
61
63
  if value.is_a?(Fixnum) && value > 0 && value <= pages
62
64
  # reset entities enumerator if page changed
@@ -1,4 +1,5 @@
1
1
  module AdminIt
2
+ #
2
3
  class TilesContext < CollectionContext
3
4
  dsl do
4
5
  dsl_accessor :header do |value|
@@ -1,8 +1,10 @@
1
1
  module AdminIt
2
+ #
2
3
  module Controller
3
4
  def self.included(base)
4
5
  base.class_eval do
5
6
  include Pundit if AdminIt::Env.pundit?
7
+ before_filter :authenticate_user!
6
8
 
7
9
  attr_reader :context
8
10
  helper_method :context, :resource
@@ -31,7 +33,7 @@ module AdminIt
31
33
  @context = context_class.new(self)
32
34
  yield if block_given?
33
35
  layout = ['admin_it', params[:layout]].compact.join('_')
34
- if !performed?
36
+ unless performed?
35
37
  if layout == 'admin_it' && !request.query_parameters.empty?
36
38
  redirect_to request.path
37
39
  else
data/lib/admin_it/data.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  require File.join %w(admin_it data data_behavior)
2
2
  require File.join %w(admin_it data object)
3
3
  require File.join %w(admin_it data hash)
4
- require File.join %w(admin_it data active_record)
5
4
 
5
+ #
6
6
  module AdminIt
7
7
  def self.register_data(entity_class, mod)
8
8
  return if entity_class.nil?
@@ -20,5 +20,7 @@ module AdminIt
20
20
 
21
21
  register_data Object, AdminIt::ObjectData
22
22
  register_data Hash, AdminIt::HashData
23
- register_data ActiveRecord::Base, AdminIt::ActiveRecordData
24
23
  end
24
+
25
+ require File.join %w(admin_it data active_record)
26
+ require File.join %w(admin_it data mongoid)
@@ -1,303 +1,12 @@
1
- module AdminIt
2
- module ActiveRecordData
3
- module Resource
4
- protected
5
-
6
- TYPE_MAPPING = {
7
- primary_key: :integer,
8
- string: :string,
9
- text: :string,
10
- integer: :integer,
11
- float: :float,
12
- decimal: :float,
13
- datetime: :datetime,
14
- timestamp: :datetime,
15
- time: :time,
16
- date: :date,
17
- binary: :binary,
18
- boolean: :boolean
19
- }
20
-
21
- def default_display_name
22
- entity_class
23
- .model_name
24
- .human#(count: 0)
25
- .split(' ')
26
- .map { |s| s.mb_chars.capitalize }
27
- .join(' ')
28
- end
29
-
30
- def default_fields(&block)
31
- enum = Enumerator.new do |yielder|
32
- exclude = []
33
- entity_class.reflections.each do |name, a|
34
- f = AdminIt::Field.create(name, entity_class, type: :relation)
35
- f.assoc = a
36
- yielder << f
37
- exclude << "#{name}_id" if a.belongs_to?
38
- end
39
- entity_class.columns_hash.each do |name, c|
40
- next if exclude.include?(name)
41
- name = name.to_sym
42
- opts = { type: TYPE_MAPPING[c.type] }
43
- if name == :id
44
- opts[:visible] = false
45
- opts[:writable] = false
46
- end
47
- yielder << AdminIt::Field.create(name, entity_class, opts)
48
- end
49
- end
50
- block_given? ? enum.each(&block) : enum
51
- end
52
-
53
- def default_filters
54
- enum = Enumerator.new do |yielder|
55
- fields.each do |field|
56
- next if field.type == :relation
57
- name = "#{field.field_name}_value"
58
- yielder << AdminIt::ValueFilter.create(name, self, field)
59
- end
60
- end
61
- block_given? ? enum.each(&block) : enum
62
- end
63
- end
64
-
65
- module CollectionContext
66
- def entities=(value)
67
- super(value)
68
- @count = @entities.nil? ? 0 : @entities.count
69
- end
70
-
71
- protected
72
-
73
- def load_entities
74
- collection =
75
- if AdminIt::Env.pundit?
76
- controller.policy_scope(entity_class)
77
- else
78
- entity_class.all
79
- end
80
- if child?
81
- collection = collection.where(parent.resource.name => parent.entity)
82
- end
83
- sort = {}
84
- sorting.each do |_sort|
85
- name, order = _sort.split(':')
86
- sort[name.to_sym] = order.to_sym
87
- end
88
- unless collection.nil? || sort.empty?
89
- collection = collection.order(sort)
90
- end
91
- collection
92
- end
93
- end
94
-
95
- module SingleContext
96
- protected
97
-
98
- def load_entity(identity: nil)
99
- identity ||= controller.params[:id]
100
- entity = entity_class.find(identity)
101
- if AdminIt::Env.pundit?
102
- controller.authorize(entity, "#{name}?")
103
- end
104
- if child?
105
- fields
106
- .select { |f| f.type == :relation &&
107
- f.assoc.klass == parent.entity_class }
108
- .each do |f|
109
- if f.assoc.collection?
110
- entity.send(f.name) << parent.entity
111
- else
112
- entity.send("#{f.name}=", parent.entity)
113
- end
114
- end
115
- end
116
- entity
117
- end
118
- end
119
-
120
- module SavableSingleContext
121
- protected
122
-
123
- def do_save_entity
124
- if AdminIt::Env.pundit?
125
- controller.authorize(entity, "#{self.class.save_action}?")
126
- end
127
- params = controller.params[resource.name]
128
- fields(scope: :writable).each do |field|
129
- next unless params.key?(field.name)
130
- next unless field.writable?
131
- next if field.type == :relation
132
- field.write(entity, params[field.name])
133
- end
134
- if entity.save
135
- controller.redirect_to_default
136
- end
137
- end
138
-
139
- def add_child_context(for_resource, context_class: :table)
140
- child_resource = AdminIt.resources[for_resource]
141
- return nil if child_resource.nil?
142
- child_resource[context_class].new(self)
143
- end
144
- end
145
-
146
- module NewContext
147
- def self.included(base)
148
- base.after_initialize do
149
- if child?
150
- fields
151
- .select { |f| f.type == :relation &&
152
- f.assoc.klass == parent.entity_class }
153
- .each do |f|
154
- if f.assoc.collection?
155
- entity.send(f.name) << parent.entity
156
- else
157
- entity.send("#{f.name}=", parent.entity)
158
- end
159
- f.visible = false
160
- end
161
- end
162
- end
163
- end
164
-
165
- protected
166
-
167
- def load_entity(identity: nil)
168
- entity = entity_class.new
169
- if AdminIt::Env.pundit?
170
- controller.authorize(entity, "#{name}?")
171
- end
172
- entity
173
- end
174
- end
175
-
176
- module ShowContext
177
- def identity
178
- entity.id
179
- end
180
-
181
- protected
182
-
183
- def do_destroy_entity
184
- if AdminIt::Env.pundit?
185
- controller.authorize(entity, :destroy?)
186
- end
187
- if entity.destroy
188
- controller.redirect_to_default
189
- end
190
- end
191
- end
192
-
193
- module EditContext
194
- def identity
195
- entity.id
196
- end
197
- end
198
-
199
- module TableContext
200
- def entities
201
- if @entities.count > page_size
202
- # limit collection to current page
203
- @entities = @entities
204
- .offset(page_size * (page - 1))
205
- .limit(page_size)
206
- end
207
- super
208
- end
209
- end
210
-
211
- module Field
212
- def self.included(base)
213
- base.class_eval do
214
- class << self
215
- attr_accessor :assoc
216
-
217
- protected
218
-
219
- def default_display_name
220
- entity_class.human_attribute_name(field_name)
221
- end
222
- end
223
- class_attr_reader :assoc
224
- end
225
- end
226
-
227
- protected
228
-
229
- def read_value(entity)
230
- value = entity.send(name)
231
- if type == :relation
232
- if assoc.collection?
233
- value.nil? || value.empty? ? [] : value.map(&:id).to_json
234
- else
235
- value.nil? ? nil : value.id
236
- end
237
- else
238
- value
239
- end
240
- end
241
-
242
- def show_value(entity)
243
- value = entity.send(name)
244
- if type == :relation
245
- resource = AdminIt.resources.values.find do |r|
246
- r.entity_class == assoc.klass
247
- end
248
- return I18n.t('admin_it.relation.no_resource') if resource.nil?
249
- context = resource.contexts.find { |c| c <= ShowContext }
250
- return I18n.t('admin_it.relation.no_context') if context.nil?
251
- if assoc.collection?
252
- if value.count == 0
253
- I18n.t('admin_it.collection.no_data')
254
- else
255
- v = context.read(value.first)
256
- v.nil? ? '' : context.read(value.first) + ' ...'
257
- end
258
- else
259
- context.read(value)
260
- end
261
- else
262
- value
263
- end
264
- end
265
-
266
- def write_value(entity, value)
267
- entity.send("#{name}=", value)
268
- end
269
- end
270
-
271
- module ValueFilter
272
- def all_values(collection = nil, &block)
273
- enum = Enumerator.new do |yielder|
274
- field
275
- .entity_class
276
- .select(self.class.field.field_name)
277
- .group(self.class.field.field_name)
278
- .count
279
- .each do |v, c|
280
- yielder << { value: v, count: c }
281
- end
282
- end
283
- block_given? ? enum.each(&block) : enum
284
- end
285
-
286
- def apply(collection)
287
- return collection if @values.empty?
288
- binding = []
289
- conditions = ''
290
- if @values.size == 1 && @values[0].nil?
291
- conditions = "#{field.field_name} IS NULL"
292
- else
293
- conditions = "#{field.field_name} IN (?)"
294
- binding << @values.select { |v| !v.nil? }
295
- if @values.any? { |v| v.nil? }
296
- conditions += " OR #{field.field_name} IS NULL"
297
- end
298
- end
299
- collection = collection.where(conditions, *binding)
300
- end
301
- end
1
+ if AdminIt::Env.active_record?
2
+ require File.join %w(admin_it data active_record resource)
3
+ require File.join %w(admin_it data active_record collection_context)
4
+ require File.join %w(admin_it data active_record single_context)
5
+ require File.join %w(admin_it data active_record field)
6
+ require File.join %w(admin_it data active_record filter)
7
+
8
+ #
9
+ module AdminIt
10
+ register_data ActiveRecord::Base, AdminIt::ActiveRecordData
302
11
  end
303
12
  end