statesman-diagram 0.1.1 → 0.1.2
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/Gemfile +0 -1
- data/Gemfile.lock +37 -0
- data/README.md +4 -1
- data/Rakefile +2 -2
- data/lib/statesman-diagram.rb +2 -15
- data/lib/statesman/diagram.rb +49 -0
- data/lib/statesman/diagram/version.rb +5 -0
- data/lib/statesman/machine/class_methods.rb +21 -0
- metadata +20 -20
- data/.gitignore +0 -9
- data/.vexor.yml +0 -10
- data/lib/tasks/statesman.rake +0 -21
- data/statesman-diagram.gemspec +0 -27
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 16343a14d2db965949cd03525930344782e89c63
         | 
| 4 | 
            +
              data.tar.gz: 1482e56175e597d5e09c2546f81233e76ce933a5
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: b19dde9ff759e4bb95c54165a34e201d3c80c454909cee982766f36034d8e2ddfc1a91f364d06ffd4a3617a11faa33d12064b1d03a775931d3ca68a0e8e86fec
         | 
| 7 | 
            +
              data.tar.gz: eda071f3eb579a75be5c0ff4b5d4f6cc0e961976469b829f0ae620ca51548824f91c4cd32333028785f14efe068df9325e16617297d71a95a5d7222c83996287
         | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/Gemfile.lock
    ADDED
    
    | @@ -0,0 +1,37 @@ | |
| 1 | 
            +
            PATH
         | 
| 2 | 
            +
              remote: .
         | 
| 3 | 
            +
              specs:
         | 
| 4 | 
            +
                statesman-diagram (0.1.2)
         | 
| 5 | 
            +
                  statesman (~> 2.0)
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            GEM
         | 
| 8 | 
            +
              remote: https://rubygems.org/
         | 
| 9 | 
            +
              specs:
         | 
| 10 | 
            +
                diff-lcs (1.3)
         | 
| 11 | 
            +
                rake (10.5.0)
         | 
| 12 | 
            +
                rspec (3.6.0)
         | 
| 13 | 
            +
                  rspec-core (~> 3.6.0)
         | 
| 14 | 
            +
                  rspec-expectations (~> 3.6.0)
         | 
| 15 | 
            +
                  rspec-mocks (~> 3.6.0)
         | 
| 16 | 
            +
                rspec-core (3.6.0)
         | 
| 17 | 
            +
                  rspec-support (~> 3.6.0)
         | 
| 18 | 
            +
                rspec-expectations (3.6.0)
         | 
| 19 | 
            +
                  diff-lcs (>= 1.2.0, < 2.0)
         | 
| 20 | 
            +
                  rspec-support (~> 3.6.0)
         | 
| 21 | 
            +
                rspec-mocks (3.6.0)
         | 
| 22 | 
            +
                  diff-lcs (>= 1.2.0, < 2.0)
         | 
| 23 | 
            +
                  rspec-support (~> 3.6.0)
         | 
| 24 | 
            +
                rspec-support (3.6.0)
         | 
| 25 | 
            +
                statesman (2.0.1)
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            PLATFORMS
         | 
| 28 | 
            +
              ruby
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            DEPENDENCIES
         | 
| 31 | 
            +
              bundler (~> 1.14)
         | 
| 32 | 
            +
              rake (~> 10.0)
         | 
| 33 | 
            +
              rspec (~> 3.0)
         | 
| 34 | 
            +
              statesman-diagram!
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            BUNDLED WITH
         | 
| 37 | 
            +
               1.15.4
         | 
    
        data/README.md
    CHANGED
    
    | @@ -40,7 +40,10 @@ Or install it yourself as: | |
| 40 40 | 
             
            ## Usage
         | 
| 41 41 |  | 
| 42 42 | 
             
            Run `rake statesman:diagram[My::State::Machine::Class]`.
         | 
