bibi-cli 0.1.0
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 +7 -0
- data/.document +4 -0
- data/.gitignore +6 -0
- data/.yardopts +1 -0
- data/COPYING.txt +661 -0
- data/ChangeLog.adoc +4 -0
- data/Gemfile +7 -0
- data/README.adoc +154 -0
- data/README.ja.adoc +154 -0
- data/Rakefile +26 -0
- data/bibi-cli.gemspec +46 -0
- data/bin/bibi +17 -0
- data/lib/bibi/cli/commands.rb +9 -0
- data/lib/bibi/cli/commands/publish.rb +31 -0
- data/lib/bibi/cli/version.rb +5 -0
- data/lib/bibi/publish.rb +153 -0
- data/lib/bibi/publish/bibi.html.erb +50 -0
- data/test/helper.rb +12 -0
- data/test/test_bibi-cli.rb +12 -0
- metadata +246 -0
    
        data/lib/bibi/publish.rb
    ADDED
    
    | @@ -0,0 +1,153 @@ | |
| 1 | 
            +
            require "dry/configurable"
         | 
| 2 | 
            +
            require "xdg"
         | 
| 3 | 
            +
            require "tomlrb"
         | 
| 4 | 
            +
            require "uri"
         | 
| 5 | 
            +
            require "epub/parser"
         | 
| 6 | 
            +
            require "archive/zip"
         | 
| 7 | 
            +
            require "aws-sdk-s3"
         | 
| 8 | 
            +
            require "digest/md5"
         | 
| 9 | 
            +
            require "base64"
         | 
| 10 | 
            +
            require "erb"
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            class Bibi::Publish
         | 
| 13 | 
            +
              extend Dry::Configurable
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              DEFAULT_MEDIA_TYPE = "application/octet-stream"
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              setting(:bibi, nil) {|value| URI(value) if value}
         | 
| 18 | 
            +
              setting(:bookshelf, nil) {|value| URI(value) if value}
         | 
| 19 | 
            +
              setting :page, true
         | 
| 20 | 
            +
              setting :head_end
         | 
| 21 | 
            +
              setting :body_end
         | 
| 22 | 
            +
              setting(:endpoint, nil) {|value| URI(value) if value}
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              def initialize(profile: :default, dry_run: false, **options)
         | 
| 25 | 
            +
                @profile = profile
         | 
| 26 | 
            +
                load_config
         | 
| 27 | 
            +
                update_config options
         | 
| 28 | 
            +
                @dry_run = dry_run
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                $stderr.puts <<EOS
         | 
| 31 | 
            +
            bibi: #{self.bibi}
         | 
| 32 | 
            +
            bookshelf: #{self.bookshelf}
         | 
| 33 | 
            +
            page: #{page?}
         | 
| 34 | 
            +
            head_end: #{self.head_end}
         | 
| 35 | 
            +
            body_end: #{self.body_end}
         | 
| 36 | 
            +
            endpoint: #{endpoint}
         | 
| 37 | 
            +
            EOS
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              def run(epub, name)
         | 
| 41 | 
            +
                @epub = EPUB::Parser.parse(epub)
         | 
| 42 | 
            +
                @name = name
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                raise "bibi or bookshelf URI is required." if bibi.nil? && bookshelf.nil?
         | 
| 45 | 
            +
                raise "bibi URI is required when generating HTML" if page? && bibi.nil?
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                if config[:endpoint]
         | 
| 48 | 
            +
                  # `force_path_style` required to upload to MinIO server
         | 
| 49 | 
            +
                  Aws.config.update endpoint: config[:endpoint], force_path_style: true
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                upload_contents
         | 
| 53 | 
            +
                upload_html if page?
         | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
              private
         | 
| 57 | 
            +
             | 
| 58 | 
            +
              def config
         | 
| 59 | 
            +
                self.class.config
         | 
| 60 | 
            +
              end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
              [:bibi, :head_end, :body_end, :endpoint].each do |name|
         | 
| 63 | 
            +
                define_method name do
         | 
| 64 | 
            +
                  config[name]
         | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
              end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
              def bookshelf
         | 
| 69 | 
            +
                return config.bookshelf if config.bookshelf
         | 
| 70 | 
            +
                return unless config.bibi
         | 
| 71 | 
            +
                config.bibi + "bibi-bookshelf"
         | 
