komic-cli 0.1.5 → 0.1.6

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: cf54643b2a545b009d0a7c0e6ca61a958678c5d4
4
- data.tar.gz: e52321f905f7a397454b71b5f3e37597ebce1179
3
+ metadata.gz: 0cd975971ff6b6728935ed9b6e5f1f3f004a692c
4
+ data.tar.gz: a85bc5db65253ff21f0b28eebe5f30810acdcc73
5
5
  SHA512:
6
- metadata.gz: 3ef217ce390697eb1f43bd7bbe11c6fc690a7a61d884f16f6b416f45e405fb0a9601d4635131d1fb31081ea0598c75d711d982d952aed93afae600cc230cd5df
7
- data.tar.gz: f9c14012a4db735458833e73bc0f5f4571c424465d30b2d99ea0f538c8c9ddae8c128a350bdcf0f606658fdc7623cf4ec04c0baffc5eb13c71afe5e1cd4e407a
6
+ metadata.gz: a290cbccea8dce6d1072238758e6baf86f6eb3947f4c0aed2d3cef51709643aa2eaab094edb683fde81423f876a905bd4a046f6dafb4bc1b45ba5de913057e3c
7
+ data.tar.gz: 147b794d19b32f8be2c0e2141ce07d84f6a791dab51ce665394f6d4ad844e905d33942736e32dbf5da405b2825f8bb370232c3db44758bbdde2f703f33a11c47
data/komic-cli.gemspec CHANGED
@@ -28,6 +28,7 @@ Gem::Specification.new do |gem|
28
28
  gem.add_runtime_dependency 'json-schema', '~> 2.5'
29
29
  gem.add_runtime_dependency 'ruby-progressbar', '~> 1.7'
30
30
  gem.add_runtime_dependency 'rubyzip', '~> 1.1'
31
+ gem.add_runtime_dependency 'uglifier', '~> 2.7.1'
31
32
 
32
33
  gem.add_development_dependency 'bundler', '~> 1.0'
33
34
  gem.add_development_dependency 'rake', '~> 0.8'
@@ -0,0 +1,29 @@
1
+ require 'tempfile'
2
+ require 'komic/utils'
3
+ require 'zip'
4
+
5
+ module Komic::Builder
6
+ class Directory
7
+ attr_reader :images
8
+
9
+ def initialize(type_string, options)
10
+ @options = options
11
+ @path = File.join(Dir.pwd, type_string)
12
+ end
13
+
14
+ def images
15
+ images = []
16
+ Dir.glob(File.join(@path, FNMATCH_FOR_IMAGE)).
17
+ sort_by { |x| File.basename(x).split('.')[0].to_i }.
18
+ each_with_index do |entry_path, index|
19
+ will_be_write = Tempfile.new("#{ File.basename(entry_path) }")
20
+ image = MiniMagick::Image.open(entry_path)
21
+ image.write will_be_write.path
22
+ images.push({
23
+ width: image.width, height: image.height, src: will_be_write
24
+ })
25
+ end
26
+ return images
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,34 @@
1
+ require 'tempfile'
2
+ require 'komic/utils'
3
+ require 'zip'
4
+
5
+
6
+ module Komic::Builder
7
+ class Zip
8
+ attr_reader :images
9
+
10
+ def initialize(type_string, options)
11
+ @options = options
12
+ @zip_path = File.join(Dir.pwd, type_string)
13
+ end
14
+
15
+ def images
16
+ images = []
17
+ ::Zip::File.open(@zip_path) do |zip_file|
18
+ zip_file.
19
+ sort_by { |x| File.basename(x.name).split('.')[0].to_i }.
20
+ select { |x| File.fnmatch?(FNMATCH_FOR_IMAGE, x.name, File::FNM_EXTGLOB) }.
21
+ each do |entry|
22
+ p entry.name
23
+ will_be_write = Tempfile.new("#{ entry.name }")
24
+ image = MiniMagick::Image.read(entry.get_input_stream.read)
25
+ image.write will_be_write.path
26
+ images.push({
27
+ width: image.width, height: image.height, src: will_be_write
28
+ })
29
+ end
30
+ end
31
+ return images
32
+ end
33
+ end
34
+ end
data/lib/komic/builder.rb CHANGED
@@ -1,8 +1,12 @@
1
1
  require 'komic/builder/pdf'
2
+ require 'komic/builder/directory'
3
+ require 'komic/builder/zip'
2
4
  require 'komic/builder/douban_album'
3
5
  require 'uri'
4
6
 
5
7
  module Komic::Builder
8
+ IMAGE_SUFFIXES = ['png', 'jpg', 'jpeg', 'webp', 'bmp', 'gif']
9
+ FNMATCH_FOR_IMAGE = "**.{#{IMAGE_SUFFIXES.join(',')}}"
6
10
  class Factory
7
11
  class << self
8
12
  def detect_type(string)
@@ -14,8 +18,13 @@ module Komic::Builder
14
18
  end
15
19
 
16
20
  if File.exists?(path)
17
- if File.extname(path) == '.pdf'
21
+ file_extname = File.extname(path)
22
+ if file_extname == '.pdf'
18
23
  return 'pdf'
24
+ elsif file_extname == '.zip'
25
+ return 'zip'
26
+ elsif File.directory?(path)
27
+ return 'directory'
19
28
  end
20
29
  end
21
30
  raise "Builder can't be found."
@@ -24,6 +33,8 @@ module Komic::Builder
24
33
  def get_builder(type_string, options)
25
34
  case detect_type(type_string)
26
35
  when 'pdf' then PDF.new(type_string, options)
36
+ when 'zip' then Zip.new(type_string, options)
37
+ when 'directory' then Directory.new(type_string, options)
27
38
  when 'douban_album' then DoubanAlbum.new(type_string, options)
28
39
  end
29
40
  end
data/lib/komic/cli.rb CHANGED
@@ -32,6 +32,7 @@ module Komic
32
32
 
33
33
  desc "dev", '生成 dev 的数据'
34
34
  option :name, default: "dev", desc: "设定文件夹名"
35
+ option :debug, default: true, desc: "开启 debug 模式"
35
36
  def dev(type_string)
36
37
  generator = Komic::Generator.new
37
38
  pdf_builder = Builder::Factory.get_builder(type_string, options)
@@ -11,6 +11,10 @@
11
11
  "id": "komic_version",
12
12
  "type": "string"
13
13
  },
