email_manager 0.0.1

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 (71) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/CHANGELOG +3 -0
  4. data/Gemfile +22 -0
  5. data/Gemfile.lock +149 -0
  6. data/LICENSE.txt +20 -0
  7. data/README.rdoc +26 -0
  8. data/Rakefile +62 -0
  9. data/VERSION +1 -0
  10. data/app/controllers/email_manager/managed_emails_controller.rb +53 -0
  11. data/app/models/email_manager/managed_email.rb +6 -0
  12. data/app/views/email_manager/managed_emails/_pagination.html.erb +3 -0
  13. data/app/views/email_manager/managed_emails/_search_form.html.erb +21 -0
  14. data/app/views/email_manager/managed_emails/index.html.erb +33 -0
  15. data/app/views/email_manager/managed_emails/show.html.erb +60 -0
  16. data/config/routes.rb +8 -0
  17. data/email_manager.gemspec +141 -0
  18. data/lib/email_manager/engine.rb +7 -0
  19. data/lib/email_manager/managed_email_observer.rb +26 -0
  20. data/lib/email_manager.rb +6 -0
  21. data/lib/generators/email_manager/install_generator.rb +35 -0
  22. data/lib/generators/email_manager/templates/email_manager_config.rb +2 -0
  23. data/lib/generators/email_manager/templates/migrations/install.rb +23 -0
  24. data/lib/generators/email_manager/upgrade_generator.rb +44 -0
  25. data/lib/generators/email_manager/views_generator.rb +2 -0
  26. data/reload.sh +2 -0
  27. data/spec/controllers/managed_emails_controller_spec.rb +106 -0
  28. data/spec/dummy/Rakefile +7 -0
  29. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  30. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  31. data/spec/dummy/app/mailers/dummy_mailer.rb +7 -0
  32. data/spec/dummy/app/views/dummy_mailer/dummy_email_notification.html.erb +1 -0
  33. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  34. data/spec/dummy/config/application.rb +45 -0
  35. data/spec/dummy/config/boot.rb +10 -0
  36. data/spec/dummy/config/database.yml +22 -0
  37. data/spec/dummy/config/environment.rb +5 -0
  38. data/spec/dummy/config/environments/development.rb +26 -0
  39. data/spec/dummy/config/environments/production.rb +49 -0
  40. data/spec/dummy/config/environments/test.rb +35 -0
  41. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  42. data/spec/dummy/config/initializers/email_manager_config.rb +2 -0
  43. data/spec/dummy/config/initializers/inflections.rb +10 -0
  44. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  45. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  46. data/spec/dummy/config/initializers/session_store.rb +8 -0
  47. data/spec/dummy/config/locales/en.yml +5 -0
  48. data/spec/dummy/config/routes.rb +58 -0
  49. data/spec/dummy/config.ru +4 -0
  50. data/spec/dummy/db/migrate/20110706133041_install_email_manager.rb +23 -0
  51. data/spec/dummy/db/test.sqlite3 +0 -0
  52. data/spec/dummy/log/server.log +0 -0
  53. data/spec/dummy/public/404.html +26 -0
  54. data/spec/dummy/public/422.html +26 -0
  55. data/spec/dummy/public/500.html +26 -0
  56. data/spec/dummy/public/favicon.ico +0 -0
  57. data/spec/dummy/public/javascripts/application.js +2 -0
  58. data/spec/dummy/public/javascripts/controls.js +965 -0
  59. data/spec/dummy/public/javascripts/dragdrop.js +974 -0
  60. data/spec/dummy/public/javascripts/effects.js +1123 -0
  61. data/spec/dummy/public/javascripts/prototype.js +6001 -0
  62. data/spec/dummy/public/javascripts/rails.js +191 -0
  63. data/spec/dummy/public/stylesheets/.gitkeep +0 -0
  64. data/spec/dummy/script/rails +6 -0
  65. data/spec/email_manager_spec.rb +7 -0
  66. data/spec/integration/navigation_spec.rb +9 -0
  67. data/spec/managed_email_observer_spec.rb +21 -0
  68. data/spec/models/managed_email_spec.rb +5 -0
  69. data/spec/routing/managed_emails_spec.rb +17 -0
  70. data/spec/spec_helper.rb +33 -0
  71. metadata +258 -0
