mulberry_preview 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e2f90bbb7ff7bbf578405c51edc798b07ba89ab5
4
+ data.tar.gz: 368fce015a0af866cd252a401f33e8cde0af1315
5
+ SHA512:
6
+ metadata.gz: 9f0bc570bc1e9586a07ab09ad45377bf689c3a1c5171ba6391f3997fe20d0194bf9d4c60f29547223b9c5c60d65354c58cb226dbd97d114ac4bca245e84a996c
7
+ data.tar.gz: d5dfd51b4868ac72f0ca8b9b70b47b574d1b9a5c03e21f6027df46254f98d06166d5d06941fc68a594141d445828124acc3ef51e1cc0ce0579f1dc60e354c339
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2013 James Zhan
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,3 @@
1
+ = MulberryPreview
2
+
3
+ This project rocks and uses MIT-LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,21 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'MulberryPreview'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+
18
+
19
+
20
+ Bundler::GemHelper.install_tasks
21
+
@@ -0,0 +1,143 @@
1
+ .CodeRay {
2
+ background-color: #efefef;
3
+ font-family: Monaco, "Courier New", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", monospace;
4
+ color: #000;
5
+ margin-bottom: 14px;
6
+ }
7
+
8
+ .CodeRay pre {
9
+ display: block;
10
+ padding: 5px;
11
+ margin: 0;
12
+ font-size: 13px;
13
+ line-height: 20px;
14
+ word-break: break-all;
15
+ word-wrap: break-word;
16
+ white-space: pre;
17
+ background-color: #fcfcfc;
18
+ border: 1px solid #fcfcfc;
19
+ -webkit-border-radius: 5px;
20
+ -moz-border-radius: 5px;
21
+ border-radius: 5px;
22
+ }
23
+
24
+ div.CodeRay { }
25
+ span.CodeRay { white-space: pre; border: 0px; padding: 2px }
26
+
27
+ table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px }
28
+ table.CodeRay td {
29
+ padding: 1em 0.5em;
30
+ vertical-align: top;
31
+ }
32
+
33
+ .CodeRay .line-numbers, .CodeRay .no {
34
+ background-color: #ECECEC;
35
+ color: #AAA;
36
+ text-align: right;
37
+ }
38
+
39
+ .CodeRay .line-numbers a {
40
+ color: #AAA;
41
+ }
42
+
43
+ .CodeRay .line-numbers tt { font-weight: bold }
44
+ .CodeRay .line-numbers .highlighted { color: red }
45
+ .CodeRay .line { display: block; float: left; width: 100%; }
46
+ .CodeRay span.line-numbers { padding: 0px 4px }
47
+ .CodeRay .code { width: 100% }
48
+
49
+ ol.CodeRay { font-size: 10pt }
50
+ ol.CodeRay li { white-space: pre }
51
+
52
+ .CodeRay .code pre { overflow: auto }
53
+ .CodeRay .debug { color:white ! important; background:blue ! important; }
54
+
55
+ .CodeRay .annotation { color:#007 }
56
+ .CodeRay .attribute-name { color:#f08 }
57
+ .CodeRay .attribute-value { color:#700 }
58
+ .CodeRay .binary { color:#509; font-weight:bold }
59
+ .CodeRay .comment { color:#998; font-style: italic;}
60
+ .CodeRay .char { color:#04D }
61
+ .CodeRay .char .content { color:#04D }
62
+ .CodeRay .char .delimiter { color:#039 }
63
+ .CodeRay .class { color:#458; font-weight:bold }
64
+ .CodeRay .complex { color:#A08; font-weight:bold }
65
+ .CodeRay .constant { color:teal; }
66
+ .CodeRay .color { color:#0A0 }
67
+ .CodeRay .class-variable { color:#369 }
68
+ .CodeRay .decorator { color:#B0B; }
69
+ .CodeRay .definition { color:#099; font-weight:bold }
70
+ .CodeRay .directive { color:#088; font-weight:bold }
71
+ .CodeRay .delimiter { color:black }
72
+ .CodeRay .doc { color:#970 }
73
+ .CodeRay .doctype { color:#34b }
74
+ .CodeRay .doc-string { color:#D42; font-weight:bold }
75
+ .CodeRay .escape { color:#666; font-weight:bold }
76
+ .CodeRay .entity { color:#800; font-weight:bold }
77
+ .CodeRay .error { color:#F00; background-color:#FAA }
78
+ .CodeRay .exception { color:#C00; font-weight:bold }
79
+ .CodeRay .filename { color:#099; }
80
+ .CodeRay .function { color:#900; font-weight:bold }
81
+ .CodeRay .global-variable { color:teal; font-weight:bold }
82
+ .CodeRay .hex { color:#058; font-weight:bold }
83
+ .CodeRay .integer { color:#099; }
84
+ .CodeRay .include { color:#B44; font-weight:bold }
85
+ .CodeRay .inline { color: black }
86
+ .CodeRay .inline .inline { background: #ccc }
87
+ .CodeRay .inline .inline .inline { background: #bbb }
88
+ .CodeRay .inline .inline-delimiter { color: #D14; }
89
+ .CodeRay .inline-delimiter { color: #D14; }
90
+ .CodeRay .important { color:#f00; }
91
+ .CodeRay .interpreted { color:#B2B; font-weight:bold }
92
+ .CodeRay .instance-variable { color:teal }
93
+ .CodeRay .label { color:#970; font-weight:bold }
94
+ .CodeRay .local-variable { color:#963 }
95
+ .CodeRay .octal { color:#40E; font-weight:bold }
96
+ .CodeRay .operator { }
97
+ .CodeRay .predefined-constant { font-weight:bold }
98
+ .CodeRay .predefined { color:#369; font-weight:bold }
99
+ .CodeRay .preprocessor { color:#579; }
100
+ .CodeRay .pseudo-class { color:#00C; font-weight:bold }
101
+ .CodeRay .predefined-type { color:#074; font-weight:bold }
102
+ .CodeRay .reserved, .keyword { color:#000; font-weight:bold }
103
+
104
+ .CodeRay .key { color: #808; }
105
+ .CodeRay .key .delimiter { color: #606; }
106
+ .CodeRay .key .char { color: #80f; }
107
+ .CodeRay .value { color: #088; }
108
+
109
+ .CodeRay .regexp { background-color:#fff0ff }
110
+ .CodeRay .regexp .content { color:#808 }
111
+ .CodeRay .regexp .delimiter { color:#404 }
112
+ .CodeRay .regexp .modifier { color:#C2C }
113
+ .CodeRay .regexp .function { color:#404; font-weight: bold }
114
+
115
+ .CodeRay .string { color: #D20; }
116
+ .CodeRay .string .string { }
117
+ .CodeRay .string .string .string { background-color:#ffd0d0 }
118
+ .CodeRay .string .content { color: #D14; }
119
+ .CodeRay .string .char { color: #D14; }
120
+ .CodeRay .string .delimiter { color: #D14; }
121
+
122
+ .CodeRay .shell { color:#D14 }
123
+ .CodeRay .shell .content { }
124
+ .CodeRay .shell .delimiter { color:#D14 }
125
+
126
+ .CodeRay .symbol { color:#990073 }
127
+ .CodeRay .symbol .content { color:#A60 }
128
+ .CodeRay .symbol .delimiter { color:#630 }
129
+
130
+ .CodeRay .tag { color:#070 }
131
+ .CodeRay .tag-special { color:#D70; font-weight:bold }
132
+ .CodeRay .type { color:#339; font-weight:bold }
133
+ .CodeRay .variable { color:#036 }
134
+
135
+ .CodeRay .insert { background: #afa; }
136
+ .CodeRay .delete { background: #faa; }
137
+ .CodeRay .change { color: #aaf; background: #007; }
138
+ .CodeRay .head { color: #f8f; background: #505 }
139
+
140
+ .CodeRay .insert .insert { color: #080; font-weight:bold }
141
+ .CodeRay .delete .delete { color: #800; font-weight:bold }
142
+ .CodeRay .change .change { color: #66f; }
143
+ .CodeRay .head .head { color: #f4f; }
@@ -0,0 +1,65 @@
1
+ class PreviewController < ActionController::Base
2
+
3
+ Languages = [:ruby, :python, :java, :js, :scss, :sass, :haml, :json,
4
+ :go, :sql, :yaml, :c, :coffee, :properties]
5
+
6
+ def index
7
+ clazz, id = params[:type].classify.constantize, params[:id]
8
+ r = clazz.find(id)
9
+ type, ext = r.content_type[/^[^\/]+/].to_sym, r.content_type[/(?<=\/)(x-)?(.+)/, 2].to_sym
10
+ if Languages.include?(ext)
11
+ @code = CodeRay.scan(r.content, ext).div(:line_numbers => :table, :css => :class)
12
+ render 'code', layout: 'coderay'
13
+ elsif [:pdf, :html].include?(ext)
14
+ render_native(r.content, r.content_type)
15
+ else
16
+ case type
17
+ when :text
18
+ render_native(r.content, 'text/plain')
19
+ when :image
20
+ render_native(r.content, r.content_type)
21
+ else
22
+ @resource = r
23
+ render 'download', layout: 'coderay'
24
+ end
25
+ end
26
+ end
27
+
28
+ def open
29
+ case RUBY_PLATFORM
30
+ when /darwin/i
31
+ open_osx_file
32
+ when /linux/i
33
+ open_linux_file
34
+ when /cygwin|mswin|mingw|bccwin|wince|emx/
35
+ open_windows_file
36
+ else
37
+ #other
38
+ end
39
+ head :no_content
40
+ end
41
+
42
+ def download
43
+ clazz, id = params[:type].classify.constantize, params[:id]
44
+ r = clazz.find(id)
45
+ render_native(r.content, r.content_type)
46
+ end
47
+
48
+ private
49
+ def open_osx_file
50
+ path = params[:path]
51
+ app = 'Preview'
52
+ if /^text\/.+$/ =~ params[:mime]
53
+ app = 'TextMate'
54
+ end
55
+ system %Q{open -a #{app} "#{path}"}
56
+ end
57
+
58
+ def render_native(content, content_type)
59
+ response.headers['Cache-Control'] = "public, max-age=#{12.hours.to_i}"
60
+ response.headers['Content-Type'] = content_type
61
+ response.headers['Content-Disposition'] = 'inline'
62
+ render text: content, content_type: content_type
63
+ end
64
+
65
+ end
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Webfs</title>
5
+ <%= stylesheet_link_tag "twitter/bootstrap", media: "all" %>
6
+ <%= stylesheet_link_tag "coderay", media: "all" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+ <%= yield %>
11
+ </body>
12
+ </html>
@@ -0,0 +1 @@
1
+ <%=raw @code %>
@@ -0,0 +1,6 @@
1
+ <div class="jumbotron container">
2
+ <%= link_to download_path(@resource.class.name.underscore, @resource.id) do %>
3
+ <i class="glyphicon glyphicon-download"></i><%= @resource.name %>
4
+ <% end %>
5
+ [<%= @resource.content_type %>]
6
+ </div>
data/config/mimes.yml ADDED
@@ -0,0 +1,147 @@
1
+ iso: application/x-iso9660-image
2
+
3
+ doc: application/msword
4
+ dot: application/msword
5
+ dot: application/msword
6
+ docx: application/msword
7
+ dot: application/msword
8
+ xls: application/vnd.ms-excel
9
+ xlt: application/vnd.ms-excel
10
+ xla: application/vnd.ms-excel
11
+ xlsx: application/vnd.ms-excel
12
+ ppt: application/vnd.ms-powerpoint
13
+ pot: application/vnd.ms-powerpoint
14
+ pps: application/vnd.ms-powerpoint
15
+ ppa: application/vnd.ms-powerpoint
16
+ pptx: application/vnd.ms-powerpoint
17
+ wps: application/kswps
18
+ pdf: application/pdf
19
+ djvu: application/vnd.djvu
20
+ pdg: application/vnd.pdg
21
+
22
+ key: application/vnd.apple.keynote
23
+ keynode: application/vnd.apple.keynote
24
+ pages: application/vnd.apple.pages
25
+ numbers: application/vnd.apple.numbers
26
+
27
+ xmind: application/vnd.xmind.workbook
28
+ graffle: application/x-omnigraffle
29
+
30
+ rar: application/x-rar-compressed
31
+ exe: application/x-msdownload
32
+ bat: application/x-msdownload
33
+ dll: application/x-msdownload
34
+ com: application/x-msdownload
35
+ msi: application/x-msdownload
36
+
37
+ swf: application/x-shockwave-flash
38
+ rm: application/vnd.rn-realmedia
39
+ rmvb: application/vnd.rn-realmedia
40
+
41
+ bin: application/octet-stream
42
+ dms: application/octet-stream
43
+ lrf: application/octet-stream
44
+ mar: application/octet-stream
45
+ so: application/octet-stream
46
+ dist: application/octet-stream
47
+ distz: application/octet-stream
48
+ pkg: application/octet-stream
49
+ bpk: application/octet-stream
50
+ dump: application/octet-stream
51
+ elc: application/octet-stream
52
+ deploy: application/octet-stream
53
+
54
+ epub: application/epub+zip
55
+ mobi: application/x-mobi
56
+ azw3: application/x-azw3
57
+ azw: application/x-azw
58
+ chm: application/x-chm
59
+
60
+ sh: application/x-sh
61
+ csh: application/x-csh
62
+
63
+ jar: application/java-archive
64
+ sar: application/java-archive
65
+ war: application/java-archive
66
+ ear: application/java-archive
67
+ ser: application/java-serialized-object
68
+ class: application/x-java-class
69
+ jad: text/vnd.sun.j2me.app-descriptor
70
+
71
+ opml: text/x-opml
72
+ nfo: text/x-nfo
73
+ vcs: text/x-vcalendar
74
+ vcf: text/x-vcard
75
+
76
+ yml: text/x-yaml
77
+ yaml: text/x-yaml
78
+ properties: text/x-properties
79
+ asm: text/x-asm
80
+ s: text/x-asm
81
+ c: text/x-c
82
+ cc: text/x-c
83
+ cxx: text/x-c
84
+ cpp: text/x-c
85
+ h: text/x-c
86
+ hh: text/x-c
87
+ dic: text/x-c
88
+ f: text/x-fortran
89
+ for: text/x-fortran
90
+ f77: text/x-fortran
91
+ f90: text/x-fortran
92
+ java: text/x-java
93
+ p: text/x-pascal
94
+ pas: text/x-pascal
95
+ rb: text/x-ruby
96
+ rake: text/x-ruby
97
+ ru: text/x-ruby
98
+ py: text/x-python
99
+
100
+ md: text/x-markdown
101
+ markdown: text/x-markdown
102
+ ftl: text/x-freemarker
103
+ vm: text/x-velocity
104
+
105
+ htm: text/html
106
+ text: text/plain
107
+ conf: text/plain
108
+ def: text/plain
109
+ list: text/plain
110
+ log: text/plain
111
+ ini: text/plain
112
+ m: text/plain
113
+ plist: text/plain
114
+
115
+ mp3: audio/mpeg3
116
+ midi: audio/midi
117
+ wma: audio/x-ms-wma
118
+
119
+ mp4: video/mp4
120
+ mp4v: video/mp4
121
+ mpg4: video/mp4
122
+ mpeg: video/mpeg
123
+ mpg: video/mpeg
124
+ mpe: video/mpeg
125
+ m1v: video/mpeg
126
+ m2v: video/mpeg
127
+ webm: video/webm
128
+ f4v: video/x-f4v
129
+ fli: video/x-fli
130
+ flv: video/x-flv
131
+ m4v: video/x-m4v
132
+ mkv: video/x-matroska
133
+ mk3d: video/x-matroska
134
+ mks: video/x-matroska
135
+ mng: video/x-mng
136
+ asf: video/x-ms-asf
137
+ asx: video/x-ms-asf
138
+ vob: video/x-ms-vob
139
+ wm: video/x-ms-wm
140
+ wmv: video/x-ms-wmv
141
+ wmx: video/x-ms-wmx
142
+ wvx: video/x-ms-wvx
143
+ avi: video/x-msvideo
144
+ smv: video/x-smv
145
+ movie: video/x-sgi-movie
146
+ mov: video/quicktime
147
+ moov: video/quicktime
data/config/routes.rb ADDED
@@ -0,0 +1,7 @@
1
+ Rails.application.routes.draw do
2
+
3
+ get "preview/:type/:id" => "preview#index", as: :preview
4
+ get "download/:type/:id" => "preview#download", as: :download
5
+ post "open" => "preview#open"
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ module MulberryPreview
2
+ end
3
+
4
+ if defined? Rails
5
+ require 'mulberry_preview/engine'
6
+ # require 'mulberry_preview/railtie'
7
+ end
@@ -0,0 +1,12 @@
1
+ module MulberryPreview
2
+ class Engine < ::Rails::Engine
3
+ initializer "mimes" do |app|
4
+ MIMES = YAML.load_file("#{self.class.root}/config/mimes.yml")
5
+ MIMES.each do|ext, mime|
6
+ Mime.fetch(ext) do|fallback|
7
+ Mime::Type.register mime, ext
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,28 @@
1
+ module MulberryPreview
2
+ Languages = [:ruby, :python, :java, :js, :scss, :sass, :haml, :html, :json, :go, :sql, :yaml, :c, :coffee, :properties]
3
+
4
+ module ActionViewExtension
5
+ def preview(r)
6
+ type = r.content_type[/^[^\/]+/].to_sym
7
+ ext = r.content_type[/(?<=\/)(x-)?(.+)/, 2].to_sym
8
+ case type
9
+ when :text
10
+ if Languages.include?(ext)
11
+ raw CodeRay.scan(r.content, ext).div(:line_numbers => :table, :css => :class)
12
+ else
13
+ raw "<div class=\"code\">#{r.content}</div>"
14
+ end
15
+ when :image
16
+ raw "<img src=\"#{preview_path(r.class, r.id)}\" class=\"img-thumbnail\" />"
17
+ when :application
18
+ if :pdf == ext
19
+ raw "<iframe src=\"#{preview_path(r.class, r.id)}\" width='860' height='800' border='0' style='border:none'></iframe>"
20
+ else
21
+ "#{r.content_type} => #{r}"
22
+ end
23
+ else
24
+ "Binary File [#{r}]"
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,10 @@
1
+ module MulberryPreview
2
+ class Railtie < ::Rails::Railtie #:nodoc:
3
+ initializer 'preview' do |app|
4
+ require 'mulberry_preview/helper/action_view_extension'
5
+ ActiveSupport.on_load(:action_view) do
6
+ ::ActionView::Base.send :include, MulberryPreview::ActionViewExtension
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ module MulberryPreview
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :mulberry_preview do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mulberry_preview
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - James Zhan
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.1'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 4.1.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '4.1'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 4.1.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: sqlite3
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ description: Can preview files and format the view.
48
+ email:
49
+ - zhiqiangzhan@gmail.com
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - MIT-LICENSE
55
+ - README.rdoc
56
+ - Rakefile
57
+ - app/assets/stylesheets/coderay.css
58
+ - app/controllers/preview_controller.rb
59
+ - app/views/layouts/coderay.html.erb
60
+ - app/views/preview/code.html.erb
61
+ - app/views/preview/download.html.erb
62
+ - config/mimes.yml
63
+ - config/routes.rb
64
+ - lib/mulberry_preview.rb
65
+ - lib/mulberry_preview/engine.rb
66
+ - lib/mulberry_preview/helper/action_view_extension.rb
67
+ - lib/mulberry_preview/railtie.rb
68
+ - lib/mulberry_preview/version.rb
69
+ - lib/tasks/mulberry_preview_tasks.rake
70
+ homepage: https://github.com/jameszhan/mulberry_preview
71
+ licenses:
72
+ - MIT
73
+ - GPL-2
74
+ metadata: {}
75
+ post_install_message:
76
+ rdoc_options: []
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ requirements: []
90
+ rubyforge_project:
91
+ rubygems_version: 2.2.2
92
+ signing_key:
93
+ specification_version: 4
94
+ summary: Can preview files.
95
+ test_files: []