style_cop 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml 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: []