crud 0.0.3

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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG +1 -0
  3. data/LICENSE.md +674 -0
  4. data/README.md +136 -0
  5. data/Rakefile +72 -0
  6. data/app/assets/images/crud/search-icon.png +0 -0
  7. data/app/assets/javascripts/crud/application.js +17 -0
  8. data/app/assets/javascripts/crud/dashboard.js +7 -0
  9. data/app/assets/javascripts/crud/pagination.js +41 -0
  10. data/app/assets/stylesheets/crud/application.css +27 -0
  11. data/app/assets/stylesheets/crud/dashboard.css +4 -0
  12. data/app/assets/stylesheets/crud/flash_notices.css +19 -0
  13. data/app/assets/stylesheets/crud/pagination.css +104 -0
  14. data/app/assets/stylesheets/dataTables/jquery.dataTables-override.css +20 -0
  15. data/app/controllers/crud/crud_base_controller.rb +28 -0
  16. data/app/controllers/crud/crud_controller.rb +149 -0
  17. data/app/controllers/crud/dashboard_controller.rb +17 -0
  18. data/app/helpers/crud/crud_helper.rb +104 -0
  19. data/app/helpers/crud/dashboard_helper.rb +4 -0
  20. data/app/models/crud/klass_info.rb +166 -0
  21. data/app/models/crud/klass_list.rb +51 -0
  22. data/app/models/crud/menus/development_menu.rb +63 -0
  23. data/app/views/crud/crud/_attribute_value.html.erb +5 -0
  24. data/app/views/crud/crud/_error_messages.html.erb +10 -0
  25. data/app/views/crud/crud/_flash_messages.html.erb +10 -0
  26. data/app/views/crud/crud/_form.html.erb +22 -0
  27. data/app/views/crud/crud/_klass_data.html.erb +117 -0
  28. data/app/views/crud/crud/edit.html.erb +17 -0
  29. data/app/views/crud/crud/index.html.erb +6 -0
  30. data/app/views/crud/crud/index.js.erb +1 -0
  31. data/app/views/crud/crud/new.html.erb +13 -0
  32. data/app/views/crud/crud/show.html.erb +69 -0
  33. data/app/views/crud/dashboard/index.html.erb +15 -0
  34. data/app/views/layouts/crud/application.html.erb +13 -0
  35. data/config/cucumber.yml +8 -0
  36. data/config/initializers/inflections.rb +5 -0
  37. data/config/initializers/rails_engine.rb +8 -0
  38. data/config/initializers/will_paginate.rb +1 -0
  39. data/config/locales/de.yml +3 -0
  40. data/config/locales/en.yml +3 -0
  41. data/config/locales/es.yml +3 -0
  42. data/config/locales/fr.yml +3 -0
  43. data/config/routes.rb +16 -0
  44. data/crud.gemspec +29 -0
  45. data/lib/crud.rb +144 -0
  46. data/lib/crud/engine.rb +23 -0
  47. data/lib/crud/version.rb +3 -0
  48. data/lib/tasks/crud_tasks.rake +4 -0
  49. metadata +157 -0
