active_scaffold 3.3.3 → 3.4.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.
- checksums.yaml +4 -4
- data/CHANGELOG +39 -0
- data/README.md +5 -3
- data/app/assets/images/active_scaffold/refresh.png +0 -0
- data/app/assets/javascripts/jquery/active_scaffold.js +182 -91
- data/app/assets/javascripts/jquery/date_picker_bridge.js.erb +14 -16
- data/app/assets/javascripts/jquery/draggable_lists.js +33 -26
- data/app/assets/javascripts/jquery/jquery.editinplace.js +3 -3
- data/app/assets/javascripts/prototype/active_scaffold.js +61 -19
- data/app/assets/stylesheets/active_scaffold_colors.css.scss +4 -0
- data/app/assets/stylesheets/active_scaffold_images.css.scss +3 -0
- data/app/assets/stylesheets/active_scaffold_layout.css +23 -2
- data/app/views/active_scaffold_overrides/_add_existing_form.html.erb +1 -3
- data/app/views/active_scaffold_overrides/_base_form.html.erb +7 -5
- data/app/views/active_scaffold_overrides/_field_search.html.erb +1 -2
- data/app/views/active_scaffold_overrides/_form.html.erb +6 -4
- data/app/views/active_scaffold_overrides/_form_association.html.erb +4 -3
- data/app/views/active_scaffold_overrides/_form_association_footer.html.erb +5 -5
- data/app/views/active_scaffold_overrides/_form_association_record.html.erb +8 -6
- data/app/views/active_scaffold_overrides/_horizontal_subform_header.html.erb +3 -2
- data/app/views/active_scaffold_overrides/_list.html.erb +8 -6
- data/app/views/active_scaffold_overrides/_list_column_headings.html.erb +1 -4
- data/app/views/active_scaffold_overrides/_list_pagination.html.erb +4 -4
- data/app/views/active_scaffold_overrides/_list_pagination_links.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_list_record.html.erb +3 -3
- data/app/views/active_scaffold_overrides/_refresh_list.js.erb +8 -1
- data/app/views/active_scaffold_overrides/_search.html.erb +7 -13
- data/app/views/active_scaffold_overrides/_show_columns.html.erb +1 -1
- data/app/views/active_scaffold_overrides/on_create.js.erb +4 -4
- data/app/views/active_scaffold_overrides/render_field_inplace.html.erb +1 -1
- data/app/views/active_scaffold_overrides/row.js.erb +1 -1
- data/config/locales/de.yml +106 -95
- data/config/locales/en.yml +108 -97
- data/config/locales/es.yml +109 -98
- data/config/locales/fr.yml +108 -97
- data/config/locales/hu.yml +109 -98
- data/config/locales/ja.yml +100 -89
- data/config/locales/ru.yml +115 -104
- data/lib/active_scaffold.rb +18 -294
- data/lib/active_scaffold/actions/common_search.rb +50 -17
- data/lib/active_scaffold/actions/core.rb +93 -22
- data/lib/active_scaffold/actions/create.rb +15 -6
- data/lib/active_scaffold/actions/field_search.rb +68 -60
- data/lib/active_scaffold/actions/list.rb +49 -28
- data/lib/active_scaffold/actions/nested.rb +14 -6
- data/lib/active_scaffold/actions/search.rb +36 -35
- data/lib/active_scaffold/actions/show.rb +9 -4
- data/lib/active_scaffold/actions/subform.rb +1 -1
- data/lib/active_scaffold/actions/update.rb +22 -7
- data/lib/active_scaffold/active_record_permissions.rb +125 -118
- data/lib/active_scaffold/attribute_params.rb +84 -66
- data/lib/active_scaffold/bridges.rb +3 -3
- data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +10 -5
- data/lib/active_scaffold/bridges/cancan.rb +2 -1
- data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +13 -2
- data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +11 -6
- data/lib/active_scaffold/bridges/chosen/helpers.rb +2 -2
- data/lib/active_scaffold/bridges/country_helper/country_helper_bridge.rb +45 -29
- data/lib/active_scaffold/bridges/date_picker/ext.rb +11 -6
- data/lib/active_scaffold/bridges/date_picker/helper.rb +5 -1
- data/lib/active_scaffold/bridges/dragonfly/form_ui.rb +10 -5
- data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +6 -1
- data/lib/active_scaffold/bridges/file_column/form_ui.rb +12 -11
- data/lib/active_scaffold/bridges/paperclip/form_ui.rb +14 -6
- data/lib/active_scaffold/bridges/paperclip/list_ui.rb +1 -1
- data/lib/active_scaffold/bridges/record_select/helpers.rb +15 -12
- data/lib/active_scaffold/bridges/shared/date_bridge.rb +7 -8
- data/lib/active_scaffold/bridges/tiny_mce.rb +5 -3
- data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +4 -5
- data/lib/active_scaffold/config/base.rb +4 -0
- data/lib/active_scaffold/config/core.rb +12 -5
- data/lib/active_scaffold/config/delete.rb +0 -2
- data/lib/active_scaffold/config/field_search.rb +1 -4
- data/lib/active_scaffold/config/form.rb +0 -2
- data/lib/active_scaffold/config/list.rb +31 -1
- data/lib/active_scaffold/config/search.rb +0 -3
- data/lib/active_scaffold/config/show.rb +0 -6
- data/lib/active_scaffold/config/subform.rb +1 -0
- data/lib/active_scaffold/configurable.rb +2 -2
- data/lib/active_scaffold/constraints.rb +11 -14
- data/lib/active_scaffold/core.rb +277 -0
- data/lib/active_scaffold/data_structures/action_columns.rb +18 -2
- data/lib/active_scaffold/data_structures/action_link.rb +25 -6
- data/lib/active_scaffold/data_structures/action_links.rb +9 -4
- data/lib/active_scaffold/data_structures/actions.rb +1 -1
- data/lib/active_scaffold/data_structures/column.rb +6 -6
- data/lib/active_scaffold/data_structures/columns.rb +2 -2
- data/lib/active_scaffold/data_structures/nested_info.rb +5 -1
- data/lib/active_scaffold/data_structures/sorting.rb +15 -5
- data/lib/active_scaffold/delayed_setup.rb +30 -0
- data/lib/active_scaffold/engine.rb +25 -0
- data/lib/active_scaffold/extensions/action_view_rendering.rb +1 -1
- data/lib/active_scaffold/extensions/left_outer_joins.rb +61 -21
- data/lib/active_scaffold/extensions/localize.rb +1 -1
- data/lib/active_scaffold/extensions/name_option_for_datetime.rb +13 -8
- data/lib/active_scaffold/extensions/paginator_extensions.rb +5 -1
- data/lib/active_scaffold/extensions/reverse_associations.rb +1 -0
- data/lib/active_scaffold/extensions/routing_mapper.rb +1 -1
- data/lib/active_scaffold/extensions/unsaved_record.rb +4 -6
- data/lib/active_scaffold/finder.rb +79 -27
- data/lib/active_scaffold/helpers/association_helpers.rb +48 -18
- data/lib/active_scaffold/helpers/controller_helpers.rb +19 -10
- data/lib/active_scaffold/helpers/form_column_helpers.rb +185 -87
- data/lib/active_scaffold/helpers/human_condition_helpers.rb +2 -1
- data/lib/active_scaffold/helpers/id_helpers.rb +14 -8
- data/lib/active_scaffold/helpers/list_column_helpers.rb +65 -56
- data/lib/active_scaffold/helpers/pagination_helpers.rb +5 -1
- data/lib/active_scaffold/helpers/search_column_helpers.rb +21 -18
- data/lib/active_scaffold/helpers/view_helpers.rb +102 -64
- data/lib/active_scaffold/responds_to_parent.rb +39 -64
- data/lib/active_scaffold/tableless.rb +129 -10
- data/lib/active_scaffold/version.rb +2 -2
- data/test/bridges/bridge_test.rb +1 -1
- data/test/bridges/date_picker_test.rb +2 -2
- data/test/bridges/paperclip_test.rb +10 -8
- data/test/bridges/tiny_mce_test.rb +2 -2
- data/test/company.rb +22 -10
- data/test/config/base_test.rb +1 -1
- data/test/config/core_test.rb +8 -6
- data/test/config/create_test.rb +6 -6
- data/test/config/delete_test.rb +4 -4
- data/test/config/field_search_test.rb +6 -6
- data/test/config/list_test.rb +7 -7
- data/test/config/nested_test.rb +8 -7
- data/test/config/search_test.rb +7 -7
- data/test/config/show_test.rb +5 -5
- data/test/config/subform_test.rb +1 -1
- data/test/config/update_test.rb +5 -4
- data/test/data_structures/action_columns_test.rb +15 -16
- data/test/data_structures/action_link_test.rb +10 -10
- data/test/data_structures/action_links_test.rb +6 -6
- data/test/data_structures/actions_test.rb +4 -4
- data/test/data_structures/association_column_test.rb +4 -4
- data/test/data_structures/column_test.rb +9 -9
- data/test/data_structures/columns_test.rb +7 -7
- data/test/data_structures/error_message_test.rb +2 -4
- data/test/data_structures/set_test.rb +13 -13
- data/test/data_structures/sorting_test.rb +8 -8
- data/test/data_structures/standard_column_test.rb +2 -2
- data/test/data_structures/validation_reflection_test.rb +8 -8
- data/test/data_structures/virtual_column_test.rb +5 -5
- data/test/extensions/active_record_test.rb +1 -1
- data/test/helpers/form_column_helpers_test.rb +5 -5
- data/test/helpers/list_column_helpers_test.rb +2 -1
- data/test/helpers/pagination_helpers_test.rb +1 -1
- data/test/misc/active_record_permissions_test.rb +23 -4
- data/test/misc/attribute_params_test.rb +304 -136
- data/test/misc/calculation_test.rb +55 -0
- data/test/misc/configurable_test.rb +22 -21
- data/test/misc/constraints_test.rb +10 -7
- data/test/misc/convert_numbers_format_test.rb +149 -0
- data/test/misc/finder_test.rb +17 -13
- data/test/misc/lang_test.rb +1 -1
- data/test/misc/tableless_test.rb +18 -0
- data/test/mock_app/app/controllers/addresses_controller.rb +4 -0
- data/test/mock_app/app/controllers/buildings_controller.rb +4 -0
- data/test/mock_app/app/controllers/cars_controller.rb +4 -0
- data/test/mock_app/app/controllers/contacts_controller.rb +4 -0
- data/test/mock_app/app/controllers/floors_controller.rb +6 -0
- data/test/mock_app/app/controllers/people_controller.rb +4 -0
- data/test/mock_app/app/models/address.rb +3 -0
- data/test/mock_app/app/models/building.rb +8 -0
- data/test/mock_app/app/models/car.rb +3 -0
- data/test/mock_app/app/models/contact.rb +3 -0
- data/test/mock_app/app/models/file_model.rb +19 -0
- data/test/mock_app/app/models/floor.rb +8 -0
- data/test/mock_app/app/models/person.rb +11 -0
- data/test/mock_app/config/application.rb +2 -0
- data/test/mock_app/config/environments/test.rb +1 -1
- data/test/mock_app/config/initializers/secret_token.rb +5 -1
- data/test/mock_app/config/routes.rb +1 -1
- data/test/mock_app/db/schema.rb +51 -0
- data/test/model_stub.rb +3 -3
- data/test/test_helper.rb +15 -12
- metadata +51 -50
- data/lib/active_scaffold/extensions/array.rb +0 -7
- data/lib/active_scaffold/extensions/cache_association.rb +0 -16
- data/lib/active_scaffold/extensions/usa_state.rb +0 -46
- data/lib/active_scaffold_env.rb +0 -13
- data/test/extensions/array_test.rb +0 -12
- data/test/mock_app/public/blank.html +0 -33
- data/test/mock_app/public/images/active_scaffold/DO_NOT_EDIT +0 -2
- data/test/mock_app/public/images/active_scaffold/default/add.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/arrow_down.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/arrow_up.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/close.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/cross.png +0 -0
- data/test/mock_app/public/images/active_scaffold/default/indicator-small.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/indicator.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/magnifier.png +0 -0
- data/test/mock_app/public/javascripts/active_scaffold/DO_NOT_EDIT +0 -2
- data/test/mock_app/public/javascripts/active_scaffold/default/active_scaffold.js +0 -532
- data/test/mock_app/public/javascripts/active_scaffold/default/dhtml_history.js +0 -867
- data/test/mock_app/public/javascripts/active_scaffold/default/form_enhancements.js +0 -117
- data/test/mock_app/public/javascripts/active_scaffold/default/rico_corner.js +0 -370
- data/test/mock_app/public/stylesheets/active_scaffold/DO_NOT_EDIT +0 -2
- data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet-ie.css +0 -35
- data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet.css +0 -848
|
@@ -1,70 +1,45 @@
|
|
|
1
|
-
|
|
2
|
-
#
|
|
3
|
-
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
# the following conditions:
|
|
10
|
-
#
|
|
11
|
-
# The above copyright notice and this permission notice shall be
|
|
12
|
-
# included in all copies or substantial portions of the Software.
|
|
13
|
-
#
|
|
14
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
-
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
-
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
-
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
-
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
-
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
-
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
1
|
+
module ActiveScaffold
|
|
2
|
+
# Module containing the methods useful for child IFRAME to parent window communication
|
|
3
|
+
module RespondsToParent
|
|
4
|
+
# Executes the response body as JavaScript in the context of the parent window.
|
|
5
|
+
# Use this method of you are posting a form to a hidden IFRAME or if you would like
|
|
6
|
+
# to use IFRAME base RPC.
|
|
7
|
+
def responds_to_parent(&block)
|
|
8
|
+
yield
|
|
21
9
|
|
|
10
|
+
if performed?
|
|
11
|
+
# Either pull out a redirect or the request body
|
|
12
|
+
script = if response.headers['Location']
|
|
13
|
+
#TODO: erase_redirect_results is missing in rails 3.0
|
|
14
|
+
"document.location.href = '#{self.class.helpers.escape_javascript location.to_s}'"
|
|
15
|
+
else
|
|
16
|
+
response.body || ''
|
|
17
|
+
end
|
|
22
18
|
|
|
23
|
-
#
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
# We're returning HTML instead of JS or XML now
|
|
34
|
-
response.headers['Content-Type'] = 'text/html; charset=UTF-8'
|
|
35
|
-
|
|
36
|
-
# Either pull out a redirect or the request body
|
|
37
|
-
script = if response.headers['Location']
|
|
38
|
-
#TODO: erase_redirect_results is missing in rails 3.0 has to be implemented
|
|
39
|
-
#erase redirect
|
|
40
|
-
"document.location.href = #{location.to_s.inspect}"
|
|
41
|
-
else
|
|
42
|
-
response.body
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# Escape quotes, linebreaks and slashes, maintaining previously escaped slashes
|
|
46
|
-
# Suggestions for improvement?
|
|
47
|
-
script = (script || '').
|
|
48
|
-
gsub('\\', '\\\\\\').
|
|
49
|
-
gsub(/\r\n|\r|\n/, '\\n').
|
|
50
|
-
gsub(/['"]/, '\\\\\&').
|
|
51
|
-
gsub('</script>','</scr"+"ipt>')
|
|
19
|
+
# Eval in parent scope and replace document location of this frame
|
|
20
|
+
# so back button doesn't replay action on targeted forms
|
|
21
|
+
# loc = document.location to be set after parent is updated for IE
|
|
22
|
+
# with(window.parent) - pull in variables from parent window
|
|
23
|
+
# setTimeout - scope the execution in the windows parent for safari
|
|
24
|
+
# window.eval - legal eval for Opera
|
|
25
|
+
script = "<html><body><script type='text/javascript' charset='utf-8'>
|
|
26
|
+
var loc = document.location;
|
|
27
|
+
with(window.parent) { setTimeout(function() { window.eval('#{self.class.helpers.escape_javascript script}'); window.loc && loc.replace('about:blank'); }, 1) }
|
|
28
|
+
</script></body></html>"
|
|
52
29
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
</script></body></html>".html_safe
|
|
30
|
+
# We're returning HTML instead of JS or XML now
|
|
31
|
+
response.headers['Content-Type'] = 'text/html; charset=UTF-8'
|
|
32
|
+
|
|
33
|
+
# Clear out the previous render to prevent double render and then render
|
|
34
|
+
if respond_to?(:erase_results, true)
|
|
35
|
+
erase_results
|
|
36
|
+
else
|
|
37
|
+
instance_variable_set(:@_response_body, nil)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
render :text => script
|
|
41
|
+
end
|
|
66
42
|
end
|
|
43
|
+
alias respond_to_parent responds_to_parent
|
|
67
44
|
end
|
|
68
|
-
alias respond_to_parent responds_to_parent
|
|
69
45
|
end
|
|
70
|
-
|
|
@@ -1,13 +1,99 @@
|
|
|
1
1
|
class ActiveScaffold::Tableless < ActiveRecord::Base
|
|
2
|
-
class
|
|
3
|
-
|
|
2
|
+
class AssociationScope < ActiveRecord::Associations::AssociationScope
|
|
3
|
+
def column_for(table_name, column_name, alias_tracker = nil)
|
|
4
|
+
klass = alias_tracker ? alias_tracker.connection.klass : self.klass
|
|
5
|
+
if table_name == klass.table_name
|
|
6
|
+
klass.columns_hash[column_name]
|
|
7
|
+
else
|
|
8
|
+
super
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
if defined?(ActiveRecord::Associations::AssociationScope::INSTANCE) # rails >= 4.1
|
|
13
|
+
INSTANCE = respond_to?(:create) ? create : new # create for rails >= 4.2
|
|
14
|
+
def self.scope(association, connection)
|
|
15
|
+
INSTANCE.scope association, connection
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class Connection < ActiveRecord::ConnectionAdapters::AbstractAdapter
|
|
21
|
+
attr_reader :klass
|
|
22
|
+
def initialize(klass, *args)
|
|
23
|
+
super(nil, *args)
|
|
24
|
+
@klass = klass
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class Column < ActiveRecord::ConnectionAdapters::Column
|
|
29
|
+
def initialize(name, default, sql_type = nil, null = true)
|
|
30
|
+
if defined?(ActiveRecord::ConnectionAdapters::Type) # rails >= 4.2
|
|
31
|
+
cast_type = ActiveRecord::Base.connection.send :lookup_cast_type, sql_type
|
|
32
|
+
super(name, default, cast_type, sql_type, null)
|
|
33
|
+
else # rails < 4.2
|
|
34
|
+
super
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
module Association
|
|
40
|
+
def self.included(base)
|
|
41
|
+
base.alias_method_chain :association_scope, :tableless
|
|
42
|
+
base.alias_method_chain :target_scope, :tableless
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def association_scope_with_tableless
|
|
46
|
+
@association_scope ||= overrided_association_scope if klass < ActiveScaffold::Tableless
|
|
47
|
+
association_scope_without_tableless
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def overrided_association_scope
|
|
51
|
+
if AssociationScope.respond_to?(:scope) # rails >= 4.1
|
|
52
|
+
AssociationScope.scope(self, klass.connection)
|
|
53
|
+
else # rails < 4.1
|
|
54
|
+
AssociationScope.new(self).scope
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def target_scope_with_tableless
|
|
59
|
+
target_scope_without_tableless.tap do |scope|
|
|
60
|
+
if klass < ActiveScaffold::Tableless
|
|
61
|
+
class << scope; include RelationExtension; end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
module CollectionAssociation
|
|
68
|
+
def self.included(base)
|
|
69
|
+
base.alias_method_chain :get_records, :tableless if Rails.version >= '4.2'
|
|
70
|
+
end
|
|
71
|
+
def get_records_with_tableless
|
|
72
|
+
klass < ActiveScaffold::Tableless ? scope.to_a : get_records_without_tableless
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
module SingularAssociation
|
|
77
|
+
def self.included(base)
|
|
78
|
+
base.alias_method_chain :get_records, :tableless if Rails.version >= '4.2'
|
|
79
|
+
end
|
|
80
|
+
def get_records_with_tableless
|
|
81
|
+
klass < ActiveScaffold::Tableless ? scope.limit(1).to_a : get_records_without_tableless
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
module RelationExtension
|
|
86
|
+
def conditions
|
|
87
|
+
@conditions
|
|
88
|
+
end
|
|
89
|
+
|
|
4
90
|
def initialize(klass, table)
|
|
5
91
|
super
|
|
6
92
|
@conditions ||= []
|
|
7
93
|
end
|
|
8
94
|
|
|
9
95
|
def initialize_copy(other)
|
|
10
|
-
@conditions = @conditions.dup
|
|
96
|
+
@conditions = @conditions.try(:dup) || []
|
|
11
97
|
super
|
|
12
98
|
end
|
|
13
99
|
|
|
@@ -44,10 +130,9 @@ class ActiveScaffold::Tableless < ActiveRecord::Base
|
|
|
44
130
|
end
|
|
45
131
|
end
|
|
46
132
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
self.abstract_class = true
|
|
133
|
+
class Relation < ActiveRecord::Relation
|
|
134
|
+
include RelationExtension
|
|
135
|
+
end
|
|
51
136
|
class << self
|
|
52
137
|
private
|
|
53
138
|
def relation
|
|
@@ -55,8 +140,40 @@ class ActiveScaffold::Tableless < ActiveRecord::Base
|
|
|
55
140
|
end
|
|
56
141
|
end
|
|
57
142
|
|
|
143
|
+
class StatementCache
|
|
144
|
+
def initialize(key)
|
|
145
|
+
@key = key
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def execute(values, model, connection)
|
|
149
|
+
model.where(@key => values)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
unless Rails.version < '4.2'
|
|
154
|
+
def self.columns_hash
|
|
155
|
+
if self < ActiveScaffold::Tableless
|
|
156
|
+
@columns_hash ||= Hash[self.columns.map { |c| [c.name, c] }]
|
|
157
|
+
else
|
|
158
|
+
super
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
def self.initialize_find_by_cache
|
|
162
|
+
self.find_by_statement_cache = Hash.new { |h, k| h[k] = StatementCache.new(k) }
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def self.columns; @columns ||= []; end
|
|
167
|
+
def self.table_name; @table_name ||= ActiveModel::Naming.plural(self); end
|
|
168
|
+
def self.table_exists?; true; end
|
|
169
|
+
self.abstract_class = true
|
|
170
|
+
|
|
171
|
+
def self.connection
|
|
172
|
+
@connection ||= Connection.new(self)
|
|
173
|
+
end
|
|
174
|
+
|
|
58
175
|
def self.column(name, sql_type = nil, options = {})
|
|
59
|
-
column =
|
|
176
|
+
column = Column.new(name.to_s, options[:default], sql_type.to_s, options.has_key?(:null) ? options[:null] : true)
|
|
60
177
|
column.tap { columns << column }
|
|
61
178
|
end
|
|
62
179
|
|
|
@@ -80,11 +197,13 @@ class ActiveScaffold::Tableless < ActiveRecord::Base
|
|
|
80
197
|
raise 'destroy must be implemented in a Tableless model'
|
|
81
198
|
end
|
|
82
199
|
|
|
83
|
-
def
|
|
200
|
+
def create_record #:nodoc:
|
|
84
201
|
run_callbacks(:create) {}
|
|
85
202
|
end
|
|
203
|
+
alias_method :create, :create_record # for rails3
|
|
86
204
|
|
|
87
|
-
def
|
|
205
|
+
def update_record(*) #:nodoc:
|
|
88
206
|
run_callbacks(:update) {}
|
|
89
207
|
end
|
|
208
|
+
alias_method :update, :update_record # for rails3
|
|
90
209
|
end
|
data/test/bridges/bridge_test.rb
CHANGED
|
@@ -23,7 +23,7 @@ class DatePickerTest < ActionView::TestCase
|
|
|
23
23
|
def test_form_ui
|
|
24
24
|
config = ActiveScaffold::Config::Core.new(:company)
|
|
25
25
|
@record = Company.new
|
|
26
|
-
assert active_scaffold_input_date_picker(config.columns[:date], :name => 'record[date]', :id => 'record_date')
|
|
27
|
-
assert active_scaffold_input_date_picker(config.columns[:datetime], :name => 'record[datetime]', :id => 'record_datetime')
|
|
26
|
+
assert active_scaffold_input_date_picker(config.columns[:date], :name => 'record[date]', :id => 'record_date', :object => @record)
|
|
27
|
+
assert active_scaffold_input_date_picker(config.columns[:datetime], :name => 'record[datetime]', :id => 'record_datetime', :object => @record)
|
|
28
28
|
end
|
|
29
29
|
end
|
|
@@ -14,9 +14,9 @@ class PaperclipTest < ActionView::TestCase
|
|
|
14
14
|
def test_initialization_without_paperclip
|
|
15
15
|
Company.expects(:attachment_definitions)
|
|
16
16
|
config = PaperclipCore.new(:company)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
refute config.create.multipart?
|
|
18
|
+
refute config.update.multipart?
|
|
19
|
+
refute config.columns.any? {|column| column.form_ui == :paperclip}
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def test_initialization
|
|
@@ -26,7 +26,7 @@ class PaperclipTest < ActionView::TestCase
|
|
|
26
26
|
assert_equal :paperclip, config.columns[:logo].form_ui
|
|
27
27
|
assert_equal [:delete_logo], config.columns[:logo].params.to_a
|
|
28
28
|
%w(logo_file_name logo_file_size logo_updated_at logo_content_type).each do |attr|
|
|
29
|
-
|
|
29
|
+
refute config.columns._inheritable.include?(attr.to_sym)
|
|
30
30
|
end
|
|
31
31
|
assert Company.method_defined?(:delete_logo)
|
|
32
32
|
assert Company.method_defined?(:'delete_logo=')
|
|
@@ -48,20 +48,22 @@ class PaperclipTest < ActionView::TestCase
|
|
|
48
48
|
company = Company.new
|
|
49
49
|
|
|
50
50
|
company.stubs(:logo).returns(stub(:file? => true, :original_filename => 'file', :url => '/system/file', :styles => Company.attachment_definitions[:logo]))
|
|
51
|
-
assert_dom_equal '<a href="/system/file"
|
|
51
|
+
assert_dom_equal '<a href="/system/file" target="_blank">file</a>', active_scaffold_column_paperclip(company, config.columns[:logo])
|
|
52
52
|
|
|
53
53
|
company.stubs(:logo).returns(stub(:file? => true, :original_filename => 'file', :url => '/system/file', :styles => {:thumbnail => '40x40'}))
|
|
54
|
-
assert_dom_equal '<a href="/system/file"
|
|
54
|
+
assert_dom_equal '<a href="/system/file" target="_blank"><img src="/system/file" border="0" alt="File"/></a>', active_scaffold_column_paperclip(company, config.columns[:logo])
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
def test_form_ui
|
|
58
|
+
js, ActiveScaffold.js_framework = ActiveScaffold.js_framework, :jquery
|
|
58
59
|
config = PaperclipCore.new(:company)
|
|
59
60
|
@record = Company.new
|
|
60
61
|
|
|
61
62
|
@record.stubs(:logo).returns(stub(:file? => true, :original_filename => 'file', :url => '/system/file', :styles => Company.attachment_definitions[:logo]))
|
|
62
|
-
|
|
63
|
+
escaped_quote = Rails::VERSION::MAJOR < 4 ? ''' : '''
|
|
64
|
+
assert_dom_equal %{<div><a href="/system/file" target="_blank">file</a> | <input name="record[delete_logo]" type="hidden" id="record_delete_logo" value="false" /><a href="#" onclick="jQuery(this).prev().val(#{escaped_quote}true#{escaped_quote}); jQuery(this).parent().hide().next().show(); return false;">Remove or Replace file</a></div><div style="display: none"><input name="record[logo]" class="text-input" autocomplete="off" type="file" id="record_logo" /></div>}, active_scaffold_input_paperclip(config.columns[:logo], :name => 'record[logo]', :id => 'record_logo', :object => @record)
|
|
63
65
|
|
|
64
66
|
@record.stubs(:logo).returns(stub(:file? => false))
|
|
65
|
-
assert_dom_equal '<input name="record[logo]" class="text-input" autocomplete="off" type="file" id="record_logo" />', active_scaffold_input_paperclip(config.columns[:logo], :name => 'record[logo]', :id => 'record_logo')
|
|
67
|
+
assert_dom_equal '<input name="record[logo]" class="text-input" autocomplete="off" type="file" id="record_logo" />', active_scaffold_input_paperclip(config.columns[:logo], :name => 'record[logo]', :id => 'record_logo', :object => @record)
|
|
66
68
|
end
|
|
67
69
|
end
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
require 'test_helper'
|
|
2
|
-
require File.join(File.dirname(__FILE__), '../../lib/active_scaffold/bridges/tiny_mce/helpers')
|
|
3
2
|
|
|
4
3
|
class TinyMceTest < ActionView::TestCase
|
|
5
4
|
include ActiveScaffold::Helpers::ViewHelpers
|
|
@@ -7,6 +6,7 @@ class TinyMceTest < ActionView::TestCase
|
|
|
7
6
|
|
|
8
7
|
def test_includes
|
|
9
8
|
ActiveScaffold::Bridges::TinyMce.expects(:install?).returns(true)
|
|
9
|
+
ActiveScaffold.js_framework = :jquery
|
|
10
10
|
assert ActiveScaffold::Bridges.all_javascripts.include?("tinymce-jquery")
|
|
11
11
|
end
|
|
12
12
|
|
|
@@ -15,7 +15,7 @@ class TinyMceTest < ActionView::TestCase
|
|
|
15
15
|
@record = Company.new
|
|
16
16
|
self.expects(:request).returns(stub(:xhr? => true))
|
|
17
17
|
|
|
18
|
-
assert_dom_equal
|
|
18
|
+
assert_dom_equal %{<textarea name=\"record[name]\" class=\"name-input mceEditor\" id=\"record_name\">\n</textarea>\n<script#{' type="text/javascript"' if Rails::VERSION::MAJOR < 4}>\n//<![CDATA[\ntinyMCE.settings = {\"theme\":\"simple\"};tinyMCE.execCommand('mceAddControl', false, 'record_name');\n//]]>\n</script>}, active_scaffold_input_text_editor(config.columns[:name], :name => 'record[name]', :id => 'record_name', :class => 'name-input', :object => @record)
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
protected
|
data/test/company.rb
CHANGED
|
@@ -9,13 +9,13 @@ class Company < ActiveRecord::Base
|
|
|
9
9
|
|
|
10
10
|
def self.columns_hash
|
|
11
11
|
{
|
|
12
|
-
'name' =>
|
|
13
|
-
'date' =>
|
|
14
|
-
'datetime' =>
|
|
15
|
-
'logo_file_name' =>
|
|
16
|
-
'logo_content_type' =>
|
|
17
|
-
'logo_file_size' =>
|
|
18
|
-
'logo_updated_at' =>
|
|
12
|
+
'name' => ColumnMock.new('name', nil, 'varchar(255)'),
|
|
13
|
+
'date' => ColumnMock.new('date', nil, 'date'),
|
|
14
|
+
'datetime' => ColumnMock.new('datetime', nil, 'datetime'),
|
|
15
|
+
'logo_file_name' => ColumnMock.new('logo_file_name', nil, 'varchar(255)'),
|
|
16
|
+
'logo_content_type' => ColumnMock.new('logo_content_type', nil, 'varchar(255)'),
|
|
17
|
+
'logo_file_size' => ColumnMock.new('logo_file_size', nil, 'int(11)'),
|
|
18
|
+
'logo_updated_at' => ColumnMock.new('logo_updated_at', nil, 'datetime'),
|
|
19
19
|
}
|
|
20
20
|
end
|
|
21
21
|
|
|
@@ -39,15 +39,27 @@ class Company < ActiveRecord::Base
|
|
|
39
39
|
def self.before_destroy(s=nil)
|
|
40
40
|
@@before = s
|
|
41
41
|
end
|
|
42
|
+
|
|
43
|
+
if respond_to?(:create_reflection)
|
|
44
|
+
if method(:create_reflection).arity == 4
|
|
45
|
+
def self.create_reflection(macro, name, scope, options, active_record)
|
|
46
|
+
super(macro, name, options, active_record)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
else
|
|
50
|
+
def self.create_reflection(*args)
|
|
51
|
+
ActiveRecord::Reflection.create *args
|
|
52
|
+
end
|
|
53
|
+
end
|
|
42
54
|
|
|
43
55
|
def self.has_many(association_id, options = {})
|
|
44
|
-
reflection = create_reflection(:has_many, association_id, options, self)
|
|
56
|
+
reflection = create_reflection(:has_many, association_id, nil, options, self)
|
|
45
57
|
end
|
|
46
58
|
def self.has_one(association_id, options = {})
|
|
47
|
-
reflection = create_reflection(:has_one, association_id, options, self)
|
|
59
|
+
reflection = create_reflection(:has_one, association_id, nil, options, self)
|
|
48
60
|
end
|
|
49
61
|
def self.belongs_to(association_id, options = {})
|
|
50
|
-
reflection = create_reflection(:belongs_to, association_id, options, self)
|
|
62
|
+
reflection = create_reflection(:belongs_to, association_id, nil, options, self)
|
|
51
63
|
end
|
|
52
64
|
has_many :companies
|
|
53
65
|
has_one :company
|
data/test/config/base_test.rb
CHANGED
data/test/config/core_test.rb
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
require 'test_helper'
|
|
2
2
|
|
|
3
3
|
module Config
|
|
4
|
-
class CoreTest < Test
|
|
5
|
-
class ModelStubsController < ActionController::Base
|
|
4
|
+
class CoreTest < MiniTest::Test
|
|
5
|
+
class ModelStubsController < ActionController::Base
|
|
6
|
+
include ActiveScaffold::Core
|
|
7
|
+
end
|
|
6
8
|
def setup
|
|
7
9
|
@config = ActiveScaffold::Config::Core.new :model_stub
|
|
8
10
|
ModelStubsController.instance_variable_set :@active_scaffold_config, @config
|
|
9
11
|
end
|
|
10
12
|
|
|
11
13
|
def test_default_options
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
refute @config.add_sti_create_links?
|
|
15
|
+
refute @config.sti_children
|
|
14
16
|
assert_equal [:create, :list, :search, :update, :delete, :show, :nested, :subform], @config.actions.to_a
|
|
15
17
|
assert_equal :default, @config.frontend
|
|
16
18
|
assert_equal :default, @config.theme
|
|
@@ -20,7 +22,7 @@ module Config
|
|
|
20
22
|
|
|
21
23
|
def test_add_sti_children
|
|
22
24
|
@config.sti_create_links = true
|
|
23
|
-
|
|
25
|
+
refute @config.add_sti_create_links?
|
|
24
26
|
@config.sti_children = [:a]
|
|
25
27
|
assert @config.add_sti_create_links?
|
|
26
28
|
end
|
|
@@ -33,7 +35,7 @@ module Config
|
|
|
33
35
|
def test_actions
|
|
34
36
|
assert @config.actions.include?(:create)
|
|
35
37
|
@config.actions = [:list]
|
|
36
|
-
|
|
38
|
+
refute @config.actions.include?(:create)
|
|
37
39
|
assert_equal [:list], @config.actions.to_a
|
|
38
40
|
end
|
|
39
41
|
|