rack-manifest 0.1.2 → 0.1.3

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: 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