radiant-database_mailer-extension 1.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 (40) hide show
  1. data/README.md +159 -0
  2. data/Rakefile +120 -0
  3. data/app/controllers/admin/form_datas_controller.rb +77 -0
  4. data/app/controllers/database_mailer_processing.rb +19 -0
  5. data/app/helpers/admin/form_datas_helper.rb +57 -0
  6. data/app/models/form_data.rb +93 -0
  7. data/app/models/form_data_asset.rb +14 -0
  8. data/app/views/admin/form_datas/_export.html.haml +33 -0
  9. data/app/views/admin/form_datas/_filters.html.haml +27 -0
  10. data/app/views/admin/form_datas/index.html.haml +34 -0
  11. data/app/views/admin/form_datas/show.html.haml +49 -0
  12. data/config/routes.rb +7 -0
  13. data/database_mailer_extension.rb +31 -0
  14. data/db/migrate/001_create_form_datas.rb +16 -0
  15. data/db/migrate/002_add_data_columns.rb +13 -0
  16. data/db/migrate/20090722135916_create_form_data_assets.rb +21 -0
  17. data/features/datasets/database_mailer_dataset.rb +19 -0
  18. data/features/datasets/mailers_dataset.rb +69 -0
  19. data/features/fixtures/attachment.jpg +0 -0
  20. data/features/saving_emails_to_database.feature +45 -0
  21. data/features/step_definitions/admin_steps.rb +6 -0
  22. data/features/step_definitions/email_steps.rb +73 -0
  23. data/features/step_definitions/form_data_steps.rb +3 -0
  24. data/features/step_definitions/webrat_steps.rb +119 -0
  25. data/features/support/env.rb +28 -0
  26. data/features/support/paths.rb +25 -0
  27. data/lib/radiant-database_mailer-extension.rb +8 -0
  28. data/lib/tasks/database_mailer_extension_tasks.rake +31 -0
  29. data/public/javascripts/admin/database_mailer.js +73 -0
  30. data/public/stylesheets/sass/admin/database_mailer.sass +235 -0
  31. data/radiant-database_mailer-extension.gemspec +26 -0
  32. data/spec/controllers/form_datas_controller_spec.rb +272 -0
  33. data/spec/controllers/mail_controller_spec.rb +40 -0
  34. data/spec/helpers/form_datas_helper_spec.rb +5 -0
  35. data/spec/models/form_data_asset_spec.rb +11 -0
  36. data/spec/models/form_data_spec.rb +151 -0
  37. data/spec/spec.opts +6 -0
  38. data/spec/spec_helper.rb +37 -0
  39. data/spec/views/index.html.erb_spec.rb +25 -0
  40. metadata +139 -0
