rack-manifest 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4f51a9bd8068d28cb4785a5ecbc3830f8c4c4786
4
- data.tar.gz: 8b6e6e5a9b31b77dd2376d503a9ecb83c77f2cbc
3
+ metadata.gz: c2795a5909d3982a7fa52c2a20134d98fde8a159
4
+ data.tar.gz: 9b442a844641207709a202ad38ef44d26157fea1
5
5
  SHA512:
6
- metadata.gz: 447a2da804d5767c535311746f8a60d80de86ad2385e4172a55743866f1332ab0d42bf2ebb749a0d672ea5c43f841966cebe2323b961e00ca8ceb1615fcfda9d
7
- data.tar.gz: 18ebdf275b05433120312967c2de3ad5da7c6af7c0a789bc72543280d9f49b3ad93b452ecc8529d2d5e86a06d93cb36195012f0b9cf4398d9095197b2bb50e7c
6
+ metadata.gz: 8d768b0be298236f7b31af6b1e9545ba3bac5f73c259df6319b8bdb3f6337bbebdb5207fd1b27aadb5f1addd929ace6d09b60eb32c63eac499feefeb449ae556
7
+ data.tar.gz: 5874b0b22c9a93149434705b7a3d225b5434651f93bf042256fc2c87fc28316c535a286ff40cd714152ece9caf3ed7494167a58331171ddc849773161899abcb
data/README.md CHANGED
@@ -14,17 +14,18 @@ gem 'rack-manifest'
14
14
  ## Usage
15
15
 
16
16
  ### Rails
17
- Set your manifest.yml file like this one into your `config` directory.
17
+ * Set your manifest.yml file like this one into your `config` directory.
18
+ * ERB format and asset path helpers are available.
18
19
 
19
20
  ```yaml
20
- name: "Rack Manifest"
21
- short_name: "Manifest"
21
+ name: Rack Manifest
22
+ short_name: Manifest
22
23
  icons:
23
- src: "images/icon.png"
24
- sizes: "512x512"
25
- type: "image/png"
26
- start_url: "/"
27
- display: "standalone"
24
+ - src: <%= image_path('icon.png') %>
25
+ sizes: 512x512
26
+ type: image/png
27
+ start_url: /
28
+ display: standalone
28
29
  ```
29
30
 
30
31
  ## License
data/example/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- rack-manifest (0.1.0)
4
+ rack-manifest (0.1.2)
5
5
  rack
6
6
 
7
7
  GEM
@@ -1,8 +1,8 @@
1
- name: "Rack Manifest"
2
- short_name: "Manifest"
1
+ name: Rack Manifest
2
+ short_name: Manifest
3
3
  icons:
4
- src: "images/icon.png"
5
- sizes: "512x512"
6
- type: "image/png"
7
- start_url: "/"
8
- display: "standalone"
4
+ - src: <%= 'images/icon.png' %>
5
+ sizes: 512x512
6
+ type: image/png
7
+ start_url: /
8
+ display: standalone
data/example/config.ru CHANGED
@@ -1,4 +1,4 @@
1
- require 'rack/manifest'
1
+ require_relative '../lib/rack/manifest'
2
2
 
3
3
  use Rack::Manifest
4
4
 
@@ -0,0 +1,17 @@
1
+ require 'sprockets/cache'
2
+ require 'sprockets/erb_processor'
3
+
4
+ module Rack::Manifest::Sprockets
5
+ def load_yaml path
6
+ input = {
7
+ environment: Rails.application.assets,
8
+ filename: 'manifest.yml.erb',
9
+ content_type: 'text/yaml',
10
+ data: File.read(path),
11
+ metadata: {},
12
+ cache: Sprockets::Cache.new
13
+ }
14
+ result = Sprockets::ERBProcessor.call(input)
15
+ YAML.load(result[:data])
16
+ end
17
+ end
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  class Manifest
3
- VERSION = "0.1.2"
3
+ VERSION = "0.1.3"
4
4
  end
5
5
  end
data/lib/rack/manifest.rb CHANGED
@@ -1,27 +1,53 @@
1
- require 'yaml'
2
1
  require 'json'
2
+ require 'erb'
3
+ require 'action_view/helpers/asset_url_helper'
4
+ require 'rack/request'
3
5
  require 'rack/manifest/version'
4
6
  require 'rack/manifest/rails' if defined?(Rails::Railtie)
7
+ require 'rack/manifest/sprockets' if defined?(Sprockets) && defined?(Rails)
5
8
 
6
- module Rack
7
- class Manifest
8
- def initialize(app)
9
- @app = app
9
+ class Rack::Manifest
10
+ FILE_PATH = './config/manifest.yml'
11
+
12
+ if defined?(Sprockets) && defined?(Rails)
13
+ include Rack::Manifest::Sprockets
14
+ else
15
+ def load_yaml path
16
+ YAML.load(ERB.new(File.read(path)).result)
10
17
  end
18
+ end
19
+
20
+ def initialize(app)
21
+ @app = app
22
+ end
11
23
 
12
- def call(env)
13
- if env[PATH_INFO] == '/manifest.json'
14
- manifest = YAML.load_file('./config/manifest.yml')
15
- json = JSON.generate(manifest)
16
- [
17
- 200,
18
- {'Content-Type' => 'application/json'},
19
- [json]
20
- ]
21
- else
22
- @app.call(env)
24
+ def call(env)
25
+ if env['PATH_INFO'] == '/manifest.json'
26
+ headers = {}
27
+ if env.has_key?('HTTP_IF_MODIFIED_SINCE')
28
+ fetched_date = env['HTTP_IF_MODIFIED_SINCE']
29
+ return [304, headers, []] if get_modified_time(FILE_PATH) == fetched_date
23
30
  end
31
+ manifest = load_yaml(FILE_PATH)
32
+ json = JSON.generate(manifest)
33
+ [
34
+ 200,
35
+ headers.merge({
36
+ 'Content-Type' => 'application/json',
37
+ 'Last-Modified' => get_modified_time(FILE_PATH),
38
+ 'Content-Length' => json.length.to_s
39
+ }),
40
+ [json]
41
+ ]
42
+ else
43
+ @app.call(env)
24
44
  end
25
45
  end
46
+
47
+ private
48
+ def get_modified_time(path)
49
+ time = File.mtime(path)
50
+ time.strftime('%a, %d %b %Y %H:%M:%S GMT')
51
+ end
26
52
  end
27
53
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-manifest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - syumai
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-07-08 00:00:00.000000000 Z
11
+ date: 2016-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -86,6 +86,7 @@ files:
86
86
  - example/config/manifest.yml
87
87
  - lib/rack/manifest.rb
88
88
  - lib/rack/manifest/rails.rb
89
+ - lib/rack/manifest/sprockets.rb
89
90
  - lib/rack/manifest/version.rb
90
91
  - rack-manifest.gemspec
91
92
  homepage: https://github.com/syumai/rack-manifest