| 72 | 
            +
              end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
              def page?
         | 
| 75 | 
            +
                config.page
         | 
| 76 | 
            +
              end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
              def dry_run?
         | 
| 79 | 
            +
                !! @dry_run
         | 
| 80 | 
            +
              end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
              def load_config
         | 
| 83 | 
            +
                XDG::Config.new.all.uniq.reverse_each do |config_path|
         | 
| 84 | 
            +
                  path = File.join(config_path, "bibi", "publish.toml")
         | 
| 85 | 
            +
                  next unless File.file? path
         | 
| 86 | 
            +
                  c = Tomlrb.load_file(path, symbolize_keys: true)
         | 
| 87 | 
            +
                  next unless c[@profile]
         | 
| 88 | 
            +
                  $stderr.puts "Config loaded from #{path}"
         | 
| 89 | 
            +
                  update_config(c[@profile])
         | 
| 90 | 
            +
                end
         | 
| 91 | 
            +
              end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
              def update_config(c)
         | 
| 94 | 
            +
                %i[bibi bookshelf head_end body_end endpoint].each do |name|
         | 
| 95 | 
            +
                  config[name] = c[name] unless c[name].nil?
         | 
| 96 | 
            +
                end
         | 
| 97 | 
            +
                config[:page] = c[:page] unless c[:page].nil?
         | 
| 98 | 
            +
              end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
              def upload_contents
         | 
| 101 | 
            +
                types = Hash.new {|hash, key| hash[key] = DEFAULT_MEDIA_TYPE}
         | 
| 102 | 
            +
                @epub.resources.each do |item|
         | 
| 103 | 
            +
                  types[item.entry_name] = item.media_type
         | 
| 104 | 
            +
                end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                unless bookshelf.scheme == "s3"
         | 
| 107 | 
            +
                  raise "Currently, only s3 scheme is supported for bookshelf."
         | 
| 108 | 
            +
                end
         | 
| 109 | 
            +
                bucket = Aws::S3::Resource.new.bucket(bookshelf.host)
         | 
| 110 | 
            +
                bookshelf_path = bookshelf.path[1..]
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                Archive::Zip.open @epub.epub_file do |archive|
         | 
| 113 | 
            +
                  archive.each do |entry|
         | 
| 114 | 
            +
                    next unless entry.file?
         | 
| 115 | 
            +
                    path = entry.zip_path.force_encoding("UTF-8");
         | 
| 116 | 
            +
                    type = types[path]
         | 
| 117 | 
            +
                    key = [bookshelf_path, @name, path].join("/")
         | 
| 118 | 
            +
                    content = entry.file_data.read
         | 
| 119 | 
            +
                    upload_to_s3 bucket, key, content, type
         | 
| 120 | 
            +
                  end
         | 
| 121 | 
            +
                end
         | 
| 122 | 
            +
              end
         | 
| 123 | 
            +
             | 
| 124 | 
            +
              def upload_html
         | 
| 125 | 
            +
                erb = ERB.new(html_template)
         | 
| 126 | 
            +
                head_end_fragment = File.read(head_end) if head_end
         | 
| 127 | 
            +
                body_end_fragment = File.read(body_end) if body_end
         | 
| 128 | 
            +
                content = erb.result_with_hash({name: @name, title: @epub.title, head_end: head_end_fragment, body_end: body_end_fragment})
         | 
| 129 | 
            +
                unless bibi.scheme == "s3"
         | 
| 130 | 
            +
                  raise "Currently, only s3 scheme is supported for bookshelf."
         | 
| 131 | 
            +
                end
         | 
| 132 | 
            +
                bucket = Aws::S3::Resource.new.bucket(bibi.host)
         | 
| 133 | 
            +
                bibi_path = bibi.path[1..]
         | 
| 134 | 
            +
                key = [bibi_path, "#{@name}.html"].join("/")
         | 
| 135 | 
            +
                upload_to_s3 bucket, key, content, "text/html"
         | 
| 136 | 
            +
              end
         | 
| 137 | 
            +
             | 
| 138 | 
            +
              def html_template
         | 
| 139 | 
            +
                template_path = File.join(__dir__, "publish/bibi.html.erb")
         | 
| 140 | 
            +
                File.read(template_path)
         | 
| 141 | 
            +
              end
         | 
| 142 | 
            +
             | 
| 143 | 
            +
              def upload_to_s3(bucket, key, content, type)
         | 