| 43 | 
            -
            Find the state diagram of this class in ` | 
| 43 | 
            +
            Find the state diagram of this class in `My_State_Machine_Class.png`.
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            You can also specify the name of the file `rake statesman:diagram[My::State::Machine::Class, ./temp/state]`
         | 
| 46 | 
            +
            Find the state diagram of this class in `./temp/state.png`.
         | 
| 44 47 |  | 
| 45 48 | 
             
            ## Development
         | 
| 46 49 |  | 
    
        data/Rakefile
    CHANGED
    
    
    
        data/lib/statesman-diagram.rb
    CHANGED
    
    | @@ -1,15 +1,2 @@ | |
| 1 | 
            -
            require  | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Statesman
         | 
| 4 | 
            -
              module Machine
         | 
| 5 | 
            -
                module ClassMethods
         | 
| 6 | 
            -
                  def to_dot
         | 
| 7 | 
            -
                    <<-DOT
         | 
| 8 | 
            -
            digraph #{name.gsub('::', '_')} {
         | 
| 9 | 
            -
            #{successors.map{|from, tos| tos.map{|to| "  #{from} -> #{to};" } }.flatten.join("\n")}
         | 
| 10 | 
            -
            }
         | 
| 11 | 
            -
                    DOT
         | 
| 12 | 
            -
                  end
         | 
| 13 | 
            -
                end
         | 
| 14 | 
            -
              end
         | 
| 15 | 
            -
            end
         | 
| 1 | 
            +
            require 'statesman/machine/class_methods'
         | 
| 2 | 
            +
            require 'statesman/diagram'
         | 
| @@ -0,0 +1,49 @@ | |
| 1 | 
            +
            require 'open3'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Statesman
         | 
| 4 | 
            +
              class Diagram
         | 
| 5 | 
            +
                # @param [String] name  - name of the diagram.
         | 
| 6 | 
            +
                # @param [Hash]   graph - list of vertices and edges.
         | 
| 7 | 
            +
                def initialize(name:, graph:)
         | 
| 8 | 
            +
                  @name  = name
         | 
| 9 | 
            +
                  @graph = graph
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                # @return [String] diagram in DOT format.
         | 
| 13 | 
            +
                def to_dot
         | 
| 14 | 
            +
                  format("digraph %{name} {\n  %{body}\n}", name: @name, body: dot_body.join("\n  "))
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                def to_png(file_name = nil)
         | 
| 18 | 
            +
                  file_name ||= @name
         | 
| 19 | 
            +
                  file_name += '.png'
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  build_png(file_name)
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                private
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                # @return [String]
         | 
| 27 | 
            +
                def dot_body
         | 
| 28 | 
            +
                  @graph.map do |vertex, edges|
         | 
| 29 | 
            +
                    edges.map do |to|
         | 
| 30 | 
            +
                      "#{vertex} -> #{to};"
         | 
| 31 | 
            +
                    end
         | 
| 32 | 
            +
                  end.flatten
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                def build_png(file_name)
         | 
| 36 | 
            +
                  cmd = ['dot', '-Tpng', "-o#{file_name}"]
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                  puts "Running '#{cmd.join(' ')}' with this ^ as stdin..."
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  output, status = Open3.capture2e(*cmd, stdin_data: to_dot)
         | 
| 41 | 
            +
                  if status.success?
         | 
| 42 | 
            +
                    puts "Success. You can open #{file_name} and see the diagram."
         | 
| 43 | 
            +
                  else
         | 
| 44 | 
            +
                    puts 'The command failed:'
         | 
| 45 | 
            +
                    puts output
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
            end
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            require 'statesman/machine'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Statesman
         | 
| 4 | 
            +
              module Machine
         | 
| 5 | 
            +
                module ClassMethods
         | 
| 6 | 
            +
                  # @return [Statesman::Diagram] diagram for the state machine
         | 
| 7 | 
            +
                  def diagram
         | 
| 8 | 
            +
                    Diagram.new(name: name.gsub('::', '_'), graph: successors)
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  # @return [String] state machine in DOT format.
         | 
| 12 | 
            +
                  def to_dot
         | 
| 13 | 
            +
                    diagram.to_dot
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  def to_png(file_name = nil)
         | 
| 17 | 
            +
                    diagram.to_png(file_name)
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,71 +1,71 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: statesman-diagram
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Ilya Vassilevsky
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2017- | 
| 11 | 
            +
            date: 2017-10-04 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            -
              name:  | 
| 14 | 
            +
              name: statesman
         | 
| 15 15 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - "~>"
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: ' | 
| 20 | 
            -
              type: : | 
| 19 | 
            +
                    version: '2.0'
         | 
| 20 | 
            +
              type: :runtime
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 24 | 
             
                - - "~>"
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version: ' | 
| 26 | 
            +
                    version: '2.0'
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            -
              name:  | 
| 28 | 
            +
              name: bundler
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 31 | 
             
                - - "~>"
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version: ' | 
| 33 | 
            +
                    version: '1.14'
         | 
| 34 34 | 
             
              type: :development
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 38 | 
             
                - - "~>"
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version: ' | 
| 40 | 
            +
                    version: '1.14'
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            -
              name:  | 
| 42 | 
            +
              name: rake
         | 
| 43 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 44 | 
             
                requirements:
         | 
| 45 45 | 
             
                - - "~>"
         | 
| 46 46 | 
             
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            -
                    version: ' | 
| 47 | 
            +
                    version: '10.0'
         | 
| 48 48 | 
             
              type: :development
         | 
| 49 49 | 
             
              prerelease: false
         | 
| 50 50 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 51 | 
             
                requirements:
         | 
| 52 52 | 
             
                - - "~>"
         | 
| 53 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            -
                    version: ' | 
| 54 | 
            +
                    version: '10.0'
         | 
| 55 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            -
              name:  | 
| 56 | 
            +
              name: rspec
         | 
| 57 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 58 | 
             
                requirements:
         | 
| 59 59 | 
             
                - - "~>"
         | 
| 60 60 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            -
                    version: ' | 
| 62 | 
            -
              type: : | 
| 61 | 
            +
                    version: '3.0'
         | 
| 62 | 
            +
              type: :development
         | 
| 63 63 | 
             
              prerelease: false
         | 
| 64 64 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 65 | 
             
                requirements:
         | 
| 66 66 | 
             
                - - "~>"
         | 
| 67 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            -
                    version: ' | 
| 68 | 
            +
                    version: '3.0'
         | 
| 69 69 | 
             
            description: 
         | 
| 70 70 | 
             
            email:
         | 
| 71 71 | 
             
            - vassilevsky@gmail.com
         | 
| @@ -73,15 +73,15 @@ executables: [] | |
| 73 73 | 
             
            extensions: []
         | 
| 74 74 | 
             
            extra_rdoc_files: []
         | 
| 75 75 | 
             
            files:
         | 
| 76 | 
            -
            - ".gitignore"
         | 
| 77 | 
            -
            - ".vexor.yml"
         | 
| 78 76 | 
             
            - Gemfile
         | 
| 77 | 
            +
            - Gemfile.lock
         | 
| 79 78 | 
             
            - LICENSE.txt
         | 
| 80 79 | 
             
            - README.md
         | 
| 81 80 | 
             
            - Rakefile
         | 
| 82 81 | 
             
            - lib/statesman-diagram.rb
         | 
| 83 | 
            -
            - lib/ | 
| 84 | 
            -
            - statesman | 
| 82 | 
            +
            - lib/statesman/diagram.rb
         | 
| 83 | 
            +
            - lib/statesman/diagram/version.rb
         | 
| 84 | 
            +
            - lib/statesman/machine/class_methods.rb
         | 
| 85 85 | 
             
            homepage: https://github.com/vassilevsky/statesman-diagram
         | 
| 86 86 | 
             
            licenses:
         | 
| 87 87 | 
             
            - MIT
         | 
    
        data/.gitignore
    DELETED
    
    
    
        data/.vexor.yml
    DELETED
    
    
    
        data/lib/tasks/statesman.rake
    DELETED
    
    | @@ -1,21 +0,0 @@ | |
| 1 | 
            -
            namespace :statesman do
         | 
| 2 | 
            -
              desc "Render a PNG image of the state diagram of the given state machine class"
         | 
| 3 | 
            -
              task :diagram, [:class] => :environment do |t, args|
         | 
| 4 | 
            -
                machine_class = self.class.const_get(args[:class])
         | 
| 5 | 
            -
                puts "Will draw the state diagram of #{machine_class}"
         | 
| 6 | 
            -
                dot = machine_class.to_dot
         | 
| 7 | 
            -
                puts "Here it is in the textual form:"
         | 
| 8 | 
            -
                puts dot
         | 
| 9 | 
            -
                filename = "#{machine_class.name.gsub('::','_')}.png"
         | 
| 10 | 
            -
                cmd = %W(dot -Tpng -o#{filename})
         | 
| 11 | 
            -
                puts "Running '#{cmd.join(' ')}' with this ^ as stdin..."
         | 
| 12 | 
            -
                require 'open3'
         | 
| 13 | 
            -
                output, status = Open3.capture2e(*cmd, stdin_data: dot)
         | 
| 14 | 
            -
                if status.success?
         | 
| 15 | 
            -
                  puts "Success. You can open #{filename} and see the diagram."
         | 
| 16 | 
            -
                else
         | 
| 17 | 
            -
                  puts 'The command failed:'
         | 
| 18 | 
            -
                  puts output
         | 
| 19 | 
            -
                end
         | 
| 20 | 
            -
              end
         | 
| 21 | 
            -
            end
         | 
    
        data/statesman-diagram.gemspec
    DELETED
    
    | @@ -1,27 +0,0 @@ | |
| 1 | 
            -
            # coding: utf-8
         | 
| 2 | 
            -
            lib = File.expand_path('../lib', __FILE__)
         | 
| 3 | 
            -
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            Gem::Specification.new do |spec|
         | 
| 6 | 
            -
              spec.name          = "statesman-diagram"
         | 
| 7 | 
            -
              spec.version       = "0.1.1"
         | 
| 8 | 
            -
              spec.authors       = ["Ilya Vassilevsky"]
         | 
| 9 | 
            -
              spec.email         = ["vassilevsky@gmail.com"]
         | 
| 10 | 
            -
             | 
| 11 | 
            -
              spec.summary       = "Generates DOT representations of Statesman machines and runs dot to render them to PNGs"
         | 
| 12 | 
            -
              spec.homepage      = "https://github.com/vassilevsky/statesman-diagram"
         | 
| 13 | 
            -
              spec.license       = "MIT"
         | 
| 14 | 
            -
             | 
| 15 | 
            -
              spec.files         = `git ls-files -z`.split("\x0").reject do |f|
         | 
| 16 | 
            -
                f.match(%r{^(test|spec|features)/})
         | 
| 17 | 
            -
              end
         | 
| 18 | 
            -
              spec.bindir        = "exe"
         | 
| 19 | 
            -
              spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
         | 
| 20 | 
            -
              spec.require_paths = ["lib"]
         | 
| 21 | 
            -
             | 
| 22 | 
            -
              spec.add_development_dependency "bundler", "~> 1.14"
         | 
| 23 | 
            -
              spec.add_development_dependency "rake", "~> 10.0"
         | 
| 24 | 
            -
              spec.add_development_dependency "rspec", "~> 3.0"
         | 
| 25 | 
            -
             | 
| 26 | 
            -
              spec.add_runtime_dependency "statesman", "~> 2.0"
         | 
| 27 | 
            -
            end
         |