syntaxer 0.3.0 → 0.4.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.
- data/README.rdoc +20 -7
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/bin/syntaxer +19 -1
- data/features/plain_check.feature +1 -1
- data/features/printer_check.feature +24 -0
- data/features/rails_check.feature +12 -0
- data/features/repository_check.feature +4 -0
- data/features/step_definitions/plain_checker.rb +21 -0
- data/features/step_definitions/rails_checker.rb +29 -0
- data/features/step_definitions/repository_checker.rb +18 -2
- data/features/support/hooks.rb +2 -2
- data/features/syntaxer_check.feature +19 -1
- data/lib/syntaxer.rb +17 -6
- data/lib/syntaxer/checker.rb +38 -17
- data/lib/syntaxer/file_status.rb +6 -5
- data/lib/syntaxer/language_definition.rb +5 -3
- data/lib/syntaxer/printer.rb +43 -16
- data/lib/syntaxer/progress_bar.rb +13 -0
- data/lib/syntaxer/railtie.rb +1 -1
- data/lib/syntaxer/reader.rb +2 -0
- data/lib/tasks/syntaxer.rake +9 -0
- data/rails/init.rb +1 -1
- data/spec/checker_spec.rb +12 -10
- data/spec/fixtures/ruby/correct.rb.example +5 -1
- data/spec/fixtures/ruby/subfolder/wrong.rb.example +2 -0
- data/spec/fixtures/syntaxer_rules.rb +3 -2
- data/spec/language_rules_spec.rb +1 -1
- data/spec/printer_spec.rb +2 -2
- data/spec/reader_spec.rb +5 -6
- data/spec/spec_helper.rb +12 -1
- data/spec/syntaxer_spec.rb +7 -1
- data/syntaxer.gemspec +8 -2
- data/syntaxer_rails_rules.dist.rb +20 -0
- data/syntaxer_rules.dist.rb +2 -2
- metadata +33 -65
    
        data/README.rdoc
    CHANGED
    
    | @@ -3,7 +3,7 @@ | |
| 3 3 | 
             
            == Overview
         | 
| 4 4 |  | 
| 5 5 | 
             
            Syntaxer make possible check syntax of scripts. It may be used in standalone mode and with git repository for checking changed and added files only.
         | 
| 6 | 
            -
            It is useful for for rails team, because you need to store only 
         | 
| 6 | 
            +
            It is useful for for rails team, because you need to store only file with rules, and git hook will be generated for you.
         | 
| 7 7 |  | 
| 8 8 | 
             
            == Installation
         | 
| 9 9 |  | 
| @@ -11,11 +11,24 @@ To install syntaxer run | |
| 11 11 |  | 
| 12 12 | 
             
              [sudo] gem install syntaxer
         | 
| 13 13 |  | 
| 14 | 
            -
             | 
| 14 | 
            +
              
         | 
| 15 | 
            +
            == Usage with rails
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            1) Add to Gemfile
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              gem "syntaxer"
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            2)
         | 
| 15 22 |  | 
| 16 | 
            -
             | 
| 23 | 
            +
              bundle install
         | 
| 17 24 |  | 
| 18 | 
            -
             | 
| 25 | 
            +
            3) 
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              rake syntaxer:install
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            It creates config/syntaxer.rb file with common rails options, you may edit it as you wish, and .git/hooks/pre-commit script, which will run syntax checking before every commit.
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            == Standalone usage
         | 
| 19 32 |  | 
| 20 33 | 
             
            Example of usage:
         | 
| 21 34 |  | 
| @@ -36,8 +49,6 @@ Indicate custom config file | |
| 36 49 | 
             
              syntaxer -c config.rb
         | 
| 37 50 |  | 
| 38 51 |  | 
| 39 | 
            -
            Describe your rules in syntaxer.rb file and put in "initializers" folder for rails
         | 
| 40 | 
            -
             | 
| 41 52 | 
             
            Example of syntaxer.rb file:
         | 
| 42 53 |  | 
| 43 54 | 
             
              syntaxer do
         | 
| @@ -75,6 +86,8 @@ Options for usage | |
| 75 86 | 
             
              -r, --repo            indicate type of repository. Available git and svn at this time.
         | 
| 76 87 | 
             
              -i, --install         generates pre-commit hook and put it in .git/hooks folder. It checks syntax of languages what are indicated in options file before every commit
         | 
| 77 88 | 
             
              -q, --quite           disable information messages. Is needed when you only want to know the result: 1 or 0
         | 
| 89 | 
            +
              -l, --loud            informate about every checked file
         | 
| 90 | 
            +
              -W, --warnings        show warning messages
         | 
| 78 91 | 
             
              -h, --help            show help and options describe above.
         | 
| 79 92 |  | 
| 80 93 | 
             
            == Contributing to syntaxer
         | 
| @@ -107,4 +120,4 @@ Artem Melnikov (ignar) Svitla Systems Inc (www.svitla.com) | |
| 107 120 |  | 
| 108 121 | 
             
            == Copyright
         | 
| 109 122 |  | 
| 110 | 
            -
            See LICENSE.txt for further details.
         | 
| 123 | 
            +
            See LICENSE.txt for further details.
         | 
    
        data/Rakefile
    CHANGED
    
    
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0. | 
| 1 | 
            +
            0.4.0
         | 
    
        data/bin/syntaxer
    CHANGED
    
    | @@ -15,6 +15,8 @@ class SyntaxerCLI | |
| 15 15 | 
             
                options.config_file = Syntaxer::SYNTAXER_RULES_FILE  
         | 
| 16 16 | 
             
                options.root_path   = Dir.getwd
         | 
| 17 17 | 
             
                options.languages   = :all
         | 
| 18 | 
            +
                options.warnings    = false
         | 
| 19 | 
            +
                options.rails       = false
         | 
| 18 20 |  | 
| 19 21 | 
             
                opts = OptionParser.new do |opts|
         | 
| 20 22 | 
             
                  opts.banner = "Usage: syntaxer [options]"
         | 
| @@ -40,14 +42,30 @@ class SyntaxerCLI | |
| 40 42 | 
             
                    options.repository = r
         | 
| 41 43 | 
             
                  end
         | 