| 144 | 
            +
                object = bucket.object(key)
         | 
| 145 | 
            +
                etag = Digest::MD5.hexdigest(content)
         | 
| 146 | 
            +
                if object.exists? && object.etag == "\"#{etag}\"" # seriously?
         | 
| 147 | 
            +
                  $stderr.puts "Skipping #{object.public_url}"
         | 
| 148 | 
            +
                  return
         | 
| 149 | 
            +
                end
         | 
| 150 | 
            +
                $stderr.puts "Uploading#{dry_run? ? " (dry run)" : ""} #{object.public_url}"
         | 
| 151 | 
            +
                object.put(body: content, content_type: type) unless dry_run?
         | 
| 152 | 
            +
              end
         | 
| 153 | 
            +
            end
         | 
| @@ -0,0 +1,50 @@ | |
| 1 | 
            +
            <!DOCTYPE html>
         | 
| 2 | 
            +
            <% include ERB::Util %>
         | 
| 3 | 
            +
             | 
| 4 | 
            +
             | 
| 5 | 
            +
             | 
| 6 | 
            +
            <html id="bibi">
         | 
| 7 | 
            +
             | 
| 8 | 
            +
             | 
| 9 | 
            +
            	<head>
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            		<meta charset="utf-8" />
         | 
| 12 | 
            +
            		<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" />
         | 
| 13 | 
            +
            		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            		<title><%=h title %></title>
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            		<!-- # Bibi | EPUB Reader on your website. : © Satoru Matsushima - https://bibi.epub.link or https://github.com/satorumurmur/bibi / Licensed under the MIT License - https://github.com/satorumurmur/bibi/blob/master/LICENSE -->
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            		<!-- 「わたしのことは『ビビ』と呼んでください。『ビビ』はわたしの名前なんです」 —— エレクトラ・パブリケーヌ『ビビのみぎくるぶし』 -->
         | 
| 20 | 
            +
            		<!-- 「まあ! それじゃあやっぱり、『ビビ』はわたしの“名前”だったのですね?」 —— ソフィア・パインアイランド『ビビさんたちのこと』 -->
         | 
| 21 | 
            +
            		<!-- 「このあたりにビビさんという人がいると聞いて来たのですが、あなたですか?」 —— ビビ・ララルー『ポケットに眼鏡』 -->
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            		<link id="bibi-style" rel="stylesheet" href="resources/styles/bibi.css" />
         | 
| 24 | 
            +
            		<link id="bibi-dress" rel="stylesheet" href="wardrobe/everyday/bibi.dress.css" />
         | 
| 25 | 
            +
            		<script id="bibi-script" src="resources/scripts/bibi.js"></script>
         | 
| 26 | 
            +
            		<script id="bibi-preset" src="presets/default.js" data-bibi-bookshelf=""></script>
         | 
| 27 | 
            +
            		<%= head_end %>
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            	</head>
         | 
| 30 | 
            +
             | 
| 31 | 
            +
             | 
| 32 | 
            +
            	<body data-bibi-book="<%=h name %>">
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            		<div id="bibi-info">
         | 
| 35 | 
            +
            			<h1><%=h title %></h1>
         | 
| 36 | 
            +
            			<ul>
         | 
| 37 | 
            +
            				<li><a href="https://bibi.epub.link">Bibi | EPUB Reader on your website. (Official Website / Japanese)</a></li>
         | 
| 38 | 
            +
            				<li><a href="https://github.com/satorumurmur/bibi">Bibi on GitHub (English)</a></li>
         | 
| 39 | 
            +
            			</ul>
         | 
| 40 | 
            +
            		</div>
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            		<div id="bibi-book-data" data-bibi-book-mimetype="application/epub+zip" hidden="hidden">
         | 
| 43 | 
            +
            		</div>
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            		<%= body_end %>
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            	</body>
         | 
| 48 | 
            +
             | 
| 49 | 
            +
             | 
| 50 | 
            +
            </html>
         | 
    
        data/test/helper.rb
    ADDED
    
    
    
        metadata
    ADDED
    
    | @@ -0,0 +1,246 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: bibi-cli
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.1.0
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors:
         | 
| 7 | 
            +
            - Kitaiti Makoto
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 | 
            +
            bindir: bin
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
            date: 2020-08-20 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: archive-zip
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - ">="
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: '0'
         | 