data/README.md ADDED
@@ -0,0 +1,136 @@
1
+ # CRUD
2
+
3
+ This gem is a simple mechanism to allow you to develop your rails applications using models and custom views alone (no need to generate and throw away scaffolding anymore).
4
+
5
+ It provides all of the basic CRUD functionality of the standard controllers/views generated by the scaffolding operations.
6
+
7
+ There are some small extensions which will allow you to extend the functionality for your own purpose.
8
+
9
+ ## Usage
10
+
11
+ To 'Gemfile', add:
12
+
13
+ gem 'crud'
14
+
15
+ To 'config/routes.rb', add:
16
+
17
+ mount Crud::Engine => "/crud", :as => :crud
18
+
19
+
20
+ Create 'config/iniializers/crud.rb', containing:
21
+
22
+ # Initialisation
23
+ Crud.setup do |config|
24
+ # Set model path
25
+ # Allow clients to register paths containing models. The backend determines
26
+ # acceptable model sources.
27
+ #
28
+ # Clients may register additional paths like this:
29
+ # model_path << 'path/to/model/directory'
30
+ config.model_path << File.join(Rails.root, 'app', 'models')
31
+
32
+
33
+ # Allow clients to customise the appearance of fields when rendering model data.
34
+ #
35
+ # :class
36
+ # The fully qualified name of the model to which this definition applies
37
+ #
38
+ # NOTE: If :class is set to :all, the definition will apply to all models.
39
+ #
40
+ # :hidden_fields
41
+ # If :hidden_fields contains an existing column, the column will not be displayed
42
+ #
43
+ # :only
44
+ # Filter to define in which views this definition applies.
45
+ # Valid values: :index, :show, :new, :edit
46
+ #
47
+ # Clients may register column settings like this:
48
+ # column_settings << { :class => 'Model',
49
+ # :hidden_fields => [:id, :created_at, :updated_at],
50
+ # :only => [:index, :show ]
51
+ # }
52
+ #
53
+ # column_settings << { :class => :all,
54
+ # :hidden_fields => [:id, :created_at, :updated_at],
55
+ # :only => [:index, :show],
56
+ # }
57
+ #
58
+
59
+ # Allow clients to register additional customisation to fields when rendering
60
+ # model data.
61
+ #
62
+ # :global
63
+ # If :global is specified and set to 'true', the partial will be at the end
64
+ # as an extension of the active view.
65
+ #
66
+ # :column_name
67
+ # If :column_name is an existing column, the partial will be rendered alongside
68
+ # the default, unless :column_replacement is set to true
69
+ #
70
+ # NOTE: The functionality of :column_name and :global are mutually exclusive.
71
+ # As such, if both are specified, :global will take presedence
72
+ #
73
+ # :column_replacement
74
+ # Flag to indicate whether this customisation should replace the default or
75
+ # appear alongside the default.
76
+ #
77
+ # :record_data_parameter
78
+ # :record_data_parameter is the name of the symbol used for passing the record
79
+ # data to the partial.
80
+ #
81
+ # :additional_partial_parameters
82
+ # A hash containing any additional partial parameters
83
+ #
84
+ # :only
85
+ # Filter to define in which views the extension applies.
86
+ # Valid values: :index, :show, :new, :edit
87
+ #
88
+ # Clients may register custom fields like this:
89
+ # custom_fields << { :class => 'Model',
90
+ # :only => [:index, :show ],
91
+ # :global => false,
92
+ # :column_name => 'id',
93
+ # :column_replacement => true,
94
+ # :partial => 'partial_path', :record_data_parameter => 'data',
95
+ # :additional_partial_parameters => {:size => 20, :contract => true}
96
+ # }
97
+ #
98
+
99
+ end
100
+
101
+ Start and browse to your application url '/crud'
102
+
103
+ http://localhost:3000/crud
104
+
105
+ ## Examples
106
+
107
+ See the test application under spec/dummy
108
+
109
+ ## Links
110
+
111
+ * Homepage: <https://github.com/htcl/crud>
112
+ * Source code: <https://github.com/htcl/crud>
113
+ * RubyGem: <https://rubygems.org/gems/crud>
114
+ * Travis CI: <https://travis-ci.org/htcl/crud>
115
+
116
+ ## Authors
117
+
118
+ * Everard Brown <mailto:everard.brown@htcl.eu>
119
+
120
+ ## Licence
121
+
122
+ Copyright (c) 2013-2014 Everard Brown
123
+
124
+ This program is free software: you can redistribute it and/or modify
125
+ it under the terms of the GNU General Public License as published by
126
+ the Free Software Foundation, either version 3 of the License, or
127
+ (at your option) any later version.
128
+
129
+ Level is distributed in the hope that it will be useful,
130
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
131
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
132
+ GNU General Public License for more details.
133
+
134
+ You should have received a copy of the GNU General Public License
135
+ along with Level. If not, see <http://www.gnu.org/licenses/>
136
+
data/Rakefile ADDED
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'Crud'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ # Encourage the visibilty of application-bourne rake tasks
24
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
25
+ load 'rails/tasks/engine.rake'
26
+
27
+ # Test::Unit tasks
28
+ require 'rake/testtask'
29
+
30
+ Rake::TestTask.new(:test) do |t|
31
+ t.libs << 'lib'
32
+ t.libs << 'test'
33
+ t.pattern = 'test/**/*_test.rb'
34
+ t.verbose = false
35
+ end
36
+
37
+
38
+ # RSpec 1.x tasks
39
+ #require 'spec/version'
40
+ #require 'spec/rake/spectask'
41
+
42
+ # RSpec 2.x tasks
43
+ if Rails.version.to_i < 3
44
+ require 'spec/rake/spectask'
45
+ rspec_task_class = 'Spec::Rake::SpecTask'
46
+ else
47
+ require 'rspec/core/rake_task'
48
+ rspec_task_class = 'RSpec::Core::RakeTask'
49
+ end
50
+ rspec_task_class.constantize.new(:spec)
51
+
52
+ # Alias for cucumber task
53
+ task :cucumber => 'app:cucumber'
54
+
55
+ # ci_reporter tasks
56
+ require 'rubygems'
57
+ require 'ci/reporter/rake/test_unit' # use this if you’re using Test::Unit
58
+ require 'ci/reporter/rake/rspec' # use this if you’re using RSpec
59
+ require 'ci/reporter/rake/cucumber' # use this if you're using Cucumber
60
+
61
+ # Aliases for CI tasks
62
+ task 'ci:all' => 'app:ci:all'
63
+ task 'ci:install_vendor_migrations' => 'app:ci:install_vendor_migrations'
64
+ task 'ci:all_tests' => 'app:ci:all_tests'
65
+
66
+ task :default => [:spec, :cucumber]
67
+
68
+ # Other useful aliases
69
+ task :routes => 'app:routes'
70
+ task :guard => 'app:guard'
71
+
72
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,17 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // the compiled file.
9
+ //
10
+ // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
+ // GO AFTER THE REQUIRES BELOW.
12
+ //
13
+ //= require jquery
14
+ //= require jquery_ujs
15
+ //= #require dataTables/jquery.dataTables
16
+ //= require_self
17
+ //= require_tree .
@@ -0,0 +1,7 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
3
+ $(function() {
4
+ $('select#klass_list').change(function() {
5
+ location.href = $(this).val();
6
+ });
7
+ });
@@ -0,0 +1,41 @@
1
+ $(function() {
2
+ $(document).on("click", ".pagination a", function() {
3
+ $(".pagination_overlay").html("Page is loading...");
4
+ $.get(this.href, pagination_parameters(), null, "script");
5
+ return false;
6
+ });
7
+
8
+ $(document).on("change", "select#per_page", function() {
9
+ $(".pagination_overlay").html("Page is loading...");
10
+ $.get(this.href, pagination_parameters(), null, "script");
11
+ return false;
12
+ });
13
+
14
+ $(document).on("submit", "form#search_form", function() {
15
+ $(".pagination_overlay").html("Page is loading...");
16
+ $.get(this.href, pagination_parameters(), null, "script");
17
+ return false;
18
+ });
19
+
20
+ //$(document).on("change", "input#search", function() {
21
+ // $(".pagination_overlay").html("Page is loading...");
22
+ // $.get(this.href, pagination_parameters(), null, "script");
23
+ // return false;
24
+ //});
25
+
26
+ $(document).on("change", "input#advanced_search", function() {
27
+ $(".pagination_overlay").html("Page is loading...");
28
+ $.get(this.href, pagination_parameters(), null, "script");
29
+ return false;
30
+ });
31
+
32
+ function pagination_parameters()
33
+ {
34
+ return {
35
+ page: $("#crud_pagination input#page").val(),
36
+ per_page: $("#crud_pagination select#per_page").val(),
37
+ search: $("#crud_search input#search").val(),
38
+ advanced_search: $("#crud_search input#advanced_search").is(':checked')
39
+ };
40
+ }
41
+ });
@@ -0,0 +1,27 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
9
+ * compiled file, but it's generally better to create a new file per style scope.
10
+ *
11
+ *= #require dataTables/jquery.dataTables
12
+ *= #require dataTables/jquery.dataTables-override
13
+ *= require_self
14
+ *= require_tree .
15
+ */
16
+
17
+ table#klass_table {
18
+ /* font-family: Fixed, monospace; */
19
+ }
20
+
21
+ table#klass_table thead {
22
+ /* font-size: 1em; */
23
+ }
24
+
25
+ table#klass_table tbody {
26
+ /* font-size: 0.99em; */
27
+ }
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,19 @@
1
+ .flash_message {
2
+ text-align: center;
3
+ }
4
+
5
+ .flash_alert {
6
+ color: red;
7
+ }
8
+
9
+ .flash_error {
10
+ color: red;
11
+ }
12
+
13
+ .flash_notice {
14
+ color: black;
15
+ }
16
+
17
+ .flash_info {
18
+ color: gray;
19
+ }
@@ -0,0 +1,104 @@
1
+ .digg_pagination {
2
+ background: white;
3
+ cursor: default;
4
+ /* self-clearing method: */ }
5
+ .digg_pagination a, .digg_pagination span, .digg_pagination em {
6
+ padding: 0.2em 0.5em;
7
+ display: block;
8
+ float: left;
9
+ margin-right: 1px; }
10
+ .digg_pagination .disabled {
11
+ color: #999999;
12
+ border: 1px solid #dddddd; }
13
+ .digg_pagination .current {
14
+ font-style: normal;
15
+ font-weight: bold;
16
+ background: #2e6ab1;
17
+ color: white;
18
+ border: 1px solid #2e6ab1; }
19
+ .digg_pagination a {
20
+ text-decoration: none;
21
+ color: #105cb6;
22
+ border: 1px solid #9aafe5; }
23
+ .digg_pagination a:hover, .digg_pagination a:focus {
24
+ color: #000033;
25
+ border-color: #000033; }
26
+ .digg_pagination .page_info {
27
+ background: #2e6ab1;
28
+ color: white;
29
+ padding: 0.4em 0.6em;
30
+ width: 22em;
31
+ margin-bottom: 0.3em;
32
+ text-align: center; }
33
+ .digg_pagination .page_info b {
34
+ color: #000033;
35
+ background: #6aa6ed;
36
+ padding: 0.1em 0.25em; }
37
+ .digg_pagination:after {
38
+ content: ".";
39
+ display: block;
40
+ height: 0;
41
+ clear: both;
42
+ visibility: hidden; }
43
+ * html .digg_pagination {
44
+ height: 1%; }
45
+ *:first-child + html .digg_pagination {
46
+ overflow: hidden; }
47
+
48
+ .apple_pagination {
49
+ background: #f1f1f1;
50
+ border: 1px solid #e5e5e5;
51
+ text-align: center;
52
+ padding: 1em;
53
+ cursor: default; }
54
+ .apple_pagination a, .apple_pagination span {
55
+ padding: 0.2em 0.3em; }
56
+ .apple_pagination .disabled {
57
+ color: #aaaaaa; }
58
+ .apple_pagination .current {
59
+ font-style: normal;
60
+ font-weight: bold;
61
+ background-color: #bebebe;
62
+ display: inline-block;
63
+ width: 1.4em;
64
+ height: 1.4em;
65
+ line-height: 1.5;
66
+ -moz-border-radius: 1em;
67
+ -webkit-border-radius: 1em;
68
+ border-radius: 1em;
69
+ text-shadow: rgba(255, 255, 255, 0.8) 1px 1px 1px; }
70
+ .apple_pagination a {
71
+ text-decoration: none;
72
+ color: black; }
73
+ .apple_pagination a:hover, .apple_pagination a:focus {
74
+ text-decoration: underline; }
75
+
76
+ .flickr_pagination {
77
+ text-align: center;
78
+ padding: 0.3em;
79
+ cursor: default; }
80
+ .flickr_pagination a, .flickr_pagination span, .flickr_pagination em {
81
+ padding: 0.2em 0.5em; }
82
+ .flickr_pagination .disabled {
83
+ color: #aaaaaa; }
84
+ .flickr_pagination .current {
85
+ font-style: normal;
86
+ font-weight: bold;
87
+ color: #ff0084; }
88
+ .flickr_pagination a {
89
+ border: 1px solid #dddddd;
90
+ color: #0063dc;
91
+ text-decoration: none; }
92
+ .flickr_pagination a:hover, .flickr_pagination a:focus {
93
+ border-color: #003366;
94
+ background: #0063dc;
95
+ color: white; }
96
+ .flickr_pagination .page_info {
97
+ color: #aaaaaa;
98
+ padding-top: 0.8em; }
99
+ .flickr_pagination .previous_page, .flickr_pagination .next_page {
100
+ border-width: 2px; }
101
+ .flickr_pagination .previous_page {
102
+ margin-right: 1em; }
103
+ .flickr_pagination .next_page {
104
+ margin-left: 1em; }
@@ -0,0 +1,20 @@
1
+ /*
2
+ * Pagination
3
+ */
4
+ .paginate_enabled_previous { background: url('/assets/dataTables/back_enabled.png') no-repeat top left; }
5
+ .paginate_enabled_previous:hover { background: url('/assets/dataTables/back_enabled_hover.png') no-repeat top left; }
6
+ .paginate_disabled_previous { background: url('/assets/dataTables/back_disabled.png') no-repeat top left; }
7
+
8
+ .paginate_enabled_next { background: url('/assets/dataTables/forward_enabled.png') no-repeat top right; }
9
+ .paginate_enabled_next:hover { background: url('/assets/dataTables/forward_enabled_hover.png') no-repeat top right; }
10
+ .paginate_disabled_next { background: url('/assets/dataTables/forward_disabled.png') no-repeat top right; }
11
+
12
+ /*
13
+ * Sorting
14
+ */
15
+ .sorting { background: url('/assets/dataTables/sort_both.png') no-repeat center right; }
16
+ .sorting_asc { background: url('/assets/dataTables/sort_asc.png') no-repeat center right; }
17
+ .sorting_desc { background: url('/assets/dataTables/sort_desc.png') no-repeat center right; }
18
+
19
+ .sorting_asc_disabled { background: url('/assets/dataTables/sort_asc_disabled.png') no-repeat center right; }
20
+ .sorting_desc_disabled { background: url('/assets/dataTables/sort_desc_disabled.png') no-repeat center right; }