rbs_mini_magick 0.1.0 → 0.2.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 +4 -4
 - data/CHANGELOG.md +4 -0
 - data/README.md +15 -1
 - data/lib/rbs_mini_magick/builder.rb +47 -0
 - data/lib/rbs_mini_magick/flows/major5_minor0/image_class.rb +55 -0
 - data/lib/rbs_mini_magick/flows/major5_minor0/tool_interface.rb +50 -0
 - data/lib/rbs_mini_magick/flows/major5_minor0/tool_singleton.rb +39 -0
 - data/lib/rbs_mini_magick/flows/major5_minor0/tool_subclass.rb +40 -0
 - data/lib/rbs_mini_magick/flows/major5_minor0.rb +38 -0
 - data/lib/rbs_mini_magick/flows/state.rb +68 -0
 - data/lib/rbs_mini_magick/flows.rb +9 -0
 - data/lib/rbs_mini_magick/generator.rb +4 -4
 - data/lib/rbs_mini_magick/image_magick/{command_line_option.rb → option.rb} +5 -8
 - data/lib/rbs_mini_magick/image_magick/tool_usage.rb +52 -0
 - data/lib/rbs_mini_magick/image_magick.rb +5 -21
 - data/lib/rbs_mini_magick/version.rb +1 -1
 - data/lib/rbs_mini_magick.rb +7 -6
 - metadata +12 -15
 - data/lib/rbs_mini_magick/builders/builder.rb +0 -57
 - data/lib/rbs_mini_magick/builders/image_class.rb +0 -31
 - data/lib/rbs_mini_magick/builders/singleton_method.rb +0 -20
 - data/lib/rbs_mini_magick/builders/tool_interface.rb +0 -25
 - data/lib/rbs_mini_magick/builders/tool_subclass.rb +0 -20
 - data/lib/rbs_mini_magick/builders/v5_0/builder.rb +0 -37
 - data/lib/rbs_mini_magick/builders/v5_0/image_class.rb +0 -32
 - data/lib/rbs_mini_magick/builders/v5_0/singleton_method.rb +0 -20
 - data/lib/rbs_mini_magick/builders/v5_0/tool_interface.rb +0 -20
 - data/lib/rbs_mini_magick/builders/v5_0/tool_subclass.rb +0 -19
 - data/lib/rbs_mini_magick/builders.rb +0 -18
 - data/lib/rbs_mini_magick/image_magick/usage_parser.rb +0 -44
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: f035353c1efe52e97b2951cbb68d0a3c14b2189dff3dd8451ab7c9e417b7105a
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: b50d67b49e4b704aaac3436f12587d782aed6b1c31db3e0bf965cb773770fe33
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 4a091a651834b604a18ebbfb3bce50c6393ba5d7fa79e9450a1416bd74eba96884cd064315344a5d96652d136f247b5044e4fa62c475ee30038efd3e20318cc1
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 5f023c4f6f82cb4275967c11e53b833bb71e0f8d45ec5e7e404beb926daaebf65ff118394fd1180a68e2a64e94dccb9163628452d4b08c35163c1a8099d21dc4
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,5 +1,9 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # RbsMiniMagick
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            [](https://badge.fury.io/rb/rbs_mini_magick)
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            Generate rbs for MiniMagick gem according to the version of MiniMagick and ImageMagick you use.
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
       3 
7 
     | 
    
         
             
            ## Installation
         
     | 
| 
       4 
8 
     | 
    
         | 
| 
       5 
9 
     | 
    
         
             
            Install the gem and add to the application's Gemfile by executing:
         
     | 
| 
         @@ -16,10 +20,20 @@ $ gem install rbs_mini_magick 
     | 
|
| 
       16 
20 
     | 
    
         | 
| 
       17 
21 
     | 
    
         
             
            ## Usage
         
     | 
| 
       18 
22 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 23 
     | 
    
         
            +
            Generate rbs for the MiniMagick gem in the `sig/rbs_mini_magick` directory.
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            ```
         
     | 
| 
       20 
26 
     | 
    
         
             
            $ bundle exec rbs-mini-magick generate
         
     | 
| 
       21 
27 
     | 
    
         
             
            ```
         
     | 
| 
       22 
28 
     | 
    
         | 
| 
      
 29 
     | 
    
         
            +
            If you want to change the output directory, you can use the `--output-dir` option.
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            Other available options can be referenced with `--help`.
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            ```
         
     | 
| 
      
 34 
     | 
    
         
            +
            $ bundle exec rbs-mini-magick generate --help
         
     | 
| 
      
 35 
     | 
    
         
            +
            ```
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
       23 
37 
     | 
    
         
             
            ## Development
         
     | 
| 
       24 
38 
     | 
    
         | 
| 
       25 
39 
     | 
    
         
             
            After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
         
     | 
| 
         @@ -0,0 +1,47 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module RbsMiniMagick
         
     | 
| 
      
 4 
     | 
    
         
            +
              # RbsMiniMagick::Builder
         
     | 
| 
      
 5 
     | 
    
         
            +
              class Builder
         
     | 
| 
      
 6 
     | 
    
         
            +
                # @param mini_magick_version [String, nil]
         
     | 
| 
      
 7 
     | 
    
         
            +
                # @return [void]
         
     | 
| 
      
 8 
     | 
    
         
            +
                def initialize(mini_magick_version:)
         
     | 
| 
      
 9 
     | 
    
         
            +
                  @mini_magick_version = mini_magick_version&.then { Gem::Version.new(_1) } ||
         
     | 
| 
      
 10 
     | 
    
         
            +
                                         MiniMagick.version
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                # @return [String]
         
     | 
| 
      
 14 
     | 
    
         
            +
                def run
         
     | 
| 
      
 15 
     | 
    
         
            +
                  tool_names, flows = tool_names_and_flows
         
     | 
| 
      
 16 
     | 
    
         
            +
                  initial_state = Flows::State.init(tool_usages: build_tool_usages(tool_names))
         
     | 
| 
      
 17 
     | 
    
         
            +
                  completed_state = flows.reduce(initial_state) { |state, flow| flow.run(state) }
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  completed_state.formated_rbs
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                private
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                # @!attribute [r] mini_magick_version
         
     | 
| 
      
 25 
     | 
    
         
            +
                # @return [Gem::Version]
         
     | 
| 
      
 26 
     | 
    
         
            +
                attr_reader :mini_magick_version
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                # @return [Array]
         
     | 
| 
      
 29 
     | 
    
         
            +
                def tool_names_and_flows
         
     | 
| 
      
 30 
     | 
    
         
            +
                  case mini_magick_version
         
     | 
| 
      
 31 
     | 
    
         
            +
                  when Range.new(Gem::Version.new("5.0"), nil)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    [Flows::Major5Minor0::TOOL_NAMES, Flows::Major5Minor0::FLOWS]
         
     | 
| 
      
 33 
     | 
    
         
            +
                  else
         
     | 
| 
      
 34 
     | 
    
         
            +
                    raise Error, "#{mini_magick_version} does not support"
         
     | 
| 
      
 35 
     | 
    
         
            +
                  end
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                # @param tool_names [Array<String>]
         
     | 
| 
      
 39 
     | 
    
         
            +
                # @return [Array<RbsMiniMagick::ImageMagick::ToolUsage>]
         
     | 
| 
      
 40 
     | 
    
         
            +
                def build_tool_usages(tool_names)
         
     | 
| 
      
 41 
     | 
    
         
            +
                  tool_names.map do |tool_name|
         
     | 
| 
      
 42 
     | 
    
         
            +
                    raw_usage = ImageMagick::UsageFetcher.new(tool_name: tool_name).run
         
     | 
| 
      
 43 
     | 
    
         
            +
                    ImageMagick::ToolUsage.build_by_raw_usage(tool_name, raw_usage)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,55 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module RbsMiniMagick
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Flows
         
     | 
| 
      
 5 
     | 
    
         
            +
                # RbsMiniMagick::Flows::Major5Minor0
         
     | 
| 
      
 6 
     | 
    
         
            +
                module Major5Minor0
         
     | 
| 
      
 7 
     | 
    
         
            +
                  # RbsMiniMagick::Flows::Major5Minor0::ImageClass
         
     | 
| 
      
 8 
     | 
    
         
            +
                  class ImageClass
         
     | 
| 
      
 9 
     | 
    
         
            +
                    # @param state [RbsMiniMagick::Flows::State]
         
     | 
| 
      
 10 
     | 
    
         
            +
                    # @return [RbsMiniMagick::Flows::State]
         
     | 
| 
      
 11 
     | 
    
         
            +
                    def run(state) # rubocop:disable Metrics/MethodLength
         
     | 
| 
      
 12 
     | 
    
         
            +
                      image_instance_methods = MiniMagick::Image.instance_methods.to_set(&:to_s)
         
     | 
| 
      
 13 
     | 
    
         
            +
                      mogrify_methods = state.fetch_tool_usage("mogrify")
         
     | 
| 
      
 14 
     | 
    
         
            +
                                             .options
         
     | 
| 
      
 15 
     | 
    
         
            +
                                             .reject { image_instance_methods.include?(_1.normalized_name) }
         
     | 
| 
      
 16 
     | 
    
         
            +
                                             .map { mogrify_method(_1) }
         
     | 
| 
      
 17 
     | 
    
         
            +
                                             .uniq.join("\n")
         
     | 
| 
      
 18 
     | 
    
         
            +
                      rbs = <<~RBS
         
     | 
| 
      
 19 
     | 
    
         
            +
                        module MiniMagick
         
     | 
| 
      
 20 
     | 
    
         
            +
                          class Image
         
     | 
| 
      
 21 
     | 
    
         
            +
                            def initialize: (_ToS input_path, ?Tempfile? tempfile) ?{ (Tool & _Mogrify[Tool]) -> void } -> void
         
     | 
| 
      
 22 
     | 
    
         
            +
                                          | ...
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                            def combine_options: () { (Tool & _Mogrify[Tool]) -> void } -> self
         
     | 
| 
      
 25 
     | 
    
         
            +
                                               | ...
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                            def composite: (instance other_image, ?String output_extension, ?untyped? mask) ?{ (Tool & _Composite[Tool]) -> void } -> instance
         
     | 
| 
      
 28 
     | 
    
         
            +
                                         | ...
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                            def identify: () ?{ (Tool & _Identify[Tool]) -> void } -> String
         
     | 
| 
      
 31 
     | 
    
         
            +
                                        | ...
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                            def mogrify: (?Integer? page) ?{ (Tool & _Mogrify[Tool]) -> void } -> self
         
     | 
| 
      
 34 
     | 
    
         
            +
                                       | ...
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                            #{mogrify_methods}
         
     | 
| 
      
 37 
     | 
    
         
            +
                          end
         
     | 
| 
      
 38 
     | 
    
         
            +
                        end
         
     | 
| 
      
 39 
     | 
    
         
            +
                      RBS
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                      state.concat_rbs(rbs)
         
     | 
| 
      
 42 
     | 
    
         
            +
                    end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                    private
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                    # @param option [RbsMiniMagick::ImageMagick::Option]
         
     | 
| 
      
 47 
     | 
    
         
            +
                    # @return [String]
         
     | 
| 
      
 48 
     | 
    
         
            +
                    def mogrify_method(option)
         
     | 
| 
      
 49 
     | 
    
         
            +
                      args = option.args_empty? ? "" : "*_ToS args"
         
     | 
| 
      
 50 
     | 
    
         
            +
                      "def #{option.normalized_name}: (#{args}) -> self"
         
     | 
| 
      
 51 
     | 
    
         
            +
                    end
         
     | 
| 
      
 52 
     | 
    
         
            +
                  end
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
              end
         
     | 
| 
      
 55 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,50 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module RbsMiniMagick
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Flows
         
     | 
| 
      
 5 
     | 
    
         
            +
                # RbsMiniMagick::Flows::Major5Minor0
         
     | 
| 
      
 6 
     | 
    
         
            +
                module Major5Minor0
         
     | 
| 
      
 7 
     | 
    
         
            +
                  # RbsMiniMagick::Flows::Major5Minor0::ToolInterface
         
     | 
| 
      
 8 
     | 
    
         
            +
                  class ToolInterface
         
     | 
| 
      
 9 
     | 
    
         
            +
                    # @param name [String]
         
     | 
| 
      
 10 
     | 
    
         
            +
                    # @return [void]
         
     | 
| 
      
 11 
     | 
    
         
            +
                    def initialize(name:)
         
     | 
| 
      
 12 
     | 
    
         
            +
                      @name = name
         
     | 
| 
      
 13 
     | 
    
         
            +
                    end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                    # @param state [RbsMiniMagick::Flows::State]
         
     | 
| 
      
 16 
     | 
    
         
            +
                    # @return [RbsMiniMagick::Flows::State]
         
     | 
| 
      
 17 
     | 
    
         
            +
                    def run(state) # rubocop:disable Metrics/MethodLength
         
     | 
| 
      
 18 
     | 
    
         
            +
                      tool_usage = state.fetch_tool_usage(name)
         
     | 
| 
      
 19 
     | 
    
         
            +
                      interface_name = "_#{name.capitalize}"
         
     | 
| 
      
 20 
     | 
    
         
            +
                      option_methods = tool_usage.options
         
     | 
| 
      
 21 
     | 
    
         
            +
                                                 .map { option_method(_1) }
         
     | 
| 
      
 22 
     | 
    
         
            +
                                                 .uniq.join("\n")
         
     | 
| 
      
 23 
     | 
    
         
            +
                      rbs = <<~RBS
         
     | 
| 
      
 24 
     | 
    
         
            +
                        module MiniMagick
         
     | 
| 
      
 25 
     | 
    
         
            +
                          interface #{interface_name}[T]
         
     | 
| 
      
 26 
     | 
    
         
            +
                            #{option_methods}
         
     | 
| 
      
 27 
     | 
    
         
            +
                          end
         
     | 
| 
      
 28 
     | 
    
         
            +
                        end
         
     | 
| 
      
 29 
     | 
    
         
            +
                      RBS
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                      state.concat_rbs(rbs)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                    private
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                    # @!attribute [r] name
         
     | 
| 
      
 37 
     | 
    
         
            +
                    # @return [String]
         
     | 
| 
      
 38 
     | 
    
         
            +
                    attr_reader :name
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                    # @param option [RbsMiniMagick::ImageMagick::Option]
         
     | 
| 
      
 41 
     | 
    
         
            +
                    # @return [String]
         
     | 
| 
      
 42 
     | 
    
         
            +
                    def option_method(option)
         
     | 
| 
      
 43 
     | 
    
         
            +
                      args = option.args_empty? ? "" : "*_ToS args"
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                      "def #{option.normalized_name}: (#{args}) -> T"
         
     | 
| 
      
 46 
     | 
    
         
            +
                    end
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,39 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module RbsMiniMagick
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Flows
         
     | 
| 
      
 5 
     | 
    
         
            +
                # RbsMiniMagick::Flows::Major5Minor0
         
     | 
| 
      
 6 
     | 
    
         
            +
                module Major5Minor0
         
     | 
| 
      
 7 
     | 
    
         
            +
                  # RbsMiniMagick::Flows::Major5Minor0::ToolSingleton
         
     | 
| 
      
 8 
     | 
    
         
            +
                  class ToolSingleton
         
     | 
| 
      
 9 
     | 
    
         
            +
                    # @param name [String]
         
     | 
| 
      
 10 
     | 
    
         
            +
                    # @return [void]
         
     | 
| 
      
 11 
     | 
    
         
            +
                    def initialize(name:)
         
     | 
| 
      
 12 
     | 
    
         
            +
                      @name = name
         
     | 
| 
      
 13 
     | 
    
         
            +
                    end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                    # @param state [RbsMiniMagick::Flows::State]
         
     | 
| 
      
 16 
     | 
    
         
            +
                    # @return [RbsMiniMagick::Flows::State]
         
     | 
| 
      
 17 
     | 
    
         
            +
                    def run(state)
         
     | 
| 
      
 18 
     | 
    
         
            +
                      interface_name = "_#{name.capitalize}"
         
     | 
| 
      
 19 
     | 
    
         
            +
                      args = "?errors: bool, ?warnings: bool, ?stdin: _ToS, ?timeout: Integer?, **untyped options"
         
     | 
| 
      
 20 
     | 
    
         
            +
                      rbs = <<~RBS
         
     | 
| 
      
 21 
     | 
    
         
            +
                        module MiniMagick
         
     | 
| 
      
 22 
     | 
    
         
            +
                          def self.#{name}: (#{args}) -> (Tool & #{interface_name}[Tool])
         
     | 
| 
      
 23 
     | 
    
         
            +
                                          | (#{args}) { (Tool & #{interface_name}[Tool]) -> void } -> String
         
     | 
| 
      
 24 
     | 
    
         
            +
                                          | ...
         
     | 
| 
      
 25 
     | 
    
         
            +
                        end
         
     | 
| 
      
 26 
     | 
    
         
            +
                      RBS
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                      state.concat_rbs(rbs)
         
     | 
| 
      
 29 
     | 
    
         
            +
                    end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                    private
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                    # @!attribute [r] name
         
     | 
| 
      
 34 
     | 
    
         
            +
                    # @return [String]
         
     | 
| 
      
 35 
     | 
    
         
            +
                    attr_reader :name
         
     | 
| 
      
 36 
     | 
    
         
            +
                  end
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module RbsMiniMagick
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Flows
         
     | 
| 
      
 5 
     | 
    
         
            +
                # RbsMiniMagick::Flows::Major5Minor0
         
     | 
| 
      
 6 
     | 
    
         
            +
                module Major5Minor0
         
     | 
| 
      
 7 
     | 
    
         
            +
                  # RbsMiniMagick::Flows::Major5Minor0::ToolSubclass
         
     | 
| 
      
 8 
     | 
    
         
            +
                  class ToolSubclass
         
     | 
| 
      
 9 
     | 
    
         
            +
                    # @param name [String]
         
     | 
| 
      
 10 
     | 
    
         
            +
                    # @return [void]
         
     | 
| 
      
 11 
     | 
    
         
            +
                    def initialize(name:)
         
     | 
| 
      
 12 
     | 
    
         
            +
                      @name = name
         
     | 
| 
      
 13 
     | 
    
         
            +
                    end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                    # @param state [RbsMiniMagick::Flows::State]
         
     | 
| 
      
 16 
     | 
    
         
            +
                    # @return [RbsMiniMagick::Flows::State]
         
     | 
| 
      
 17 
     | 
    
         
            +
                    def run(state) # rubocop:disable Metrics/MethodLength
         
     | 
| 
      
 18 
     | 
    
         
            +
                      capitalized_name = name.capitalize
         
     | 
| 
      
 19 
     | 
    
         
            +
                      rbs = <<~RBS
         
     | 
| 
      
 20 
     | 
    
         
            +
                        module MiniMagick
         
     | 
| 
      
 21 
     | 
    
         
            +
                          class Tool
         
     | 
| 
      
 22 
     | 
    
         
            +
                            class #{capitalized_name} < Tool
         
     | 
| 
      
 23 
     | 
    
         
            +
                              include _#{capitalized_name}
         
     | 
| 
      
 24 
     | 
    
         
            +
                            end
         
     | 
| 
      
 25 
     | 
    
         
            +
                          end
         
     | 
| 
      
 26 
     | 
    
         
            +
                        end
         
     | 
| 
      
 27 
     | 
    
         
            +
                      RBS
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                      state.concat_rbs(rbs)
         
     | 
| 
      
 30 
     | 
    
         
            +
                    end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                    private
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                    # @!attribute [r] name
         
     | 
| 
      
 35 
     | 
    
         
            +
                    # @return [String]
         
     | 
| 
      
 36 
     | 
    
         
            +
                    attr_reader :name
         
     | 
| 
      
 37 
     | 
    
         
            +
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,38 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require_relative "major5_minor0/tool_interface"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require_relative "major5_minor0/tool_singleton"
         
     | 
| 
      
 5 
     | 
    
         
            +
            require_relative "major5_minor0/tool_subclass"
         
     | 
| 
      
 6 
     | 
    
         
            +
            require_relative "major5_minor0/image_class"
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            module RbsMiniMagick
         
     | 
| 
      
 9 
     | 
    
         
            +
              module Flows
         
     | 
| 
      
 10 
     | 
    
         
            +
                # RbsMiniMagick::Flows::Major5Minor0
         
     | 
| 
      
 11 
     | 
    
         
            +
                module Major5Minor0
         
     | 
| 
      
 12 
     | 
    
         
            +
                  # @return [String<String>]
         
     | 
| 
      
 13 
     | 
    
         
            +
                  TOOL_NAMES = %w[
         
     | 
| 
      
 14 
     | 
    
         
            +
                    animate
         
     | 
| 
      
 15 
     | 
    
         
            +
                    compare
         
     | 
| 
      
 16 
     | 
    
         
            +
                    composite
         
     | 
| 
      
 17 
     | 
    
         
            +
                    conjure
         
     | 
| 
      
 18 
     | 
    
         
            +
                    convert
         
     | 
| 
      
 19 
     | 
    
         
            +
                    display
         
     | 
| 
      
 20 
     | 
    
         
            +
                    identify
         
     | 
| 
      
 21 
     | 
    
         
            +
                    import
         
     | 
| 
      
 22 
     | 
    
         
            +
                    mogrify
         
     | 
| 
      
 23 
     | 
    
         
            +
                    montage
         
     | 
| 
      
 24 
     | 
    
         
            +
                    stream
         
     | 
| 
      
 25 
     | 
    
         
            +
                  ].freeze
         
     | 
| 
      
 26 
     | 
    
         
            +
                  public_constant :TOOL_NAMES
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  # @return [Array<#run>]
         
     | 
| 
      
 29 
     | 
    
         
            +
                  FLOWS = [
         
     | 
| 
      
 30 
     | 
    
         
            +
                    *TOOL_NAMES.map { ToolInterface.new(name: _1) },
         
     | 
| 
      
 31 
     | 
    
         
            +
                    *TOOL_NAMES.map { ToolSingleton.new(name: _1) },
         
     | 
| 
      
 32 
     | 
    
         
            +
                    *TOOL_NAMES.map { ToolSubclass.new(name: _1) },
         
     | 
| 
      
 33 
     | 
    
         
            +
                    ImageClass.new
         
     | 
| 
      
 34 
     | 
    
         
            +
                  ].freeze
         
     | 
| 
      
 35 
     | 
    
         
            +
                  public_constant :FLOWS
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,68 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module RbsMiniMagick
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Flows
         
     | 
| 
      
 5 
     | 
    
         
            +
                # RbsMiniMagick::Flows::State
         
     | 
| 
      
 6 
     | 
    
         
            +
                class State
         
     | 
| 
      
 7 
     | 
    
         
            +
                  class << self
         
     | 
| 
      
 8 
     | 
    
         
            +
                    # @param tool_usages [Array<RbsMiniMagick::ImageMagick::ToolUsage>]
         
     | 
| 
      
 9 
     | 
    
         
            +
                    # @return [RbsMiniMagick::Flows::State]
         
     | 
| 
      
 10 
     | 
    
         
            +
                    def init(tool_usages:)
         
     | 
| 
      
 11 
     | 
    
         
            +
                      new(tool_usages: tool_usages, rbs: "")
         
     | 
| 
      
 12 
     | 
    
         
            +
                    end
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  # @!attribute [r] tool_usages
         
     | 
| 
      
 16 
     | 
    
         
            +
                  # @return [Array<RbsMiniMagick::ImageMagick::ToolUsage>]
         
     | 
| 
      
 17 
     | 
    
         
            +
                  attr_reader :tool_usages
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  # @param tool_usages [Array<RbsMiniMagick::ImageMagick::ToolUsage>]
         
     | 
| 
      
 20 
     | 
    
         
            +
                  # @param rbs [String]
         
     | 
| 
      
 21 
     | 
    
         
            +
                  # @return [void]
         
     | 
| 
      
 22 
     | 
    
         
            +
                  def initialize(tool_usages:, rbs:)
         
     | 
| 
      
 23 
     | 
    
         
            +
                    @tool_usages = tool_usages
         
     | 
| 
      
 24 
     | 
    
         
            +
                    @tool_usage_by_name = tool_usages.to_h { [_1.name, _1] }
         
     | 
| 
      
 25 
     | 
    
         
            +
                    @rbs = rbs
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  # @param tool_name [String]
         
     | 
| 
      
 29 
     | 
    
         
            +
                  # @return [RbsMiniMagick::ImageMagick::ToolUsage]
         
     | 
| 
      
 30 
     | 
    
         
            +
                  def fetch_tool_usage(tool_name)
         
     | 
| 
      
 31 
     | 
    
         
            +
                    tool_usage_by_name.fetch(tool_name)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                  # @param new_rbs [String]
         
     | 
| 
      
 35 
     | 
    
         
            +
                  # @return [RbsMiniMagick::Flows::State]
         
     | 
| 
      
 36 
     | 
    
         
            +
                  def concat_rbs(new_rbs)
         
     | 
| 
      
 37 
     | 
    
         
            +
                    self.class.new(
         
     | 
| 
      
 38 
     | 
    
         
            +
                      tool_usages: tool_usages,
         
     | 
| 
      
 39 
     | 
    
         
            +
                      rbs: [rbs, new_rbs].join("\n")
         
     | 
| 
      
 40 
     | 
    
         
            +
                    )
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                  # @return [String]
         
     | 
| 
      
 44 
     | 
    
         
            +
                  def formated_rbs
         
     | 
| 
      
 45 
     | 
    
         
            +
                    @formated_rbs ||= format_rbs
         
     | 
| 
      
 46 
     | 
    
         
            +
                  end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                  private
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                  # @!attribute [r] rbs
         
     | 
| 
      
 51 
     | 
    
         
            +
                  # @return [String]
         
     | 
| 
      
 52 
     | 
    
         
            +
                  attr_reader :rbs
         
     | 
| 
      
 53 
     | 
    
         
            +
                  # @!attribute [r] tool_usage_by_name
         
     | 
| 
      
 54 
     | 
    
         
            +
                  # @return [Hash<String, RbsMiniMagick::ImageMagick::ToolUsage>]
         
     | 
| 
      
 55 
     | 
    
         
            +
                  attr_reader :tool_usage_by_name
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                  # @return [String]
         
     | 
| 
      
 58 
     | 
    
         
            +
                  def format_rbs
         
     | 
| 
      
 59 
     | 
    
         
            +
                    out = StringIO.new
         
     | 
| 
      
 60 
     | 
    
         
            +
                    decls = RBS::Parser.parse_signature(rbs).then { _1[1] + _1[2] }
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                    RBS::Writer.new(out: out).write(decls)
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                    out.string
         
     | 
| 
      
 65 
     | 
    
         
            +
                  end
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
              end
         
     | 
| 
      
 68 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -3,11 +3,11 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            module RbsMiniMagick
         
     | 
| 
       4 
4 
     | 
    
         
             
              # RbsMiniMagick::Generator
         
     | 
| 
       5 
5 
     | 
    
         
             
              class Generator
         
     | 
| 
       6 
     | 
    
         
            -
                # @param mini_magick_version [ 
     | 
| 
      
 6 
     | 
    
         
            +
                # @param mini_magick_version [String, nil]
         
     | 
| 
       7 
7 
     | 
    
         
             
                # @param output_dir [String, nil]
         
     | 
| 
       8 
8 
     | 
    
         
             
                # @return [void]
         
     | 
| 
       9 
9 
     | 
    
         
             
                def initialize(mini_magick_version:, output_dir:)
         
     | 
| 
       10 
     | 
    
         
            -
                  @mini_magick_version = mini_magick_version 
     | 
| 
      
 10 
     | 
    
         
            +
                  @mini_magick_version = mini_magick_version
         
     | 
| 
       11 
11 
     | 
    
         
             
                  @output_dir = output_dir&.then { Pathname(_1) } ||
         
     | 
| 
       12 
12 
     | 
    
         
             
                                Bundler.root.join("sig", "rbs_mini_magick") # steep:ignore
         
     | 
| 
       13 
13 
     | 
    
         
             
                  @output_path = @output_dir.join("mini_magick.rbs")
         
     | 
| 
         @@ -15,7 +15,7 @@ module RbsMiniMagick 
     | 
|
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
                # @return [void]
         
     | 
| 
       17 
17 
     | 
    
         
             
                def run
         
     | 
| 
       18 
     | 
    
         
            -
                  rbs =  
     | 
| 
      
 18 
     | 
    
         
            +
                  rbs = Builder.new(mini_magick_version: mini_magick_version).run
         
     | 
| 
       19 
19 
     | 
    
         
             
                  FileUtils.mkdir_p(output_dir.to_s)
         
     | 
| 
       20 
20 
     | 
    
         
             
                  File.write(output_path.to_s, rbs)
         
     | 
| 
       21 
21 
     | 
    
         
             
                end
         
     | 
| 
         @@ -23,7 +23,7 @@ module RbsMiniMagick 
     | 
|
| 
       23 
23 
     | 
    
         
             
                private
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
                # @!attribute [r] mini_magick_version
         
     | 
| 
       26 
     | 
    
         
            -
                # @return [ 
     | 
| 
      
 26 
     | 
    
         
            +
                # @return [String, nil]
         
     | 
| 
       27 
27 
     | 
    
         
             
                attr_reader :mini_magick_version
         
     | 
| 
       28 
28 
     | 
    
         
             
                # @!attribute [r] output_dir
         
     | 
| 
       29 
29 
     | 
    
         
             
                # @return [Pathname]
         
     | 
| 
         @@ -2,8 +2,8 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module RbsMiniMagick
         
     | 
| 
       4 
4 
     | 
    
         
             
              module ImageMagick
         
     | 
| 
       5 
     | 
    
         
            -
                # RbsMiniMagick::ImageMagick:: 
     | 
| 
       6 
     | 
    
         
            -
                class  
     | 
| 
      
 5 
     | 
    
         
            +
                # RbsMiniMagick::ImageMagick::Option
         
     | 
| 
      
 6 
     | 
    
         
            +
                class Option
         
     | 
| 
       7 
7 
     | 
    
         
             
                  # @!attribute [r] normalized_name
         
     | 
| 
       8 
8 
     | 
    
         
             
                  # @return [String]
         
     | 
| 
       9 
9 
     | 
    
         
             
                  attr_reader :normalized_name
         
     | 
| 
         @@ -17,12 +17,9 @@ module RbsMiniMagick 
     | 
|
| 
       17 
17 
     | 
    
         
             
                    @normalized_name = name.delete_prefix("-").gsub(/\W/, "_")
         
     | 
| 
       18 
18 
     | 
    
         
             
                  end
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
                  # @ 
     | 
| 
       21 
     | 
    
         
            -
                   
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                    sig_args = args.empty? ? "" : "*_ToS args"
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                    "def #{normalized_name}: (#{sig_args}) -> #{return_type}"
         
     | 
| 
      
 20 
     | 
    
         
            +
                  # @return [Boolean]
         
     | 
| 
      
 21 
     | 
    
         
            +
                  def args_empty?
         
     | 
| 
      
 22 
     | 
    
         
            +
                    args.empty?
         
     | 
| 
       26 
23 
     | 
    
         
             
                  end
         
     | 
| 
       27 
24 
     | 
    
         | 
| 
       28 
25 
     | 
    
         
             
                  private
         
     | 
| 
         @@ -0,0 +1,52 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module RbsMiniMagick
         
     | 
| 
      
 4 
     | 
    
         
            +
              module ImageMagick
         
     | 
| 
      
 5 
     | 
    
         
            +
                # RbsMiniMagick::ImageMagick::ToolUsage
         
     | 
| 
      
 6 
     | 
    
         
            +
                class ToolUsage
         
     | 
| 
      
 7 
     | 
    
         
            +
                  class << self
         
     | 
| 
      
 8 
     | 
    
         
            +
                    # @param name [String]
         
     | 
| 
      
 9 
     | 
    
         
            +
                    # @param raw_usage [String]
         
     | 
| 
      
 10 
     | 
    
         
            +
                    # @return [RbsMiniMagick::ImageMagick::ToolUsage]
         
     | 
| 
      
 11 
     | 
    
         
            +
                    def build_by_raw_usage(name, raw_usage)
         
     | 
| 
      
 12 
     | 
    
         
            +
                      new(
         
     | 
| 
      
 13 
     | 
    
         
            +
                        name: name,
         
     | 
| 
      
 14 
     | 
    
         
            +
                        options: raw_usage.split("\n").filter_map { build_option_by_raw_line(_1) }
         
     | 
| 
      
 15 
     | 
    
         
            +
                      )
         
     | 
| 
      
 16 
     | 
    
         
            +
                    end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                    private
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                    # @param raw_line [String]
         
     | 
| 
      
 21 
     | 
    
         
            +
                    # @return [RbsMiniMagick::ImageMagick::Option, nil]
         
     | 
| 
      
 22 
     | 
    
         
            +
                    def build_option_by_raw_line(raw_line)
         
     | 
| 
      
 23 
     | 
    
         
            +
                      splited = raw_line.match(/^\s*(-\S+(?: \S+)*)\s*/)
         
     | 
| 
      
 24 
     | 
    
         
            +
                                        &.then { _1[1] }
         
     | 
| 
      
 25 
     | 
    
         
            +
                                        &.split
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                      return if splited.nil?
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                      Option.new(
         
     | 
| 
      
 30 
     | 
    
         
            +
                        name: String(splited.first),
         
     | 
| 
      
 31 
     | 
    
         
            +
                        args: splited[1..] || []
         
     | 
| 
      
 32 
     | 
    
         
            +
                      )
         
     | 
| 
      
 33 
     | 
    
         
            +
                    end
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  # @!attribute [r] name
         
     | 
| 
      
 37 
     | 
    
         
            +
                  # @return [String]
         
     | 
| 
      
 38 
     | 
    
         
            +
                  attr_reader :name
         
     | 
| 
      
 39 
     | 
    
         
            +
                  # @!attribute [r] options
         
     | 
| 
      
 40 
     | 
    
         
            +
                  # @return [Array<RbsMiniMagick::ImageMagick::Option>]
         
     | 
| 
      
 41 
     | 
    
         
            +
                  attr_reader :options
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                  # @param name [String]
         
     | 
| 
      
 44 
     | 
    
         
            +
                  # @param options [Array<RbsMiniMagick::ImageMagick::Option>]
         
     | 
| 
      
 45 
     | 
    
         
            +
                  # @return [void]
         
     | 
| 
      
 46 
     | 
    
         
            +
                  def initialize(name:, options:)
         
     | 
| 
      
 47 
     | 
    
         
            +
                    @name = name
         
     | 
| 
      
 48 
     | 
    
         
            +
                    @options = options
         
     | 
| 
      
 49 
     | 
    
         
            +
                  end
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
      
 51 
     | 
    
         
            +
              end
         
     | 
| 
      
 52 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,26 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            require_relative "image_magick/usage_fetcher"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require_relative "image_magick/option"
         
     | 
| 
      
 5 
     | 
    
         
            +
            require_relative "image_magick/tool_usage"
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
       3 
7 
     | 
    
         
             
            module RbsMiniMagick
         
     | 
| 
       4 
8 
     | 
    
         
             
              # RbsMiniMagick::ImageMagick
         
     | 
| 
       5 
     | 
    
         
            -
              module ImageMagick
         
     | 
| 
       6 
     | 
    
         
            -
                # @return [String<String>]
         
     | 
| 
       7 
     | 
    
         
            -
                TOOL_NAMES = %w[
         
     | 
| 
       8 
     | 
    
         
            -
                  animate
         
     | 
| 
       9 
     | 
    
         
            -
                  compare
         
     | 
| 
       10 
     | 
    
         
            -
                  composite
         
     | 
| 
       11 
     | 
    
         
            -
                  conjure
         
     | 
| 
       12 
     | 
    
         
            -
                  convert
         
     | 
| 
       13 
     | 
    
         
            -
                  display
         
     | 
| 
       14 
     | 
    
         
            -
                  identify
         
     | 
| 
       15 
     | 
    
         
            -
                  import
         
     | 
| 
       16 
     | 
    
         
            -
                  mogrify
         
     | 
| 
       17 
     | 
    
         
            -
                  montage
         
     | 
| 
       18 
     | 
    
         
            -
                  stream
         
     | 
| 
       19 
     | 
    
         
            -
                ].freeze
         
     | 
| 
       20 
     | 
    
         
            -
                public_constant :TOOL_NAMES
         
     | 
| 
       21 
     | 
    
         
            -
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
              module ImageMagick; end
         
     | 
| 
       22 
10 
     | 
    
         
             
            end
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
            require_relative "image_magick/command_line_option"
         
     | 
| 
       25 
     | 
    
         
            -
            require_relative "image_magick/usage_fetcher"
         
     | 
| 
       26 
     | 
    
         
            -
            require_relative "image_magick/usage_parser"
         
     | 
    
        data/lib/rbs_mini_magick.rb
    CHANGED
    
    | 
         @@ -9,14 +9,15 @@ require "stringio" 
     | 
|
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
            require "mini_magick"
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
      
 12 
     | 
    
         
            +
            require_relative "rbs_mini_magick/version"
         
     | 
| 
      
 13 
     | 
    
         
            +
            require_relative "rbs_mini_magick/image_magick"
         
     | 
| 
      
 14 
     | 
    
         
            +
            require_relative "rbs_mini_magick/flows"
         
     | 
| 
      
 15 
     | 
    
         
            +
            require_relative "rbs_mini_magick/builder"
         
     | 
| 
      
 16 
     | 
    
         
            +
            require_relative "rbs_mini_magick/generator"
         
     | 
| 
      
 17 
     | 
    
         
            +
            require_relative "rbs_mini_magick/cli"
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
       12 
19 
     | 
    
         
             
            # RbsMiniMagick
         
     | 
| 
       13 
20 
     | 
    
         
             
            module RbsMiniMagick
         
     | 
| 
       14 
21 
     | 
    
         
             
              # RbsMiniMagick::Error
         
     | 
| 
       15 
22 
     | 
    
         
             
              class Error < StandardError; end
         
     | 
| 
       16 
23 
     | 
    
         
             
            end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
            require_relative "rbs_mini_magick/version"
         
     | 
| 
       19 
     | 
    
         
            -
            require_relative "rbs_mini_magick/image_magick"
         
     | 
| 
       20 
     | 
    
         
            -
            require_relative "rbs_mini_magick/builders"
         
     | 
| 
       21 
     | 
    
         
            -
            require_relative "rbs_mini_magick/generator"
         
     | 
| 
       22 
     | 
    
         
            -
            require_relative "rbs_mini_magick/cli"
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: rbs_mini_magick
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.2.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - aki19035vc
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2024-07- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2024-07-30 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: mini_magick
         
     | 
| 
         @@ -51,23 +51,20 @@ files: 
     | 
|
| 
       51 
51 
     | 
    
         
             
            - README.md
         
     | 
| 
       52 
52 
     | 
    
         
             
            - exe/rbs-mini-magick
         
     | 
| 
       53 
53 
     | 
    
         
             
            - lib/rbs_mini_magick.rb
         
     | 
| 
       54 
     | 
    
         
            -
            - lib/rbs_mini_magick/ 
     | 
| 
       55 
     | 
    
         
            -
            - lib/rbs_mini_magick/builders/builder.rb
         
     | 
| 
       56 
     | 
    
         
            -
            - lib/rbs_mini_magick/builders/image_class.rb
         
     | 
| 
       57 
     | 
    
         
            -
            - lib/rbs_mini_magick/builders/singleton_method.rb
         
     | 
| 
       58 
     | 
    
         
            -
            - lib/rbs_mini_magick/builders/tool_interface.rb
         
     | 
| 
       59 
     | 
    
         
            -
            - lib/rbs_mini_magick/builders/tool_subclass.rb
         
     | 
| 
       60 
     | 
    
         
            -
            - lib/rbs_mini_magick/builders/v5_0/builder.rb
         
     | 
| 
       61 
     | 
    
         
            -
            - lib/rbs_mini_magick/builders/v5_0/image_class.rb
         
     | 
| 
       62 
     | 
    
         
            -
            - lib/rbs_mini_magick/builders/v5_0/singleton_method.rb
         
     | 
| 
       63 
     | 
    
         
            -
            - lib/rbs_mini_magick/builders/v5_0/tool_interface.rb
         
     | 
| 
       64 
     | 
    
         
            -
            - lib/rbs_mini_magick/builders/v5_0/tool_subclass.rb
         
     | 
| 
      
 54 
     | 
    
         
            +
            - lib/rbs_mini_magick/builder.rb
         
     | 
| 
       65 
55 
     | 
    
         
             
            - lib/rbs_mini_magick/cli.rb
         
     | 
| 
      
 56 
     | 
    
         
            +
            - lib/rbs_mini_magick/flows.rb
         
     | 
| 
      
 57 
     | 
    
         
            +
            - lib/rbs_mini_magick/flows/major5_minor0.rb
         
     | 
| 
      
 58 
     | 
    
         
            +
            - lib/rbs_mini_magick/flows/major5_minor0/image_class.rb
         
     | 
| 
      
 59 
     | 
    
         
            +
            - lib/rbs_mini_magick/flows/major5_minor0/tool_interface.rb
         
     | 
| 
      
 60 
     | 
    
         
            +
            - lib/rbs_mini_magick/flows/major5_minor0/tool_singleton.rb
         
     | 
| 
      
 61 
     | 
    
         
            +
            - lib/rbs_mini_magick/flows/major5_minor0/tool_subclass.rb
         
     | 
| 
      
 62 
     | 
    
         
            +
            - lib/rbs_mini_magick/flows/state.rb
         
     | 
| 
       66 
63 
     | 
    
         
             
            - lib/rbs_mini_magick/generator.rb
         
     | 
| 
       67 
64 
     | 
    
         
             
            - lib/rbs_mini_magick/image_magick.rb
         
     | 
| 
       68 
     | 
    
         
            -
            - lib/rbs_mini_magick/image_magick/ 
     | 
| 
      
 65 
     | 
    
         
            +
            - lib/rbs_mini_magick/image_magick/option.rb
         
     | 
| 
      
 66 
     | 
    
         
            +
            - lib/rbs_mini_magick/image_magick/tool_usage.rb
         
     | 
| 
       69 
67 
     | 
    
         
             
            - lib/rbs_mini_magick/image_magick/usage_fetcher.rb
         
     | 
| 
       70 
     | 
    
         
            -
            - lib/rbs_mini_magick/image_magick/usage_parser.rb
         
     | 
| 
       71 
68 
     | 
    
         
             
            - lib/rbs_mini_magick/version.rb
         
     | 
| 
       72 
69 
     | 
    
         
             
            homepage: https://github.com/aki19035vc/rbs_mini_magick
         
     | 
| 
       73 
70 
     | 
    
         
             
            licenses:
         
     | 
| 
         @@ -1,57 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module RbsMiniMagick
         
     | 
| 
       4 
     | 
    
         
            -
              module Builders
         
     | 
| 
       5 
     | 
    
         
            -
                # RbsMiniMagick::Builders::Builder
         
     | 
| 
       6 
     | 
    
         
            -
                class Builder
         
     | 
| 
       7 
     | 
    
         
            -
                  # @param mini_magick_version [Gem::Version]
         
     | 
| 
       8 
     | 
    
         
            -
                  # @return [void]
         
     | 
| 
       9 
     | 
    
         
            -
                  def initialize(mini_magick_version:)
         
     | 
| 
       10 
     | 
    
         
            -
                    @mini_magick_version = mini_magick_version
         
     | 
| 
       11 
     | 
    
         
            -
                  end
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                  # @return [String]
         
     | 
| 
       14 
     | 
    
         
            -
                  def run
         
     | 
| 
       15 
     | 
    
         
            -
                    rbs = case mini_magick_version
         
     | 
| 
       16 
     | 
    
         
            -
                          when Range.new(Gem::Version.new("5.0"), nil)
         
     | 
| 
       17 
     | 
    
         
            -
                            v5_0
         
     | 
| 
       18 
     | 
    
         
            -
                          else
         
     | 
| 
       19 
     | 
    
         
            -
                            raise Error, "#{mini_magick_version} does not support"
         
     | 
| 
       20 
     | 
    
         
            -
                          end
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                    format_rbs(rbs)
         
     | 
| 
       23 
     | 
    
         
            -
                  end
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                  private
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                  # @!attribute [r] mini_magick_version
         
     | 
| 
       28 
     | 
    
         
            -
                  # @return [Gem::Version]
         
     | 
| 
       29 
     | 
    
         
            -
                  attr_reader :mini_magick_version
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                  # @return [Hash<String, Array<RbsMiniMagick::ImageMagick::CommandLineOption>>]
         
     | 
| 
       32 
     | 
    
         
            -
                  def options_by_tool
         
     | 
| 
       33 
     | 
    
         
            -
                    @options_by_tool ||= ImageMagick::TOOL_NAMES.to_h do |tool|
         
     | 
| 
       34 
     | 
    
         
            -
                      tool.then { ImageMagick::UsageFetcher.new(tool_name: _1).run }
         
     | 
| 
       35 
     | 
    
         
            -
                          .then { ImageMagick::UsageParser.new(raw_usage: _1).run }
         
     | 
| 
       36 
     | 
    
         
            -
                          .then { [tool, _1] }
         
     | 
| 
       37 
     | 
    
         
            -
                    end
         
     | 
| 
       38 
     | 
    
         
            -
                  end
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                  # @return [Array<RbsMiniMagick::ImageMagick::CommandLineOption>]
         
     | 
| 
       41 
     | 
    
         
            -
                  def mogrify_options
         
     | 
| 
       42 
     | 
    
         
            -
                    @mogrify_options ||= options_by_tool.fetch("mogrify")
         
     | 
| 
       43 
     | 
    
         
            -
                  end
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                  # @param rbs [String]
         
     | 
| 
       46 
     | 
    
         
            -
                  # @return [String]
         
     | 
| 
       47 
     | 
    
         
            -
                  def format_rbs(rbs)
         
     | 
| 
       48 
     | 
    
         
            -
                    out = StringIO.new
         
     | 
| 
       49 
     | 
    
         
            -
                    decls = RBS::Parser.parse_signature(rbs).then { _1[1] + _1[2] }
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
                    RBS::Writer.new(out: out).write(decls)
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
                    out.string
         
     | 
| 
       54 
     | 
    
         
            -
                  end
         
     | 
| 
       55 
     | 
    
         
            -
                end
         
     | 
| 
       56 
     | 
    
         
            -
              end
         
     | 
| 
       57 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,31 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module RbsMiniMagick
         
     | 
| 
       4 
     | 
    
         
            -
              module Builders
         
     | 
| 
       5 
     | 
    
         
            -
                # RbsMiniMagick::Builders::ImageClass
         
     | 
| 
       6 
     | 
    
         
            -
                class ImageClass
         
     | 
| 
       7 
     | 
    
         
            -
                  # @param mogrify_options [Array<RbsMiniMagick::ImageMagick::CommandLineOption>]
         
     | 
| 
       8 
     | 
    
         
            -
                  # @return [void]
         
     | 
| 
       9 
     | 
    
         
            -
                  def initialize(mogrify_options:)
         
     | 
| 
       10 
     | 
    
         
            -
                    @mogrify_options = mogrify_options
         
     | 
| 
       11 
     | 
    
         
            -
                  end
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                  private
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                  # @!attribute [r] mogrify_options
         
     | 
| 
       16 
     | 
    
         
            -
                  # @return [Array<RbsMiniMagick::ImageMagick::CommandLineOption>]
         
     | 
| 
       17 
     | 
    
         
            -
                  attr_reader :mogrify_options
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                  # @return [Array<String>]
         
     | 
| 
       20 
     | 
    
         
            -
                  def delegated_mogrify_methods
         
     | 
| 
       21 
     | 
    
         
            -
                    image_instance_methods = MiniMagick::Image.instance_methods.to_set(&:to_s)
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                    mogrify_options.filter_map do |item|
         
     | 
| 
       24 
     | 
    
         
            -
                      next if image_instance_methods.include?(item.normalized_name)
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                      item.to_method_signature("self")
         
     | 
| 
       27 
     | 
    
         
            -
                    end.uniq
         
     | 
| 
       28 
     | 
    
         
            -
                  end
         
     | 
| 
       29 
     | 
    
         
            -
                end
         
     | 
| 
       30 
     | 
    
         
            -
              end
         
     | 
| 
       31 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,20 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module RbsMiniMagick
         
     | 
| 
       4 
     | 
    
         
            -
              module Builders
         
     | 
| 
       5 
     | 
    
         
            -
                # RbsMiniMagick::Builders::SingletonMethod
         
     | 
| 
       6 
     | 
    
         
            -
                class SingletonMethod
         
     | 
| 
       7 
     | 
    
         
            -
                  # @param tool_name [String]
         
     | 
| 
       8 
     | 
    
         
            -
                  # @return [void]
         
     | 
| 
       9 
     | 
    
         
            -
                  def initialize(tool_name:)
         
     | 
| 
       10 
     | 
    
         
            -
                    @tool_name = tool_name
         
     | 
| 
       11 
     | 
    
         
            -
                  end
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                  private
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                  # @!attribute [r] tool_name
         
     | 
| 
       16 
     | 
    
         
            -
                  # @return [String]
         
     | 
| 
       17 
     | 
    
         
            -
                  attr_reader :tool_name
         
     | 
| 
       18 
     | 
    
         
            -
                end
         
     | 
| 
       19 
     | 
    
         
            -
              end
         
     | 
| 
       20 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,25 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module RbsMiniMagick
         
     | 
| 
       4 
     | 
    
         
            -
              module Builders
         
     | 
| 
       5 
     | 
    
         
            -
                # RbsMiniMagick::Builders::ToolInterface
         
     | 
| 
       6 
     | 
    
         
            -
                class ToolInterface
         
     | 
| 
       7 
     | 
    
         
            -
                  # @param tool_name [String]
         
     | 
| 
       8 
     | 
    
         
            -
                  # @param options [Array<RbsMiniMagick::ImageMagick::CommandLineOption>]
         
     | 
| 
       9 
     | 
    
         
            -
                  # @return [void]
         
     | 
| 
       10 
     | 
    
         
            -
                  def initialize(tool_name:, options:)
         
     | 
| 
       11 
     | 
    
         
            -
                    @tool_name = tool_name
         
     | 
| 
       12 
     | 
    
         
            -
                    @options = options
         
     | 
| 
       13 
     | 
    
         
            -
                  end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                  private
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                  # @!attribute [r] tool_name
         
     | 
| 
       18 
     | 
    
         
            -
                  # @return [String]
         
     | 
| 
       19 
     | 
    
         
            -
                  attr_reader :tool_name
         
     | 
| 
       20 
     | 
    
         
            -
                  # @!attribute [r] options
         
     | 
| 
       21 
     | 
    
         
            -
                  # @return [Array<RbsMiniMagick::ImageMagick::CommandLineOption>]
         
     | 
| 
       22 
     | 
    
         
            -
                  attr_reader :options
         
     | 
| 
       23 
     | 
    
         
            -
                end
         
     | 
| 
       24 
     | 
    
         
            -
              end
         
     | 
| 
       25 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,20 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module RbsMiniMagick
         
     | 
| 
       4 
     | 
    
         
            -
              module Builders
         
     | 
| 
       5 
     | 
    
         
            -
                # RbsMiniMagick::Builders::ToolSubclass
         
     | 
| 
       6 
     | 
    
         
            -
                class ToolSubclass
         
     | 
| 
       7 
     | 
    
         
            -
                  # @param tool_name [String]
         
     | 
| 
       8 
     | 
    
         
            -
                  # @return [void]
         
     | 
| 
       9 
     | 
    
         
            -
                  def initialize(tool_name:)
         
     | 
| 
       10 
     | 
    
         
            -
                    @tool_name = tool_name
         
     | 
| 
       11 
     | 
    
         
            -
                  end
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                  private
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                  # @!attribute [r] tool_name
         
     | 
| 
       16 
     | 
    
         
            -
                  # @return [String]
         
     | 
| 
       17 
     | 
    
         
            -
                  attr_reader :tool_name
         
     | 
| 
       18 
     | 
    
         
            -
                end
         
     | 
| 
       19 
     | 
    
         
            -
              end
         
     | 
| 
       20 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,37 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module RbsMiniMagick
         
     | 
| 
       4 
     | 
    
         
            -
              module Builders
         
     | 
| 
       5 
     | 
    
         
            -
                # RbsMiniMagick::Builder
         
     | 
| 
       6 
     | 
    
         
            -
                class Builder
         
     | 
| 
       7 
     | 
    
         
            -
                  # @return [String]
         
     | 
| 
       8 
     | 
    
         
            -
                  def v5_0 # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
         
     | 
| 
       9 
     | 
    
         
            -
                    tool_interface_methods = options_by_tool.map do |tool, options|
         
     | 
| 
       10 
     | 
    
         
            -
                      Builders::ToolInterface.new(tool_name: tool, options: options).v5_0
         
     | 
| 
       11 
     | 
    
         
            -
                    end.join("\n")
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                    tool_subclasses = options_by_tool.map do |tool, _|
         
     | 
| 
       14 
     | 
    
         
            -
                      Builders::ToolSubclass.new(tool_name: tool).v5_0
         
     | 
| 
       15 
     | 
    
         
            -
                    end.join("\n")
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                    singleton_methods = options_by_tool.map do |tool, _|
         
     | 
| 
       18 
     | 
    
         
            -
                      Builders::SingletonMethod.new(tool_name: tool).v5_0
         
     | 
| 
       19 
     | 
    
         
            -
                    end.join("\n")
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                    image_class = Builders::ImageClass.new(mogrify_options: mogrify_options).v5_0
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                    <<~RBS
         
     | 
| 
       24 
     | 
    
         
            -
                      module MiniMagick
         
     | 
| 
       25 
     | 
    
         
            -
                        #{tool_interface_methods}
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                        #{tool_subclasses}
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                        #{singleton_methods}
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                        #{image_class}
         
     | 
| 
       32 
     | 
    
         
            -
                      end
         
     | 
| 
       33 
     | 
    
         
            -
                    RBS
         
     | 
| 
       34 
     | 
    
         
            -
                  end
         
     | 
| 
       35 
     | 
    
         
            -
                end
         
     | 
| 
       36 
     | 
    
         
            -
              end
         
     | 
| 
       37 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,32 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module RbsMiniMagick
         
     | 
| 
       4 
     | 
    
         
            -
              module Builders
         
     | 
| 
       5 
     | 
    
         
            -
                # RbsMiniMagick::Builders::ImageClass
         
     | 
| 
       6 
     | 
    
         
            -
                class ImageClass
         
     | 
| 
       7 
     | 
    
         
            -
                  # @return [String]
         
     | 
| 
       8 
     | 
    
         
            -
                  def v5_0
         
     | 
| 
       9 
     | 
    
         
            -
                    <<~RBS
         
     | 
| 
       10 
     | 
    
         
            -
                      class Image
         
     | 
| 
       11 
     | 
    
         
            -
                        def initialize: (_ToS input_path, ?Tempfile? tempfile) ?{ (Tool & _Mogrify[Tool]) -> void } -> void
         
     | 
| 
       12 
     | 
    
         
            -
                                      | ...
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                        def combine_options: () { (Tool & _Mogrify[Tool]) -> void } -> self
         
     | 
| 
       15 
     | 
    
         
            -
                                           | ...
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                        def composite: (instance other_image, ?String output_extension, ?untyped? mask) ?{ (Tool & _Composite[Tool]) -> void } -> instance
         
     | 
| 
       18 
     | 
    
         
            -
                                     | ...
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                        def identify: () ?{ (Tool & _Identify[Tool]) -> void } -> String
         
     | 
| 
       21 
     | 
    
         
            -
                                    | ...
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                        def mogrify: (?Integer? page) ?{ (Tool & _Mogrify[Tool]) -> void } -> self
         
     | 
| 
       24 
     | 
    
         
            -
                                   | ...
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                        #{delegated_mogrify_methods.join("\n")}
         
     | 
| 
       27 
     | 
    
         
            -
                      end
         
     | 
| 
       28 
     | 
    
         
            -
                    RBS
         
     | 
| 
       29 
     | 
    
         
            -
                  end
         
     | 
| 
       30 
     | 
    
         
            -
                end
         
     | 
| 
       31 
     | 
    
         
            -
              end
         
     | 
| 
       32 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,20 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module RbsMiniMagick
         
     | 
| 
       4 
     | 
    
         
            -
              module Builders
         
     | 
| 
       5 
     | 
    
         
            -
                # RbsMiniMagick::Builders::SingletonMethod
         
     | 
| 
       6 
     | 
    
         
            -
                class SingletonMethod
         
     | 
| 
       7 
     | 
    
         
            -
                  # @return [String]
         
     | 
| 
       8 
     | 
    
         
            -
                  def v5_0
         
     | 
| 
       9 
     | 
    
         
            -
                    interface_name = "_#{tool_name.capitalize}"
         
     | 
| 
       10 
     | 
    
         
            -
                    args = "?errors: bool, ?warnings: bool, ?stdin: _ToS, ?timeout: Integer?, **untyped options"
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                    <<~RBS
         
     | 
| 
       13 
     | 
    
         
            -
                      def self.#{tool_name}: (#{args}) -> (Tool & #{interface_name}[Tool])
         
     | 
| 
       14 
     | 
    
         
            -
                                           | (#{args}) { (Tool & #{interface_name}[Tool]) -> void } -> String
         
     | 
| 
       15 
     | 
    
         
            -
                                           | ...
         
     | 
| 
       16 
     | 
    
         
            -
                    RBS
         
     | 
| 
       17 
     | 
    
         
            -
                  end
         
     | 
| 
       18 
     | 
    
         
            -
                end
         
     | 
| 
       19 
     | 
    
         
            -
              end
         
     | 
| 
       20 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,20 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module RbsMiniMagick
         
     | 
| 
       4 
     | 
    
         
            -
              module Builders
         
     | 
| 
       5 
     | 
    
         
            -
                # RbsMiniMagick::Builders::ToolInterface
         
     | 
| 
       6 
     | 
    
         
            -
                class ToolInterface
         
     | 
| 
       7 
     | 
    
         
            -
                  # @return [String]
         
     | 
| 
       8 
     | 
    
         
            -
                  def v5_0
         
     | 
| 
       9 
     | 
    
         
            -
                    tool_methods = options.map { _1.to_method_signature("[T]") }
         
     | 
| 
       10 
     | 
    
         
            -
                                          .uniq.join("\n")
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                    <<~RBS
         
     | 
| 
       13 
     | 
    
         
            -
                      interface _#{tool_name.capitalize}[T]
         
     | 
| 
       14 
     | 
    
         
            -
                        #{tool_methods}
         
     | 
| 
       15 
     | 
    
         
            -
                      end
         
     | 
| 
       16 
     | 
    
         
            -
                    RBS
         
     | 
| 
       17 
     | 
    
         
            -
                  end
         
     | 
| 
       18 
     | 
    
         
            -
                end
         
     | 
| 
       19 
     | 
    
         
            -
              end
         
     | 
| 
       20 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,19 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module RbsMiniMagick
         
     | 
| 
       4 
     | 
    
         
            -
              module Builders
         
     | 
| 
       5 
     | 
    
         
            -
                # RbsMiniMagick::Builders::ToolSubclass
         
     | 
| 
       6 
     | 
    
         
            -
                class ToolSubclass
         
     | 
| 
       7 
     | 
    
         
            -
                  # @return [String]
         
     | 
| 
       8 
     | 
    
         
            -
                  def v5_0
         
     | 
| 
       9 
     | 
    
         
            -
                    <<~RBS
         
     | 
| 
       10 
     | 
    
         
            -
                      class Tool
         
     | 
| 
       11 
     | 
    
         
            -
                        class #{tool_name.capitalize} < Tool
         
     | 
| 
       12 
     | 
    
         
            -
                          include _#{tool_name.capitalize}
         
     | 
| 
       13 
     | 
    
         
            -
                        end
         
     | 
| 
       14 
     | 
    
         
            -
                      end
         
     | 
| 
       15 
     | 
    
         
            -
                    RBS
         
     | 
| 
       16 
     | 
    
         
            -
                  end
         
     | 
| 
       17 
     | 
    
         
            -
                end
         
     | 
| 
       18 
     | 
    
         
            -
              end
         
     | 
| 
       19 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,18 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module RbsMiniMagick
         
     | 
| 
       4 
     | 
    
         
            -
              # RbsMiniMagick::Builders
         
     | 
| 
       5 
     | 
    
         
            -
              module Builders; end
         
     | 
| 
       6 
     | 
    
         
            -
            end
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
            require_relative "builders/builder"
         
     | 
| 
       9 
     | 
    
         
            -
            require_relative "builders/tool_interface"
         
     | 
| 
       10 
     | 
    
         
            -
            require_relative "builders/tool_subclass"
         
     | 
| 
       11 
     | 
    
         
            -
            require_relative "builders/singleton_method"
         
     | 
| 
       12 
     | 
    
         
            -
            require_relative "builders/image_class"
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
            require_relative "builders/v5_0/builder"
         
     | 
| 
       15 
     | 
    
         
            -
            require_relative "builders/v5_0/tool_interface"
         
     | 
| 
       16 
     | 
    
         
            -
            require_relative "builders/v5_0/tool_subclass"
         
     | 
| 
       17 
     | 
    
         
            -
            require_relative "builders/v5_0/singleton_method"
         
     | 
| 
       18 
     | 
    
         
            -
            require_relative "builders/v5_0/image_class"
         
     | 
| 
         @@ -1,44 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module RbsMiniMagick
         
     | 
| 
       4 
     | 
    
         
            -
              module ImageMagick
         
     | 
| 
       5 
     | 
    
         
            -
                # RbsMiniMagick::ImageMagick::UsageParser
         
     | 
| 
       6 
     | 
    
         
            -
                class UsageParser
         
     | 
| 
       7 
     | 
    
         
            -
                  # @param raw_usage [String]
         
     | 
| 
       8 
     | 
    
         
            -
                  # @return [void]
         
     | 
| 
       9 
     | 
    
         
            -
                  def initialize(raw_usage:)
         
     | 
| 
       10 
     | 
    
         
            -
                    @raw_usage = raw_usage
         
     | 
| 
       11 
     | 
    
         
            -
                  end
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                  # @return [Array<RbsMiniMagick::ImageMagick::CommandLineOption>]
         
     | 
| 
       14 
     | 
    
         
            -
                  def run
         
     | 
| 
       15 
     | 
    
         
            -
                    parse_raw_command_line_options
         
     | 
| 
       16 
     | 
    
         
            -
                      .map { build_command_line_option(_1) }
         
     | 
| 
       17 
     | 
    
         
            -
                  end
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                  private
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                  # @!attribute [r] raw_usage
         
     | 
| 
       22 
     | 
    
         
            -
                  # @return [String]
         
     | 
| 
       23 
     | 
    
         
            -
                  attr_reader :raw_usage
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                  # @return [Array<String>]
         
     | 
| 
       26 
     | 
    
         
            -
                  def parse_raw_command_line_options
         
     | 
| 
       27 
     | 
    
         
            -
                    raw_usage.split("\n").filter_map do |line|
         
     | 
| 
       28 
     | 
    
         
            -
                      line.match(/^\s*(-\S+(?: \S+)*)\s*/)&.then { _1[1] }
         
     | 
| 
       29 
     | 
    
         
            -
                    end
         
     | 
| 
       30 
     | 
    
         
            -
                  end
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                  # @param raw_string [String]
         
     | 
| 
       33 
     | 
    
         
            -
                  # @return [RbsMiniMagick::ImageMagick::CommandLineOption]
         
     | 
| 
       34 
     | 
    
         
            -
                  def build_command_line_option(raw_string)
         
     | 
| 
       35 
     | 
    
         
            -
                    splited = raw_string.split
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
                    CommandLineOption.new(
         
     | 
| 
       38 
     | 
    
         
            -
                      name: String(splited.first),
         
     | 
| 
       39 
     | 
    
         
            -
                      args: splited[1..] || []
         
     | 
| 
       40 
     | 
    
         
            -
                    )
         
     | 
| 
       41 
     | 
    
         
            -
                  end
         
     | 
| 
       42 
     | 
    
         
            -
                end
         
     | 
| 
       43 
     | 
    
         
            -
              end
         
     | 
| 
       44 
     | 
    
         
            -
            end
         
     |