| 20 | 
            +
              type: :runtime
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - ">="
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: '0'
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: aws-sdk-s3
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - ">="
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '0'
         | 
| 34 | 
            +
              type: :runtime
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - ">="
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: '0'
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: dry-cli
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - ">="
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '0'
         | 
| 48 | 
            +
              type: :runtime
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - ">="
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '0'
         | 
| 55 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            +
              name: dry-configurable
         | 
| 57 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - ">="
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: '0'
         | 
| 62 | 
            +
              type: :runtime
         | 
| 63 | 
            +
              prerelease: false
         | 
| 64 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                requirements:
         | 
| 66 | 
            +
                - - ">="
         | 
| 67 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                    version: '0'
         | 
| 69 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            +
              name: epub-parser
         | 
| 71 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 | 
            +
                requirements:
         | 
| 73 | 
            +
                - - ">="
         | 
| 74 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            +
                    version: '0'
         | 
| 76 | 
            +
              type: :runtime
         | 
| 77 | 
            +
              prerelease: false
         | 
| 78 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 | 
            +
                requirements:
         | 
| 80 | 
            +
                - - ">="
         | 
| 81 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            +
                    version: '0'
         | 
| 83 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 84 | 
            +
              name: tomlrb
         | 
| 85 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 | 
            +
                requirements:
         | 
| 87 | 
            +
                - - ">="
         | 
| 88 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            +
                    version: '0'
         | 
| 90 | 
            +
              type: :runtime
         | 
| 91 | 
            +
              prerelease: false
         | 
| 92 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 | 
            +
                requirements:
         | 
| 94 | 
            +
                - - ">="
         | 
| 95 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 96 | 
            +
                    version: '0'
         | 
| 97 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 98 | 
            +
              name: xdg
         | 
| 99 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 100 | 
            +
                requirements:
         | 
| 101 | 
            +
                - - ">="
         | 
| 102 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 103 | 
            +
                    version: '0'
         | 
| 104 | 
            +
              type: :runtime
         | 
| 105 | 
            +
              prerelease: false
         | 
| 106 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 107 | 
            +
                requirements:
         | 
| 108 | 
            +
                - - ">="
         | 
| 109 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 110 | 
            +
                    version: '0'
         | 
| 111 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 112 | 
            +
              name: asciidoctor
         | 
| 113 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 114 | 
            +
                requirements:
         | 
| 115 | 
            +
                - - ">="
         | 
| 116 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 117 | 
            +
                    version: '0'
         | 
| 118 | 
            +
              type: :development
         | 
| 119 | 
            +
              prerelease: false
         | 
| 120 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 121 | 
            +
                requirements:
         | 
| 122 | 
            +
                - - ">="
         | 
| 123 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 124 | 
            +
                    version: '0'
         | 
| 125 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 126 | 
            +
              name: bundler
         | 
| 127 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 128 | 
            +
                requirements:
         | 
| 129 | 
            +
                - - ">="
         | 
| 130 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 131 | 
            +
                    version: '0'
         | 
| 132 | 
            +
              type: :development
         | 
| 133 | 
            +
              prerelease: false
         | 
| 134 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 135 | 
            +
                requirements:
         | 
| 136 | 
            +
                - - ">="
         | 
| 137 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 138 | 
            +
                    version: '0'
         | 
| 139 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 140 | 
            +
              name: rake
         | 
| 141 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 142 | 
            +
                requirements:
         | 
| 143 | 
            +
                - - ">="
         | 
| 144 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 145 | 
            +
                    version: '0'
         | 
| 146 | 
            +
              type: :development
         | 
| 147 | 
            +
              prerelease: false
         | 
| 148 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 149 | 
            +
                requirements:
         | 
| 150 | 
            +
                - - ">="
         | 
| 151 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 152 | 
            +
                    version: '0'
         | 
| 153 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 154 | 
            +
              name: rubygems-tasks
         | 
| 155 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 156 | 
            +
                requirements:
         | 
| 157 | 
            +
                - - ">="
         | 
| 158 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 159 | 
            +
                    version: '0'
         | 
| 160 | 
            +
              type: :development
         | 
| 161 | 
            +
              prerelease: false
         | 
| 162 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 163 | 
            +
                requirements:
         | 
| 164 | 
            +
                - - ">="
         | 
| 165 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 166 | 
            +
                    version: '0'
         | 
