syntaxer 0.4.0 → 0.5.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.
@@ -0,0 +1,88 @@
1
+ module Syntaxer
2
+ class Writer
3
+ # Recreate config DSL string operation general rules and set of
4
+ # languages
5
+
6
+ EXCLUDE_PROPERTIES = "executor", "exec_existence", "deferred", "name"
7
+
8
+ # Initializing Writer
9
+ #
10
+ # @param [Array] array of languages to recreate
11
+ # @param [LanguageRules]
12
+ def initialize langs, rules
13
+ raise ArgumentError unless rules.kind_of?(LanguageRules)
14
+ @config = ''
15
+ @allowed_methods = ["syntaxer", "lang", "languages"]
16
+
17
+ @config = syntaxer do
18
+ lang_st = ''
19
+ langs.each do |l|
20
+ language = l.first
21
+ @paths = l.last
22
+ rule = rules.find(language)
23
+ next if rule.nil?
24
+
25
+ @allowed_methods += rule.members if (rule.members - @allowed_methods).length > 0
26
+ lang_st += languages(rule.send(:name)) do
27
+ prop_st = ''
28
+ rule.members.each do |m|
29
+ properties = rule.send(m)
30
+ prop_st += property(m, properties) if m != "name"
31
+ end
32
+ prop_st
33
+ end
34
+ end
35
+ lang_st
36
+ end
37
+
38
+ end
39
+
40
+ # return config
41
+ #
42
+ # @return [String] DSL config string
43
+ def get_config
44
+ @config
45
+ end
46
+
47
+ protected
48
+ def method_missing name, *args, &b
49
+ name = name.to_sym
50
+ super unless @allowed_methods.include?(name.to_s)
51
+ if name == :lang || name == :syntaxer || name == :languages
52
+ block(name, args.first, &b)
53
+ else
54
+ property(name, args)
55
+ end
56
+ end
57
+
58
+ # Create DSL block
59
+ #
60
+ # @param [Symbol, String] block name
61
+ # @param [String] parameter that is passed in to block
62
+ # @return [String] DSL block string
63
+ def block name, param = nil, &b
64
+ sp = ' '*2 if name == :lang || name == :languages
65
+ body = yield self if block_given?
66
+ param = ":#{param.to_s}" unless param.nil?
67
+ "#{sp}#{name.to_s} #{param} do\n#{body}\n#{sp}end\n"
68
+ end
69
+
70
+ # Create DSL property of block
71
+ #
72
+ # @param [String] name of the property
73
+ # @param [Syntaxer::Runner, Array] properties
74
+ # @return [String] DSL property string
75
+ def property name, prop
76
+ return '' if EXCLUDE_PROPERTIES.include?(name.to_s) || prop.nil? || (prop.kind_of?(Array) && prop.empty?)
77
+
78
+ prop = prop.flatten.map{|p| "'#{p}'"}.join(', ') if prop.respond_to?(:flatten) && name.to_sym != :folders
79
+ prop = @paths.map{|f| "'#{f}'"}.join(',') if name.to_sym == :folders
80
+
81
+ prop = "'#{prop.exec_rule}'" if prop.instance_of?(Syntaxer::Runner) && !prop.exec_rule.nil?
82
+ prop = "Syntaxer::Runner.#{prop.language}" if prop.instance_of?(Syntaxer::Runner) && prop.exec_rule.nil?
83
+
84
+ ' '*4 + "#{name.to_s} #{prop}\n"
85
+ end
86
+
87
+ end
88
+ end
@@ -1,9 +1,6 @@
1
1
  namespace :syntaxer do
2
- desc 'my plugins rake task'
2
+ desc 'Install syntaxer to rails project'
3
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)
4
+ Syntaxer::Wizzard.start
8
5
  end
9
6
  end
@@ -6,7 +6,7 @@ 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 -c %filename%", "ruby", true)])
9
+ reader.stub!(:rules).and_return([Syntaxer::LanguageDefinition.new(:ruby, ["rb.example", "rake"], ["Rakefile", "Thorfile"], ["**/*"], nil, Syntaxer::Runner.default("ruby -c %filename%"), "ruby", true)])
10
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))
@@ -53,8 +53,8 @@ describe "Syntaxer::Checker" do
53
53
  make_git_add(@repo_dir)
54
54
 
55
55
  reader = mock('Reader')
56
- reader.stub!(:rules).and_return([Syntaxer::LanguageDefinition.new(:ruby, ["example", "rake"], ["Rakefile", "Thorfile"], ["**/*"], nil, "ruby -c %filename%", "ruby", true)])
57
- Syntaxer.should_receive(:reader).and_return(reader)
56
+ reader.stub!(:rules).and_return([Syntaxer::LanguageDefinition.new(:ruby, ["example", "rake"], ["Rakefile", "Thorfile"], ["**/*"], nil, Syntaxer::Runner.default("ruby -c %filename%"), "ruby", true)])
57
+ Syntaxer.should_receive(:reader).at_least(1).times.and_return(reader)
58
58
  Syntaxer.stub!(:root_path).and_return(@repo_dir)
