contentable 0.3.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.
Files changed (66) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/LICENSE +20 -0
  4. data/README.textile +40 -0
  5. data/Rakefile +57 -0
  6. data/VERSION +1 -0
  7. data/contentable.gemspec +133 -0
  8. data/lib/contentable.rb +117 -0
  9. data/lib/version.rb +4 -0
  10. data/spec/rails3/Gemfile +37 -0
  11. data/spec/rails3/Gemfile.lock +104 -0
  12. data/spec/rails3/Rakefile +10 -0
  13. data/spec/rails3/app_root/.gitignore +4 -0
  14. data/spec/rails3/app_root/README +256 -0
  15. data/spec/rails3/app_root/app/controllers/application_controller.rb +3 -0
  16. data/spec/rails3/app_root/app/controllers/content_items_controller.rb +83 -0
  17. data/spec/rails3/app_root/app/helpers/application_helper.rb +2 -0
  18. data/spec/rails3/app_root/app/helpers/content_items_helper.rb +2 -0
  19. data/spec/rails3/app_root/app/models/content_item.rb +3 -0
  20. data/spec/rails3/app_root/app/views/content_items/_form.html.erb +17 -0
  21. data/spec/rails3/app_root/app/views/content_items/edit.html.erb +6 -0
  22. data/spec/rails3/app_root/app/views/content_items/index.html.erb +21 -0
  23. data/spec/rails3/app_root/app/views/content_items/new.html.erb +5 -0
  24. data/spec/rails3/app_root/app/views/content_items/show.html.erb +5 -0
  25. data/spec/rails3/app_root/app/views/layouts/application.html.erb +14 -0
  26. data/spec/rails3/app_root/config.ru +4 -0
  27. data/spec/rails3/app_root/config/application.rb +46 -0
  28. data/spec/rails3/app_root/config/boot.rb +13 -0
  29. data/spec/rails3/app_root/config/database.yml +28 -0
  30. data/spec/rails3/app_root/config/environment.rb +5 -0
  31. data/spec/rails3/app_root/config/environments/development.rb +26 -0
  32. data/spec/rails3/app_root/config/environments/in_memory.rb +35 -0
  33. data/spec/rails3/app_root/config/environments/production.rb +49 -0
  34. data/spec/rails3/app_root/config/environments/test.rb +35 -0
  35. data/spec/rails3/app_root/config/initializers/backtrace_silencers.rb +7 -0
  36. data/spec/rails3/app_root/config/initializers/inflections.rb +10 -0
  37. data/spec/rails3/app_root/config/initializers/mime_types.rb +5 -0
  38. data/spec/rails3/app_root/config/initializers/secret_token.rb +7 -0
  39. data/spec/rails3/app_root/config/initializers/session_store.rb +8 -0
  40. data/spec/rails3/app_root/config/locales/en.yml +5 -0
  41. data/spec/rails3/app_root/config/routes.rb +60 -0
  42. data/spec/rails3/app_root/db/migrate/20110102070953_create_content_items.rb +9 -0
  43. data/spec/rails3/app_root/db/schema.rb +24 -0
  44. data/spec/rails3/app_root/db/seeds.rb +7 -0
  45. data/spec/rails3/app_root/doc/README_FOR_APP +2 -0
  46. data/spec/rails3/app_root/lib/tasks/.gitkeep +0 -0
  47. data/spec/rails3/app_root/public/404.html +26 -0
  48. data/spec/rails3/app_root/public/422.html +26 -0
  49. data/spec/rails3/app_root/public/500.html +26 -0
  50. data/spec/rails3/app_root/public/favicon.ico +0 -0
  51. data/spec/rails3/app_root/public/images/rails.png +0 -0
  52. data/spec/rails3/app_root/public/index.html +239 -0
  53. data/spec/rails3/app_root/public/javascripts/application.js +2 -0
  54. data/spec/rails3/app_root/public/javascripts/controls.js +965 -0
  55. data/spec/rails3/app_root/public/javascripts/dragdrop.js +974 -0
  56. data/spec/rails3/app_root/public/javascripts/effects.js +1123 -0
  57. data/spec/rails3/app_root/public/javascripts/prototype.js +6001 -0
  58. data/spec/rails3/app_root/public/javascripts/rails.js +175 -0
  59. data/spec/rails3/app_root/public/robots.txt +5 -0
  60. data/spec/rails3/app_root/public/stylesheets/.gitkeep +0 -0
  61. data/spec/rails3/app_root/public/stylesheets/scaffold.css +56 -0
  62. data/spec/rails3/app_root/script/rails +6 -0
  63. data/spec/rails3/contentable_spec.rb +31 -0
  64. data/spec/rails3/spec.opts +1 -0
  65. data/spec/rails3/spec_helper.rb +21 -0
  66. metadata +183 -0