| 167 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 168 | 
            +
              name: test-unit
         | 
| 169 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 170 | 
            +
                requirements:
         | 
| 171 | 
            +
                - - ">="
         | 
| 172 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 173 | 
            +
                    version: '0'
         | 
| 174 | 
            +
              type: :development
         | 
| 175 | 
            +
              prerelease: false
         | 
| 176 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 177 | 
            +
                requirements:
         | 
| 178 | 
            +
                - - ">="
         | 
| 179 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 180 | 
            +
                    version: '0'
         | 
| 181 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 182 | 
            +
              name: yard
         | 
| 183 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 184 | 
            +
                requirements:
         | 
| 185 | 
            +
                - - ">="
         | 
| 186 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 187 | 
            +
                    version: '0'
         | 
| 188 | 
            +
              type: :development
         | 
| 189 | 
            +
              prerelease: false
         | 
| 190 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 191 | 
            +
                requirements:
         | 
| 192 | 
            +
                - - ">="
         | 
| 193 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 194 | 
            +
                    version: '0'
         | 
| 195 | 
            +
            description: Command-line tools to work with Bibi, incliding bibi publish which uploads
         | 
| 196 | 
            +
              EPUB files to S3 and make them readable via web using Bibi a EPUB reader application.
         | 
| 197 | 
            +
            email: KitaitiMakoto@gmail.com
         | 
| 198 | 
            +
            executables:
         | 
| 199 | 
            +
            - bibi
         | 
| 200 | 
            +
            extensions: []
         | 
| 201 | 
            +
            extra_rdoc_files: []
         | 
| 202 | 
            +
            files:
         | 
| 203 | 
            +
            - ".document"
         | 
| 204 | 
            +
            - ".gitignore"
         | 
| 205 | 
            +
            - ".yardopts"
         | 
| 206 | 
            +
            - COPYING.txt
         | 
| 207 | 
            +
            - ChangeLog.adoc
         | 
| 208 | 
            +
            - Gemfile
         | 
| 209 | 
            +
            - README.adoc
         | 
| 210 | 
            +
            - README.ja.adoc
         | 
| 211 | 
            +
            - Rakefile
         | 
| 212 | 
            +
            - bibi-cli.gemspec
         | 
| 213 | 
            +
            - bin/bibi
         | 
| 214 | 
            +
            - lib/bibi/cli/commands.rb
         | 
| 215 | 
            +
            - lib/bibi/cli/commands/publish.rb
         | 
| 216 | 
            +
            - lib/bibi/cli/version.rb
         | 
| 217 | 
            +
            - lib/bibi/publish.rb
         | 
| 218 | 
            +
            - lib/bibi/publish/bibi.html.erb
         | 
| 219 | 
            +
            - test/helper.rb
         | 
| 220 | 
            +
            - test/test_bibi-cli.rb
         | 
| 221 | 
            +
            homepage: https://gitlab.com/KitaitiMakoto/bibi-cli
         | 
| 222 | 
            +
            licenses:
         | 
| 223 | 
            +
            - AGPL-3.0
         | 
| 224 | 
            +
            metadata: {}
         | 
| 225 | 
            +
            post_install_message: 
         | 
| 226 | 
            +
            rdoc_options: []
         | 
| 227 | 
            +
            require_paths:
         | 
| 228 | 
            +
            - lib
         | 
| 229 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 230 | 
            +
              requirements:
         | 
| 231 | 
            +
              - - ">="
         | 
| 232 | 
            +
                - !ruby/object:Gem::Version
         | 
| 233 | 
            +
                  version: '0'
         | 
| 234 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 235 | 
            +
              requirements:
         | 
| 236 | 
            +
              - - ">="
         | 
| 237 | 
            +
                - !ruby/object:Gem::Version
         | 
| 238 | 
            +
                  version: '0'
         | 
| 239 | 
            +
            requirements: []
         | 
| 240 | 
            +
            rubygems_version: 3.1.2
         | 
| 241 | 
            +
            signing_key: 
         | 
| 242 | 
            +
            specification_version: 4
         | 
| 243 | 
            +
            summary: Command-line tools to work with Bibi
         | 
| 244 | 
            +
            test_files:
         | 
| 245 | 
            +
            - test/helper.rb
         | 
| 246 | 
            +
            - test/test_bibi-cli.rb
         |