admin_data 1.0.22 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. data/History.txt +23 -16
  2. data/README.md +1 -1
  3. data/Rakefile +2 -2
  4. data/app/controllers/admin_data/application_controller.rb +111 -0
  5. data/app/controllers/admin_data/crud_controller.rb +100 -0
  6. data/app/controllers/admin_data/feed_controller.rb +38 -16
  7. data/app/controllers/admin_data/home_controller.rb +11 -0
  8. data/app/controllers/admin_data/migration_controller.rb +12 -12
  9. data/app/controllers/admin_data/public_controller.rb +29 -19
  10. data/app/controllers/admin_data/search_controller.rb +99 -103
  11. data/app/controllers/admin_data/table_structure_controller.rb +25 -0
  12. data/app/helpers/admin_data/application_helper.rb +287 -0
  13. data/app/views/admin_data/crud/association/_association_info.html.erb +11 -0
  14. data/app/views/admin_data/crud/association/_belongs_to_info.html.erb +7 -0
  15. data/app/views/admin_data/{main → crud}/association/_habtm_info.html.erb +3 -3
  16. data/app/views/admin_data/{main → crud}/association/_has_many_info.html.erb +3 -3
  17. data/app/views/admin_data/crud/association/_has_one_info.html.erb +6 -0
  18. data/app/views/admin_data/{main → crud}/edit.html.erb +9 -9
  19. data/app/views/admin_data/{main → crud}/misc/_form.html.erb +6 -6
  20. data/app/views/admin_data/{main → crud}/misc/_modify_record.html.erb +4 -4
  21. data/app/views/admin_data/{main → crud}/new.html.erb +7 -7
  22. data/app/views/admin_data/{main → crud}/show.html.erb +10 -10
  23. data/app/views/admin_data/{main → home}/index.html.erb +2 -2
  24. data/app/views/admin_data/migration/index.html.erb +3 -3
  25. data/app/views/admin_data/search/_search_base.html.erb +5 -5
  26. data/app/views/admin_data/search/quick_search.html.erb +4 -4
  27. data/app/views/admin_data/search/search/_listing.html.erb +11 -9
  28. data/app/views/admin_data/search/search/_sortby.html.erb +4 -3
  29. data/app/views/admin_data/search/search/_title.html.erb +7 -7
  30. data/app/views/admin_data/shared/_breadcrum.html.erb +11 -5
  31. data/app/views/admin_data/shared/_header.html.erb +6 -6
  32. data/app/views/admin_data/shared/_secondary_navigation.html.erb +13 -14
  33. data/app/views/admin_data/{main/table_structure.html.erb → table_structure/index.html.erb} +11 -11
  34. data/app/views/layouts/admin_data.html.erb +15 -15
  35. data/config/routes.rb +3 -3
  36. data/lib/admin_data.rb +29 -6
  37. data/lib/admin_data/active_record_util.rb +38 -6
  38. data/lib/admin_data/configuration.rb +113 -0
  39. data/lib/admin_data/deprecation.rb +31 -0
  40. data/lib/admin_data/railtie.rb +2 -7
  41. data/lib/admin_data/search.rb +1 -1
  42. data/lib/admin_data/util.rb +74 -161
  43. data/lib/admin_data/version.rb +1 -1
  44. data/test/rails_root/app/controllers/application_controller.rb +3 -0
  45. data/test/rails_root/app/helpers/application_helper.rb +5 -0
  46. data/test/rails_root/app/models/city.rb +22 -0
  47. data/test/rails_root/app/models/club.rb +3 -0
  48. data/test/rails_root/app/models/newspaper.rb +4 -0
  49. data/test/rails_root/app/models/phone_number.rb +3 -0
  50. data/test/rails_root/app/models/user.rb +17 -0
  51. data/test/rails_root/app/models/website.rb +3 -0
  52. data/test/rails_root/config/application.rb +42 -0
  53. data/test/rails_root/config/boot.rb +13 -0
  54. data/test/rails_root/config/environment.rb +5 -0
  55. data/test/rails_root/config/environments/development.rb +22 -0
  56. data/test/rails_root/config/environments/production.rb +49 -0
  57. data/test/rails_root/config/environments/test.rb +35 -0
  58. data/test/rails_root/config/initializers/admin_data.rb +22 -0
  59. data/test/rails_root/config/initializers/backtrace_silencers.rb +7 -0
  60. data/test/rails_root/config/initializers/empty_spaces_to_nil.rb +10 -0
  61. data/test/rails_root/config/initializers/inflections.rb +10 -0
  62. data/test/rails_root/config/initializers/mime_types.rb +5 -0
  63. data/test/rails_root/config/initializers/secret_token.rb +7 -0
  64. data/test/rails_root/config/initializers/session_store.rb +8 -0
  65. data/test/rails_root/config/routes.rb +9 -0
  66. data/test/rails_root/db/migrate/20091030202259_create_users.rb +55 -0
  67. data/test/rails_root/db/schema.rb +63 -0
  68. data/test/rails_root/db/seeds.rb +40 -0
  69. data/test/rails_root/features/step_definitions/advance_search_steps.rb +13 -0
  70. data/test/rails_root/features/step_definitions/app_steps.rb +40 -0
  71. data/test/rails_root/features/step_definitions/async.rb +18 -0
  72. data/test/rails_root/features/step_definitions/crud_show_steps.rb +37 -0
  73. data/test/rails_root/features/step_definitions/feed_steps.rb +3 -0
  74. data/test/rails_root/features/step_definitions/quick_search_steps.rb +65 -0
  75. data/test/rails_root/features/step_definitions/util.rb +86 -0
  76. data/test/rails_root/features/step_definitions/web_steps.rb +219 -0
  77. data/test/rails_root/features/support/env.rb +68 -0
  78. data/test/rails_root/features/support/paths.rb +33 -0
  79. data/test/rails_root/test/factories.rb +30 -0
  80. data/test/rails_root/test/performance/browsing_test.rb +9 -0
  81. data/test/rails_root/test/test_helper.rb +13 -0
  82. metadata +100 -49
  83. data/app/controllers/admin_data/base_controller.rb +0 -112
  84. data/app/controllers/admin_data/main_controller.rb +0 -141
  85. data/app/views/admin_data/main/association/_association_info.html.erb +0 -11
  86. data/app/views/admin_data/main/association/_belongs_to_info.html.erb +0 -7
  87. data/app/views/admin_data/main/association/_has_one_info.html.erb +0 -6
  88. data/lib/admin_data/chelper.rb +0 -37
  89. data/lib/admin_data/helpers.rb +0 -271
  90. data/lib/admin_data/settings.rb +0 -67
  91. data/lib/css/base.css +0 -1108
  92. data/lib/css/vendor/jquery-ui-1.7.2.custom.css +0 -406
  93. data/lib/js/advance_search/act_on_result.js +0 -45
  94. data/lib/js/advance_search/advance_search.js +0 -83
  95. data/lib/js/advance_search/advance_search_structure.js +0 -79
  96. data/lib/js/advance_search/ajaxify_advance_search.js +0 -28
  97. data/lib/js/advance_search/build_first_row.js +0 -8
  98. data/lib/js/advance_search/event_bindings.js +0 -76
  99. data/lib/js/advance_search/global_ajax_setting.js +0 -10
  100. data/lib/js/advance_search/trigger_submit_on_domready.js +0 -6
  101. data/lib/js/misc/drop_down_change.js +0 -8
  102. data/lib/js/misc/js_util.js +0 -58
  103. data/lib/js/misc/quick_search_input_focus.js +0 -6
  104. data/lib/js/test/act_on_result.js +0 -120
  105. data/lib/js/test/advance_search.js +0 -80
  106. data/lib/js/test/ajaxify_advance_search.js +0 -29
  107. data/lib/js/test/build_first_row.js +0 -10
  108. data/lib/js/test/event_bindings.js +0 -100
  109. data/lib/js/vendor/jack.js +0 -903
  110. data/lib/js/vendor/jquery-1.4.2.js +0 -6240
  111. data/lib/js/vendor/jquery-ui-1.7.2.custom.min.js +0 -298
  112. data/lib/js/vendor/jquery.ba-isjquery.js +0 -21
  113. data/lib/js/vendor/jquery.form.js +0 -814
  114. data/lib/js/vendor/log.js +0 -9
  115. data/lib/js/vendor/qunit.js +0 -1043
  116. data/lib/js/vendor/rails.js +0 -132
