active_scaffold 3.6.14 → 3.6.17

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 79509054cd67e6f4f1313ed2ee14a1f9eb64306cfbc3e20f5385af23f44edc90
4
- data.tar.gz: 2490e6858effd4cb04634f8bebf868318dc807ef01cc3f1b7f9b4b34652f2f9f
3
+ metadata.gz: 9dfa34216419b18c65d503771afc1f0083561f5419963c858df2948b0c3e9ed2
4
+ data.tar.gz: c4f0d58b4dc6afee868718214fd725c2004898b903d90fd5b94b09133cea6294
5
5
  SHA512:
6
- metadata.gz: 5719da364b955e1fce7c1f1e7fc383a4ada1313a69334c6bfddfc1960a1960d5aa05ed6b6054d7eba52390d7b70984930b84dc06162d96ffca01565c15dacbd4
7
- data.tar.gz: cc9ed4db3c9c24b741a2fee4ee1f38dfa636ea607190c66b0d2e9fb99685b542bda602093945427defc47c22a24f726503e017ab65c17e03b3b63d093a29e461
6
+ metadata.gz: bfc6d60cb5e2df8fbc367ca6854c173ad94b04bd4309e430ff9c61351ebfe17c3162e50f8c9e6409ad722b8e8298cca8f9da28f9ba0dcc2f3b51e64b114a4844
7
+ data.tar.gz: ae5b110172f4479df2c3456061a17e289ab222b3143135893c4866d4f3f04f74d1c873e07e71262c992c946450bdabe7f7b9457dd1b15bdbfa5ac2db1e9fa92f
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,19 @@
1
+ = 3.6.17
2
+ - Don't add includes or left joins for constrained columns, as they are ignored on sorting clause
3
+ - Fix deprecation on cache counts with rails 5, and fix the queries for rails >= 5.1
4
+ - Fix new for tableless models on rails 5.0
5
+
6
+ = 3.6.16
7
+ - Fix query on paper_trail action
8
+ - Fix one? on tableless relation
9
+ - Fix exists? on tableless relation
10
+ - Fix getting conditions from association in the tableless relation
11
+
12
+ = 3.6.15
13
+ - Prevent firing 2 change events on jquery datetime pickers
14
+ - Fix setting data options on columns for date and datetime pickers
15
+
16
+ = 3.6.14
1
17
  - Fix setting data on html_options when threadsafe is enabled
2
18
  - Fill nested association on render field, as done in new action
3
19
 
@@ -41,3 +41,12 @@ jQuery(document).on("focus", "input.datetime_picker", function(){
41
41
  }
42
42
  return true;
43
43
  });
44
+
45
+ jQuery(document).on('change', 'input.datetime_picker', function(e) {
46
+ var $this = $(this);
47
+ if ($this.data('first-event')) $this.removeData('first-event');
48
+ else {
49
+ $this.data('first-event', true);
50
+ e.stopImmediatePropagation();
51
+ }
52
+ });
@@ -83,6 +83,7 @@ module ActiveScaffold::Actions
83
83
 
84
84
  def set_includes_for_sorting(columns, sorting)
85
85
  sorting.each_column do |col|
86
+ next if sorting.constraint_columns.include? col.name
86
87
  next unless col.includes.present? && !columns.include?(col)
87
88
  if active_scaffold_config.model.connection.needs_order_expressions_in_select?
88
89
  active_scaffold_references << col.includes
@@ -176,7 +177,7 @@ module ActiveScaffold::Actions
176
177
  query = active_scaffold_config.model.where(active_scaffold_config.primary_key => records.map(&:id))
177
178
  .joins(column.name).group(active_scaffold_config.primary_key)
178
179
  .select("#{klass.quoted_table_name}.#{klass.quoted_primary_key}")
179
- query = query.uniq if column.association.scope && klass.instance_exec(&column.association.scope).values[:distinct]
180
+ query = query.distinct if column.association.scope && klass.instance_exec(&column.association.scope).values[:distinct]
180
181
  query
181
182
  end
182
183
 
@@ -118,15 +118,15 @@ module ActiveScaffold::Actions
118
118
  @nested_parent_record ||= find_if_allowed(nested.parent_id, crud, nested.parent_model)
119
119
  end
120
120
 
121
- def create_association_with_parent?
121
+ def create_association_with_parent?(check_match = false)
122
122
  # has_many is done by beginning_of_chain and rails if direct association, not in through associations