59
59
  repo = Syntaxer::Repository.factory(@repo_dir, :git)
60
60
  Syntaxer.stub!(:repository).and_return(repo)
@@ -0,0 +1,9 @@
1
+ syntaxer do
2
+
3
+ languages :javascript do
4
+ extensions "example"
5
+ folders '**/*'
6
+ exec_rule Syntaxer::Runner.javascript
7
+ end
8
+
9
+ end
@@ -4,10 +4,12 @@ describe "Syntaxer::Reader::DSLReader" do
4
4
 
5
5
  context "#build" do
6
6
  it "should build from default distr rules files" do
7
+ Syntaxer::Runner.stub(:default)
8
+
7
9
  @reader = Syntaxer::Reader::DSLReader.build
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"))
10
+ @reader.rules.find(:ruby).should eql(Syntaxer::LanguageDefinition.new(:ruby, ["rb", "rake"], ["Rakefile", "Thorfile", "Gemfile"], ["**/*"], nil, Syntaxer::Runner.default("ruby -c %filename%"), "ruby", true, false))
11
+ @reader.rules.find(:haml).should eql(Syntaxer::LanguageDefinition.new(:haml, ["haml"], nil, ["**/*"], nil, Syntaxer::Runner.default("haml -c %filename%"), "haml", system("which haml 2>&1 > /dev/null"), false))
12
+ @reader.rules.find(:sass).should eql(Syntaxer::LanguageDefinition.new(:sass, ["sass"], nil, ["**/*"], nil, Syntaxer::Runner.default("sass -c %filename%"), "sass", system("which haml 2>&1 > /dev/null"), false))
11
13
 
12
14
  end
13
15
  end
@@ -114,5 +116,13 @@ describe "Syntaxer::Reader::DSLReader" do
114
116
  @reader.overall_ignore_folders().should == []
115
117
  end
116
118
  end
119
+
120
+ context "#exec_rule" do
121
+ subject{Syntaxer::Reader::DSLReader.new}
122
+ it "should return Syntaxer::Runner instance" do
123
+ reader = Syntaxer::Reader::DSLReader.load(syntaxer_rules_example_file('syntaxer_rules_jslint'))
124
+ reader.rules.first.exec_rule.should be_instance_of(Syntaxer::Runner)
125
+ end
126
+ end
117
127
 
118
128
  end
@@ -0,0 +1,42 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Syntaxer::Runner" do
4
+ subject{Syntaxer::Runner}
5
+
6
+ context "default runner" do
7
+
8
+ it "should return Syntaxer::Runner" do
9
+ subject.default("ruby -c %filename%").should be_instance_of(Syntaxer::Runner)
10
+ end
11
+
12
+ it "should have run method" do
13
+ subject.default("ruby -c %filename%").should respond_to(:run)
14
+ end
15
+
16
+ it "should invoke Open3#popen3" do
17
+ Open3.should_receive(:popen3)
18
+ subject.default("ruby -c %filename%").run('')
19
+ end
20
+
21
+ end
22
+
23
+ context "javascript runner" do
24
+ subject{Syntaxer::Runner.javascript}
25
+
26
+ it "should return Proc" do
27
+ subject.should be_instance_of(Proc)
28
+ end
29
+
30
+ it "Proc should return Syntaxer::Runner class instance" do
31
+ subject.call.should be_instance_of(Syntaxer::Runner)
32
+ end
33
+
34
+ it "should invoke run of JSLint::Lint instance" do
35
+ ins = double()
36
+ ins.should_receive(:run)
37
+ JSLint::Lint.should_receive(:new).and_return(ins)
38
+ subject.call.run('', [])
39
+ end
40
+ end
41
+
42
+ end
@@ -24,7 +24,13 @@ end
24
24
  def create_temp_git_repo
25
25
  @dir = Dir.tmpdir + "/#{Time.now.to_i}" + "/git_repo"
26
26
  FileUtils.mkdir_p(@dir)
27
- return @dir
27
+ @dir
28
+ end
29
+
30
+ def create_temp_dir
31
+ @dir = Dir.tmpdir + "/#{Time.now.to_i}" + "/syntaxer"
32
+ FileUtils.mkdir_p(@dir)
33
+ @dir
28
34
  end
29
35
 
30
36
  def create_temp_ruby_project
