enumstats 0.0.1 → 0.0.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.
- data/.travis.yml +4 -0
- data/README.md +5 -3
- data/Rakefile +2 -2
- data/bin/stats +76 -0
- data/enumstats.gemspec +3 -1
- data/lib/enumstats/version.rb +1 -1
- data/lib/enumstats.rb +3 -0
- data/test/acceptance/test_app.rb +94 -0
- data/test/fixtures/example.2.data +3 -0
- data/test/fixtures/example.data +3 -0
- data/test/helper.rb +6 -0
- metadata +44 -3
    
        data/.travis.yml
    ADDED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -1,6 +1,8 @@ | |
| 1 | 
            -
            #  | 
| 1 | 
            +
            # Enumerable Stats
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 3 | 
            +
            Provides simple statistics for any Enumerable.
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            [](http://travis-ci.org/nerab/enumstats)
         | 
| 4 6 |  | 
| 5 7 | 
             
            ## Installation
         | 
| 6 8 |  | 
| @@ -18,7 +20,7 @@ Or install it yourself as: | |
| 18 20 |  | 
| 19 21 | 
             
            ## Usage
         | 
| 20 22 |  | 
| 21 | 
            -
             | 
| 23 | 
            +
            See unit tests for usage.
         | 
| 22 24 |  | 
| 23 25 | 
             
            ## Contributing
         | 
| 24 26 |  | 
    
        data/Rakefile
    CHANGED
    
    | @@ -3,8 +3,8 @@ require "bundler/gem_tasks" | |
| 3 3 | 
             
            require 'rake/testtask'
         | 
| 4 4 |  | 
| 5 5 | 
             
            Rake::TestTask.new do |test|
         | 
| 6 | 
            -
              test.libs << 'lib' << 'test' << 'test/unit'
         | 
| 7 | 
            -
              test.pattern = 'test | 
| 6 | 
            +
              test.libs << 'lib' << 'test' << 'test/unit' << 'test/acceptance'
         | 
| 7 | 
            +
              test.pattern = 'test/*/test_*.rb'
         | 
| 8 8 | 
             
            end
         | 
| 9 9 |  | 
| 10 10 | 
             
            task :default => :test
         | 
    
        data/bin/stats
    ADDED
    
    | @@ -0,0 +1,76 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'bundler/setup'
         | 
| 4 | 
            +
            require 'enumstats'
         | 
| 5 | 
            +
            require 'optparse'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            output_available = %w[count mean variance standard_deviation sum min max]
         | 
| 8 | 
            +
            output_selected = []
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            option_parser = OptionParser.new do |opts|
         | 
| 11 | 
            +
              opts.banner  = <<ABOUT
         | 
| 12 | 
            +
            Calculates simple statistics like average, variance, and standard deviation.
         | 
| 13 | 
            +
            Input is read from STDIN, separated by $IFS.
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            Author: Nicolas E. Rabenau <nerab@gmx.at>
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            Synopsis:
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                stats [options]
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            Example Usage:
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                # print all stats for the given array
         | 
| 24 | 
            +
                echo '5.0 10.0 15.0' | stats
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                # print all stats except the mean
         | 
| 27 | 
            +
                echo '5.0 10.0 15.0' | stats --no-mean
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                # print just the variance
         | 
| 30 | 
            +
                echo '5.0 10.0 15.0' | stats --variance
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                # combine more than one stat
         | 
| 33 | 
            +
                echo '5.0 10.0 15.0' | stats --min --variance
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            Options:
         | 
| 36 | 
            +
            ABOUT
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              output_available.each do |stat|
         | 
| 39 | 
            +
                opts.on("--[no-]#{stat}", "Do [only|not] print the #{stat}") do |selected|
         | 
| 40 | 
            +
                  if selected
         | 
| 41 | 
            +
                    output_selected << stat
         | 
| 42 | 
            +
                  else
         | 
| 43 | 
            +
                    output_available.delete(stat)
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
            end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            begin
         | 
| 50 | 
            +
              option_parser.parse!
         | 
| 51 | 
            +
            rescue
         | 
| 52 | 
            +
              STDERR.puts "Error: #{$!.message}"
         | 
| 53 | 
            +
              STDERR.puts
         | 
| 54 | 
            +
              STDERR.puts option_parser.banner
         | 
| 55 | 
            +
              exit 1
         | 
| 56 | 
            +
            end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
            data = []
         | 
| 59 | 
            +
             | 
| 60 | 
            +
            ARGF.read.split.each do |line|
         | 
| 61 | 
            +
              data << line.to_f
         | 
| 62 | 
            +
            end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
            case output_selected.size
         | 
| 65 | 
            +
            when 0
         | 
| 66 | 
            +
              output_available.each do |stat|
         | 
| 67 | 
            +
                puts "#{stat}: #{data.send(stat)}"
         | 
| 68 | 
            +
              end
         | 
| 69 | 
            +
            when 1
         | 
| 70 | 
            +
              puts data.send(output_selected.first)
         | 
| 71 | 
            +
            else
         | 
| 72 | 
            +
              output_selected.each do |stat|
         | 
| 73 | 
            +
                puts "#{stat}: #{data.send(stat)}"
         | 
| 74 | 
            +
              end
         | 
| 75 | 
            +
            end
         | 
| 76 | 
            +
             | 
    
        data/enumstats.gemspec
    CHANGED
    
    | @@ -6,7 +6,7 @@ Gem::Specification.new do |gem| | |
| 6 6 | 
             
              gem.email         = ["nerab@gmx.net"]
         | 
| 7 7 | 
             
              gem.description   = %q{Adds simple stats like average, variance and standard deviation to Enumerable}
         | 
| 8 8 | 
             
              gem.summary       = %q{Stats for Enumerables}
         | 
| 9 | 
            -
              gem.homepage      = ""
         | 
| 9 | 
            +
              gem.homepage      = "https://github.com/nerab/enumstats"
         | 
| 10 10 |  | 
| 11 11 | 
             
              gem.files         = `git ls-files`.split($\)
         | 
| 12 12 | 
             
              gem.executables   = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
         | 
| @@ -16,4 +16,6 @@ Gem::Specification.new do |gem| | |
| 16 16 | 
             
              gem.version       = Enumstats::VERSION
         | 
| 17 17 |  | 
| 18 18 | 
             
              gem.add_development_dependency 'rake'
         | 
| 19 | 
            +
              gem.add_development_dependency 'open4'
         | 
| 20 | 
            +
              gem.add_development_dependency 'pry'
         | 
| 19 21 | 
             
            end
         | 
    
        data/lib/enumstats/version.rb
    CHANGED
    
    
    
        data/lib/enumstats.rb
    CHANGED
    
    
| @@ -0,0 +1,94 @@ | |
| 1 | 
            +
            require 'helper'
         | 
| 2 | 
            +
            require 'open4'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            #
         | 
| 5 | 
            +
            # End-to-end application test
         | 
| 6 | 
            +
            #
         | 
| 7 | 
            +
            class TestEnumerableStatsApp < MiniTest::Unit::TestCase
         | 
| 8 | 
            +
              include EnumStatsTest
         | 
| 9 | 
            +
              APP_SCRIPT = 'ruby bin/stats'
         | 
| 10 | 
            +
              ALL_STATS = %w[count mean variance standard_deviation sum min max]
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              def test_no_options
         | 
| 13 | 
            +
                assert_app
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              def test_mean
         | 
| 17 | 
            +
                assert_app_include('mean')
         | 
| 18 | 
            +
                assert_app_exclude('mean')
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              def test_two
         | 
| 22 | 
            +
                assert_app_include(['min', 'standard_deviation'])
         | 
| 23 | 
            +
                assert_app_exclude(['max', 'variance', 'sum'])
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              private
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              def assert_app
         | 
| 29 | 
            +
                status = Open4::popen4("cat #{fixture_name('example.data')} | #{APP_SCRIPT}") do |pid, stdin, stdout, stderr|
         | 
| 30 | 
            +
                  lines = stdout.read.lines
         | 
| 31 | 
            +
                  assert_equal(ALL_STATS.count, lines.count, "expect to see these stats printed: #{ALL_STATS}. Instead, got: #{lines.inspect}")
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  lines.each do |line|
         | 
| 34 | 
            +
                    assert_match(/^(.*): (.*)$/, line)
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  assert_empty(stderr.read)
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                assert_equal(0, status)
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              #
         | 
| 44 | 
            +
              # Tests the app called to print nothing but those stats that are explicitely included
         | 
| 45 | 
            +
              #
         | 
| 46 | 
            +
              # e.g.
         | 
| 47 | 
            +
              # # set --mean to only display mean
         | 
| 48 | 
            +
              # assert_app_include('mean')
         | 
| 49 | 
            +
              #
         | 
| 50 | 
            +
              def assert_app_include(args)
         | 
| 51 | 
            +
                args = Array(args)
         | 
| 52 | 
            +
                argstr = args.collect{|a| "--#{a}"}.join(' ')
         | 
| 53 | 
            +
                status = Open4::popen4("cat #{fixture_name('example.data')} | #{APP_SCRIPT} #{argstr}") do |pid, stdin, stdout, stderr|
         | 
| 54 | 
            +
                  lines = stdout.read.lines
         | 
| 55 | 
            +
                  assert_equal(args.count, lines.count, "expect to see only those printed: #{args}. Instead, got: #{lines.inspect}")
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  lines.each do |line|
         | 
| 58 | 
            +
                    if 1 == args.count
         | 
| 59 | 
            +
                      assert_match(/^\d*\.\d*$/, line)
         | 
| 60 | 
            +
                    else
         | 
| 61 | 
            +
                      assert_match(/^(.*): (.*)$/, line)
         | 
| 62 | 
            +
                    end
         | 
| 63 | 
            +
                  end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                  assert_empty(stderr.read)
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                assert_equal(0, status)
         | 
| 69 | 
            +
              end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
              #
         | 
| 72 | 
            +
              # Tests the app called to print all except those stats that are explicitely excluded
         | 
| 73 | 
            +
              #
         | 
| 74 | 
            +
              # e.g.
         | 
| 75 | 
            +
              # # set --no-mean to display all except mean
         | 
| 76 | 
            +
              # assert_app_exclude('mean')
         | 
| 77 | 
            +
              #
         | 
| 78 | 
            +
              def assert_app_exclude(args)
         | 
| 79 | 
            +
                expected = ALL_STATS - Array(args)
         | 
| 80 | 
            +
                argstr = Array(args).collect{|a| "--no-#{a}"}.join(' ')
         | 
| 81 | 
            +
                status = Open4::popen4("cat #{fixture_name('example.data')} | #{APP_SCRIPT} #{argstr}") do |pid, stdin, stdout, stderr|
         | 
| 82 | 
            +
                  lines = stdout.read.lines
         | 
| 83 | 
            +
                  assert_equal(expected.count, lines.count, "expect to see only those printed: #{expected}. Instead, got: #{lines.inspect}")
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                  lines.each do |line|
         | 
| 86 | 
            +
                    assert_match(/^(.*): (.*)$/, line)
         | 
| 87 | 
            +
                  end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                  assert_empty(stderr.read)
         | 
| 90 | 
            +
                end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                assert_equal(0, status)
         | 
| 93 | 
            +
              end
         | 
| 94 | 
            +
            end
         | 
    
        data/test/helper.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: enumstats
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.2
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -27,26 +27,64 @@ dependencies: | |
| 27 27 | 
             
                - - ! '>='
         | 
| 28 28 | 
             
                  - !ruby/object:Gem::Version
         | 
| 29 29 | 
             
                    version: '0'
         | 
| 30 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 31 | 
            +
              name: open4
         | 
| 32 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 33 | 
            +
                none: false
         | 
| 34 | 
            +
                requirements:
         | 
| 35 | 
            +
                - - ! '>='
         | 
| 36 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 37 | 
            +
                    version: '0'
         | 
| 38 | 
            +
              type: :development
         | 
| 39 | 
            +
              prerelease: false
         | 
| 40 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 41 | 
            +
                none: false
         | 
| 42 | 
            +
                requirements:
         | 
| 43 | 
            +
                - - ! '>='
         | 
| 44 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 45 | 
            +
                    version: '0'
         | 
| 46 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 47 | 
            +
              name: pry
         | 
| 48 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 49 | 
            +
                none: false
         | 
| 50 | 
            +
                requirements:
         | 
| 51 | 
            +
                - - ! '>='
         | 
| 52 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 53 | 
            +
                    version: '0'
         | 
| 54 | 
            +
              type: :development
         | 
| 55 | 
            +
              prerelease: false
         | 
| 56 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 57 | 
            +
                none: false
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - ! '>='
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: '0'
         | 
| 30 62 | 
             
            description: Adds simple stats like average, variance and standard deviation to Enumerable
         | 
| 31 63 | 
             
            email:
         | 
| 32 64 | 
             
            - nerab@gmx.net
         | 
| 33 | 
            -
            executables: | 
| 65 | 
            +
            executables:
         | 
| 66 | 
            +
            - stats
         | 
| 34 67 | 
             
            extensions: []
         | 
| 35 68 | 
             
            extra_rdoc_files: []
         | 
| 36 69 | 
             
            files:
         | 
| 37 70 | 
             
            - .gitignore
         | 
| 71 | 
            +
            - .travis.yml
         | 
| 38 72 | 
             
            - Gemfile
         | 
| 39 73 | 
             
            - LICENSE
         | 
| 40 74 | 
             
            - README.md
         | 
| 41 75 | 
             
            - Rakefile
         | 
| 76 | 
            +
            - bin/stats
         | 
| 42 77 | 
             
            - enumstats.gemspec
         | 
| 43 78 | 
             
            - lib/enumstats.rb
         | 
| 44 79 | 
             
            - lib/enumstats/enumerable.rb
         | 
| 45 80 | 
             
            - lib/enumstats/version.rb
         | 
| 81 | 
            +
            - test/acceptance/test_app.rb
         | 
| 82 | 
            +
            - test/fixtures/example.2.data
         | 
| 83 | 
            +
            - test/fixtures/example.data
         | 
| 46 84 | 
             
            - test/helper.rb
         | 
| 47 85 | 
             
            - test/unit/test_enumerable_stats.rb
         | 
| 48 86 | 
             
            - test/unit/test_enumerable_stats_block.rb
         | 
| 49 | 
            -
            homepage:  | 
| 87 | 
            +
            homepage: https://github.com/nerab/enumstats
         | 
| 50 88 | 
             
            licenses: []
         | 
| 51 89 | 
             
            post_install_message: 
         | 
| 52 90 | 
             
            rdoc_options: []
         | 
| @@ -71,6 +109,9 @@ signing_key: | |
| 71 109 | 
             
            specification_version: 3
         | 
| 72 110 | 
             
            summary: Stats for Enumerables
         | 
| 73 111 | 
             
            test_files:
         | 
| 112 | 
            +
            - test/acceptance/test_app.rb
         | 
| 113 | 
            +
            - test/fixtures/example.2.data
         | 
| 114 | 
            +
            - test/fixtures/example.data
         | 
| 74 115 | 
             
            - test/helper.rb
         | 
| 75 116 | 
             
            - test/unit/test_enumerable_stats.rb
         | 
| 76 117 | 
             
            - test/unit/test_enumerable_stats_block.rb
         |