123
123
  return false if nested.has_many? && !nested.association.through?
124
+ return false if check_match && !nested.match_model?(active_scaffold_config.model)
124
125
  nested.child_association && nested_parent_record
125
126
  end
126
127
 
127
128
  def create_association_with_parent(record, check_match = false)
128
- return unless create_association_with_parent?
129
- return if check_match && !nested.match_model?(active_scaffold_config.model)
129
+ return unless create_association_with_parent?(check_match)
130
130
  if nested.child_association.singular?
131
131
  record.send("#{nested.child_association.name}=", nested_parent_record)
132
132
  elsif nested.association.through_singular? && nested.child_association.through_singular?
@@ -160,8 +160,7 @@ module ActiveScaffold::Bridges
160
160
  format = datepicker_format(options, column.search_ui)
161
161
  options[:class] << " #{column.search_ui}"
162
162
  options[:style] = 'display: none' if options[:show] == false # hide only if asked to hide
163
- options[:data] ||= {}
164
- options[:data].merge! datepicker_format_options(column, format)
163
+ options[:data] = datepicker_format_options(column, format).reverse_merge!(options[:data] || {})
165
164
  value = l(value, :format => format) if value
166
165
  options = options.merge(:id => "#{options[:id]}_#{name}", :name => "#{options[:name]}[#{name}]", :object => nil)
167
166
  text_field_tag("#{options[:name]}[#{name}]", value, options)
@@ -176,8 +175,7 @@ module ActiveScaffold::Bridges
176
175
 
177
176
  format = datepicker_format(options, column.form_ui)
178
177
  value = controller.class.condition_value_for_datetime(column, record.send(column.name), column.form_ui == :date_picker ? :to_date : :to_time)
179
- options[:data] ||= {}
180
- options[:data].merge! datepicker_format_options(column, format)
178
+ options[:data] = datepicker_format_options(column, format).reverse_merge!(options[:data] || {})
181
179
  options[:value] = (value ? l(value, :format => format) : nil)
182
180
  text_field(:record, column.name, options)
183
181
  end
@@ -10,7 +10,7 @@ module ActiveScaffold::Actions
10
10
  end
11
11
 
12
12
  def deleted
13
- query = PaperTrail::Version.destroys.where(:item_type => active_scaffold_config.model)
13
+ query = PaperTrail::Version.destroys.where(:item_type => active_scaffold_config.model.name)
14
14
  if nested? && nested.child_association&.belongs_to? && PaperTrail::Version.respond_to?(:where_object)
15
15
  query = query.where_object(nested.child_association.foreign_key => nested.parent_id)
16
16
  end
@@ -76,6 +76,10 @@ class ActiveScaffold::Tableless < ActiveRecord::Base # rubocop:disable Rails/App
76
76
  super.tap do |scope|
77
77
  if klass < ActiveScaffold::Tableless
78
78
  class << scope; include RelationExtension; end
79
+ assoc_conditions = scope.proxy_association&.send(:association_scope)&.conditions
80
+ if assoc_conditions&.present?
81
+ scope.conditions.concat assoc_conditions.map { |c| c.is_a?(Hash) ? c[klass.table_name] || c : c }
82
+ end
79
83
  end
80
84
  end
81
85
  end
@@ -112,8 +116,6 @@ class ActiveScaffold::Tableless < ActiveRecord::Base # rubocop:disable Rails/App
112
116
  end
113
117
 
114
118
  module RelationExtension
115
- attr_reader :conditions
116
-
117
119
  def initialize(klass, *)
118
120
  super
119
121
  @conditions ||= []
@@ -124,6 +126,10 @@ class ActiveScaffold::Tableless < ActiveRecord::Base # rubocop:disable Rails/App
124
126
  super
125
127
  end
126
128
 
129
+ def conditions
130
+ @conditions ||= []
131
+ end
132
+
127
133
  def where(opts, *rest)
128
134
  if opts.present?
129
135
  opts = opts.with_indifferent_access if opts.is_a? Hash
@@ -131,6 +137,7 @@ class ActiveScaffold::Tableless < ActiveRecord::Base # rubocop:disable Rails/App
131
137
  end
132
138
  self
133
139
  end
140
+ alias where! where
134
141
 
135
142
  def merge(rel)