@@ -0,0 +1,151 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe FormData do
4
+ DATABASE_MAILER_COLUMNS.each_key do |key|
5
+ it "defines named scope by_#{key}" do
6
+ FormData.respond_to?(:"by_#{key}").should be_true
7
+ end
8
+ end
9
+
10
+ it "finds urls" do
11
+ FormData.should_receive(:find).with(:all, :group => 'url')
12
+ FormData.find_all_group_by_url
13
+ end
14
+
15
+ describe "handling #form_paginate" do
16
+ FormData::SORT_COLUMNS.each do |col|
17
+ it "sorts by known column #{col}" do
18
+ FormData.should_receive(:paginate).with(:order => "#{col} asc", :page => 1, :per_page => 10)
19
+ FormData.form_paginate(:sort_by => col, :sort_order => 'asc', :page => 1)
20
+ end
21
+ end
22
+
23
+ it "does not sort by unknown column" do
24
+ FormData.should_receive(:paginate).with(:page => 1, :per_page => 10)
25
+ FormData.form_paginate(:sort_by => "test", :sort_order => 'asc', :page => 1)
26
+ end
27
+
28
+ it "does not sort by unknown order attribute" do
29
+ FormData.should_receive(:paginate).with(:page => 1, :per_page => 10)
30
+ FormData.form_paginate(:sort_by => "name", :sort_order => 'test', :page => 1)
31
+ end
32
+
33
+ FormData::FILTER_COLUMNS.each do |key|
34
+ it "filters by :#{key}" do
35
+ foo = mock("proxy")
36
+ foo.should_receive(:paginate)
37
+ FormData.should_receive(:"by_#{key}").with('test').and_return(foo)
38
+ FormData.form_paginate(key => 'test')
39
+ end
40
+ end
41
+ end
42
+
43
+ describe "handling #find_for_export" do
44
+ FormData::SORT_COLUMNS.each do |col|
45
+ it "sorts by known column #{col}" do
46
+ FormData.should_receive(:find).with(:all, :order => "#{col} asc")
47
+ FormData.find_for_export({:sort_by => col, :sort_order => 'asc'}, false)
48
+ end
49
+ end
50
+
51
+ it "does not sort by unknown column" do
52
+ FormData.should_receive(:find)
53
+ FormData.find_for_export({:sort_by => "test", :sort_order => 'asc'}, false)
54
+ end
55
+
56
+ it "does not sort by unknown order attribute" do
57
+ FormData.should_receive(:find)
58
+ FormData.find_for_export({:sort_by => "name", :sort_order => 'test'}, false)
59
+ end
60
+
61
+ FormData::FILTER_COLUMNS.each do |key|
62
+ it "filters by :#{key} and not_exported" do
63
+ filter_by_key_scope = mock("named_scope :by_#{key}")
64
+ filter_by_key_scope.should_receive(:find)
65
+
66
+ not_exported_scope = mock("named_scope :not_exported")
67
+ FormData.should_receive(:not_exported).and_return(not_exported_scope)
68
+
69
+ not_exported_scope.should_receive(:"by_#{key}").with('test').and_return(filter_by_key_scope)
70
+
71
+ FormData.find_for_export({key => 'test'}, false)
72
+ end
73
+
74
+ it "filters by :#{key} including exported" do
75
+ filter_by_key_scope = mock("named_scope :by_#{key}")
76
+ filter_by_key_scope.should_receive(:find)
77
+
78
+ FormData.should_receive(:"by_#{key}").with('test').and_return(filter_by_key_scope)
79
+
80
+ FormData.find_for_export({key => 'test'}, true)
81
+ end
82
+ end
83
+ end
84
+
85
+ describe "handling #export_csv" do
86
+ before do
87
+ @jerry = mock_model(FormData, :name => "Jerry", :message => "Superman", :url => '/newsletter/', :exported= => nil, :save => true)
88
+ @george = mock_model(FormData,:name => "George", :message => "I'm out, baby!", :url => '/contact/', :exported= => nil, :save => true)
89
+ @form_datas = [@jerry, @george]
90
+ FormData.stub!(:find_for_export).and_return(@form_datas)
91
+
92
+ @export_params = mock("export params")
93
+ @time = Time.now
94
+ end
95
+
96
+ def do_export(columns=%w(name message url))
97
+ FormData.export_csv(@export_params, columns, @time, false)
98
+ end
99
+
100
+ it "finds items for export" do
101
+ FormData.should_receive(:find_for_export).with(@export_params, false).and_return(@form_datas)
102
+ do_export
103
+ end
104
+
105
+ it "marks exported time for each item" do
106
+ @form_datas.each do |fd|
107
+ fd.should_receive(:exported=).with(@time.to_s(:db))
108
+ fd.should_receive(:save).and_return(true)
109
+ end
110
+ do_export
111
+ end
112
+
113
+ it "generates csv for all columns" do
114
+ do_export.should == "Name,Message,Url\nJerry,Superman,/newsletter/\nGeorge,\"I'm out, baby!\",/contact/\n"
115
+ end
116
+
117
+ it "generates csv for selected columns" do
118
+ do_export(%w(name url)).should == "Name,Url\nJerry,/newsletter/\nGeorge,/contact/\n"
119
+ end
120
+ end
121
+
122
+ describe "handling #export_xls" do
123
+
124
+ before do
125
+ @jerry = mock_model(FormData, :name => "Jerry", :message => "Superman", :url => '/newsletter/', :exported= => nil, :save => true)
126
+ @george = mock_model(FormData,:name => "George", :message => "I'm out, baby!", :url => '/contact/', :exported= => nil, :save => true)
127
+ @form_datas = [@jerry, @george]
128
+ FormData.stub!(:find_for_export).and_return(@form_datas)
129
+
130
+ @export_params = mock("export params")
131
+ @time = Time.now
132
+ end
133
+
134
+ def do_export(columns=%w(name message url))
135
+ FormData.export_xls(@export_params, columns, @time, false)
136
+ end
137
+
138
+ it "finds items for export" do
139
+ FormData.should_receive(:find_for_export).with(@export_params, false).and_return(@form_datas)
140
+ do_export
141
+ end
142
+
143
+ it "marks exported time for each item" do
144
+ @form_datas.each do |fd|
145
+ fd.should_receive(:exported=).with(@time.to_s(:db))
146
+ fd.should_receive(:save).and_return(true)
147
+ end
148
+ do_export
149
+ end
150
+ end
151
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,6 @@
1
+ --colour
2
+ --format
3
+ progress
4
+ --loadby
5
+ mtime
6
+ --reverse
@@ -0,0 +1,37 @@
1
+ unless defined? RADIANT_ROOT
2
+ ENV["RAILS_ENV"] = "test"
3
+ case
4
+ when ENV["RADIANT_ENV_FILE"]
5
+ require ENV["RADIANT_ENV_FILE"]
6
+ when File.dirname(__FILE__) =~ %r{vendor/radiant/vendor/extensions}
7
+ require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../../../")}/config/environment"
8
+ else
9
+ require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../")}/config/environment"
10
+ end
11
+ end
12
+ require "#{RADIANT_ROOT}/spec/spec_helper"
13
+
14
+ if File.directory?(File.dirname(__FILE__) + "/../features/datasets")
15
+ Dataset::Resolver.default << (File.dirname(__FILE__) + "/../features/datasets")
16
+ end
17
+ if File.directory?(File.dirname(__FILE__) + "/matchers")
18
+ Dir[File.dirname(__FILE__) + "/matchers/*.rb"].each {|file| require file }
19
+ end
20
+
21
+ Spec::Runner.configure do |config|
22
+ # config.use_transactional_fixtures = true
23
+ # config.use_instantiated_fixtures = false
24
+ # config.fixture_path = RAILS_ROOT + '/spec/fixtures'
25
+
26
+ # You can declare fixtures for each behaviour like this:
27
+ # describe "...." do
28
+ # fixtures :table_a, :table_b
29
+ #
30
+ # Alternatively, if you prefer to declare them only once, you can
31
+ # do so here, like so ...
32
+ #
33
+ # config.global_fixtures = :table_a, :table_b
34
+ #
35
+ # If you declare global fixtures, be aware that they will be declared
36
+ # for all of your examples, even those that don't use them.
37
+ end
@@ -0,0 +1,25 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe 'form_datas/index.html.erb' do
4
+ before do
5
+ @list_params = {:url => "/contact/", :name => "test", :message => "test message",
6
+ :email => "test@example.com", :company => "Aissac", :city => "Cluj",
7
+ :page => 1, :sort_by => "name", :sort_order => "asc"}
8
+ template.stub!(:list_params).and_return(@list_params)
9
+
10
+ @contact = mock_model(FormData, :url => '/contact/')
11
+ @newsletter = mock_model(FormData, :url => '/newsletter/')
12
+ assigns[:urls] = [@contact, @newsletter]
13
+
14
+ @saved_items = (1..25).map { |i| stub_model(FormData, :name => "Data ##{i}") }.paginate(:page => 1, :per_page => 10)
15
+ assigns[:saved_items] = @saved_items
16
+ end
17
+
18
+ def do_render
19
+ render '/admin/form_datas/index.html.haml'
20
+ end
21
+
22
+ it "renders" do
23
+ do_render
24
+ end
25
+ end
metadata ADDED
@@ -0,0 +1,139 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: radiant-database_mailer-extension
3
+ version: !ruby/object:Gem::Version
4
+ hash: 21
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 1
10
+ version: 1.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Cristi Duma
14
+ - Istvan Hoka
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2012-01-22 00:00:00 +01:00
20
+ default_executable:
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: radiant-mailer-extension
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ hash: 17
31
+ segments:
32
+ - 1
33
+ - 0
34
+ - 3
35
+ version: 1.0.3
36
+ type: :runtime
37
+ version_requirements: *id001
38
+ description: Save fields from mailer forms to the database.
39
+ email:
40
+ - cristi.duma@aissac.ro
41
+ executables: []
42
+
43
+ extensions: []
44
+
45
+ extra_rdoc_files: []
46
+
47
+ files:
48
+ - app/controllers/admin/form_datas_controller.rb
49
+ - app/controllers/database_mailer_processing.rb
50
+ - app/helpers/admin/form_datas_helper.rb
51
+ - app/models/form_data.rb
52
+ - app/models/form_data_asset.rb
53
+ - app/views/admin/form_datas/_export.html.haml
54
+ - app/views/admin/form_datas/_filters.html.haml
55
+ - app/views/admin/form_datas/index.html.haml
56
+ - app/views/admin/form_datas/show.html.haml
57
+ - config/routes.rb
58
+ - database_mailer_extension.rb
59
+ - db/migrate/001_create_form_datas.rb
60
+ - db/migrate/002_add_data_columns.rb
61
+ - db/migrate/20090722135916_create_form_data_assets.rb
62
+ - features/datasets/database_mailer_dataset.rb
63
+ - features/datasets/mailers_dataset.rb
64
+ - features/fixtures/attachment.jpg
65
+ - features/saving_emails_to_database.feature
66
+ - features/step_definitions/admin_steps.rb
67
+ - features/step_definitions/email_steps.rb
68
+ - features/step_definitions/form_data_steps.rb
69
+ - features/step_definitions/webrat_steps.rb
70
+ - features/support/env.rb
71
+ - features/support/paths.rb
72
+ - lib/radiant-database_mailer-extension.rb
73
+ - lib/tasks/database_mailer_extension_tasks.rake
74
+ - public/javascripts/admin/database_mailer.js
75
+ - public/stylesheets/sass/admin/database_mailer.sass
76
+ - radiant-database_mailer-extension.gemspec
77
+ - Rakefile
78
+ - README.md
79
+ - spec/controllers/form_datas_controller_spec.rb
80
+ - spec/controllers/mail_controller_spec.rb
81
+ - spec/helpers/form_datas_helper_spec.rb
82
+ - spec/models/form_data_asset_spec.rb
83
+ - spec/models/form_data_spec.rb
84
+ - spec/spec.opts
85
+ - spec/spec_helper.rb
86
+ - spec/views/index.html.erb_spec.rb
87
+ has_rdoc: true
88
+ homepage: http://blog.aissac.ro/radiant/database-mailer-extension/
89
+ licenses: []
90
+
91
+ post_install_message:
92
+ rdoc_options: []
93
+
94
+ require_paths:
95
+ - lib
96
+ required_ruby_version: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ hash: 3
102
+ segments:
103
+ - 0
104
+ version: "0"
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ hash: 3
111
+ segments:
112
+ - 0
113
+ version: "0"
114
+ requirements: []
115
+
116
+ rubyforge_project:
117
+ rubygems_version: 1.3.7
118
+ signing_key:
119
+ specification_version: 3
120
+ summary: Database mailer for Radiant CMS
121
+ test_files:
122
+ - spec/controllers/form_datas_controller_spec.rb
123
+ - spec/controllers/mail_controller_spec.rb
124
+ - spec/helpers/form_datas_helper_spec.rb
125
+ - spec/models/form_data_asset_spec.rb
126
+ - spec/models/form_data_spec.rb
127
+ - spec/spec.opts
128
+ - spec/spec_helper.rb
129
+ - spec/views/index.html.erb_spec.rb
130
+ - features/datasets/database_mailer_dataset.rb
131
+ - features/datasets/mailers_dataset.rb
132
+ - features/fixtures/attachment.jpg
133
+ - features/saving_emails_to_database.feature
134
+ - features/step_definitions/admin_steps.rb
135
+ - features/step_definitions/email_steps.rb
136
+ - features/step_definitions/form_data_steps.rb
137
+ - features/step_definitions/webrat_steps.rb
138
+ - features/support/env.rb
139
+ - features/support/paths.rb