@@ -0,0 +1,95 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Syntaxer::Wizzard" do
4
+ subject{Syntaxer::Wizzard}
5
+
6
+ context "installation of config to non rails project without git and no jslint" do
7
+
8
+ before(:each) do
9
+ @working_dir = create_temp_dir
10
+ @options = {
11
+ :rails => false,
12
+ :git => false,
13
+ :config_path => @working_dir,
14
+ :config_path_exists => true,
15
+ :languages => [[:ruby, ['*/*', 'lib/*']]]
16
+ }
17
+ end
18
+
19
+ it "should create config" do
20
+ subject.new(@options).run
21
+ FileTest.file?(File.join(@working_dir, Syntaxer::SYNTAXER_CONFIG_FILE_NAME)).should be_true
22
+ rules = Syntaxer::Reader::DSLReader.load(File.join(@working_dir, Syntaxer::SYNTAXER_CONFIG_FILE_NAME)).rules
23
+ ruby_rule = rules.find(:ruby)
24
+ ruby_rule.folders.should eql(@options[:languages].first.last)
25
+ end
26
+
27
+ after(:each) do
28
+ FileUtils.rm_r(@working_dir)
29
+ end
30
+
31
+ end
32
+
33
+ context "installation of config to rails project without git" do
34
+ before(:each) do
35
+ @working_dir = create_temp_dir
36
+ @options = {
37
+ :rails => true,
38
+ :git => false,
39
+ :config_path => @working_dir+"/config",
40
+ :config_path_exists => true,
41
+ :languages => [[:ruby, Syntaxer::Wizzard::FOLDERS_RAILS[:ruby]]]
42
+ }
43
+ FileUtils.mkdir_p(File.join(@working_dir,'config'))
44
+ File.new(File.join(@working_dir,'config','application.rb'),'w').close
45
+ File.new(File.join(@working_dir,'config','routes.rb'),'w').close
46
+ end
47
+
48
+ it "should install config for rails without errors" do
49
+ subject.new(@options).run
50
+ rules = Syntaxer::Reader::DSLReader.load(File.join(@working_dir, 'config', Syntaxer::SYNTAXER_CONFIG_FILE_NAME)).rules
51
+ ruby_rules = rules.find(:ruby)
52
+ ruby_rules.folders.should eql(@options[:languages].first.last)
53
+ end
54
+
55
+ after(:each) do
56
+ FileUtils.rm_r(@working_dir)
57
+ end
58
+
59
+ end
60
+
61
+ context "installation of config to rails with git" do
62
+ before(:each) do
63
+ repo_dir = create_temp_ruby_project
64
+ @working_dir = repo_dir
65
+ File.new(File.join(@working_dir,'README'),'w').close
66
+ make_git_add(repo_dir)
67
+ make_initial_commit(repo_dir)
68
+ @options = {
69
+ :rails => true,
70
+ :root_path => repo_dir,
71
+ :git => true,
72
+ :config_path => @working_dir+"/config",
73
+ :config_path_exists => true,
74
+ :languages => [[:ruby, Syntaxer::Wizzard::FOLDERS_RAILS[:ruby]]]
75
+ }
76
+ FileUtils.mkdir_p(File.join(@working_dir,'config'))
77
+ File.new(File.join(@working_dir,'config','application.rb'),'w').close
78
+ File.new(File.join(@working_dir,'config','routes.rb'),'w').close
79
+ end
80
+
81
+ it "should install hook to git and create syntaxer config" do
82
+ subject.new(@options).run
83
+ rules = Syntaxer::Reader::DSLReader.load(File.join(@working_dir, 'config', Syntaxer::SYNTAXER_CONFIG_FILE_NAME)).rules
84
+ ruby_rules = rules.find(:ruby)
85
+ ruby_rules.folders.should eql(@options[:languages].first.last)
86
+ FileTest.file?(File.join(@working_dir,'.git','hooks','pre-commit')).should be_true
87
+ end
88
+
89
+ after(:each) do
90
+ FileUtils.rm_r(@working_dir)
91
+ end
92
+
93
+ end
94
+
95
+ end
@@ -5,24 +5,25 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{syntaxer}
8
- s.version = "0.4.0"
8
+ s.version = "0.5.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-23}
12
+ s.date = %q{2011-05-10}
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}
16
16
  s.executables = ["syntaxer"]
17
17
  s.extra_rdoc_files = [
18
18
  "LICENSE.txt",
19
- "README.rdoc"
19
+ "README.markdown"
20
20
  ]