136
143
  super.tap do |merged|
@@ -140,14 +147,13 @@ class ActiveScaffold::Tableless < ActiveRecord::Base # rubocop:disable Rails/App
140
147
 
141
148
  def except(*skips)
142
149
  super.tap do |new_relation|
143
- new_relation.conditions = conditions unless skips.include? :where
150
+ unless new_relation.is_a?(RelationExtension)
151
+ class << new_relation; include RelationExtension; end
152
+ end
153
+ new_relation.conditions.concat conditions unless skips.include? :where
144
154
  end
145
155
  end
146
156
 
147
- def to_a
148
- @klass.find_all(self)
149
- end
150
-
151
157
  def find_one(id)
152
158
  @klass.find_one(id, self) || raise(ActiveRecord::RecordNotFound)
153
159
  end
@@ -161,7 +167,14 @@ class ActiveScaffold::Tableless < ActiveRecord::Base # rubocop:disable Rails/App
161
167
  end
162
168
 
163
169
  def exists?
164
- limit(1).to_a.present?
170
+ size > 0
171
+ end
172
+
173
+ private
174
+ def exec_queries
175
+ @records = @klass.find_all(self)
176
+ @loaded = true
177
+ @records
165
178
  end
166
179
  end
167
180
 
@@ -203,15 +216,15 @@ class ActiveScaffold::Tableless < ActiveRecord::Base # rubocop:disable Rails/App
203
216
  end
204
217
  end
205
218
  end
206
-
207
- def self.columns_hash
208
- if self < ActiveScaffold::Tableless
209
- @columns_hash ||= Hash[columns.map { |c| [c.name, c] }]
210
- else
211
- super
212
- end
213
- end
214
219
  if Rails.version < '5.0' # 4.2.x
220
+ def self.columns_hash
221
+ if self < ActiveScaffold::Tableless
222
+ @columns_hash ||= Hash[columns.map { |c| [c.name, c] }]
223
+ else
224
+ super
225
+ end
226
+ end
227
+
215
228
  def self.initialize_find_by_cache
216
229
  self.find_by_statement_cache = Hash.new { |h, k| h[k] = StatementCache.new(k) } # rubocop:disable Rails/DynamicFindBy
217
230
  end
@@ -2,7 +2,7 @@ module ActiveScaffold
2
2
  module Version
3
3
  MAJOR = 3
4
4
  MINOR = 6
5
- PATCH = 14
5
+ PATCH = 17
6
6
 
7
7
  STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
8
  end
@@ -27,8 +27,9 @@ class TablelessTest < MiniTest::Test
27
27
  assert Person.new.files.empty?
28
28
  @person = Person.new
29
29
  @person.save(validate: false)
30
- assert @person.files.empty?
31
- assert_equal [], @person.files.to_a
30
+ assert !@person.files.empty?
31
+ assert @person.files.all.exists?
32
+ assert_equal @person.id, @person.files.first.person_id
32
33
  end
33
34
 
34
35
  def test_tableless_assoc_with_dependent
@@ -6,6 +6,18 @@ class FileModel < ActiveScaffold::Tableless
6
6
  belongs_to :person
7
7
 
8
8
  def self.find_all(relation)
9
+ relation.conditions&.each&.with_index do |condition, i|
10
+ person_id =
11
+ case condition
12
+ when Hash
13
+ condition[:person_id]
14
+ when Arel::Nodes::Equality
15
+ if condition.left.name.to_sym == :person_id
16
+ relation.bind_values[i].present? ? relation.bind_values[i][1] : condition.right.first
17
+ end
18
+ end
19
+ return [new(person_id: person_id)] if person_id
20
+ end
9
21
  []
10
22
  end
11
23
 
@@ -174,8 +174,8 @@
174
174
 
175
175
  for (var attrName in this._defaults) {
176
176
  if (this._defaults.hasOwnProperty(attrName)) {
177
- var attrValue = $input.attr('time:' + attrName);
178
- if (attrValue) {
177
+ var attrValue = $input.data(attrName.toLowerCase());
178
+ if (attrValue !== undefined) {
179
179
  try {
180
180
  inlineSettings[attrName] = eval(attrValue);
181
181
  } catch (err) {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_scaffold
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.6.14
4
+ version: 3.6.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Many, see README
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-02 00:00:00.000000000 Z
11
+ date: 2023-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails