style_cop 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cad754b549725a014e392f631d97c12dbb12dfc8
4
+ data.tar.gz: aba58cb8317eacd9a5d90b97ee02e5e4352f8974
5
+ SHA512:
6
+ metadata.gz: a2a236e98c7fc36371c3c468d6f25e8315f5473326085d7a10a289dc8bbbe51e300f5b7cfcc5312191163aeeaf07f3fb4f8ede8cad7dfe54e7548bded8a99225
7
+ data.tar.gz: a88d3a48dd18d12f03e416393c32d728b6f068f6a524b5dfc25c1888c05e6e849ba0a66f66ded8a59bc93066fd22cc3bad02a2da2aa145adff436fc038efece7
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,38 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ style_cop (0.0.1)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ coderay (1.1.0)
10
+ diff-lcs (1.2.5)
11
+ method_source (0.8.2)
12
+ mini_portile (0.5.2)
13
+ nokogiri (1.6.1)
14
+ mini_portile (~> 0.5.0)
15
+ pry (0.9.12.6)
16
+ coderay (~> 1.0)
17
+ method_source (~> 0.8)
18
+ slop (~> 3.4)
19
+ rspec (2.14.1)
20
+ rspec-core (~> 2.14.0)
21
+ rspec-expectations (~> 2.14.0)
22
+ rspec-mocks (~> 2.14.0)
23
+ rspec-core (2.14.8)
24
+ rspec-expectations (2.14.5)
25
+ diff-lcs (>= 1.1.3, < 2.0)
26
+ rspec-mocks (2.14.6)
27
+ slop (3.4.7)
28
+ xpath (2.0.0)
29
+ nokogiri (~> 1.3)
30
+
31
+ PLATFORMS
32
+ ruby
33
+
34
+ DEPENDENCIES
35
+ pry (~> 0.9.12.6)
36
+ rspec (~> 2.14.0)
37
+ style_cop!
38
+ xpath (~> 2.0.0)
data/README.md ADDED
@@ -0,0 +1,2 @@
1
+ # style_cop
2
+ Police your style!
@@ -0,0 +1,37 @@
1
+ module StyleCop
2
+ class AssertStyle
3
+ def initialize(selector, rules, test_context)
4
+ @selector = selector
5
+ @rules = rules
6
+ @test_context = test_context
7
+ end
8
+
9
+ def has_correct_structure
10
+ selector_present ? fulfills_all_rules : raise_error
11
+ end
12
+
13
+ private
14
+
15
+ attr_reader :selector, :test_context, :rules
16
+
17
+ def selector_present
18
+ test_context.has_css?(selector)
19
+ end
20
+
21
+ def raise_error
22
+ raise StandardError, "Selector: #{selector} is not present."
23
+ end
24
+
25
+ def fulfills_all_rules
26
+ test_context.page.all(selector).each do |element|
27
+ has(element)
28
+ end
29
+ end
30
+
31
+ def has(element)
32
+ rules.each do |node|
33
+ test_context.expect(element).to test_context.have_selector(node)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,23 @@
1
+ module StyleCop
2
+ module PublicMethods
3
+ def has_child(selector)
4
+ RegisterStyle.add_rule("> #{selector}")
5
+ end
6
+
7
+ def has_nested_children(*args)
8
+ rule = ""
9
+ args.each do |arg|
10
+ rule = "#{rule}> #{arg} "
11
+ end
12
+ RegisterStyle.add_rule(rule.strip)
13
+ end
14
+
15
+ def register_style_structure_for(selector, &block)
16
+ block ? RegisterStyle.new(selector, &block) : (raise(StandardError, "No block given."))
17
+ end
18
+
19
+ def assert_style_structure_for(selector)
20
+ AssertStyle.new(selector, RegisterStyle.rules, self).has_correct_structure
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,17 @@
1
+ module StyleCop
2
+ class RegisterStyle
3
+ @@rules = []
4
+
5
+ def initialize(selector, &block)
6
+ yield
7
+ end
8
+
9
+ def self.rules
10
+ @@rules
11
+ end
12
+
13
+ def self.add_rule(rule)
14
+ @@rules << rule
15
+ end
16
+ end
17
+ end
data/lib/style_cop.rb ADDED
@@ -0,0 +1,10 @@
1
+ module StyleCop
2
+ require 'style_cop/assert_style'
3
+ require 'style_cop/register_style'
4
+ require 'style_cop/public_methods'
5
+ end
6
+
7
+ RSpec.configure do |c|
8
+ c.include StyleCop::PublicMethods, type: :feature
9
+ end
10
+
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe StyleCop::AssertStyle do
4
+ subject{ StyleCop::AssertStyle.new(selector, rules, test_context) }
5
+ let(:selector) { '.selector' }
6
+ let(:rules) { double('rules') }
7
+ let(:test_context) { double('test_context') }
8
+
9
+ describe "has_correct_structure" do
10
+ before do
11
+ allow(test_context).to receive(:has_css?) { has_selector }
12
+ end
13
+
14
+ context "selector present" do
15
+ let(:has_selector) { true }
16
+
17
+ let(:rule1) { double('rule1') }
18
+ let(:rule2) { double('rule2') }
19
+ let(:element1) { double('element1') }
20
+ let(:element2) { double('element2') }
21
+ let(:node1) { double('node1') }
22
+ let(:node2) { double('node2') }
23
+ let(:rules) { [rule1, rule2] }
24
+
25
+ before do
26
+ test_context.stub_chain(:page, :all) { [element1, element2] }
27
+ end
28
+
29
+ it "calls an expectation on elements" do
30
+ expect(test_context).to receive(:expect).with(element1).twice { node1 }
31
+ expect(test_context).to receive(:expect).with(element2).twice { node2 }
32
+ allow(node1).to receive(:to)
33
+ allow(node2).to receive(:to)
34
+ expect(test_context).to receive(:have_selector).with(rule1).twice
35
+ expect(test_context).to receive(:have_selector).with(rule2).twice
36
+
37
+ subject.has_correct_structure
38
+ end
39
+ end
40
+
41
+ context "selector not present" do
42
+ let(:has_selector) { false }
43
+
44
+ it "raises a StandardError" do
45
+ expect { subject.has_correct_structure }.to raise_error { |error|
46
+ expect(error.message).to eq "Selector: .selector is not present."
47
+ error.should be_a(StandardError)
48
+ }
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe StyleCop::PublicMethods do
4
+ include StyleCop::PublicMethods
5
+ let(:selector) {'.foo'}
6
+
7
+ describe 'has_child' do
8
+
9
+ it 'calls add_rule on RegisterStyle' do
10
+ expect(StyleCop::RegisterStyle).to receive(:add_rule).with('> .foo')
11
+ has_child selector
12
+ end
13
+ end
14
+
15
+ describe 'has_nested_children' do
16
+ let(:selector1) {'.foo'}
17
+ let(:selector2) {'.bar'}
18
+
19
+ it 'calls add_rule on RegisterStyle' do
20
+ expect(StyleCop::RegisterStyle).to receive(:add_rule).with('> .foo > .bar')
21
+ has_nested_children(selector1, selector2)
22
+ end
23
+ end
24
+
25
+ describe 'register_style_structure_for' do
26
+ let(:block) { lambda{} }
27
+
28
+ context 'block is given' do
29
+ it 'calls a new RegisterStyle' do
30
+ expect(StyleCop::RegisterStyle).to receive(:new).with(selector, &block)
31
+ register_style_structure_for(selector, &block)
32
+ end
33
+ end
34
+
35
+ context 'no block is given' do
36
+ it 'raises a no block error' do
37
+ expect { register_style_structure_for(selector) }.to raise_error { |error|
38
+ expect(error.message).to eq "No block given."
39
+ error.should be_a(StandardError)
40
+ }
41
+ end
42
+ end
43
+ end
44
+
45
+ describe 'assert_style_structure_for' do
46
+ let(:rules) { double(:rules) }
47
+ let(:assert_style_class) { double(:assert_style_class) }
48
+
49
+ before do
50
+ allow(StyleCop::RegisterStyle).to receive(:rules) { rules }
51
+ end
52
+
53
+ it "creates an AssertStyle object and calls has_correct_structure on it" do
54
+ expect(StyleCop::AssertStyle).to receive(:new).with(selector, rules, self) { assert_style_class }
55
+ expect(assert_style_class).to receive(:has_correct_structure)
56
+
57
+ assert_style_structure_for(selector)
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,16 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'pry'
5
+ require 'style_cop'
6
+ require 'rspec'
7
+
8
+ ENV['test_run'] = true.to_s
9
+
10
+ Dir[File.join(File.dirname(__FILE__), 'support', '**', '*.rb')].each do |file|
11
+ require file
12
+ end
13
+
14
+ RSpec.configure do |config|
15
+ config.mock_with :rspec
16
+ end
data/style_cop.gemspec ADDED
@@ -0,0 +1,16 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'style_cop'
3
+ s.version = '0.0.1'
4
+ s.date = '2014-03-03'
5
+ s.summary = "Gem for testing style"
6
+ s.description = "Gem for testing style"
7
+ s.authors = ["Ward Penney", "David Tengdin"]
8
+ s.email = 'style-cop@googlegroups.com'
9
+ s.files = `git ls-files`.split("\n")
10
+ s.homepage = 'http://rubygems.org/gems/style_cop'
11
+ s.license = 'MIT'
12
+
13
+ s.add_development_dependency "rspec", "~> 2.14.0"
14
+ s.add_development_dependency "xpath", "~> 2.0.0"
15
+ s.add_development_dependency "pry", "~> 0.9.12.6"
16
+ end
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: style_cop
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ward Penney
8
+ - David Tengdin
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-03-03 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ~>
19
+ - !ruby/object:Gem::Version
20
+ version: 2.14.0
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: 2.14.0
28
+ - !ruby/object:Gem::Dependency
29
+ name: xpath
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: 2.0.0
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ version: 2.0.0
42
+ - !ruby/object:Gem::Dependency
43
+ name: pry
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ~>
47
+ - !ruby/object:Gem::Version
48
+ version: 0.9.12.6
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 0.9.12.6
56
+ description: Gem for testing style
57
+ email: style-cop@googlegroups.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - Gemfile
63
+ - Gemfile.lock
64
+ - README.md
65
+ - lib/style_cop.rb
66
+ - lib/style_cop/assert_style.rb
67
+ - lib/style_cop/public_methods.rb
68
+ - lib/style_cop/register_style.rb
69
+ - spec/lib/style_cop/assert_style_spec.rb
70
+ - spec/lib/style_cop/public_methods_spec.rb
71
+ - spec/spec_helper.rb
72
+ - style_cop.gemspec
73
+ homepage: http://rubygems.org/gems/style_cop
74
+ licenses:
75
+ - MIT
76
+ metadata: {}
77
+ post_install_message:
78
+ rdoc_options: []
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ requirements: []
92
+ rubyforge_project:
93
+ rubygems_version: 2.1.10
94
+ signing_key:
95
+ specification_version: 4
96
+ summary: Gem for testing style
97
+ test_files: []