cloudxls-rails 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -35,7 +35,7 @@ ActionController::Renderers.add :csv do |scope, options|
35
35
  filename = options.fetch(:filename, "data-#{DateTime.now.to_s}.csv")
36
36
  columns = options[:columns]
37
37
 
38
- if options[:stream] == true
38
+ if options[:stream]
39
39
  CloudXLSRails::CSVResponder.stream!(self, scope, options)
40
40
  else # no stream:
41
41
  data = CloudXLS::CSVWriter.text(scope, {:columns => columns})
@@ -29,10 +29,20 @@ end
29
29
  # For respond_to default
30
30
  class ActionController::Responder
31
31
  def to_xls
32
- if options[:stream] == true
32
+ stream = options.delete(:stream) || false
33
+ if stream # either string or boolean
33
34
  options[:data] ||= {}
34
- options[:data][:url] ||= controller.request.url.gsub(/xls\Z/, "csv")
35
+ options[:data][:url] ||= cloudxls_stream_url(stream, 'xls')
35
36
  end
36
37
  CloudXLSRails::XLSResponder.redirect!(controller, resources.last, options)
37
38
  end
39
+
40
+ protected
41
+ def cloudxls_stream_url(stream, extension = 'xls')
42
+ if stream == true
43
+ controller.request.url.gsub(/#{extension}\Z/, "csv")
44
+ else
45
+ stream.to_s
46
+ end
47
+ end
38
48
  end
@@ -30,9 +30,10 @@ end
30
30
  # For respond_to default
31
31
  class ActionController::Responder
32
32
  def to_xlsx
33
- if options[:stream] == true
33
+ stream = options.delete(:stream) || false
34
+ if stream # either string or boolean
34
35
  options[:data] ||= {}
35
- options[:data][:url] ||= controller.request.url.gsub(/xlsx\Z/, "csv")
36
+ options[:data][:url] ||= cloudxls_stream_url(stream, 'xlsx')
36
37
  end
37
38
  CloudXLSRails::XLSXResponder.redirect!(controller, resources.last, options)
38
39
  end
@@ -1,3 +1,3 @@
1
1
  module CloudXLSRails
2
- VERSION = '0.4.2'
2
+ VERSION = '0.4.3'
3
3
  end
@@ -58,7 +58,7 @@ describe 'Request', :type => :request do
58
58
 
59
59
  it "/posts/stream.xls has a working csv export" do
60
60
  CloudXLS.should_receive(:xpipe) { |options|
61
- !options[:data][:url].end_with?("posts/stream.csv") &&
61
+ !options[:data][:url].ends_with?("posts/stream.csv") &&
62
62
  options.keys.length == 1
63
63
  }.and_return(OpenStruct.new(:url => "/successful_redirect"))
64
64
 
@@ -66,4 +66,34 @@ describe 'Request', :type => :request do
66
66
  page.should have_content("OK")
67
67
  end
68
68
  end
69
+
70
+ describe "/posts/stream_with_custom_url" do
71
+ it "/posts/stream_with_custom_url.csv should xpipe with csv url" do
72
+ visit '/posts/stream_with_custom_url.csv'
73
+ page.should have_content [
74
+ "Title,Visits,Conversion Rate,Published On,Published,Expired At",
75
+ "hello world,12032,0.24,2013-12-24,false,2013-12-25T12:30:30.000+0000"
76
+ ].join("\n")
77
+ end
78
+
79
+ it "/posts/stream_with_custom_url.xls will redirect to custom url" do
80
+ CloudXLS.should_receive(:xpipe) { |options|
81
+ !options[:data][:url].ends_with?("successful_redirect") &&
82
+ options.keys.length == 1
83
+ }.and_return(OpenStruct.new(:url => "/successful_redirect"))
84
+
85
+ visit '/posts/stream_with_custom_url.xls'
86
+ page.should have_content("OK")
87
+ end
88
+
89
+ it "/posts/stream_with_custom_url.xlsx will redirect to custom url" do
90
+ CloudXLS.should_receive(:xpipe) { |options|
91
+ !options[:data][:url].ends_with?("successful_redirect") &&
92
+ options.keys.length == 1
93
+ }.and_return(OpenStruct.new(:url => "/successful_redirect"))
94
+
95
+ visit '/posts/stream_with_custom_url.xlsx'
96
+ page.should have_content("OK")
97
+ end
98
+ end
69
99
  end
@@ -2,11 +2,20 @@ class PostsController < ApplicationController
2
2
  respond_to :csv, :xls, :xlsx, :html
3
3
 
4
4
  def index
5
- respond_with(Post.all, :columns => export_attributes)
5
+ respond_with(Post.all,
6
+ :columns => export_attributes)
6
7
  end
7
8
 
8
9
  def stream
9
- respond_with(Post.all, :stream => true, :columns => export_attributes)
10
+ respond_with(Post.all,
11
+ :stream => true,
12
+ :columns => export_attributes)
13
+ end
14
+
15
+ def stream_with_custom_url
16
+ respond_with(Post.all,
17
+ :stream => "/successful_redirect",
18
+ :columns => export_attributes)
10
19
  end
11
20
 
12
21
  # Used for stub/mocking a redirect request
@@ -2,6 +2,7 @@ TestApp::Application.routes.draw do
2
2
  resources :posts do
3
3
  collection do
4
4
  get "stream"
5
+ get "stream_with_custom_url"
5
6
  end
6
7
  end
7
8
  get "successful_redirect" => "posts#successful_redirect"
@@ -0,0 +1,28 @@
1
+ # encoding: UTF-8
2
+ # This file is auto-generated from the current state of the database. Instead
3
+ # of editing this file, please use the migrations feature of Active Record to
4
+ # incrementally modify your database, and then regenerate this schema definition.
5
+ #
6
+ # Note that this schema.rb definition is the authoritative source for your
7
+ # database schema. If you need to create the application database on another
8
+ # system, you should be using db:schema:load, not running all the migrations
9
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
11
+ #
12
+ # It's strongly recommended that you check this file into your version control system.
13
+
14
+ ActiveRecord::Schema.define(version: 20120717192452) do
15
+
16
+ create_table "posts", force: true do |t|
17
+ t.string "title"
18
+ t.integer "visits"
19
+ t.float "conversion_rate"
20
+ t.date "published_on"
21
+ t.datetime "expired_at"
22
+ t.boolean "published"
23
+ t.datetime "unix_timestamp"
24
+ t.datetime "created_at"
25
+ t.datetime "updated_at"
26
+ end
27
+
28
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudxls-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-20 00:00:00.000000000 Z
12
+ date: 2013-11-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cloudxls
@@ -162,6 +162,7 @@ files:
162
162
  - spec/test_app/config/locales/en.yml
163
163
  - spec/test_app/config/routes.rb
164
164
  - spec/test_app/db/migrate/20120717192452_create_posts.rb
165
+ - spec/test_app/db/schema.rb
165
166
  - spec/test_app/lib/assets/.gitkeep
166
167
  - spec/test_app/log/.gitkeep
167
168
  - spec/test_app/public/404.html
@@ -233,6 +234,7 @@ test_files:
233
234
  - spec/test_app/config/locales/en.yml
234
235
  - spec/test_app/config/routes.rb
235
236
  - spec/test_app/db/migrate/20120717192452_create_posts.rb
237
+ - spec/test_app/db/schema.rb
236
238
  - spec/test_app/lib/assets/.gitkeep
237
239
  - spec/test_app/log/.gitkeep
238
240
  - spec/test_app/public/404.html