active_scaffold 3.2.9 → 3.2.10
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.
- data/CHANGELOG +7 -1
- data/app/assets/javascripts/jquery/active_scaffold.js +2 -2
- data/app/assets/javascripts/prototype/active_scaffold.js +2 -2
- data/lib/active_scaffold/actions/core.rb +1 -1
- data/lib/active_scaffold/actions/delete.rb +3 -1
- data/lib/active_scaffold/config/base.rb +1 -1
- data/lib/active_scaffold/constraints.rb +5 -2
- data/lib/active_scaffold/data_structures/action_columns.rb +0 -2
- data/lib/active_scaffold/data_structures/column.rb +2 -0
- data/lib/active_scaffold/finder.rb +8 -0
- data/lib/active_scaffold/helpers/view_helpers.rb +1 -5
- data/lib/active_scaffold/tableless.rb +66 -0
- data/lib/active_scaffold/version.rb +1 -1
- data/lib/active_scaffold_env.rb +3 -0
- metadata +5 -4
data/CHANGELOG
CHANGED
@@ -1,4 +1,10 @@
|
|
1
|
-
= 3.2.
|
1
|
+
= 3.2.10 (not released yet)
|
2
|
+
- fix nested scaffolds with update action disabled
|
3
|
+
- initial work for tableless support (index with limited options)
|
4
|
+
- fix scrolling on closing nested scaffolds
|
5
|
+
- fix calculations which were broken in 3.2.9
|
6
|
+
|
7
|
+
= 3.2.9
|
2
8
|
- remove duplicated conditions with constraints
|
3
9
|
- fix constraints for polymorphic associations
|
4
10
|
|
@@ -85,7 +85,7 @@ jQuery(document).ready(function() {
|
|
85
85
|
|
86
86
|
if (action_link) {
|
87
87
|
if (action_link.position) {
|
88
|
-
action_link.close(
|
88
|
+
action_link.close();
|
89
89
|
} else {
|
90
90
|
response.evalResponse();
|
91
91
|
}
|
@@ -931,7 +931,7 @@ ActiveScaffold.ActionLink.Abstract = Class.extend({
|
|
931
931
|
this.enable();
|
932
932
|
this.adapter.remove();
|
933
933
|
if (this.hide_target) this.target.show();
|
934
|
-
if (ActiveScaffold.config.scroll_on_close) ActiveScaffold.scroll_to(this.target, ActiveScaffold.config.scroll_on_close == 'checkInViewport');
|
934
|
+
if (ActiveScaffold.config.scroll_on_close) ActiveScaffold.scroll_to(this.target.attr('id'), ActiveScaffold.config.scroll_on_close == 'checkInViewport');
|
935
935
|
},
|
936
936
|
|
937
937
|
get_new_adapter_id: function() {
|
@@ -109,7 +109,7 @@ document.observe("dom:loaded", function() {
|
|
109
109
|
var action_link = ActiveScaffold.find_action_link(event.findElement());
|
110
110
|
if (action_link) {
|
111
111
|
if (action_link.position) {
|
112
|
-
action_link.close(
|
112
|
+
action_link.close();
|
113
113
|
} else {
|
114
114
|
event.memo.request.evalResponse();
|
115
115
|
}
|
@@ -819,7 +819,7 @@ ActiveScaffold.ActionLink.Abstract = Class.create({
|
|
819
819
|
this.enable();
|
820
820
|
this.adapter.remove();
|
821
821
|
if (this.hide_target) this.target.show();
|
822
|
-
if (ActiveScaffold.config.scroll_on_close) ActiveScaffold.scroll_to(this.target, ActiveScaffold.config.scroll_on_close == 'checkInViewport');
|
822
|
+
if (ActiveScaffold.config.scroll_on_close) ActiveScaffold.scroll_to(this.target.id, ActiveScaffold.config.scroll_on_close == 'checkInViewport');
|
823
823
|
},
|
824
824
|
|
825
825
|
get_new_adapter_id: function() {
|
@@ -50,9 +50,11 @@ module ActiveScaffold::Actions
|
|
50
50
|
begin
|
51
51
|
self.successful = @record.destroy
|
52
52
|
marked_records.delete @record.id.to_s if successful?
|
53
|
-
rescue
|
53
|
+
rescue Exception => ex
|
54
54
|
flash[:warning] = as_(:cant_destroy_record, :record => @record.to_label)
|
55
55
|
self.successful = false
|
56
|
+
logger.debug ex.message
|
57
|
+
logger.debug ex.backtrace.join("\n")
|
56
58
|
end
|
57
59
|
end
|
58
60
|
|
@@ -63,7 +63,7 @@ module ActiveScaffold::Config
|
|
63
63
|
private
|
64
64
|
|
65
65
|
def columns=(val)
|
66
|
-
@columns.set_values(*val) if @
|
66
|
+
@columns.set_values(*val) if @columns
|
67
67
|
@columns ||= ActiveScaffold::DataStructures::ActionColumns.new(*val).tap do |columns|
|
68
68
|
columns.action = self
|
69
69
|
columns.set_columns(@core.columns) if @columns.respond_to?(:set_columns)
|
@@ -16,8 +16,11 @@ module ActiveScaffold
|
|
16
16
|
constrained_fields ||= []
|
17
17
|
constrained_fields |= active_scaffold_constraints.reject{|k, v| v.is_a? Hash}.keys.collect(&:to_sym)
|
18
18
|
exclude_actions = []
|
19
|
-
|
20
|
-
|
19
|
+
[:list, :update].each do |action_name|
|
20
|
+
if active_scaffold_config.actions.include? action_name
|
21
|
+
exclude_actions << action_name unless active_scaffold_config.send(action_name).hide_nested_column
|
22
|
+
end
|
23
|
+
end
|
21
24
|
|
22
25
|
if self.class.uses_active_scaffold?
|
23
26
|
# we actually want to do this whether constrained_fields exist or not, so that we can reset the array when they don't
|
@@ -103,8 +103,6 @@ module ActiveScaffold::DataStructures
|
|
103
103
|
result = false
|
104
104
|
# skip if this matches a constrained column
|
105
105
|
result = true if constraint_columns.include?(column.name.to_sym)
|
106
|
-
# skip if this matches the field_name of a constrained column
|
107
|
-
result = true if column.field_name and constraint_columns.include?(column.field_name.to_sym)
|
108
106
|
# skip this field if it's not authorized
|
109
107
|
unless options[:for].authorized_for?(:action => options[:action], :crud_type => options[:crud_type] || self.action.crud_type, :column => column.name)
|
110
108
|
self.unauthorized_columns << column.name.to_sym
|
@@ -325,6 +325,14 @@ module ActiveScaffold
|
|
325
325
|
end
|
326
326
|
pager.page(options[:page])
|
327
327
|
end
|
328
|
+
|
329
|
+
def calculate(column)
|
330
|
+
conditions = all_conditions
|
331
|
+
includes = active_scaffold_config.list.count_includes
|
332
|
+
includes ||= active_scaffold_includes unless conditions.nil?
|
333
|
+
append_to_query(beginning_of_chain, :conditions => conditions, :includes => includes,
|
334
|
+
:joins => joins_for_collection).calculate(column.calculate, column.name)
|
335
|
+
end
|
328
336
|
|
329
337
|
def append_to_query(query, options)
|
330
338
|
options.assert_valid_keys :where, :select, :group, :reorder, :limit, :offset, :joins, :includes, :lock, :readonly, :from, :conditions
|
@@ -264,11 +264,7 @@ module ActiveScaffold
|
|
264
264
|
|
265
265
|
def column_calculation(column)
|
266
266
|
unless column.calculate.instance_of? Proc
|
267
|
-
|
268
|
-
includes = active_scaffold_config.list.count_includes
|
269
|
-
includes ||= controller.send(:active_scaffold_includes) unless conditions.nil?
|
270
|
-
calculation = beginning_of_chain.calculate(column.calculate, column.name, :conditions => conditions,
|
271
|
-
:joins => controller.send(:joins_for_collection), :include => includes)
|
267
|
+
calculate(column)
|
272
268
|
else
|
273
269
|
column.calculate.call(@records)
|
274
270
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
class ActiveScaffold::Tableless < ActiveRecord::Base
|
2
|
+
class Relation < ActiveRecord::Relation
|
3
|
+
attr_reader :conditions
|
4
|
+
def initialize(klass, table)
|
5
|
+
super
|
6
|
+
@conditions ||= []
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize_copy(other)
|
10
|
+
@conditions = @conditions.dup
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
def where(opts, *rest)
|
15
|
+
unless opts.blank?
|
16
|
+
opts = opts.with_indifferent_access if opts.is_a? Hash
|
17
|
+
@conditions << (rest.empty? ? opts : [opts, *rest])
|
18
|
+
end
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
def merge(r)
|
23
|
+
super.tap do |merged|
|
24
|
+
merged.conditions.concat r.conditions unless r.nil? || r.is_a?(Array)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def to_a
|
29
|
+
@klass.find_all(self)
|
30
|
+
end
|
31
|
+
|
32
|
+
def find_one(id)
|
33
|
+
@klass.find_one(id, self)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.columns; @columns ||= []; end
|
38
|
+
def self.table_name; @table_name ||= ActiveModel::Naming.plural(self); end
|
39
|
+
def self.connection; nil; end
|
40
|
+
def self.table_exists?; true; end
|
41
|
+
self.abstract_class = true
|
42
|
+
class << self
|
43
|
+
private
|
44
|
+
def relation
|
45
|
+
@relation ||= ActiveScaffold::Tableless::Relation.new(self, arel_table)
|
46
|
+
super
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.column(name, sql_type = nil, options = {})
|
51
|
+
column = ActiveRecord::ConnectionAdapters::Column.new(name.to_s, options[:default], sql_type.to_s, options.has_key?(:null) ? options[:null] : true)
|
52
|
+
column.tap { columns << column }
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.find_all(relation)
|
56
|
+
raise 'self.find_all must be implemented in a Tableless model'
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.find_one(id, relation)
|
60
|
+
raise 'self.find_one must be implemented in a Tableless model'
|
61
|
+
end
|
62
|
+
|
63
|
+
def destroy
|
64
|
+
raise 'destroy must be implemented in a Tableless model'
|
65
|
+
end
|
66
|
+
end
|
data/lib/active_scaffold_env.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# TODO: clean up extensions. some could be organized for autoloading, and others could be removed entirely.
|
2
2
|
Dir["#{File.dirname __FILE__}/active_scaffold/extensions/*.rb"].each { |file| require file }
|
3
|
+
module ActiveScaffold
|
4
|
+
autoload :Tableless, 'active_scaffold/tableless'
|
5
|
+
end
|
3
6
|
|
4
7
|
ActionController::Base.send(:include, ActiveScaffold)
|
5
8
|
ActionController::Base.send(:include, RespondsToParent)
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_scaffold
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 3.2.
|
9
|
+
- 10
|
10
|
+
version: 3.2.10
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Many, see README
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-05-
|
18
|
+
date: 2012-05-23 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
type: :development
|
@@ -303,6 +303,7 @@ files:
|
|
303
303
|
- lib/active_scaffold/marked_model.rb
|
304
304
|
- lib/active_scaffold/paginator.rb
|
305
305
|
- lib/active_scaffold/responds_to_parent.rb
|
306
|
+
- lib/active_scaffold/tableless.rb
|
306
307
|
- lib/active_scaffold/version.rb
|
307
308
|
- lib/active_scaffold_env.rb
|
308
309
|
- lib/generators/active_scaffold/USAGE
|