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 +4 -4
- data/CHANGELOG.rdoc +16 -0
- data/app/assets/javascripts/jquery/date_picker_bridge.js.erb +9 -0
- data/lib/active_scaffold/actions/list.rb +2 -1
- data/lib/active_scaffold/actions/nested.rb +3 -3
- data/lib/active_scaffold/bridges/date_picker/helper.rb +2 -4
- data/lib/active_scaffold/bridges/paper_trail/actions.rb +1 -1
- data/lib/active_scaffold/tableless.rb +29 -16
- data/lib/active_scaffold/version.rb +1 -1
- data/test/misc/tableless_test.rb +3 -2
- data/test/mock_app/app/models/file_model.rb +12 -0
- data/vendor/assets/javascripts/jquery-ui-timepicker-addon.js +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9dfa34216419b18c65d503771afc1f0083561f5419963c858df2948b0c3e9ed2
|
4
|
+
data.tar.gz: c4f0d58b4dc6afee868718214fd725c2004898b903d90fd5b94b09133cea6294
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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
|
-
|
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
|
-
|
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
|
data/test/misc/tableless_test.rb
CHANGED
@@ -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
|
31
|
-
|
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.
|
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.
|
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:
|
11
|
+
date: 2023-02-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|