14
+ "content_json_uuid": {
15
+ "id": "content_json_uuid",
16
+ "type": "string"
17
+ },
14
18
  "name": {
15
19
  "id": "name",
16
20
  "type": "string"
@@ -51,6 +55,34 @@
51
55
  "id": "0",
52
56
  "type": "object",
53
57
  "properties": {
58
+ "web": {
59
+ "id": "web",
60
+ "type": "object",
61
+ "properties": {
62
+ "src": {
63
+ "id": "src",
64
+ "type": "object",
65
+ "properties": {
66
+ "default": {
67
+ "id": "default",
68
+ "type": "string"
69
+ },
70
+ "jpg": {
71
+ "id": "jpg",
72
+ "type": "string"
73
+ }
74
+ }
75
+ },
76
+ "width": {
77
+ "id": "width",
78
+ "type": "integer"
79
+ },
80
+ "height": {
81
+ "id": "height",
82
+ "type": "integer"
83
+ }
84
+ }
85
+ },
54
86
  "src": {
55
87
  "id": "src",
56
88
  "type": "string"
@@ -7,6 +7,8 @@ require 'mini_magick'
7
7
  require 'base64'
8
8
  require 'open-uri'
9
9
  require 'zip'
10
+ require 'uglifier'
11
+ require 'securerandom'
10
12
 
11
13
  require 'komic/version'
12
14
  require 'komic/utils'
@@ -70,16 +72,17 @@ module Komic
70
72
  end
71
73
  end
72
74
 
73
- def to_build
75
+ def to_build(options)
74
76
  content_builder = Jbuilder.new do |json|
75
77
  json.komic_cli_version Komic::VERSION
76
78
  json.content_json_version Komic::CONTENT_JSON_VERSION
79
+ json.content_json_uuid SecureRandom.uuid
77
80
  json.(@meta, :name, :author, :description, :thumbnails)
78
81
  json.images @images
79
82
  end
80
83
  data = content_builder.target!
81
84
  validate_json(data)
82
- return data
85
+ return options[:debug] ? JSON.pretty_generate(JSON.parse(data)) : data
83
86
  end
84
87
  end
85
88
 
@@ -127,7 +130,7 @@ module Komic
127
130
 
128
131
  images = data[:images]
129
132
 
130
- images.map.with_index do |image, index|
133
+ images.map!.with_index do |image, index|
131
134
  # dirty but work
132
135
  if image[:src].instance_of? Tempfile
133
136
  will_be_open = image[:src].path
@@ -137,6 +140,7 @@ module Komic
137
140
 
138
141
  manager = MiniMagick::Image.open(will_be_open)
139
142
 
143
+ image_type = manager.type.downcase
140
144
  image_path = File.join(image_dir,
141
145
  [index, manager.type.downcase].join('.'))
142
146
 
@@ -144,7 +148,19 @@ module Komic
144
148
  manager.strip() unless manager.type.downcase == 'svg'
145
149
  manager.write image_path
146
150
  image[:src] = image_path
147
- image
151
+
152
+ manager.format 'webp'
153
+ webp_path = File.join(image_dir,
154
+ [[index, 'webp'].join('-'), manager.type.downcase].join('.'))
155
+ manager.write webp_path
156
+
157
+ src = {}
158
+ src[:default] = image_type
159
+ src[image_type] = image_path
160
+ src[:webp] = webp_path
161
+
162
+ web = Utils.deep_merge_hashes(image, { src: src })
163
+ Utils.deep_merge_hashes(image, { web: web })
148
164
  end
149
165
 
150
166
  thumbnails_builder = ThumbnailsBuilder.new(images)
@@ -153,7 +169,7 @@ module Komic
153
169
  file.write thumbnails_builder.to_build
154
170
  end
155
171
 
156
- images.map do |image, index|
172
+ images.map do |image|
157
173
  image[:src] = Utils.get_relative_path(image[:src], root_dir)
158
174
  if options[:'remote-url']
159
175
  image[:src] = "https://placeimg.com/#{image[:width]}/#{image[:height]}/any"
@@ -177,7 +193,7 @@ module Komic
177
193
 
178
194
  content_builder = ContentBuilder.new(meta, images)
179
195
  File.open(File.join(root_dir, './content.json'), 'w') do |file|
180
- file.write content_builder.to_build
196
+ file.write content_builder.to_build(options)
181
197
  end
182
198
  end
183
199
 
@@ -188,12 +204,18 @@ module Komic
188
204
  dist_branch = "master"
189
205
  uri = "https://github.com/komic-awesome/#{dist_project}/archive/#{dist_branch}.zip"
190
206
  source = open(uri)
191
- Zip::File.open(source.path) do |zip_file|
207
+ ::Zip::File.open(source.path) do |zip_file|
192
208
  zip_file.each do |entry|
193
209
  entry.extract(File.join(root_dir, File.basename(entry.name))) \
194
210
  if File.fnmatch("#{dist_project}-#{dist_branch}/?*", entry.name)
195
211
  end
196
212
  end
213
+ Dir.glob("#{root_dir}/**/*.js") do |path|
214
+ uglified = Uglifier.compile(File.read(path))
215
+ File.open(path, 'w') do |file|
216
+ file.write uglified
217
+ end
218
+ end
197
219
  end
198
220
  end
199
221
  end
data/lib/komic/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Komic
2
- VERSION = '0.1.5'
3
- CONTENT_JSON_VERSION = '0.1.0'
2
+ VERSION = '0.1.6'
3
+ CONTENT_JSON_VERSION = '0.1.1'
4
4
  end
data/spec/builder_spec.rb CHANGED
@@ -5,9 +5,19 @@ describe Komic::Builder do
5
5
  subject { Komic::Builder::Factory }
6
6
  context "detect file" do
7
7
  before { allow(File).to receive(:exists?).and_return(true) }
8
- it "detect pdf type" do
9
- expect( subject.detect_type('test.pdf') ).to be_eql('pdf')
8
+
9
+ context "detect type" do
10
+ before { allow(File).to receive(:directory?).and_return(true) }
11
+ it "detect type" do
12
+ expect( subject.detect_type('test.pdf') ).to be_eql('pdf')
13
+ expect( subject.detect_type('test.zip') ).to be_eql('zip')
14
+ expect( subject.detect_type('test') ).to be_eql('directory')
15
+ end
16
+ end
17
+
18
+ it "detect file throw error" do
10
19
  expect{ subject.detect_type('.pdf') }.to raise_error RuntimeError
20
+ expect{ subject.detect_type('.zip') }.to raise_error RuntimeError
11
21
  end
12
22
  end
13
23
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: komic-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - hxgdzyuyi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-18 00:00:00.000000000 Z
11
+ date: 2015-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '1.1'
125
+ - !ruby/object:Gem::Dependency
126
+ name: uglifier
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 2.7.1
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 2.7.1
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: bundler
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -211,8 +225,10 @@ files:
211
225
  - komic-cli.gemspec
212
226
  - lib/komic.rb
213
227
  - lib/komic/builder.rb
228
+ - lib/komic/builder/directory.rb
214
229
  - lib/komic/builder/douban_album.rb
215
230
  - lib/komic/builder/pdf.rb
231
+ - lib/komic/builder/zip.rb
216
232
  - lib/komic/cli.rb
217
233
  - lib/komic/generator/content.schema.json
218
234
  - lib/komic/generator/generator.rb