ungarbled 0.0.1 → 0.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a3a0520ac203afbf772ad736af2a9e05b9544688
4
- data.tar.gz: b12454f6b5fbdaf4114fe511c90a05d00c4291f6
3
+ metadata.gz: e27966865cca49ad7de84c0ab1dfdcf2ee4fb0b1
4
+ data.tar.gz: 3b1392f104e2e7ba89544f18e7a625c94e328b2a
5
5
  SHA512:
6
- metadata.gz: c9b90bcc1fb8a609e9ea2e898bda15fb5b17fba37a706717f313c2e0e7dee6cc5b42bc5bc2ee1ad04c15284c739ec0cd39a4b4fb89ecef5376e9cc40427add8e
7
- data.tar.gz: 3623bce15fee421668ad91ae2bf6fb9d2786de2e516c384f2deb17f9ba3d0e6b5e11118877a65462796cfcbfbce3f8a73a2973f439a559fbc8b5b104a9e85687
6
+ metadata.gz: f766260edcff6afe18de4838f7403010114c48da1385092f8fb081118b457b4349fe32fc69a4cf80e69248d92b1a8fea6fd08805278dda839da44b64eae5ff3c
7
+ data.tar.gz: 73ed2120afc81be6d58b2d9758f3c7831864c5db61d29e51ef4fbcbd4870351cc98e5afec9e24c5415c6a7f8ebf74c2908923d2e653a1aca99043fdc3ab3b245
data/lib/ungarbled.rb CHANGED
@@ -1,2 +1,3 @@
1
1
  require 'ungarbled/encoder'
2
2
  require 'ungarbled/railtie' if defined?(::Rails)
3
+ require 'ungarbled/middleware'
@@ -15,9 +15,9 @@ module Ungarbled
15
15
 
16
16
  def filename_encoder(options)
17
17
  @filename_encoder ||= Ungarbled::Encoder.new(browser)
18
- language = options[:language] ||
19
- Rails.configuration.ungarbled.default_language
20
- @filename_encoder.tap { |e| e.language = language }
18
+ lang = options[:lang] ||
19
+ Rails.configuration.ungarbled.default_lang
20
+ @filename_encoder.tap { |e| e.lang = lang }
21
21
  end
22
22
 
23
23
  def encode_filename(filename, options = {})
@@ -9,18 +9,18 @@ module Ungarbled
9
9
  def initialize(browser, options = {})
10
10
  @browser = browser
11
11
  @options = options
12
- self.language = options.delete(:language) || :base
12
+ self.lang = options.delete(:lang) || :base
13
13
  end
14
14
 
15
- attr_accessor :language, :delegate
15
+ attr_accessor :lang, :delegate
16
16
 
17
- def language=(language)
18
- @delegate = "::Ungarbled::Encoder::#{language.to_s.classify}"
17
+ def lang=(lang)
18
+ @delegate = "::Ungarbled::Encoder::#{lang.to_s.classify}"
19
19
  .constantize.send(:new, @browser, @options)
20
- @language = language.to_sym
20
+ @lang = lang.to_sym
21
21
  rescue NameError
22
22
  raise NotImplementedError,
23
- "Encoder #{language.to_s.classify} is not implemented"
23
+ "Encoder #{lang.to_s.classify} is not implemented"
24
24
  end
25
25
 
26
26
  def method_missing(name, *args)
@@ -15,7 +15,7 @@ module Ungarbled
15
15
  if @browser.windows? && !@browser.windows8?
16
16
  filename.encode('cp932', invalid: :replace)
17
17
  else
18
- supe
18
+ super
19
19
  end
20
20
  end
21
21
  end
@@ -0,0 +1,39 @@
1
+ module Ungarbled
2
+ class Middleware
3
+ DISPOSITION_KEY = 'Content-Disposition'
4
+ DISPOSITION_REGEX = /^(?:attachment|inline); filename="(.+)"$/
5
+
6
+ def initialize(app, options = {})
7
+ @app = app
8
+ @options = options
9
+ end
10
+
11
+ def call(env)
12
+ req = Rack::Request.new(env)
13
+ browser = Browser.new(
14
+ ua: req.user_agent,
15
+ accept_language: req.env['HTTP_ACCEPT_LANGUAGE']
16
+ )
17
+ encoder = Ungarbled::Encoder.new(browser, @options)
18
+ status, headers, res = @app.call(env)
19
+ disposition = headers[DISPOSITION_KEY]
20
+
21
+ if sending_file?(headers) && disposition
22
+ headers[DISPOSITION_KEY] =
23
+ encode_disposition(encoder, disposition)
24
+ end
25
+
26
+ [status, headers, res]
27
+ end
28
+
29
+ def sending_file?(headers)
30
+ headers['Content-Transfer-Encoding'] = 'binary'
31
+ end
32
+
33
+ def encode_disposition(encoder, disposition)
34
+ replacing = DISPOSITION_REGEX.match(disposition)[1]
35
+ replaced = encoder.encode(replacing)
36
+ disposition.gsub(replacing, replaced)
37
+ end
38
+ end
39
+ end
@@ -6,7 +6,7 @@ module Ungarbled
6
6
  config.ungarbled = ActiveSupport::OrderedOptions.new
7
7
 
8
8
  # Now only Japanese is supported
9
- config.ungarbled.default_language = :japanese
9
+ config.ungarbled.default_lang = :japanese
10
10
 
11
11
  initializer 'ungarbled' do
12
12
  ::ActionController::Base.send :include, Ungarbled::ActionControllerExt
@@ -1,3 +1,3 @@
1
1
  module Ungarbled
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ungarbled
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - yukihiro hara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-02 00:00:00.000000000 Z
11
+ date: 2014-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: browser
@@ -122,7 +122,8 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
- description: Ungarbled filenames for downloads with rails integration.
125
+ description: Ungarble multibyte download filename on certain platform. Rails integration
126
+ included.
126
127
  email:
127
128
  - yukihr@gmail.com
128
129
  executables: []
@@ -130,13 +131,13 @@ extensions: []
130
131
  extra_rdoc_files: []
131
132
  files:
132
133
  - MIT-LICENSE
133
- - README.rdoc
134
134
  - Rakefile
135
135
  - lib/ungarbled.rb
136
136
  - lib/ungarbled/action_controller_ext.rb
137
137
  - lib/ungarbled/encoder.rb
138
138
  - lib/ungarbled/encoder/base.rb
139
139
  - lib/ungarbled/encoder/japanese.rb
140
+ - lib/ungarbled/middleware.rb
140
141
  - lib/ungarbled/railtie.rb
141
142
  - lib/ungarbled/version.rb
142
143
  homepage: https://github.com/yukihr/ungarbled
@@ -149,9 +150,9 @@ require_paths:
149
150
  - lib
150
151
  required_ruby_version: !ruby/object:Gem::Requirement
151
152
  requirements:
152
- - - ">="
153
+ - - "~>"
153
154
  - !ruby/object:Gem::Version
154
- version: '0'
155
+ version: '1.9'
155
156
  required_rubygems_version: !ruby/object:Gem::Requirement
156
157
  requirements:
157
158
  - - ">="
@@ -162,6 +163,6 @@ rubyforge_project:
162
163
  rubygems_version: 2.2.0
163
164
  signing_key:
164
165
  specification_version: 4
165
- summary: Ungarbled filenames for downloads.
166
+ summary: Ungarble filename for downloads.
166
167
  test_files: []
167
168
  has_rdoc:
data/README.rdoc DELETED
@@ -1,3 +0,0 @@
1
- = Ungarbled
2
-
3
- This project rocks and uses MIT-LICENSE.