@@ -0,0 +1,191 @@
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
+
176
+ Ajax.Responders.register({
177
+ onCreate: function(request) {
178
+ var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
179
+
180
+ if (csrf_meta_tag) {
181
+ var header = 'X-CSRF-Token',
182
+ token = csrf_meta_tag.readAttribute('content');
183
+
184
+ if (!request.options.requestHeaders) {
185
+ request.options.requestHeaders = {};
186
+ }
187
+ request.options.requestHeaders[header] = token;
188
+ }
189
+ }
190
+ });
191
+ })();
File without changes
@@ -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,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe EmailManager do
4
+ it "should be valid" do
5
+ EmailManager.should be_a(Module)
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Navigation" do
4
+ include Capybara::DSL
5
+
6
+ it "should be a valid app" do
7
+ ::Rails.application.should be_a(Dummy::Application)
8
+ end
9
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe EmailManager::ManagedEmailObserver do
4
+ describe "deliver_email" do
5
+ before(:each) do
6
+ DummyMailer.deliver_dummy_email_notification
7
+ end
8
+
9
+ it "should only store the calling file of the email if it is in /app" do
10
+ email = EmailManager::ManagedEmail.last
11
+ email.caller.should == ""
12
+ end
13
+
14
+ it "should create a ManagedEmail instance" do
15
+ email = EmailManager::ManagedEmail.last
16
+ email.to.should == "test@email_manager.gem"
17
+ email.subject.should == "Dummy email notification"
18
+ email.body.should == "This is a dummy email notification. It should never be sent.\n"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe EmailManager::ManagedEmail do
4
+ # it doesn't do much
5
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe EmailManager::ManagedEmailsController do
4
+ describe "routes" do
5
+ it "recognizes and generates #index" do
6
+ email_manager_managed_emails_path.should == "/email_manager/managed_emails"
7
+ end
8
+
9
+ it "recognizes and generates #show" do
10
+ email_manager_managed_email_path(1).should == "/email_manager/managed_email/1"
11
+ end
12
+
13
+ it "recognizes and generates #body" do
14
+ email_manager_managed_email_body_path(1).should == "/email_manager/managed_email/1/body"
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,33 @@
1
+ # Configure Rails Envinronment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require "rails/test_help"
6
+ require "rspec/rails"
7
+
8
+ ActionMailer::Base.delivery_method = :test
9
+ ActionMailer::Base.perform_deliveries = true
10
+ ActionMailer::Base.default_url_options[:host] = "test.com"
11
+
12
+ Rails.backtrace_cleaner.remove_silencers!
13
+
14
+ # Configure capybara for integration testing
15
+ require "capybara/rails"
16
+ Capybara.default_driver = :rack_test
17
+ Capybara.default_selector = :css
18
+
19
+ # Run any available migration
20
+ ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__)
21
+
22
+ # Load support files
23
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
24
+
25
+ RSpec.configure do |config|
26
+ # Remove this line if you don't want RSpec's should and should_not
27
+ # methods or matchers
28
+ require 'rspec/expectations'
29
+ config.include RSpec::Matchers
30
+
31
+ # == Mock Framework
32
+ config.mock_with :rspec
33
+ end
metadata ADDED
@@ -0,0 +1,258 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: email_manager
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Jeremiah Hemphill
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-07-06 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rails
17
+ requirement: &id001 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 3.0.0
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: sqlite3
28
+ requirement: &id002 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: rspec
39
+ requirement: &id003 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ version: 2.6.0
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: rspec-rails
50
+ requirement: &id004 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: "0"
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: *id004
59
+ - !ruby/object:Gem::Dependency
60
+ name: yard
61
+ requirement: &id005 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ~>
65
+ - !ruby/object:Gem::Version
66
+ version: 0.6.0
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: *id005
70
+ - !ruby/object:Gem::Dependency
71
+ name: capybara
72
+ requirement: &id006 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: 0.4.0
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: *id006
81
+ - !ruby/object:Gem::Dependency
82
+ name: ruby-debug19
83
+ requirement: &id007 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: "0"
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: *id007
92
+ - !ruby/object:Gem::Dependency
93
+ name: bundler
94
+ requirement: &id008 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ~>
98
+ - !ruby/object:Gem::Version
99
+ version: 1.0.0
100
+ type: :development
101
+ prerelease: false
102
+ version_requirements: *id008
103
+ - !ruby/object:Gem::Dependency
104
+ name: jeweler
105
+ requirement: &id009 !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 1.6.3
111
+ type: :development
112
+ prerelease: false
113
+ version_requirements: *id009
114
+ - !ruby/object:Gem::Dependency
115
+ name: rcov
116
+ requirement: &id010 !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: "0"
122
+ type: :development
123
+ prerelease: false
124
+ version_requirements: *id010
125
+ - !ruby/object:Gem::Dependency
126
+ name: cover_me
127
+ requirement: &id011 !ruby/object:Gem::Requirement
128
+ none: false
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: 1.0.0.rc6
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: *id011
136
+ - !ruby/object:Gem::Dependency
137
+ name: ci_reporter
138
+ requirement: &id012 !ruby/object:Gem::Requirement
139
+ none: false
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: "0"
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: *id012
147
+ description: System for storing and managing emails sent by ActionMailer
148
+ email: jeremiah@cloudspace.com
149
+ executables: []
150
+
151
+ extensions: []
152
+
153
+ extra_rdoc_files:
154
+ - LICENSE.txt
155
+ - README.rdoc
156
+ files:
157
+ - .document
158
+ - .rspec
159
+ - CHANGELOG
160
+ - Gemfile
161
+ - Gemfile.lock
162
+ - LICENSE.txt
163
+ - README.rdoc
164
+ - Rakefile
165
+ - VERSION
166
+ - app/controllers/email_manager/managed_emails_controller.rb
167
+ - app/models/email_manager/managed_email.rb
168
+ - app/views/email_manager/managed_emails/_pagination.html.erb
169
+ - app/views/email_manager/managed_emails/_search_form.html.erb
170
+ - app/views/email_manager/managed_emails/index.html.erb
171
+ - app/views/email_manager/managed_emails/show.html.erb
172
+ - config/routes.rb
173
+ - email_manager.gemspec
174
+ - lib/email_manager.rb
175
+ - lib/email_manager/engine.rb
176
+ - lib/email_manager/managed_email_observer.rb
177
+ - lib/generators/email_manager/install_generator.rb
178
+ - lib/generators/email_manager/templates/email_manager_config.rb
179
+ - lib/generators/email_manager/templates/migrations/install.rb
180
+ - lib/generators/email_manager/upgrade_generator.rb
181
+ - lib/generators/email_manager/views_generator.rb
182
+ - reload.sh
183
+ - spec/controllers/managed_emails_controller_spec.rb
184
+ - spec/dummy/Rakefile
185
+ - spec/dummy/app/controllers/application_controller.rb
186
+ - spec/dummy/app/helpers/application_helper.rb
187
+ - spec/dummy/app/mailers/dummy_mailer.rb
188
+ - spec/dummy/app/views/dummy_mailer/dummy_email_notification.html.erb
189
+ - spec/dummy/app/views/layouts/application.html.erb
190
+ - spec/dummy/config.ru
191
+ - spec/dummy/config/application.rb
192
+ - spec/dummy/config/boot.rb
193
+ - spec/dummy/config/database.yml
194
+ - spec/dummy/config/environment.rb
195
+ - spec/dummy/config/environments/development.rb
196
+ - spec/dummy/config/environments/production.rb
197
+ - spec/dummy/config/environments/test.rb
198
+ - spec/dummy/config/initializers/backtrace_silencers.rb
199
+ - spec/dummy/config/initializers/email_manager_config.rb
200
+ - spec/dummy/config/initializers/inflections.rb
201
+ - spec/dummy/config/initializers/mime_types.rb
202
+ - spec/dummy/config/initializers/secret_token.rb
203
+ - spec/dummy/config/initializers/session_store.rb
204
+ - spec/dummy/config/locales/en.yml
205
+ - spec/dummy/config/routes.rb
206
+ - spec/dummy/db/migrate/20110706133041_install_email_manager.rb
207
+ - spec/dummy/db/test.sqlite3
208
+ - spec/dummy/log/server.log
209
+ - spec/dummy/public/404.html
210
+ - spec/dummy/public/422.html
211
+ - spec/dummy/public/500.html
212
+ - spec/dummy/public/favicon.ico
213
+ - spec/dummy/public/javascripts/application.js
214
+ - spec/dummy/public/javascripts/controls.js
215
+ - spec/dummy/public/javascripts/dragdrop.js
216
+ - spec/dummy/public/javascripts/effects.js
217
+ - spec/dummy/public/javascripts/prototype.js
218
+ - spec/dummy/public/javascripts/rails.js
219
+ - spec/dummy/public/stylesheets/.gitkeep
220
+ - spec/dummy/script/rails
221
+ - spec/email_manager_spec.rb
222
+ - spec/integration/navigation_spec.rb
223
+ - spec/managed_email_observer_spec.rb
224
+ - spec/models/managed_email_spec.rb
225
+ - spec/routing/managed_emails_spec.rb
226
+ - spec/spec_helper.rb
227
+ homepage:
228
+ licenses:
229
+ - MIT
230
+ post_install_message:
231
+ rdoc_options: []
232
+
233
+ require_paths:
234
+ - lib
235
+ required_ruby_version: !ruby/object:Gem::Requirement
236
+ none: false
237
+ requirements:
238
+ - - ">="
239
+ - !ruby/object:Gem::Version
240
+ hash: -3846127610971293701
241
+ segments:
242
+ - 0
243
+ version: "0"
244
+ required_rubygems_version: !ruby/object:Gem::Requirement
245
+ none: false
246
+ requirements:
247
+ - - ">="
248
+ - !ruby/object:Gem::Version
249
+ version: "0"
250
+ requirements: []
251
+
252
+ rubyforge_project:
253
+ rubygems_version: 1.8.5
254
+ signing_key:
255
+ specification_version: 3
256
+ summary: An email manager
257
+ test_files: []
258
+