21
21
  s.files = [
22
+ ".travis.yml",
22
23
  "Gemfile",
23
24
  "Gemfile.lock",
24
25
  "LICENSE.txt",
25
- "README.rdoc",
26
+ "README.markdown",
26
27
  "Rakefile",
27
28
  "VERSION",
28
29
  "bin/syntaxer",
@@ -47,6 +48,9 @@ Gem::Specification.new do |s|
47
48
  "lib/syntaxer/railtie.rb",
48
49
  "lib/syntaxer/reader.rb",
49
50
  "lib/syntaxer/repository.rb",
51
+ "lib/syntaxer/runner.rb",
52
+ "lib/syntaxer/wizzard.rb",
53
+ "lib/syntaxer/writer.rb",
50
54
  "lib/tasks/syntaxer.rake",
51
55
  "rails/init.rb",
52
56
  "spec/checker_spec.rb",
@@ -57,14 +61,18 @@ Gem::Specification.new do |s|
57
61
  "spec/fixtures/ruby/wrong.rb.example",
58
62
  "spec/fixtures/syntaxer_rules.rb",
59
63
  "spec/fixtures/syntaxer_rules_git.rb",
64
+ "spec/fixtures/syntaxer_rules_jslint.rb",
60
65
  "spec/language_rules_spec.rb",
61
66
  "spec/printer_spec.rb",
62
67
  "spec/reader_spec.rb",
63
68
  "spec/repository_spec.rb",
69
+ "spec/runner_spec.rb",
64
70
  "spec/spec_helper.rb",
65
71
  "spec/syntaxer_spec.rb",
72
+ "spec/wizzard_spec.rb",
66
73
  "syntaxer.gemspec",
67
74
  "syntaxer_rails_rules.dist.rb",
75
+ "syntaxer_rails_rules_jslint.dist.rb",
68
76
  "syntaxer_rules.dist.rb"
69
77
  ]
70
78
  s.homepage = %q{http://github.com/artemk/syntaxer}
@@ -76,12 +84,15 @@ Gem::Specification.new do |s|
76
84
  "spec/checker_spec.rb",
77
85
  "spec/fixtures/syntaxer_rules.rb",
78
86
  "spec/fixtures/syntaxer_rules_git.rb",
87
+ "spec/fixtures/syntaxer_rules_jslint.rb",
79
88
  "spec/language_rules_spec.rb",
80
89
  "spec/printer_spec.rb",
81
90
  "spec/reader_spec.rb",
82
91
  "spec/repository_spec.rb",
92
+ "spec/runner_spec.rb",
83
93
  "spec/spec_helper.rb",
84
- "spec/syntaxer_spec.rb"
94
+ "spec/syntaxer_spec.rb",
95
+ "spec/wizzard_spec.rb"
85
96
  ]
86
97
 
87
98
  if s.respond_to? :specification_version then
@@ -91,6 +102,8 @@ Gem::Specification.new do |s|
91
102
  s.add_runtime_dependency(%q<git>, [">= 0"])
92
103
  s.add_runtime_dependency(%q<rainbow>, [">= 0"])
93
104
  s.add_runtime_dependency(%q<progress_bar>, [">= 0"])
105
+ s.add_runtime_dependency(%q<jslint_on_rails>, [">= 1.0.6"])
106
+ s.add_runtime_dependency(%q<highline>, [">= 0"])
94
107
  s.add_development_dependency(%q<rspec>, [">= 2.5.0"])
95
108
  s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
96
109
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
@@ -100,6 +113,8 @@ Gem::Specification.new do |s|
100
113
  s.add_dependency(%q<git>, [">= 0"])
101
114
  s.add_dependency(%q<rainbow>, [">= 0"])
102
115
  s.add_dependency(%q<progress_bar>, [">= 0"])
116
+ s.add_dependency(%q<jslint_on_rails>, [">= 1.0.6"])
117
+ s.add_dependency(%q<highline>, [">= 0"])
103
118
  s.add_dependency(%q<rspec>, [">= 2.5.0"])
104
119
  s.add_dependency(%q<yard>, ["~> 0.6.0"])
105
120
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
@@ -110,6 +125,8 @@ Gem::Specification.new do |s|
110
125
  s.add_dependency(%q<git>, [">= 0"])
111
126
  s.add_dependency(%q<rainbow>, [">= 0"])
112
127
  s.add_dependency(%q<progress_bar>, [">= 0"])
128
+ s.add_dependency(%q<jslint_on_rails>, [">= 1.0.6"])
129
+ s.add_dependency(%q<highline>, [">= 0"])
113
130
  s.add_dependency(%q<rspec>, [">= 2.5.0"])
114
131
  s.add_dependency(%q<yard>, ["~> 0.6.0"])
115
132
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
@@ -0,0 +1,26 @@
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
+
21
+ lang :javascript do
22
+ folders "public/javascripts/*", "public/javascripts/**/*"
23
+ extensions "js"
24
+ exec_rule Syntaxer::Runner.javascript
25
+ end
26
+ end
@@ -17,4 +17,11 @@ syntaxer do
17
17
  extensions "haml"
18
18
  exec_rule "haml -c %filename%"
19
19
  end
20
+
21
+ lang :javascript do
22
+ folders "**/*"
23
+ extensions "js"
24
+ exec_rule Syntaxer::Runner.javascript
25
+ end
26
+
20
27
  end