@@ -1,83 +0,0 @@
1
- var AdminData = AdminData || {};
2
-
3
- AdminData.advanceSearch = {
4
-
5
- buildFirstRow: function() {
6
-
7
- var img = $('<img />', {
8
- src: 'https://github.com/neerajdotname/admin_data/raw/master/public/images/add.png'
9
- });
10
-
11
- $('#advance_search_table').append(this.buildRow())
12
- .find('tr td:last a')
13
- .attr('id','add_row_link_1')
14
- .removeClass('remove_row')
15
- .addClass('add_row_link')
16
- .html('')
17
- .append(img);
18
- },
19
-
20
- buildCol1: function() {
21
- var i, col = $('<select />', { className: 'col1' }).append($('<option />')),
22
- tableStructure = $('#advance_search_table').data('table_structure');
23
-
24
- for (i in tableStructure) {
25
- $('<option />', {
26
- text: i,
27
- value: i
28
- }).appendTo(col);
29
- }
30
- return $('<td />').append(col);
31
- },
32
-
33
- buildCol2: function() {
34
- var select = $('<select />', { className: 'col2', disabled: 'disabled' });
35
- return $('<td />').append(select);
36
- },
37
-
38
- buildCol3: function() {
39
- var select = $('<input />', { className: 'col3' });
40
- return $('<td />').append($('<input />', { className: 'col3', disabled: 'disabled' }));
41
- },
42
-
43
- buildCol4: function() {
44
- var img = $('<img />', {
45
- src: 'https://github.com/neerajdotname/admin_data/raw/master/public/images/no.png'
46
- });
47
-
48
- return $('<td />').append($('<a />', {
49
- text: '',
50
- href: '#',
51
- className: 'remove_row'
52
- }).append(img));
53
- },
54
-
55
- buildRow: function() {
56
-
57
- var $tr = $('<tr />'),
58
- currentRowNumber = $(document).data('currentRowNumber'),
59
- that = this,
60
- build_array = ['buildCol1', 'buildCol2', 'buildCol3', 'buildCol4'];
61
-
62
- if (currentRowNumber === undefined) {
63
- currentRowNumber = 1;
64
- $(document).data('currentRowNumber', currentRowNumber);
65
- } else {
66
- currentRowNumber = parseInt(currentRowNumber, 10) + 1;
67
- $(document).data('currentRowNumber', currentRowNumber);
68
- }
69
-
70
- $.each(build_array, function(index, value) {
71
- $tr.append(that[value]());
72
- });
73
-
74
- $tr.find('select.col1').attr({ name: 'adv_search[' + currentRowNumber + '_row][col1]' });
75
- $tr.find('select.col2').attr({ name: 'adv_search[' + currentRowNumber + '_row][col2]' });
76
- $tr.find('input.col3').attr({ name: 'adv_search[' + currentRowNumber + '_row][col3]' });
77
-
78
- $tr.find('.remove_row').attr('id', 'remove_row_'+currentRowNumber);
79
-
80
- return $tr;
81
- }
82
-
83
- };
@@ -1,79 +0,0 @@
1
- AdminData = AdminData || {};
2
-
3
- AdminData.mappings = {
4
-
5
- //JSLint complains if a hash has key named boolean. So I am changing the key to booleant
6
- booleant: {
7
- options: [
8
- ["is null", "is_null"],
9
- ["is not null", "is_not_null"],
10
- ["is true", "is_true"],
11
- ["is false", "is_false"]
12
- ]
13
- },
14
-
15
- string: {
16
- options: [
17
- ["is null", "is_null"],
18
- ["is not null", "is_not_null"],
19
- ["contains", "contains"],
20
- ["is exactly", "is_exactly"],
21
- ["doesn't contain", "does_not_contain"]
22
- ]
23
- },
24
-
25
- text: {
26
- options: [
27
- ["is null", "is_null"],
28
- ["is not null", "is_not_null"],
29
- ["Contains", "contains"],
30
- ["Doesn't Contain", "does_not_contain"]
31
- ]
32
- },
33
-
34
- datetime: {
35
- options: [
36
- ["is null", "is_null"],
37
- ["is not null", "is_not_null"],
38
- ['on', "is_on"],
39
- ['on or before', "is_on_or_before_date"],
40
- ['on or after', "is_on_or_after_date"]
41
- ]
42
- },
43
-
44
- date: {
45
- options: [
46
- ["is null", "is_null"],
47
- ["is not null", "is_not_null"],
48
- ['on', "is_on"],
49
- ['on or before', "is_on_or_before_date"],
50
- ['on or after', "is_on_or_after_date"]
51
- ]
52
- },
53
-
54
- time: {
55
- options: [
56
- ["is null", "is_null"],
57
- ["is not null", "is_not_null"],
58
- ["is exactly", "is_exactly"]
59
- ]
60
- },
61
-
62
- decimal: {
63
- options: [
64
- ['is equal to', "is_equal_to"],
65
- ['is less than', "less_than"],
66
- ['is greater than', "greater_than"]
67
- ]
68
- },
69
-
70
- integer: {
71
- options: [
72
- ['is equal to', "is_equal_to"],
73
- ['is less than', "less_than"],
74
- ['is greater than', "greater_than"]
75
- ]
76
- }
77
- };
78
-
79
-
@@ -1,28 +0,0 @@
1
- var AdminData = AdminData || {};
2
-
3
- AdminData.ajaxifyAdvanceSearch = {
4
- successCallback: function(responseText) {
5
- $('#results').html(responseText);
6
- },
7
-
8
- beforeSubmitCallback: function(formArray, jqForm) {
9
- $('#results').html('<span class="searching_message">searching...</span>');
10
- $('#advance_search_form').data('admin_data_form_array', formArray);
11
- }
12
- };
13
-
14
- $(function() {
15
-
16
- var options = {
17
- success: function(responseText) {
18
- AdminData.ajaxifyAdvanceSearch.successCallback(responseText);
19
- },
20
- beforeSubmit: function(formArray, jqForm) {
21
- AdminData.ajaxifyAdvanceSearch.beforeSubmitCallback(formArray, jqForm);
22
- }
23
- };
24
-
25
- $('#advance_search_form').ajaxForm(options);
26
-
27
- });
28
-
@@ -1,8 +0,0 @@
1
- $(function() {
2
-
3
- var json = $.parseJSON( $('#primary_column_type_info').html());
4
- $('#advance_search_table').data('table_structure', json);
5
- AdminData.advanceSearch.buildFirstRow();
6
-
7
- });
8
-
@@ -1,76 +0,0 @@
1
- var AdminData = AdminData || {};
2
-
3
- AdminData.bindings = {
4
-
5
- col2_change: function(e) {
6
- var arrayList = ['is_false', 'is_true', 'is_null', 'is_not_null'],
7
- $col2 = $(e.target).closest('select'),
8
- value = $col2.val(),
9
- tableStructure = $('#advance_search_table').data('table_structure'),
10
- $col3 = $col2.parents('tr').find('td input.col3'),
11
- $col1 = $col2.parents('tr').find('td select.col1'),
12
- col1ColumnType = tableStructure[$col1.val()];
13
-
14
-
15
- if (value.length === 0 || ($.inArray(value, arrayList) > - 1)) {
16
- $col3.val('').attr('disabled','disabled');
17
-
18
- } else {
19
- $col3.removeAttr('disabled');
20
- if (col1ColumnType === 'datetime' || col1ColumnType === 'date') {
21
- $col3.val(AdminData.jsUtil.dateToString(new Date())).addClass('datepicker');
22
-
23
- $('.datepicker').datepicker({ dateFormat: 'dd-MM-yy', changeYear: true, changeMonth: true });
24
-
25
- } else {
26
- $('.datepicker').datepicker('destroy');
27
- $col3.removeClass('datepicker').focus(); // do not create focus for date pickers
28
- }
29
- }
30
- },
31
-
32
- pagination_click: function(e) {
33
- var href = $(e.target).closest('a').attr('href');
34
-
35
- $.ajax({ url: href, dataType: "text", success: function(responseText){
36
- $('#results').html(responseText);
37
- }});
38
-
39
- AdminData.jsUtil.colorizeRows();
40
- },
41
-
42
- col1_change: function(e) {
43
- var col1 = $(e.target).closest('select'),
44
- tableStructure = $('#advance_search_table').data('table_structure'),
45
- columnType = tableStructure[col1.val()],
46
- options = AdminData.mappings[columnType]['options'],
47
- col2 = col1.parents('tr').find('td select.col2');
48
-
49
- col2.html('');
50
- AdminData.jsUtil.buildOptionsFromArray(options, col2);
51
- col2.trigger('change').removeAttr('disabled');
52
- }
53
- };
54
-
55
- $('.pagination a').live('click', function(e) {
56
- AdminData.bindings.pagination_click(e);
57
- return false;
58
- });
59
-
60
- $('#advance_search_table a.add_row_link').live('click', function() {
61
- $('#advance_search_table').append(AdminData.advanceSearch.buildRow());
62
- return false;
63
- });
64
-
65
- $('#advance_search_table a.remove_row').live('click', function(e) {
66
- $(e.target).closest('tr').remove();
67
- return false;
68
- });
69
-
70
- $('#advance_search_table select.col1').live('change', function(e) {
71
- AdminData.bindings.col1_change(e);
72
- });
73
-
74
- $('#advance_search_table select.col2').live('change', function(e) {
75
- AdminData.bindings.col2_change(e);
76
- });
@@ -1,10 +0,0 @@
1
- $(function() {
2
-
3
- $.ajaxSetup({
4
- 'beforeSend': function(xhr) {
5
- xhr.setRequestHeader("Accept", "text/javascript");
6
- }
7
- });
8
-
9
- });
10
-
@@ -1,6 +0,0 @@
1
- $(function() {
2
-
3
- $('#advance_search_form').trigger('submit');
4
-
5
- });
6
-
@@ -1,8 +0,0 @@
1
- $(function() {
2
-
3
- $('.drop_down_value_klass').change(function() {
4
- window.location = $(this).val();
5
- });
6
-
7
- });
8
-
@@ -1,58 +0,0 @@
1
- var AdminData = AdminData || {};
2
-
3
- /**
4
- * A general Utility
5
- * @namespace AdminData
6
- * @class jsUtil
7
- */
8
- AdminData.jsUtil = {
9
-
10
- // TODO since advance search was not working with util confirm , window.confirm is used directly
11
- // fix it later
12
- confirm: function(arg) {
13
- window.confirm(arg);
14
- },
15
-
16
- buildOptionsFromArray: function(array, element) {
17
- element.append($('<option />'));
18
- for (i in array) {
19
- $('<option />').text(array[i][0]).attr('value', array[i][1]).appendTo(element);
20
- }
21
- element.attr('disabled', false);
22
- },
23
-
24
- colorizeRows: function() {
25
- $('.colorize tr:odd').addClass('odd');
26
- $('.colorize tr:even').addClass('even');
27
- },
28
-
29
- /**
30
- * Returns the input date in string format.
31
- *
32
- * @param {date} input date
33
- * @return {string} The string value of input date
34
- */
35
- dateToString: function(date) {
36
- var month = (date.getMonth() + 1).toString();
37
- var day = date.getDate().toString();
38
- //days between 1 and 9 should have 0 before them
39
- if (day.length == 1) day = '0' + day;
40
- var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
41
- return day + "-" + months[month - 1] + "-" + date.getFullYear();
42
- },
43
-
44
- /**
45
- * Generate a random number between 1 and 10000000
46
- *
47
- * @return {Integer} a random Integer
48
- *
49
- */
50
- randomNumber: function() {
51
- var maxVal = 100000000,
52
- minVal = 1;
53
- var randVal = minVal + (Math.random() * (maxVal - minVal));
54
- return Math.round(randVal);
55
- }
56
-
57
- };
58
-
@@ -1,6 +0,0 @@
1
- $(function() {
2
-
3
- $('#quick_search_input').focus();
4
-
5
- });
6
-
@@ -1,120 +0,0 @@
1
- module('act_on_result', {
2
- teardown: function() {
3
- $('#advance_search_delete_all').remove();
4
- $('#advance_search_destroy_all').remove();
5
- $('#results').remove();
6
- $('#advance_search_form').remove();
7
- },
8
- setup: function() {
9
- $(document.body).append($('<a />', {
10
- href: '#',
11
- id: 'advance_search_delete_all'
12
- }));
13
-
14
- $(document.body).append($('<a />', {
15
- href: '#',
16
- id: 'advance_search_destroy_all'
17
- }));
18
-
19
- $(document.body).append($('<div />', {
20
- id: 'results'
21
- }));
22
-
23
- $(document.body).append($('<div />', {
24
- id: 'advance_search_form'
25
- }));
26
- }
27
- });
28
-
29
- test('invoking success callback', function() {
30
- expect(1);
31
- AdminData.actOnResult.successCallback({
32
- success: 'hello world'
33
- });
34
- equals('hello world', $('#results').text(), '#results should have text hello world');
35
- });
36
-
37
- test('live clicking #advance_search_delete_all with cancel action', function() {
38
- expect(0);
39
- jack(function() {
40
- jack.expect('AdminData.jsUtil.confirm').once().mock(function() {
41
- return false;
42
- });
43
- //TODO ensure that the value passed to action is delete
44
- jack.expect('AdminData.actOnResult.action').exactly('0 time');
45
- $('#advance_search_delete_all').trigger('click');
46
- });
47
- });
48
-
49
- test('live clicking #advance_search_delete_all', function() {
50
- expect(0);
51
- var args;
52
-
53
- jack(function() {
54
- jack.expect('AdminData.jsUtil.confirm').once().mock(function() {
55
- return true;
56
- });
57
- jack.expect('AdminData.actOnResult.action').once().mock(function(action_type) {
58
- args = action_type;
59
- return {};
60
- });
61
- $('#advance_search_delete_all').trigger('click');
62
- });
63
- equals('delete', args, 'action_type should be delete');
64
-
65
- });
66
-
67
- test('live clicking #advance_search_destroy_all with cancel action', function() {
68
- expect(0);
69
- jack(function() {
70
- jack.expect('AdminData.jsUtil.confirm').once().mock(function() {
71
- return false;
72
- });
73
- jack.expect('AdminData.actOnResult.action').exactly('0 time');
74
- $('#advance_search_destroy_all').trigger('click');
75
- });
76
- });
77
-
78
- test('live clicking #advance_search_destroy_all', function() {
79
- expect(0);
80
- var args;
81
-
82
- jack(function() {
83
- jack.expect('AdminData.jsUtil.confirm').once().mock(function() {
84
- return true;
85
- });
86
- jack.expect('AdminData.actOnResult.action').once().mock(function(action_type) {
87
- args = action_type;
88
- return {};
89
- });
90
- $('#advance_search_destroy_all').trigger('click');
91
- });
92
- equals('destroy', args, 'action_type should be destroy');
93
- });
94
-
95
- test('actOnResultAJAX', function() {
96
- expect(5);
97
- $('#advance_search_form').attr('action', 'http://localhost:3000');
98
- $('#advance_search_form').data('admin_data_form_array', [{
99
- name: 'foo',
100
- value: 'i_am_foo'
101
- }]);
102
-
103
- var ajaxArgs;
104
-
105
- jack(function() {
106
- jack.expect('$.ajax').once().mock(function(args) {
107
- ajaxArgs = args;
108
- });
109
- AdminData.actOnResult.action('delete');
110
- });
111
-
112
- equals('post', ajaxArgs.type, 'ajax arguments should have type as post');
113
- equals('json', ajaxArgs.dataType, 'ajax arguments should have json as dataType');
114
- equals('http://localhost:3000', ajaxArgs.url, 'ajax arguments should have valid url');
115
- var data = ajaxArgs.data;
116
- ok(data, 'ajax arguments should have value for key data');
117
- equals('foo=i_am_foo&admin_data_advance_search_action_type=delete', data, 'data should have parameterized value');
118
-
119
- });
120
-