@@ -0,0 +1,175 @@
1
+ (function() {
2
+ // Technique from Juriy Zaytsev
3
+ // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
4
+ function isEventSupported(eventName) {
5
+ var el = document.createElement('div');
6
+ eventName = 'on' + eventName;
7
+ var isSupported = (eventName in el);
8
+ if (!isSupported) {
9
+ el.setAttribute(eventName, 'return;');
10
+ isSupported = typeof el[eventName] == 'function';
11
+ }
12
+ el = null;
13
+ return isSupported;
14
+ }
15
+
16
+ function isForm(element) {
17
+ return Object.isElement(element) && element.nodeName.toUpperCase() == 'FORM'
18
+ }
19
+
20
+ function isInput(element) {
21
+ if (Object.isElement(element)) {
22
+ var name = element.nodeName.toUpperCase()
23
+ return name == 'INPUT' || name == 'SELECT' || name == 'TEXTAREA'
24
+ }
25
+ else return false
26
+ }
27
+
28
+ var submitBubbles = isEventSupported('submit'),
29
+ changeBubbles = isEventSupported('change')
30
+
31
+ if (!submitBubbles || !changeBubbles) {
32
+ // augment the Event.Handler class to observe custom events when needed
33
+ Event.Handler.prototype.initialize = Event.Handler.prototype.initialize.wrap(
34
+ function(init, element, eventName, selector, callback) {
35
+ init(element, eventName, selector, callback)
36
+ // is the handler being attached to an element that doesn't support this event?
37
+ if ( (!submitBubbles && this.eventName == 'submit' && !isForm(this.element)) ||
38
+ (!changeBubbles && this.eventName == 'change' && !isInput(this.element)) ) {
39
+ // "submit" => "emulated:submit"
40
+ this.eventName = 'emulated:' + this.eventName
41
+ }
42
+ }
43
+ )
44
+ }
45
+
46
+ if (!submitBubbles) {
47
+ // discover forms on the page by observing focus events which always bubble
48
+ document.on('focusin', 'form', function(focusEvent, form) {
49
+ // special handler for the real "submit" event (one-time operation)
50
+ if (!form.retrieve('emulated:submit')) {
51
+ form.on('submit', function(submitEvent) {
52
+ var emulated = form.fire('emulated:submit', submitEvent, true)
53
+ // if custom event received preventDefault, cancel the real one too
54
+ if (emulated.returnValue === false) submitEvent.preventDefault()
55
+ })
56
+ form.store('emulated:submit', true)
57
+ }
58
+ })
59
+ }
60
+
61
+ if (!changeBubbles) {
62
+ // discover form inputs on the page
63
+ document.on('focusin', 'input, select, texarea', function(focusEvent, input) {
64
+ // special handler for real "change" events
65
+ if (!input.retrieve('emulated:change')) {
66
+ input.on('change', function(changeEvent) {
67
+ input.fire('emulated:change', changeEvent, true)
68
+ })
69
+ input.store('emulated:change', true)
70
+ }
71
+ })
72
+ }
73
+
74
+ function handleRemote(element) {
75
+ var method, url, params;
76
+
77
+ var event = element.fire("ajax:before");
78
+ if (event.stopped) return false;
79
+
80
+ if (element.tagName.toLowerCase() === 'form') {
81
+ method = element.readAttribute('method') || 'post';
82
+ url = element.readAttribute('action');
83
+ params = element.serialize();
84
+ } else {
85
+ method = element.readAttribute('data-method') || 'get';
86
+ url = element.readAttribute('href');
87
+ params = {};
88
+ }
89
+
90
+ new Ajax.Request(url, {
91
+ method: method,
92
+ parameters: params,
93
+ evalScripts: true,
94
+
95
+ onComplete: function(request) { element.fire("ajax:complete", request); },
96
+ onSuccess: function(request) { element.fire("ajax:success", request); },
97
+ onFailure: function(request) { element.fire("ajax:failure", request); }
98
+ });
99
+
100
+ element.fire("ajax:after");
101
+ }
102
+
103
+ function handleMethod(element) {
104
+ var method = element.readAttribute('data-method'),
105
+ url = element.readAttribute('href'),
106
+ csrf_param = $$('meta[name=csrf-param]')[0],
107
+ csrf_token = $$('meta[name=csrf-token]')[0];
108
+
109
+ var form = new Element('form', { method: "POST", action: url, style: "display: none;" });
110
+ element.parentNode.insert(form);
111
+
112
+ if (method !== 'post') {
113
+ var field = new Element('input', { type: 'hidden', name: '_method', value: method });
114
+ form.insert(field);
115
+ }
116
+
117
+ if (csrf_param) {
118
+ var param = csrf_param.readAttribute('content'),
119
+ token = csrf_token.readAttribute('content'),
120
+ field = new Element('input', { type: 'hidden', name: param, value: token });
121
+ form.insert(field);
122
+ }
123
+
124
+ form.submit();
125
+ }
126
+
127
+
128
+ document.on("click", "*[data-confirm]", function(event, element) {
129
+ var message = element.readAttribute('data-confirm');
130
+ if (!confirm(message)) event.stop();
131
+ });
132
+
133
+ document.on("click", "a[data-remote]", function(event, element) {
134
+ if (event.stopped) return;
135
+ handleRemote(element);
136
+ event.stop();
137
+ });
138
+
139
+ document.on("click", "a[data-method]", function(event, element) {
140
+ if (event.stopped) return;
141
+ handleMethod(element);
142
+ event.stop();
143
+ });
144
+
145
+ document.on("submit", function(event) {
146
+ var element = event.findElement(),
147
+ message = element.readAttribute('data-confirm');
148
+ if (message && !confirm(message)) {
149
+ event.stop();
150
+ return false;
151
+ }
152
+
153
+ var inputs = element.select("input[type=submit][data-disable-with]");
154
+ inputs.each(function(input) {
155
+ input.disabled = true;
156
+ input.writeAttribute('data-original-value', input.value);
157
+ input.value = input.readAttribute('data-disable-with');
158
+ });
159
+
160
+ var element = event.findElement("form[data-remote]");
161
+ if (element) {
162
+ handleRemote(element);
163
+ event.stop();
164
+ }
165
+ });
166
+
167
+ document.on("ajax:after", "form", function(event, element) {
168
+ var inputs = element.select("input[type=submit][disabled=true][data-disable-with]");
169
+ inputs.each(function(input) {
170
+ input.value = input.readAttribute('data-original-value');
171
+ input.removeAttribute('data-original-value');
172
+ input.disabled = false;
173
+ });
174
+ });
175
+ })();
@@ -0,0 +1,5 @@
1
+ # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
2
+ #
3
+ # To ban all spiders from the entire site uncomment the next two lines:
4
+ # User-Agent: *
5
+ # Disallow: /
@@ -0,0 +1,56 @@
1
+ body { background-color: #fff; color: #333; }
2
+
3
+ body, p, ol, ul, td {
4
+ font-family: verdana, arial, helvetica, sans-serif;
5
+ font-size: 13px;
6
+ line-height: 18px;
7
+ }
8
+
9
+ pre {
10
+ background-color: #eee;
11
+ padding: 10px;
12
+ font-size: 11px;
13
+ }
14
+
15
+ a { color: #000; }
16
+ a:visited { color: #666; }
17
+ a:hover { color: #fff; background-color:#000; }
18
+
19
+ div.field, div.actions {
20
+ margin-bottom: 10px;
21
+ }
22
+
23
+ #notice {
24
+ color: green;
25
+ }
26
+
27
+ .field_with_errors {
28
+ padding: 2px;
29
+ background-color: red;
30
+ display: table;
31
+ }
32
+
33
+ #error_explanation {
34
+ width: 450px;
35
+ border: 2px solid red;
36
+ padding: 7px;
37
+ padding-bottom: 0;
38
+ margin-bottom: 20px;
39
+ background-color: #f0f0f0;
40
+ }
41
+
42
+ #error_explanation h2 {
43
+ text-align: left;
44
+ font-weight: bold;
45
+ padding: 5px 5px 5px 15px;
46
+ font-size: 12px;
47
+ margin: -7px;
48
+ margin-bottom: 0px;
49
+ background-color: #c00;
50
+ color: #fff;
51
+ }
52
+
53
+ #error_explanation ul li {
54
+ font-size: 12px;
55
+ list-style: square;
56
+ }
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,31 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe "acts_as_contentable" do
4
+ it "should be a well defined method on clases that inherit from ActiveRecord" do
5
+ class A < ActiveRecord::Base
6
+ end
7
+ A.should respond_to :acts_as_contentable
8
+ lambda {A.acts_as_contentable}.should_not raise_error
9
+ end
10
+ end
11
+
12
+ describe ActionView::Base.new do
13
+ describe "display_textile method" do
14
+ before :all do
15
+ @textile_text = <<-TEXTILE
16
+ h1. The header
17
+
18
+ A paragraph
19
+ TEXTILE
20
+ end
21
+
22
+ it "should be defined" do
23
+ should respond_to :display_textile
24
+ end
25
+ it "should render html appropriately" do
26
+ result = ActionView::Base.new.display_textile(@textile_text)
27
+ result.should include "<h1>"
28
+ result.should include "<p>"
29
+ end
30
+ end
31
+ end
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,21 @@
1
+ $: << File.join(File.dirname(__FILE__), "/../lib" )
2
+
3
+ # Set the default environment to sqlite3's in_memory database
4
+ ENV['RAILS_ENV'] ||= 'in_memory'
5
+ ENV['RAILS_ROOT'] = 'app_root'
6
+
7
+ # Load the Rails environment and testing framework
8
+ require "#{File.dirname(__FILE__)}/app_root/config/environment"
9
+ # require "#{File.dirname(__FILE__)}/../../init"
10
+ require 'rspec/rails'
11
+
12
+ # Undo changes to RAILS_ENV
13
+ silence_warnings {RAILS_ENV = ENV['RAILS_ENV']}
14
+
15
+ # Run the migrations
16
+ ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate")
17
+
18
+ RSpec.configure do |config|
19
+ config.use_transactional_fixtures = true
20
+ config.use_instantiated_fixtures = false
21
+ end
metadata ADDED
@@ -0,0 +1,183 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: contentable
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
+ platform: ruby
12
+ authors:
13
+ - metasoarous
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-01-17 00:00:00 -08:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: RedCloth
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rspec
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 13
44
+ segments:
45
+ - 1
46
+ - 2
47
+ - 9
48
+ version: 1.2.9
49
+ type: :development
50
+ version_requirements: *id002
51
+ description: Contentable allows rails developers to place chunks of content in "content_items" whcih store content text, titles and descriptions in order to make content more easily updateable manageable.
52
+ email: metasoarous@gmail.com
53
+ executables: []
54
+
55
+ extensions: []
56
+
57
+ extra_rdoc_files:
58
+ - LICENSE
59
+ - README.textile
60
+ files:
61
+ - .document
62
+ - .gitignore
63
+ - LICENSE
64
+ - README.textile
65
+ - Rakefile
66
+ - VERSION
67
+ - contentable.gemspec
68
+ - lib/contentable.rb
69
+ - lib/version.rb
70
+ - spec/rails3/Gemfile
71
+ - spec/rails3/Gemfile.lock
72
+ - spec/rails3/Rakefile
73
+ - spec/rails3/app_root/.gitignore
74
+ - spec/rails3/app_root/README
75
+ - spec/rails3/app_root/app/controllers/application_controller.rb
76
+ - spec/rails3/app_root/app/controllers/content_items_controller.rb
77
+ - spec/rails3/app_root/app/helpers/application_helper.rb
78
+ - spec/rails3/app_root/app/helpers/content_items_helper.rb
79
+ - spec/rails3/app_root/app/models/content_item.rb
80
+ - spec/rails3/app_root/app/views/content_items/_form.html.erb
81
+ - spec/rails3/app_root/app/views/content_items/edit.html.erb
82
+ - spec/rails3/app_root/app/views/content_items/index.html.erb
83
+ - spec/rails3/app_root/app/views/content_items/new.html.erb
84
+ - spec/rails3/app_root/app/views/content_items/show.html.erb
85
+ - spec/rails3/app_root/app/views/layouts/application.html.erb
86
+ - spec/rails3/app_root/config.ru
87
+ - spec/rails3/app_root/config/application.rb
88
+ - spec/rails3/app_root/config/boot.rb
89
+ - spec/rails3/app_root/config/database.yml
90
+ - spec/rails3/app_root/config/environment.rb
91
+ - spec/rails3/app_root/config/environments/development.rb
92
+ - spec/rails3/app_root/config/environments/in_memory.rb
93
+ - spec/rails3/app_root/config/environments/production.rb
94
+ - spec/rails3/app_root/config/environments/test.rb
95
+ - spec/rails3/app_root/config/initializers/backtrace_silencers.rb
96
+ - spec/rails3/app_root/config/initializers/inflections.rb
97
+ - spec/rails3/app_root/config/initializers/mime_types.rb
98
+ - spec/rails3/app_root/config/initializers/secret_token.rb
99
+ - spec/rails3/app_root/config/initializers/session_store.rb
100
+ - spec/rails3/app_root/config/locales/en.yml
101
+ - spec/rails3/app_root/config/routes.rb
102
+ - spec/rails3/app_root/db/migrate/20110102070953_create_content_items.rb
103
+ - spec/rails3/app_root/db/schema.rb
104
+ - spec/rails3/app_root/db/seeds.rb
105
+ - spec/rails3/app_root/doc/README_FOR_APP
106
+ - spec/rails3/app_root/lib/tasks/.gitkeep
107
+ - spec/rails3/app_root/public/404.html
108
+ - spec/rails3/app_root/public/422.html
109
+ - spec/rails3/app_root/public/500.html
110
+ - spec/rails3/app_root/public/favicon.ico
111
+ - spec/rails3/app_root/public/images/rails.png
112
+ - spec/rails3/app_root/public/index.html
113
+ - spec/rails3/app_root/public/javascripts/application.js
114
+ - spec/rails3/app_root/public/javascripts/controls.js
115
+ - spec/rails3/app_root/public/javascripts/dragdrop.js
116
+ - spec/rails3/app_root/public/javascripts/effects.js
117
+ - spec/rails3/app_root/public/javascripts/prototype.js
118
+ - spec/rails3/app_root/public/javascripts/rails.js
119
+ - spec/rails3/app_root/public/robots.txt
120
+ - spec/rails3/app_root/public/stylesheets/.gitkeep
121
+ - spec/rails3/app_root/public/stylesheets/scaffold.css
122
+ - spec/rails3/app_root/script/rails
123
+ - spec/rails3/contentable_spec.rb
124
+ - spec/rails3/spec.opts
125
+ - spec/rails3/spec_helper.rb
126
+ has_rdoc: true
127
+ homepage: http://github.com/metasoarous/contentable
128
+ licenses: []
129
+
130
+ post_install_message:
131
+ rdoc_options:
132
+ - --charset=UTF-8
133
+ require_paths:
134
+ - lib
135
+ required_ruby_version: !ruby/object:Gem::Requirement
136
+ none: false
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ hash: 3
141
+ segments:
142
+ - 0
143
+ version: "0"
144
+ required_rubygems_version: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ hash: 3
150
+ segments:
151
+ - 0
152
+ version: "0"
153
+ requirements: []
154
+
155
+ rubyforge_project:
156
+ rubygems_version: 1.3.7
157
+ signing_key:
158
+ specification_version: 3
159
+ summary: Rails 3 gem for streamlining the management of chunks of html (textile) content within an application
160
+ test_files:
161
+ - spec/rails3/app_root/app/controllers/application_controller.rb
162
+ - spec/rails3/app_root/app/controllers/content_items_controller.rb
163
+ - spec/rails3/app_root/app/helpers/application_helper.rb
164
+ - spec/rails3/app_root/app/helpers/content_items_helper.rb
165
+ - spec/rails3/app_root/app/models/content_item.rb
166
+ - spec/rails3/app_root/config/application.rb
167
+ - spec/rails3/app_root/config/boot.rb
168
+ - spec/rails3/app_root/config/environment.rb
169
+ - spec/rails3/app_root/config/environments/development.rb
170
+ - spec/rails3/app_root/config/environments/in_memory.rb
171
+ - spec/rails3/app_root/config/environments/production.rb
172
+ - spec/rails3/app_root/config/environments/test.rb
173
+ - spec/rails3/app_root/config/initializers/backtrace_silencers.rb
174
+ - spec/rails3/app_root/config/initializers/inflections.rb
175
+ - spec/rails3/app_root/config/initializers/mime_types.rb
176
+ - spec/rails3/app_root/config/initializers/secret_token.rb
177
+ - spec/rails3/app_root/config/initializers/session_store.rb
178
+ - spec/rails3/app_root/config/routes.rb
179
+ - spec/rails3/app_root/db/migrate/20110102070953_create_content_items.rb
180
+ - spec/rails3/app_root/db/schema.rb
181
+ - spec/rails3/app_root/db/seeds.rb
182
+ - spec/rails3/contentable_spec.rb
183
+ - spec/rails3/spec_helper.rb