| 42 44 |  | 
| 43 | 
            -
                  opts.on("-q", "--quite", "Run in  | 
| 45 | 
            +
                  opts.on("-q", "--quite", "Run in quite mode") do |r|
         | 
| 44 46 | 
             
                    options.quite = true
         | 
| 45 47 | 
             
                  end
         | 
| 46 48 |  | 
| 49 | 
            +
                  opts.on("-l", "--loud", "Run in loud mode") do |r|
         | 
| 50 | 
            +
                    options.loud = true
         | 
| 51 | 
            +
                  end
         | 
| 52 | 
            +
             | 
| 47 53 | 
             
                  opts.on("-i", "--install", "Write hooks to git") do |r|
         | 
| 48 54 | 
             
                    options.generate = true
         | 
| 49 55 | 
             
                  end
         | 
| 50 56 |  | 
| 57 | 
            +
                  opts.on("-W", "--warnings", "Turn warning messages on") do |r|
         | 
| 58 | 
            +
                    options.warnings = true
         | 
| 59 | 
            +
                  end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                  opts.on("-H", "--hook", "Use syntaxer in hook context") do |r|
         | 
| 62 | 
            +
                    options.hook = true
         | 
| 63 | 
            +
                  end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                  opts.on("-R", "--rails", "Use syntaxer with rails") do |r|
         | 
| 66 | 
            +
                    options.rails = true
         | 
| 67 | 
            +
                  end
         | 
| 68 | 
            +
             | 
| 51 69 | 
             
                  opts.separator ""
         | 
| 52 70 | 
             
                  opts.separator "Common options:"
         | 
| 53 71 |  | 
| @@ -8,7 +8,7 @@ Feature: Check syntax in plain mode | |
| 8 8 | 
             
              @plain
         | 
| 9 9 | 
             
              Scenario: Run checker in directory
         | 
| 10 10 | 
             
                Given directory contains two files
         | 
| 11 | 
            -
                When I run  | 
| 11 | 
            +
                When I run 'syntaxer'
         | 
| 12 12 | 
             
                Then the exit status should not be 0
         | 
| 13 13 | 
             
                And the output should not contain "Syntax OK"
         | 
| 14 14 |  | 
| @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            @announce
         | 
| 2 | 
            +
            Feature: Check output of script
         | 
| 3 | 
            +
             | 
| 4 | 
            +
              In order to check outut of script
         | 
| 5 | 
            +
              A user who used gem
         | 
| 6 | 
            +
              Should to see errors in files
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              @plain @output
         | 
| 9 | 
            +
              Scenario: Run checker with verbose mode
         | 
| 10 | 
            +
                Given a file named "wrong.rb" with:
         | 
| 11 | 
            +
                  """
         | 
| 12 | 
            +
                  class A
         | 
| 13 | 
            +
                  """
         | 
| 14 | 
            +
                And a file named "correct.rb" with:
         | 
| 15 | 
            +
                  """
         | 
| 16 | 
            +
                  class B; end;
         | 
| 17 | 
            +
                  """
         | 
| 18 | 
            +
                Then I run 'syntaxer -l'
         | 
| 19 | 
            +
                And the output should contain:
         | 
| 20 | 
            +
                  """
         | 
| 21 | 
            +
            correct.rb OK
         | 
| 22 | 
            +
                  """
         | 
| 23 | 
            +
             | 
| 24 | 
            +
             | 
| @@ -0,0 +1,12 @@ | |
| 1 | 
            +
            @announce
         | 
| 2 | 
            +
            Feature: Check git repository before commit
         | 
| 3 | 
            +
              
         | 
| 4 | 
            +
              @repo @rails
         | 
| 5 | 
            +
              Scenario: Installation hook in rails environment
         | 
| 6 | 
            +
                Given rails project
         | 
| 7 | 
            +
                And some lib with wrong syntax
         | 
| 8 | 
            +
                And installed hook in rails context
         | 
| 9 | 
            +
                When I run `git commit -m "some message"`
         | 
| 10 | 
            +
                Then the syntaxer shoud stop commit
         | 
| 11 | 
            +
                And the output should contain "Errors:"
         | 
| 12 | 
            +
                And the output should contain "EE"
         | 
| @@ -1,7 +1,28 @@ | |
| 1 | 
            +
            Given /^I'am using a clean gemset test$/ do
         | 
| 2 | 
            +
              Aruba::Api::DEFAULT_TIMEOUT_SECONDS = 20
         | 
| 3 | 
            +
              use_clean_gemset("test") 
         | 
| 4 | 
            +
            end
         | 
| 5 | 
            +
             | 
| 1 6 | 
             
            Given /^directory contains two files$/ do
         | 
| 2 7 | 
             
              create_temp_plain_work_dir
         | 
| 3 8 | 
             
            end
         | 
| 4 9 |  | 
| 10 | 
            +
            When /^I run 'syntaxer'$/ do
         | 
| 11 | 
            +
              run_simple(unescape("#{File.join(File.dirname(__FILE__),'..','..','bin','syntaxer')}"), false)
         | 
| 12 | 
            +
            end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            Then /^I run 'syntaxer \-l'$/ do
         | 
| 15 | 
            +
              run_simple(unescape("#{File.join(File.dirname(__FILE__),'..','..','bin','syntaxer')} -l"), false)
         | 
| 16 | 
            +
            end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            Then /^I run 'syntaxer \-W'$/ do
         | 
| 19 | 
            +
              run_simple(unescape("#{File.join(File.dirname(__FILE__),'..','..','bin','syntaxer')} -W"), false)
         | 
| 20 | 
            +
            end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            Then /^I run 'syntaxer \-v'$/ do
         | 
| 23 | 
            +
              run_simple(unescape("#{File.join(File.dirname(__FILE__),'..','..','bin','syntaxer')} -v"), false)
         | 
| 24 | 
            +
            end
         | 
| 25 | 
            +
             | 
| 5 26 | 
             
            When /^I cd to working directory$/ do
         | 
| 6 27 | 
             
              cd(@tmp_dir)
         | 
| 7 28 | 
             
            end
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            Given /^rails project$/ do
         | 
| 2 | 
            +
              in_current_dir do
         | 
| 3 | 
            +
                FileUtils.mkdir("config")
         | 
| 4 | 
            +
                FileUtils.mkdir("app")
         | 
| 5 | 
            +
              end
         | 
| 6 | 
            +
              write_file('app/correct.rb','class C;end;')
         | 
| 7 | 
            +
              run_simple(unescape("git init"), false)
         | 
| 8 | 
            +
              run_simple(unescape("git add ."), false)
         | 
| 9 | 
            +
              run_simple(unescape("git commit -m'first commit'"), false)
         | 
| 10 | 
            +
            end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            Given /^some lib with wrong syntax$/ do
         | 
| 13 | 
            +
              write_file('lib/wrong.rb', "mod A;end")
         | 
| 14 | 
            +
              write_file('app/wrong.rb', "mod A;end")
         | 
| 15 | 
            +
              run_simple(unescape("git add ."), false)
         | 
| 16 | 
            +
            end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            Given /^installed hook in rails context$/ do
         | 
| 19 | 
            +
              run_simple("#{File.join(File.dirname(__FILE__),'..','..','bin','syntaxer')} -i -r git --hook --rails")
         | 
| 20 | 
            +
              in_current_dir do
         | 
| 21 | 
            +
                FileUtils.cp(File.join(File.dirname(__FILE__),'..','..',"syntaxer_rails_rules.dist.rb"),"config/syntaxer.rb")
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
              run_simple('chmod 755 .git/hooks/pre-commit')
         | 
| 24 | 
            +
            end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            Then /^the syntaxer shoud stop commit$/ do
         | 
| 27 | 
            +
              @last_exit_status.should eql(1)
         | 
| 28 | 
            +
            end
         | 
| 29 | 
            +
             | 
| @@ -3,15 +3,31 @@ Given /^git repository$/ do | |
| 3 3 | 
             
            end
         | 
| 4 4 |  | 
| 5 5 | 
             
            Given /^some file with wrong syntax$/ do
         | 
| 6 | 
            -
              in_current_dir do
         | 
| 6 | 
            +
              #in_current_dir do
         | 
| 7 7 | 
             
                add_fixtures_files
         | 
| 8 | 
            -
              end
         | 
| 8 | 
            +
              #end
         | 
| 9 9 | 
             
            end
         | 
| 10 10 |  | 
| 11 11 | 
             
            When /^run `git commit \-m \"some message\"` interactively$/ do 
         | 
| 12 12 | 
             
              add_hook
         | 
| 13 13 | 
             
            end
         | 
| 14 14 |  | 
| 15 | 
            +
            Then /^I run 'syntaxer \-i \-r git'$/ do
         | 
| 16 | 
            +
              run_simple(unescape("#{File.join(File.dirname(__FILE__),'..','..','bin','syntaxer')} -i -r git"), false)
         | 
| 17 | 
            +
            end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
             | 
| 15 20 | 
             
            Then /^the syntaxer should stop commit$/ do
         | 
| 16 21 | 
             
              lambda{make_git_commit}.should raise_exception
         | 
| 17 22 | 
             
            end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            Given /^I init empty repository$/ do
         | 
| 25 | 
            +
              run_simple(unescape("git init"), false)
         | 
| 26 | 
            +
            end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            Given /^I make first commit$/ do
         | 
| 29 | 
            +
              run_simple(unescape("git add ."), false)
         | 
| 30 | 
            +
              run_simple(unescape("git commit -m 'first commit'"), false)
         | 
| 31 | 
            +
            end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
             | 
    
        data/features/support/hooks.rb
    CHANGED
    
    
| @@ -7,7 +7,25 @@ Feature: Test options | |
| 7 7 |  | 
| 8 8 | 
             
              @plain
         | 
| 9 9 | 
             
              Scenario: Run version checking
         | 
| 10 | 
            -
                When I run  | 
| 10 | 
            +
                When I run 'syntaxer -v'
         | 
| 11 11 | 
             
                Then the exit status should be 0
         | 
| 12 12 | 
             
                And the output should be the same as in "VERSION" file
         | 
| 13 13 |  | 
| 14 | 
            +
              @plain
         | 
| 15 | 
            +
              Scenario: Run syntaxer with warning option and ruby files
         | 
| 16 | 
            +
                Given a file named "correct.rb" with:
         | 
| 17 | 
            +
                 """
         | 
| 18 | 
            +
                 Method /^I love ruby$/ do
         | 
| 19 | 
            +
                 end
         | 
| 20 | 
            +
                 """
         | 
| 21 | 
            +
                When I run 'syntaxer -W'
         | 
| 22 | 
            +
                Then the output should contain "warning: ambiguous first argument;"
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              @plain
         | 
| 25 | 
            +
              Scenario: Run syntaxer with warning option and non ruby files
         | 
| 26 | 
            +
                Given a file named "correct.php" with:
         | 
| 27 | 
            +
                  """
         | 
| 28 | 
            +
                  <%php echo 1; %>
         | 
| 29 | 
            +
                  """
         | 
| 30 | 
            +
                When I run 'syntaxer -W'
         | 
| 31 | 
            +
                Then the output should contain "Syntax OK"
         | 
    
        data/lib/syntaxer.rb
    CHANGED
    
    | @@ -3,20 +3,24 @@ require "rake" | |
| 3 3 | 
             
            require "open3"
         | 
| 4 4 | 
             
            require "forwardable"
         | 
| 5 5 | 
             
            require "git"
         | 
| 6 | 
            +
            require "rainbow"
         | 
| 7 | 
            +
            require 'progress_bar'
         | 
| 6 8 | 
             
            require File.join(%w{syntaxer reader})
         | 
| 7 9 | 
             
            require File.join(%w{syntaxer file_status})
         | 
| 8 10 | 
             
            require File.join(%w{syntaxer checker})
         | 
| 9 11 | 
             
            require File.join(%w{syntaxer repository})
         | 
| 10 12 | 
             
            require File.join(%w{syntaxer language_definition})
         | 
| 11 13 | 
             
            require File.join(%w{syntaxer printer})
         | 
| 12 | 
            -
            require  | 
| 14 | 
            +
            require File.join(%w{syntaxer progress_bar})
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            require File.join(%w{syntaxer railtie}) if defined?(Rails)
         | 
| 13 17 |  | 
| 14 18 | 
             
            module Syntaxer
         | 
| 15 19 | 
             
              DEFAULT_FILES_MASK = "**/*"
         | 
| 16 20 | 
             
              SYNTAXER_RULES_FILE = File.join(File.dirname(__FILE__), "..", "syntaxer_rules.dist.rb")
         | 
| 17 21 |  | 
| 18 22 | 
             
              class << self
         | 
| 19 | 
            -
                attr_reader :reader, :repository, :root_path, : | 
| 23 | 
            +
                attr_reader :reader, :repository, :root_path, :results, :warnings, :hook
         | 
| 20 24 |  | 
| 21 25 | 
             
                def configure
         | 
| 22 26 | 
             
                  yield(self) if block_given?
         | 
| @@ -35,13 +39,16 @@ module Syntaxer | |
| 35 39 | 
             
                def check_syntax(options = {})
         | 
| 36 40 | 
             
                  @root_path = options[:root_path]
         | 
| 37 41 | 
             
                  Printer.quite = options[:quite] || false
         | 
| 42 | 
            +
                  Printer.loud = options[:loud] || false
         | 
| 43 | 
            +
                  @warnings = options[:warnings]
         | 
| 44 | 
            +
                  @hook = options[:hook]
         | 
| 38 45 |  | 
| 39 46 | 
             
                  @reader = Reader::DSLReader.load(options[:config_file])
         | 
| 40 47 | 
             
                  @repository = Repository.factory(@root_path, options[:repository]) if options[:repository]
         | 
| 41 48 |  | 
| 42 | 
            -
                   | 
| 43 | 
            -
                  Printer.print_result  | 
| 44 | 
            -
                  exit(1) unless error_files.empty?
         | 
| 49 | 
            +
                  checker = Checker.process(self)
         | 
| 50 | 
            +
                  Printer.print_result checker
         | 
| 51 | 
            +
                  exit(1) unless checker.error_files.empty?
         | 
| 45 52 | 
             
                end
         | 
| 46 53 |  | 
| 47 54 | 
             
                # This method generate and put hook to .git/hooks
         | 
| @@ -56,10 +63,14 @@ module Syntaxer | |
| 56 63 | 
             
                  @root_path = options[:root_path]
         | 
| 57 64 | 
             
                  raise ArgumentError, 'Indicate repository type' unless options.include?(:repository)
         | 
| 58 65 | 
             
                  raise ArgumentError, "SVN is temporarily not supported" if options[:repository].to_sym == :svn
         | 
| 66 | 
            +
                  
         | 
| 59 67 | 
             
                  repo = Repository.factory(@root_path, options[:repository])
         | 
| 60 68 | 
             
                  hook_file = "#{@root_path}/.git/hooks/pre-commit"
         | 
| 69 | 
            +
                  hook_string = "syntaxer -r git --hook"
         | 
| 70 | 
            +
                  hook_string += " -c config/syntaxer.rb" if options[:rails]
         | 
| 71 | 
            +
                  
         | 
| 61 72 | 
             
                  File.open(hook_file, 'w') do |f|
         | 
| 62 | 
            -
                    f.puts  | 
| 73 | 
            +
                    f.puts hook_string
         | 
| 63 74 | 
             
                  end
         | 
| 64 75 | 
             
                  File.chmod(0755, hook_file)
         | 
| 65 76 | 
             
                rescue Exception => e
         | 
    
        data/lib/syntaxer/checker.rb
    CHANGED
    
    | @@ -6,12 +6,16 @@ module Syntaxer | |
| 6 6 | 
             
                include Observable
         | 
| 7 7 | 
             
                extend Forwardable
         | 
| 8 8 |  | 
| 9 | 
            -
                def_delegators Syntaxer::FileStatus, :error_files, : | 
| 10 | 
            -
             | 
| 9 | 
            +
                def_delegators Syntaxer::FileStatus, :error_files, :all_files
         | 
| 10 | 
            +
                
         | 
| 11 11 | 
             
                attr_accessor :syntaxer, :reader
         | 
| 12 12 |  | 
| 13 13 | 
             
                def initialize(syntaxer, count)
         | 
| 14 | 
            -
                  Printer. | 
| 14 | 
            +
                  Printer.setup do |p|
         | 
| 15 | 
            +
                    p.count_of_files = count
         | 
| 16 | 
            +
                    p.mode = syntaxer.hook ? :hook : :default
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 15 19 | 
             
                  add_observer(Printer)
         | 
| 16 20 | 
             
                  @syntaxer = syntaxer
         | 
| 17 21 | 
             
                  @reader = @syntaxer.reader
         | 
| @@ -31,7 +35,23 @@ module Syntaxer | |
| 31 35 | 
             
                end
         | 
| 32 36 |  | 
| 33 37 | 
             
                protected
         | 
| 38 | 
            +
             | 
| 34 39 | 
             
                def check rule, file
         | 
| 40 | 
            +
                  changed
         | 
| 41 | 
            +
                  unless rule.exec_existence
         | 
| 42 | 
            +
                    # notify if not exists
         | 
| 43 | 
            +
                    notify_observers({:rule => rule})
         | 
| 44 | 
            +
                  else
         | 
| 45 | 
            +
                    if @syntaxer.warnings && rule.name == :ruby
         | 
| 46 | 
            +
                      rule.exec_rule = rule.exec_rule.gsub(/(-\S+)\s/,'\1w ')
         | 
| 47 | 
            +
                    end
         | 
| 48 | 
            +
                    errors = run_exec_rule(rule, file)
         | 
| 49 | 
            +
                    FileStatus.build(file, errors)
         | 
| 50 | 
            +
                    notify_observers({:file_status => errors.empty?})
         | 
| 51 | 
            +
                  end
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                def run_exec_rule rule, file
         | 
| 35 55 | 
             
                  popen3(rule.exec_rule.gsub('%filename%', file)) do |stdin, stdout, stderr, wait_thr|
         | 
| 36 56 | 
             
                    stderr.read.split("\n")
         | 
| 37 57 | 
             
                  end
         | 
| @@ -53,26 +73,29 @@ module Syntaxer | |
| 53 73 |  | 
| 54 74 | 
             
                def process
         | 
| 55 75 | 
             
                  checked_files = Set.new
         | 
| 76 | 
            +
                  rule_files = {}
         | 
| 77 | 
            +
                  
         | 
| 56 78 | 
             
                  @reader.rules.each do |rule|
         | 
| 57 | 
            -
                     | 
| 79 | 
            +
                    rule_files[rule.name] = {}
         | 
| 80 | 
            +
                    rule_files[rule.name][:rule] = rule
         | 
| 81 | 
            +
                    rule_files[rule.name][:files] = []
         | 
| 58 82 | 
             
                    rule.extensions.each do |ext|
         | 
| 59 83 | 
             
                      files.each do |file|
         | 
| 60 | 
            -
                        if file. | 
| 61 | 
            -
                           | 
| 62 | 
            -
                           | 
| 84 | 
            +
                        if File.extname(file).gsub(/\./,'') == ext || \
         | 
| 85 | 
            +
                          (!rule.specific_files.nil? && !rule_files[rule.name][:files].include?(file) && rule.specific_files.include?(file))
         | 
| 86 | 
            +
                          rule_files[rule.name][:files].push(file)
         | 
| 63 87 | 
             
                        end
         | 
| 64 88 | 
             
                      end
         | 
| 65 89 | 
             
                    end
         | 
| 90 | 
            +
                  end
         | 
| 66 91 |  | 
| 67 | 
            -
             | 
| 92 | 
            +
                  rule_files.each do |rule_name, rule|
         | 
| 93 | 
            +
                    rule[:files].each do |file|
         | 
| 68 94 | 
             
                      full_path = File.join(@syntaxer.root_path,file)
         | 
| 69 | 
            -
                       | 
| 70 | 
            -
                      FileStatus.build(file, errors)
         | 
| 71 | 
            -
                      changed
         | 
| 72 | 
            -
                      notify_observers(errors.empty?)
         | 
| 95 | 
            +
                      check(rule[:rule], full_path)
         | 
| 73 96 | 
             
                    end
         | 
| 74 97 | 
             
                  end
         | 
| 75 | 
            -
             | 
| 98 | 
            +
             | 
| 76 99 | 
             
                  self
         | 
| 77 100 | 
             
                end
         | 
| 78 101 |  | 
| @@ -94,11 +117,9 @@ module Syntaxer | |
| 94 117 |  | 
| 95 118 | 
             
                def process
         | 
| 96 119 | 
             
                  @reader.rules.each do |rule|
         | 
| 120 | 
            +
                    # check if executor exists
         | 
| 97 121 | 
             
                    rule.files_list(@syntaxer.root_path).each do |file|
         | 
| 98 | 
            -
                       | 
| 99 | 
            -
                      FileStatus.build(file, errors)
         | 
| 100 | 
            -
                      changed
         | 
| 101 | 
            -
                      notify_observers(errors.empty?)
         | 
| 122 | 
            +
                      check(rule, file)
         | 
| 102 123 | 
             
                    end
         | 
| 103 124 | 
             
                  end
         | 
| 104 125 |  | 
    
        data/lib/syntaxer/file_status.rb
    CHANGED
    
    | @@ -4,7 +4,7 @@ module Syntaxer | |
| 4 4 |  | 
| 5 5 | 
             
              class FileStatus
         | 
| 6 6 | 
             
                @@error_files = []
         | 
| 7 | 
            -
                @@ | 
| 7 | 
            +
                @@all_files = []
         | 
| 8 8 |  | 
| 9 9 | 
             
                attr_reader :file_name, :status, :errors
         | 
| 10 10 |  | 
| @@ -17,15 +17,16 @@ module Syntaxer | |
| 17 17 | 
             
                class << self
         | 
| 18 18 | 
             
                  def build(file_name, errors = [])
         | 
| 19 19 | 
             
                    file_status = new(file_name, errors)
         | 
| 20 | 
            -
                     | 
| 20 | 
            +
                    @@all_files << file_status
         | 
| 21 | 
            +
                    @@error_files << file_status unless errors.empty?
         | 
| 21 22 | 
             
                  end   
         | 
| 22 23 |  | 
| 23 24 | 
             
                  def error_files
         | 
| 24 | 
            -
             | 
| 25 | 
            +
                    @@error_files
         | 
| 25 26 | 
             
                  end
         | 
| 26 27 |  | 
| 27 | 
            -
                  def  | 
| 28 | 
            -
                    @@ | 
| 28 | 
            +
                  def all_files
         | 
| 29 | 
            +
                    @@all_files
         | 
| 29 30 | 
             
                  end
         | 
| 30 31 |  | 
| 31 32 | 
             
                end
         | 
| @@ -1,19 +1,21 @@ | |
| 1 1 | 
             
            module Syntaxer
         | 
| 2 2 | 
             
              class LanguageDefinitionException < Exception; end
         | 
| 3 3 |  | 
| 4 | 
            -
              LanguageDefinition = Struct.new(:name, :extensions, :specific_files, :folders, :ignore_folders, :exec_rule) do
         | 
| 4 | 
            +
              LanguageDefinition = Struct.new(:name, :extensions, :specific_files, :folders, :ignore_folders, :exec_rule, :executor, :exec_existence) do
         | 
| 5 5 | 
             
                def initialize(*args)
         | 
| 6 | 
            -
                  super(*args) | 
| 6 | 
            +
                  super(*args)
         | 
| 7 7 | 
             
                  raise LanguageDefinitionException.new "name can't be blank" unless self.name     
         | 
| 8 8 | 
             
                end
         | 
| 9 9 |  | 
| 10 10 |  | 
| 11 11 | 
             
                def files_list(root_path)
         | 
| 12 | 
            +
                  root_path += "/" if root_path.match(/\/$/).nil?
         | 
| 12 13 | 
             
                  main_rule = folders.map{|f| root_path + f + ".\{#{extensions.join(',')}\}"}
         | 
| 13 14 | 
             
                  list = Rake::FileList.new(main_rule) do |fl|              
         | 
| 14 | 
            -
                    #fl.add(specific_files) if specific_files  TODO:fix this
         | 
| 15 15 | 
             
                    fl.exclude(ignore_folders) if ignore_folders
         | 
| 16 16 | 
             
                  end
         | 
| 17 | 
            +
                  all_files = Rake::FileList.new(root_path+'*')
         | 
| 18 | 
            +
                  list += all_files.find_all {|f| f if !File.directory?(f) && !specific_files.nil? && specific_files.include?(File.basename(f)) }
         | 
| 17 19 | 
             
                  list
         | 
| 18 20 | 
             
                end
         | 
| 19 21 | 
             
              end
         | 
    
        data/lib/syntaxer/printer.rb
    CHANGED
    
    | @@ -1,46 +1,73 @@ | |
| 1 | 
            -
            require "rainbow"
         | 
| 2 1 | 
             
            module Syntaxer
         | 
| 3 2 |  | 
| 4 3 | 
             
              # Print system messages
         | 
| 5 4 |  | 
| 6 5 | 
             
              class Printer
         | 
| 7 6 | 
             
                class << self
         | 
| 7 | 
            +
                  NON_EXISTENT_RULE_MESSAGE = "exec_rule `%s` for language %s not exists. Skip"
         | 
| 8 | 
            +
                  
         | 
| 8 9 | 
             
                  @@bar = nil
         | 
| 9 | 
            -
                   | 
| 10 | 
            +
                  @@not_exists_rules = []
         | 
| 11 | 
            +
                  attr_accessor :quite, :loud, :mode, :count_of_files
         | 
| 10 12 |  | 
| 11 | 
            -
                   | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 13 | 
            +
                  def setup &block
         | 
| 14 | 
            +
                    yield self if block_given?
         | 
| 15 | 
            +
                    if @mode == :hook
         | 
| 16 | 
            +
                      @@bar = Syntaxer::ProgressBar.new
         | 
| 17 | 
            +
                    else
         | 
| 18 | 
            +
                      @@bar = ::ProgressBar.new(@count_of_files, :bar, :counter)
         | 
| 19 | 
            +
                    end
         | 
| 17 20 | 
             
                  end
         | 
| 18 21 |  | 
| 19 22 | 
             
                  # Show progress
         | 
| 20 23 | 
             
                  #
         | 
| 21 24 | 
             
                  # @param [Boolean] (true|false)
         | 
| 22 25 |  | 
| 23 | 
            -
                  def update status
         | 
| 24 | 
            -
                     | 
| 26 | 
            +
                  def update *args #not_exists_rule = nil, file_status = (status=true;)
         | 
| 27 | 
            +
                    args = args.first
         | 
| 28 | 
            +
                    @@not_exists_rules << args[:rule] if args.include?(:rule) && !@@not_exists_rules.include?(args[:rule])
         | 
| 29 | 
            +
                    return if @quite
         | 
| 30 | 
            +
                    if args.include?(:file_status)
         | 
| 31 | 
            +
                      @mode == :hook ? @@bar.increment!(args[:file_status]) : @@bar.increment!
         | 
| 32 | 
            +
                      # @@bar.increment!(args[:file_status]) if @mode == :hook
         | 
| 33 | 
            +
                      # @@bar.increment! unless @mode == :hook
         | 
| 34 | 
            +
                    end
         | 
| 35 | 
            +
                    true
         | 
| 25 36 | 
             
                  end
         | 
| 26 37 |  | 
| 27 38 | 
             
                  # Print error message for each if file
         | 
| 28 39 | 
             
                  #
         | 
| 29 40 | 
             
                  # @param [Array, #each] files
         | 
| 30 41 |  | 
| 31 | 
            -
                  def print_result  | 
| 42 | 
            +
                  def print_result checker
         | 
| 32 43 | 
             
                    return if @quite
         | 
| 33 44 | 
             
                    puts "\n"
         | 
| 34 | 
            -
                    puts "Syntax OK".color(:green) if  | 
| 35 | 
            -
                    puts "Errors:".color(:red) unless files.empty?
         | 
| 45 | 
            +
                    puts "Syntax OK".color(:green) if checker.error_files.empty?
         | 
| 36 46 |  | 
| 47 | 
            +
                    @loud ? (files = checker.all_files) : (files = checker.error_files)
         | 
| 37 48 | 
             
                    files.each do |file|
         | 
| 38 | 
            -
                       | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 49 | 
            +
                      print_message(file)
         | 
| 50 | 
            +
                    end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                    unless @@not_exists_rules.empty?
         | 
| 53 | 
            +
                      puts "\n"
         | 
| 54 | 
            +
                      @@not_exists_rules.each do |rule|
         | 
| 55 | 
            +
                        puts (NON_EXISTENT_RULE_MESSAGE % [rule.executor, rule.name]).color(:yellow)
         | 
| 41 56 | 
             
                      end
         | 
| 42 57 | 
             
                    end
         | 
| 43 58 | 
             
                  end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                  def print_message filestatus
         | 
| 61 | 
            +
                    return if @quite
         | 
| 62 | 
            +
                    puts "\n"
         | 
| 63 | 
            +
                    print filestatus.file_name
         | 
| 64 | 
            +
                    puts " OK".color(:green) if filestatus.status == :ok && @loud
         | 
| 65 | 
            +
                    puts "\nErrors:".color(:red) if filestatus.status == :failed
         | 
| 66 | 
            +
                    filestatus.errors.each do |error|
         | 
| 67 | 
            +
                      puts "\t #{error}".color(:red)
         | 
| 68 | 
            +
                    end
         | 
| 69 | 
            +
                  end
         | 
| 70 | 
            +
             | 
| 44 71 | 
             
                end
         | 
| 45 72 | 
             
              end
         | 
| 46 73 | 
             
            end
         | 
    
        data/lib/syntaxer/railtie.rb
    CHANGED
    
    
    
        data/lib/syntaxer/reader.rb
    CHANGED
    
    | @@ -125,6 +125,8 @@ module Syntaxer | |
| 125 125 | 
             
                  end
         | 
| 126 126 |  | 
| 127 127 | 
             
                  def exec_rule(exec_string)
         | 
| 128 | 
            +
                    current_rule.executor = exec_string.scan(/\w+/).first
         | 
| 129 | 
            +
                    current_rule.exec_existence = system("which #{current_rule.executor} > /dev/null")
         | 
| 128 130 | 
             
                    current_rule.exec_rule = exec_string    
         | 
| 129 131 | 
             
                  end
         | 
| 130 132 |  | 
    
        data/lib/tasks/syntaxer.rake
    CHANGED
    
    | @@ -0,0 +1,9 @@ | |
| 1 | 
            +
            namespace :syntaxer do
         | 
| 2 | 
            +
              desc 'my plugins rake task'
         | 
| 3 | 
            +
              task :install => :environment do
         | 
| 4 | 
            +
                system('syntaxer -i -r git --hook --rails')
         | 
| 5 | 
            +
                FileUtils.cp(File.join(File.dirname(__FILE__),'..','..','syntaxer_rails_rules.dist.rb'),\
         | 
| 6 | 
            +
                             File.join(Rails.root,'config','syntaxer.rb'))
         | 
| 7 | 
            +
                puts "Syntaxer hook installed. Look to the config/syntaxer.rb to change configuration.".color(:green)
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
            end
         | 
    
        data/rails/init.rb
    CHANGED
    
    
    
        data/spec/checker_spec.rb
    CHANGED
    
    | @@ -6,28 +6,29 @@ describe "Syntaxer::Checker" do | |
| 6 6 |  | 
| 7 7 | 
             
                before(:each) do
         | 
| 8 8 | 
             
                  reader = mock('Reader')
         | 
| 9 | 
            -
                  reader.stub!(:rules).and_return([Syntaxer::LanguageDefinition.new(:ruby, ["rb.example", "rake"], ["Rakefile", "Thorfile"], ["**/*"], nil, "ruby - | 
| 10 | 
            -
                  reader.stub!(:files_count).and_return( | 
| 9 | 
            +
                  reader.stub!(:rules).and_return([Syntaxer::LanguageDefinition.new(:ruby, ["rb.example", "rake"], ["Rakefile", "Thorfile"], ["**/*"], nil, "ruby -c %filename%", "ruby", true)])
         | 
| 10 | 
            +
                  reader.stub!(:files_count).and_return(3)
         | 
| 11 11 | 
             
                  Syntaxer.should_receive(:reader).any_number_of_times.and_return(reader)
         | 
| 12 12 | 
             
                  Syntaxer.stub!(:root_path).and_return(fixtures_path(:ruby))
         | 
| 13 13 |  | 
| 14 14 | 
             
                  Syntaxer::Printer.stub!(:print_result)
         | 
| 15 | 
            -
                  Syntaxer::Printer.stub!(: | 
| 15 | 
            +
                  Syntaxer::Printer.stub!(:print_message)
         | 
| 16 | 
            +
                  Syntaxer::Printer.stub!(:update)
         | 
| 16 17 | 
             
                end
         | 
| 17 18 |  | 
| 18 19 | 
             
                subject {Syntaxer::PlainChecker.new(Syntaxer)}
         | 
| 19 20 |  | 
| 20 21 | 
             
                it {should respond_to(:error_files)}
         | 
| 21 | 
            -
                it {should respond_to(: | 
| 22 | 
            +
                it {should respond_to(:all_files)}
         | 
| 22 23 |  | 
| 23 24 | 
             
                it "should return correct error_files " do
         | 
| 24 25 | 
             
                  subject.process
         | 
| 25 | 
            -
                  subject. | 
| 26 | 
            -
                  subject.error_files.size.should ==  | 
| 26 | 
            +
                  subject.all_files.size.should == 3
         | 
| 27 | 
            +
                  subject.error_files.size.should == 2
         | 
| 27 28 | 
             
                end
         | 
| 28 29 |  | 
| 29 30 | 
             
                it "should send to FileStatus" do
         | 
| 30 | 
            -
                  Syntaxer::FileStatus.should_receive(:build). | 
| 31 | 
            +
                  Syntaxer::FileStatus.should_receive(:build).exactly(3).times
         | 
| 31 32 | 
             
                  subject.process      
         | 
| 32 33 | 
             
                end
         | 
| 33 34 | 
             
              end
         | 
| @@ -40,7 +41,8 @@ describe "Syntaxer::Checker" do | |
| 40 41 |  | 
| 41 42 | 
             
                before(:all) do
         | 
| 42 43 | 
             
                  Syntaxer::Printer.stub!(:print_result)
         | 
| 43 | 
            -
                  Syntaxer::Printer.stub!(: | 
| 44 | 
            +
                  Syntaxer::Printer.stub!(:print_message)
         | 
| 45 | 
            +
                  Syntaxer::Printer.stub!(:update)
         | 
| 44 46 | 
             
                end
         | 
| 45 47 |  | 
| 46 48 | 
             
                before(:each) do
         | 
| @@ -51,7 +53,7 @@ describe "Syntaxer::Checker" do | |
| 51 53 | 
             
                  make_git_add(@repo_dir)
         | 
| 52 54 |  | 
| 53 55 | 
             
                  reader = mock('Reader')
         | 
| 54 | 
            -
                  reader.stub!(:rules).and_return([Syntaxer::LanguageDefinition.new(:ruby, [" | 
| 56 | 
            +
                  reader.stub!(:rules).and_return([Syntaxer::LanguageDefinition.new(:ruby, ["example", "rake"], ["Rakefile", "Thorfile"], ["**/*"], nil, "ruby -c %filename%", "ruby", true)])
         | 
| 55 57 | 
             
                  Syntaxer.should_receive(:reader).and_return(reader)
         | 
| 56 58 | 
             
                  Syntaxer.stub!(:root_path).and_return(@repo_dir)
         | 
| 57 59 | 
             
                  repo = Syntaxer::Repository.factory(@repo_dir, :git)
         | 
| @@ -62,7 +64,7 @@ describe "Syntaxer::Checker" do | |
| 62 64 |  | 
| 63 65 | 
             
                it "should return correct error_files" do
         | 
| 64 66 | 
             
                  subject.process
         | 
| 65 | 
            -
                  subject. | 
| 67 | 
            +
                  subject.all_files.size.should_not eql(0)
         | 
| 66 68 | 
             
                  subject.error_files.size.should_not eql(0)
         | 
| 67 69 | 
             
                end
         | 
| 68 70 |  | 
| @@ -1,11 +1,12 @@ | |
| 1 1 | 
             
            syntaxer do
         | 
| 2 2 |  | 
| 3 3 | 
             
              languages :ruby do
         | 
| 4 | 
            -
                 | 
| 4 | 
            +
                extensions "example"
         | 
| 5 | 
            +
                folders '**/*'
         | 
| 5 6 | 
             
              end
         | 
| 6 7 |  | 
| 7 8 | 
             
              languages :haml do
         | 
| 8 | 
            -
                folders ' | 
| 9 | 
            +
                folders '**/*'  
         | 
| 9 10 | 
             
              end
         | 
| 10 11 |  | 
| 11 12 | 
             
              #ignore_folders "app/models/**" # this folders will be deleted from all languages
         | 
    
        data/spec/language_rules_spec.rb
    CHANGED
    
    | @@ -27,7 +27,7 @@ describe "LanguageRules" do | |
| 27 27 |  | 
| 28 28 | 
             
              context "LanguageDefinition" do
         | 
| 29 29 | 
             
                it "#file_list should return correct file list based on rules" do
         | 
| 30 | 
            -
                  correct_array = Rake::FileList.new(File.dirname(__FILE__) + '/fixtures/ruby | 
| 30 | 
            +
                  correct_array = Rake::FileList.new(File.dirname(__FILE__) + '/fixtures/ruby/**/*.example')
         | 
| 31 31 | 
             
                  ld = Syntaxer::LanguageDefinition.new(:ruby, ["rb.example", "rake"], ["Rakefile", "Thorfile"], ["**/*"], nil, "`ruby -wc %filename%`")
         | 
| 32 32 | 
             
                  ld.files_list(File.dirname(__FILE__) + '/fixtures/').should == correct_array
         | 
| 33 33 | 
             
                end
         | 
    
        data/spec/printer_spec.rb
    CHANGED
    
    | @@ -9,9 +9,9 @@ describe "Syntaxer" do | |
| 9 9 | 
             
                subject{Syntaxer::Printer}
         | 
| 10 10 |  | 
| 11 11 | 
             
                it "should be quite if passed --quite option" do
         | 
| 12 | 
            -
                  ProgressBar.new.should_not_receive(:update)
         | 
| 12 | 
            +
                  ::ProgressBar.new.should_not_receive(:update)
         | 
| 13 13 | 
             
                  subject.quite = true
         | 
| 14 | 
            -
                  subject.update | 
| 14 | 
            +
                  subject.update({})
         | 
| 15 15 | 
             
                  subject.print_result ['a','b']
         | 
| 16 16 | 
             
                end
         | 
| 17 17 | 
             
              end
         | 
    
        data/spec/reader_spec.rb
    CHANGED
    
    | @@ -5,10 +5,9 @@ describe "Syntaxer::Reader::DSLReader" do | |
| 5 5 | 
             
              context "#build" do
         | 
| 6 6 | 
             
                it "should build from default distr rules files" do
         | 
| 7 7 | 
             
                  @reader = Syntaxer::Reader::DSLReader.build
         | 
| 8 | 
            -
                  
         | 
| 9 | 
            -
                  @reader.rules.find(: | 
| 10 | 
            -
                  @reader.rules.find(: | 
| 11 | 
            -
                  @reader.rules.find(:sass).should == Syntaxer::LanguageDefinition.new(:sass, ["sass"], nil, ["**/*"], nil, "sass -c %filename%")      
         | 
| 8 | 
            +
                  @reader.rules.find(:ruby).should == Syntaxer::LanguageDefinition.new(:ruby, ["rb", "rake"], ["Rakefile", "Thorfile", "Gemfile"], ["**/*"], nil, "ruby -c %filename%", "ruby", true)
         | 
| 9 | 
            +
                  @reader.rules.find(:haml).should == Syntaxer::LanguageDefinition.new(:haml, ["haml"], nil, ["**/*"], nil, "haml -c %filename%", "haml", system("which haml 2>&1 > /dev/null"))
         | 
| 10 | 
            +
                  @reader.rules.find(:sass).should == Syntaxer::LanguageDefinition.new(:sass, ["sass"], nil, ["**/*"], nil, "sass -c %filename%", "sass", system("which haml 2>&1 > /dev/null"))
         | 
| 12 11 |  | 
| 13 12 | 
             
                end
         | 
| 14 13 | 
             
              end
         | 
| @@ -36,8 +35,8 @@ describe "Syntaxer::Reader::DSLReader" do | |
| 36 35 |  | 
| 37 36 | 
             
                it "should load from file" do
         | 
| 38 37 | 
             
                  reader = Syntaxer::Reader::DSLReader.load(syntaxer_rules_example_file)
         | 
| 39 | 
            -
                  reader.rules.find(:ruby).folders.should == [" | 
| 40 | 
            -
                  reader.rules.find(:haml).folders.should == [" | 
| 38 | 
            +
                  reader.rules.find(:ruby).folders.should == ["**/*"]
         | 
| 39 | 
            +
                  reader.rules.find(:haml).folders.should == ["**/*"]     
         | 
| 41 40 | 
             
                end
         | 
| 42 41 |  | 
| 43 42 | 
             
                it "should do substitution for the same rules" do
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | @@ -1,9 +1,11 @@ | |
| 1 1 | 
             
            $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
         | 
| 2 2 | 
             
            $LOAD_PATH.unshift(File.dirname(__FILE__))
         | 
| 3 | 
            +
            require 'rubygems'
         | 
| 3 4 | 
             
            require 'rspec'
         | 
| 4 5 | 
             
            require 'git'
         | 
| 5 6 | 
             
            require 'syntaxer'
         | 
| 6 7 | 
             
            require "tmpdir"
         | 
| 8 | 
            +
            require 'aruba/api'
         | 
| 7 9 |  | 
| 8 10 | 
             
            # Requires supporting files with custom matchers and macros, etc,
         | 
| 9 11 | 
             
            # in ./support/ and its subdirectories.
         | 
| @@ -67,7 +69,7 @@ def add_hook(ruby_repo_dir) | |
| 67 69 | 
             
              hook_file = File.join(ruby_repo_dir,'.git/hooks/pre-commit')
         | 
| 68 70 |  | 
| 69 71 | 
             
              File.open(hook_file, 'w') do |f|
         | 
| 70 | 
            -
                f.puts "#{bin_file} -c #{syntaxer_rules_example_file | 
| 72 | 
            +
                f.puts "#{bin_file} -c #{syntaxer_rules_example_file} -r git -p #{ruby_repo_dir} --hook"
         | 
| 71 73 | 
             
              end
         | 
| 72 74 |  | 
| 73 75 | 
             
              File.chmod(0755, hook_file)
         | 
| @@ -83,3 +85,12 @@ def syntaxer_rules_example_file file = '' | |
| 83 85 | 
             
              File.join(fixtures_path, "#{file.empty? ? 'syntaxer_rules': file}.rb" )
         | 
| 84 86 | 
             
            end
         | 
| 85 87 |  | 
| 88 | 
            +
            class ArubaHelper
         | 
| 89 | 
            +
              include Aruba::Api
         | 
| 90 | 
            +
              class << self
         | 
| 91 | 
            +
                def method_missing method, *args
         | 
| 92 | 
            +
                  ArubaHelper.new.send(method, *args)
         | 
| 93 | 
            +
                end
         | 
| 94 | 
            +
              end
         | 
| 95 | 
            +
            end
         | 
| 96 | 
            +
             | 
    
        data/spec/syntaxer_spec.rb
    CHANGED
    
    | @@ -6,13 +6,19 @@ describe "Syntaxer" do | |
| 6 6 | 
             
              it {should respond_to(:check_syntax)}
         | 
| 7 7 |  | 
| 8 8 | 
             
              context "in plain mode" do
         | 
| 9 | 
            +
                before(:all) do
         | 
| 10 | 
            +
                  Syntaxer::Printer.stub!(:print_result)
         | 
| 11 | 
            +
                  Syntaxer::Printer.stub!(:print_message)
         | 
| 12 | 
            +
                  Syntaxer::Printer.stub!(:update)
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
                
         | 
| 9 15 | 
             
                it "should exit with error if where is syntax mistake" do
         | 
| 10 16 | 
             
                  lambda{ subject.check_syntax({:root_path => fixtures_path, :config_file => syntaxer_rules_example_file}) }.should raise_exception
         | 
| 11 17 | 
             
                end
         | 
| 12 18 | 
             
              end
         | 
| 13 19 |  | 
| 14 20 | 
             
              context "checking GIT repo" do
         | 
| 15 | 
            -
             | 
| 21 | 
            +
             | 
| 16 22 | 
             
                before(:each) do
         | 
| 17 23 | 
             
                  @repo_dir = create_temp_ruby_project
         | 
| 18 24 | 
             
                  make_initial_commit(@repo_dir)
         | 
    
        data/syntaxer.gemspec
    CHANGED
    
    | @@ -5,11 +5,11 @@ | |
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 7 | 
             
              s.name = %q{syntaxer}
         | 
| 8 | 
            -
              s.version = "0. | 
| 8 | 
            +
              s.version = "0.4.0"
         | 
| 9 9 |  | 
| 10 10 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 11 | 
             
              s.authors = ["artemk"]
         | 
| 12 | 
            -
              s.date = %q{2011-04- | 
| 12 | 
            +
              s.date = %q{2011-04-23}
         | 
| 13 13 | 
             
              s.default_executable = %q{syntaxer}
         | 
| 14 14 | 
             
              s.description = %q{Syntax checker for ruby and other languages}
         | 
| 15 15 | 
             
              s.email = %q{kramarenko.artyom@gmail.com}
         | 
| @@ -27,8 +27,11 @@ Gem::Specification.new do |s| | |
| 27 27 | 
             
                "VERSION",
         | 
| 28 28 | 
             
                "bin/syntaxer",
         | 
| 29 29 | 
             
                "features/plain_check.feature",
         | 
| 30 | 
            +
                "features/printer_check.feature",
         | 
| 31 | 
            +
                "features/rails_check.feature",
         | 
| 30 32 | 
             
                "features/repository_check.feature",
         | 
| 31 33 | 
             
                "features/step_definitions/plain_checker.rb",
         | 
| 34 | 
            +
                "features/step_definitions/rails_checker.rb",
         | 
| 32 35 | 
             
                "features/step_definitions/repository_checker.rb",
         | 
| 33 36 | 
             
                "features/support/env.rb",
         | 
| 34 37 | 
             
                "features/support/hooks.rb",
         | 
| @@ -40,6 +43,7 @@ Gem::Specification.new do |s| | |
| 40 43 | 
             
                "lib/syntaxer/file_status.rb",
         | 
| 41 44 | 
             
                "lib/syntaxer/language_definition.rb",
         | 
| 42 45 | 
             
                "lib/syntaxer/printer.rb",
         | 
| 46 | 
            +
                "lib/syntaxer/progress_bar.rb",
         | 
| 43 47 | 
             
                "lib/syntaxer/railtie.rb",
         | 
| 44 48 | 
             
                "lib/syntaxer/reader.rb",
         | 
| 45 49 | 
             
                "lib/syntaxer/repository.rb",
         | 
| @@ -49,6 +53,7 @@ Gem::Specification.new do |s| | |
| 49 53 | 
             
                "spec/fixtures/haml/correct.html.haml",
         | 
| 50 54 | 
             
                "spec/fixtures/haml/wrong.html.haml",
         | 
| 51 55 | 
             
                "spec/fixtures/ruby/correct.rb.example",
         | 
| 56 | 
            +
                "spec/fixtures/ruby/subfolder/wrong.rb.example",
         | 
| 52 57 | 
             
                "spec/fixtures/ruby/wrong.rb.example",
         | 
| 53 58 | 
             
                "spec/fixtures/syntaxer_rules.rb",
         | 
| 54 59 | 
             
                "spec/fixtures/syntaxer_rules_git.rb",
         | 
| @@ -59,6 +64,7 @@ Gem::Specification.new do |s| | |
| 59 64 | 
             
                "spec/spec_helper.rb",
         | 
| 60 65 | 
             
                "spec/syntaxer_spec.rb",
         | 
| 61 66 | 
             
                "syntaxer.gemspec",
         | 
| 67 | 
            +
                "syntaxer_rails_rules.dist.rb",
         | 
| 62 68 | 
             
                "syntaxer_rules.dist.rb"
         | 
| 63 69 | 
             
              ]
         | 
| 64 70 | 
             
              s.homepage = %q{http://github.com/artemk/syntaxer}
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            syntaxer do    
         | 
| 2 | 
            +
              languages :ruby do
         | 
| 3 | 
            +
                folders "app/*", "app/**/*", "lib/*", "lib/**/*"
         | 
| 4 | 
            +
                extensions "rb", "rake"
         | 
| 5 | 
            +
                specific_files "Rakefile", "Thorfile", "Gemfile"
         | 
| 6 | 
            +
                exec_rule "ruby -c %filename%"
         | 
| 7 | 
            +
              end
         | 
| 8 | 
            +
              
         | 
| 9 | 
            +
              lang :sass do
         | 
| 10 | 
            +
                folders "public/stylesheets/**/*"
         | 
| 11 | 
            +
                extensions "sass"
         | 
| 12 | 
            +
                exec_rule "sass -c %filename%"    
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
              
         | 
| 15 | 
            +
              lang :haml do
         | 
| 16 | 
            +
                folders "app/views/**/*", "app/views/*"
         | 
| 17 | 
            +
                extensions "haml"
         | 
| 18 | 
            +
                exec_rule "haml -c %filename%"
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
    
        data/syntaxer_rules.dist.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,13 +1,8 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: syntaxer
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              hash: 19
         | 
| 5 4 | 
             
              prerelease: 
         | 
| 6 | 
            -
               | 
| 7 | 
            -
              - 0
         | 
| 8 | 
            -
              - 3
         | 
| 9 | 
            -
              - 0
         | 
| 10 | 
            -
              version: 0.3.0
         | 
| 5 | 
            +
              version: 0.4.0
         | 
| 11 6 | 
             
            platform: ruby
         | 
| 12 7 | 
             
            authors: 
         | 
| 13 8 | 
             
            - artemk
         | 
| @@ -15,127 +10,97 @@ autorequire: | |
| 15 10 | 
             
            bindir: bin
         | 
| 16 11 | 
             
            cert_chain: []
         | 
| 17 12 |  | 
| 18 | 
            -
            date: 2011-04- | 
| 13 | 
            +
            date: 2011-04-23 00:00:00 +03:00
         | 
| 19 14 | 
             
            default_executable: syntaxer
         | 
| 20 15 | 
             
            dependencies: 
         | 
| 21 16 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 22 | 
            -
               | 
| 17 | 
            +
              name: git
         | 
| 23 18 | 
             
              requirement: &id001 !ruby/object:Gem::Requirement 
         | 
| 24 19 | 
             
                none: false
         | 
| 25 20 | 
             
                requirements: 
         | 
| 26 21 | 
             
                - - ">="
         | 
| 27 22 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 28 | 
            -
                    hash: 3
         | 
| 29 | 
            -
                    segments: 
         | 
| 30 | 
            -
                    - 0
         | 
| 31 23 | 
             
                    version: "0"
         | 
| 32 | 
            -
               | 
| 33 | 
            -
              version_requirements: *id001
         | 
| 24 | 
            +
              type: :runtime
         | 
| 34 25 | 
             
              prerelease: false
         | 
| 26 | 
            +
              version_requirements: *id001
         | 
| 35 27 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 36 | 
            -
               | 
| 28 | 
            +
              name: rainbow
         | 
| 37 29 | 
             
              requirement: &id002 !ruby/object:Gem::Requirement 
         | 
| 38 30 | 
             
                none: false
         | 
| 39 31 | 
             
                requirements: 
         | 
| 40 32 | 
             
                - - ">="
         | 
| 41 33 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 42 | 
            -
                    hash: 3
         | 
| 43 | 
            -
                    segments: 
         | 
| 44 | 
            -
                    - 0
         | 
| 45 34 | 
             
                    version: "0"
         | 
| 46 | 
            -
               | 
| 47 | 
            -
              version_requirements: *id002
         | 
| 35 | 
            +
              type: :runtime
         | 
| 48 36 | 
             
              prerelease: false
         | 
| 37 | 
            +
              version_requirements: *id002
         | 
| 49 38 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 50 | 
            -
               | 
| 39 | 
            +
              name: progress_bar
         | 
| 51 40 | 
             
              requirement: &id003 !ruby/object:Gem::Requirement 
         | 
| 52 41 | 
             
                none: false
         | 
| 53 42 | 
             
                requirements: 
         | 
| 54 43 | 
             
                - - ">="
         | 
| 55 44 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 56 | 
            -
                    hash: 3
         | 
| 57 | 
            -
                    segments: 
         | 
| 58 | 
            -
                    - 0
         | 
| 59 45 | 
             
                    version: "0"
         | 
| 60 | 
            -
               | 
| 61 | 
            -
              version_requirements: *id003
         | 
| 46 | 
            +
              type: :runtime
         | 
| 62 47 | 
             
              prerelease: false
         | 
| 48 | 
            +
              version_requirements: *id003
         | 
| 63 49 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 64 | 
            -
               | 
| 50 | 
            +
              name: rspec
         | 
| 65 51 | 
             
              requirement: &id004 !ruby/object:Gem::Requirement 
         | 
| 66 52 | 
             
                none: false
         | 
| 67 53 | 
             
                requirements: 
         | 
| 68 54 | 
             
                - - ">="
         | 
| 69 55 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 70 | 
            -
                    hash: 27
         | 
| 71 | 
            -
                    segments: 
         | 
| 72 | 
            -
                    - 2
         | 
| 73 | 
            -
                    - 5
         | 
| 74 | 
            -
                    - 0
         | 
| 75 56 | 
             
                    version: 2.5.0
         | 
| 76 | 
            -
               | 
| 77 | 
            -
              version_requirements: *id004
         | 
| 57 | 
            +
              type: :development
         | 
| 78 58 | 
             
              prerelease: false
         | 
| 59 | 
            +
              version_requirements: *id004
         | 
| 79 60 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 80 | 
            -
               | 
| 61 | 
            +
              name: yard
         | 
| 81 62 | 
             
              requirement: &id005 !ruby/object:Gem::Requirement 
         | 
| 82 63 | 
             
                none: false
         | 
| 83 64 | 
             
                requirements: 
         | 
| 84 65 | 
             
                - - ~>
         | 
| 85 66 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 86 | 
            -
                    hash: 7
         | 
| 87 | 
            -
                    segments: 
         | 
| 88 | 
            -
                    - 0
         | 
| 89 | 
            -
                    - 6
         | 
| 90 | 
            -
                    - 0
         | 
| 91 67 | 
             
                    version: 0.6.0
         | 
| 92 | 
            -
               | 
| 93 | 
            -
              version_requirements: *id005
         | 
| 68 | 
            +
              type: :development
         | 
| 94 69 | 
             
              prerelease: false
         | 
| 70 | 
            +
              version_requirements: *id005
         | 
| 95 71 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 96 | 
            -
               | 
| 72 | 
            +
              name: jeweler
         | 
| 97 73 | 
             
              requirement: &id006 !ruby/object:Gem::Requirement 
         | 
| 98 74 | 
             
                none: false
         | 
| 99 75 | 
             
                requirements: 
         | 
| 100 76 | 
             
                - - ~>
         | 
| 101 77 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 102 | 
            -
                    hash: 7
         | 
| 103 | 
            -
                    segments: 
         | 
| 104 | 
            -
                    - 1
         | 
| 105 | 
            -
                    - 5
         | 
| 106 | 
            -
                    - 2
         | 
| 107 78 | 
             
                    version: 1.5.2
         | 
| 108 | 
            -
               | 
| 109 | 
            -
              version_requirements: *id006
         | 
| 79 | 
            +
              type: :development
         | 
| 110 80 | 
             
              prerelease: false
         | 
| 81 | 
            +
              version_requirements: *id006
         | 
| 111 82 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 112 | 
            -
               | 
| 83 | 
            +
              name: cucumber
         | 
| 113 84 | 
             
              requirement: &id007 !ruby/object:Gem::Requirement 
         | 
| 114 85 | 
             
                none: false
         | 
| 115 86 | 
             
                requirements: 
         | 
| 116 87 | 
             
                - - ">="
         | 
| 117 88 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 118 | 
            -
                    hash: 3
         | 
| 119 | 
            -
                    segments: 
         | 
| 120 | 
            -
                    - 0
         | 
| 121 89 | 
             
                    version: "0"
         | 
| 122 | 
            -
               | 
| 123 | 
            -
              version_requirements: *id007
         | 
| 90 | 
            +
              type: :development
         | 
| 124 91 | 
             
              prerelease: false
         | 
| 92 | 
            +
              version_requirements: *id007
         | 
| 125 93 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 126 | 
            -
               | 
| 94 | 
            +
              name: aruba
         | 
| 127 95 | 
             
              requirement: &id008 !ruby/object:Gem::Requirement 
         | 
| 128 96 | 
             
                none: false
         | 
| 129 97 | 
             
                requirements: 
         | 
| 130 98 | 
             
                - - ">="
         | 
| 131 99 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 132 | 
            -
                    hash: 3
         | 
| 133 | 
            -
                    segments: 
         | 
| 134 | 
            -
                    - 0
         | 
| 135 100 | 
             
                    version: "0"
         | 
| 136 | 
            -
               | 
| 137 | 
            -
              version_requirements: *id008
         | 
| 101 | 
            +
              type: :development
         | 
| 138 102 | 
             
              prerelease: false
         | 
| 103 | 
            +
              version_requirements: *id008
         | 
| 139 104 | 
             
            description: Syntax checker for ruby and other languages
         | 
| 140 105 | 
             
            email: kramarenko.artyom@gmail.com
         | 
| 141 106 | 
             
            executables: 
         | 
| @@ -154,8 +119,11 @@ files: | |
| 154 119 | 
             
            - VERSION
         | 
| 155 120 | 
             
            - bin/syntaxer
         | 
| 156 121 | 
             
            - features/plain_check.feature
         | 
| 122 | 
            +
            - features/printer_check.feature
         | 
| 123 | 
            +
            - features/rails_check.feature
         | 
| 157 124 | 
             
            - features/repository_check.feature
         | 
| 158 125 | 
             
            - features/step_definitions/plain_checker.rb
         | 
| 126 | 
            +
            - features/step_definitions/rails_checker.rb
         | 
| 159 127 | 
             
            - features/step_definitions/repository_checker.rb
         | 
| 160 128 | 
             
            - features/support/env.rb
         | 
| 161 129 | 
             
            - features/support/hooks.rb
         | 
| @@ -167,6 +135,7 @@ files: | |
| 167 135 | 
             
            - lib/syntaxer/file_status.rb
         | 
| 168 136 | 
             
            - lib/syntaxer/language_definition.rb
         | 
| 169 137 | 
             
            - lib/syntaxer/printer.rb
         | 
| 138 | 
            +
            - lib/syntaxer/progress_bar.rb
         | 
| 170 139 | 
             
            - lib/syntaxer/railtie.rb
         | 
| 171 140 | 
             
            - lib/syntaxer/reader.rb
         | 
| 172 141 | 
             
            - lib/syntaxer/repository.rb
         | 
| @@ -176,6 +145,7 @@ files: | |
| 176 145 | 
             
            - spec/fixtures/haml/correct.html.haml
         | 
| 177 146 | 
             
            - spec/fixtures/haml/wrong.html.haml
         | 
| 178 147 | 
             
            - spec/fixtures/ruby/correct.rb.example
         | 
| 148 | 
            +
            - spec/fixtures/ruby/subfolder/wrong.rb.example
         | 
| 179 149 | 
             
            - spec/fixtures/ruby/wrong.rb.example
         | 
| 180 150 | 
             
            - spec/fixtures/syntaxer_rules.rb
         | 
| 181 151 | 
             
            - spec/fixtures/syntaxer_rules_git.rb
         | 
| @@ -186,6 +156,7 @@ files: | |
| 186 156 | 
             
            - spec/spec_helper.rb
         | 
| 187 157 | 
             
            - spec/syntaxer_spec.rb
         | 
| 188 158 | 
             
            - syntaxer.gemspec
         | 
| 159 | 
            +
            - syntaxer_rails_rules.dist.rb
         | 
| 189 160 | 
             
            - syntaxer_rules.dist.rb
         | 
| 190 161 | 
             
            has_rdoc: true
         | 
| 191 162 | 
             
            homepage: http://github.com/artemk/syntaxer
         | 
| @@ -201,7 +172,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 201 172 | 
             
              requirements: 
         | 
| 202 173 | 
             
              - - ">="
         | 
| 203 174 | 
             
                - !ruby/object:Gem::Version 
         | 
| 204 | 
            -
                  hash:  | 
| 175 | 
            +
                  hash: -199843106065902149
         | 
| 205 176 | 
             
                  segments: 
         | 
| 206 177 | 
             
                  - 0
         | 
| 207 178 | 
             
                  version: "0"
         | 
| @@ -210,9 +181,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 210 181 | 
             
              requirements: 
         | 
| 211 182 | 
             
              - - ">="
         | 
| 212 183 | 
             
                - !ruby/object:Gem::Version 
         | 
| 213 | 
            -
                  hash: 3
         | 
| 214 | 
            -
                  segments: 
         | 
| 215 | 
            -
                  - 0
         | 
| 216 184 | 
             
                  version: "0"
         | 
| 217 185 | 
             
            requirements: []
         | 
| 218 186 |  |