gherkin_language 0.0.9 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1f52b34c694e27a08860df95867077c5e3d7e0d0
4
- data.tar.gz: 4136e08b3ffb5bfa69cc5aaf957440c52071d44f
3
+ metadata.gz: d845d6ef0a078c47dca82dbf52e8f3c2ec582315
4
+ data.tar.gz: 58d2b113ee3fc79522e71923e8b05dac5b861878
5
5
  SHA512:
6
- metadata.gz: baaf62978c29a36a3ab016e656901d6420171df554507dcb033bf43f7635a4f2389a27ee725d9f618c8a2dda26f9507193ae1c57c94b92e558488320ca26352b
7
- data.tar.gz: 40c3fd852df0d975262e06914a9acb7d86b7506dc071ba29ce966d8c89c97fc3ac409886395030d10c01d06d84c3e5e987b718b14819d4e06e1547d061204aa8
6
+ metadata.gz: 0672226fa52098d827610ad1fec13b641e58fbf2aa08c87369c794f26393e75d11c80aa6f58653e066860e0e41207dac7ece6fb34aba0012deca52574eff21a9
7
+ data.tar.gz: 6f4949dd6382fe18c24f582d9e1f0ab0d79f9375ff1d31b973ec53ef0db8c900b8e1cc2c55cc91b8a295099c52df37a1269c770d2df1fe43f6ec12b4132aa2db
data/.rubocop.yml CHANGED
@@ -12,7 +12,7 @@ Metrics/AbcSize:
12
12
  # Offense count: 2
13
13
  # Configuration parameters: CountComments.
14
14
  Metrics/ClassLength:
15
- Max: 172
15
+ Max: 198
16
16
 
17
17
  # Offense count: 2
18
18
  Metrics/CyclomaticComplexity:
data/Gemfile CHANGED
@@ -1,8 +1,9 @@
1
1
  source 'https://rubygems.org'
2
- gem 'rubocop'
2
+ gem 'aruba'
3
3
  gem 'gherkin'
4
4
  gem 'gherkin_lint'
5
5
  gem 'gherkin_format'
6
6
  gem 'rake'
7
- gem 'aruba'
7
+ gem 'rubocop'
8
+ gem 'syllables'
8
9
  gem 'term-ansicolor'
data/bin/gherkin_language CHANGED
@@ -23,6 +23,9 @@ OptionParser.new do |opts|
23
23
  opts.on('--ignore [EXCEPTIONS]', 'ignore exceptions, Separated by ","') do |exceptions|
24
24
  options[:ignore] = exceptions.split ','
25
25
  end
26
+ opts.on('--readability', 'readbility by file') do |readability|
27
+ options[:readability] = readability
28
+ end
26
29
  end.parse!
27
30
 
28
31
  language = GherkinLanguage.new(options.key?(:no_cache), options.key?(:ngram))
@@ -36,6 +39,8 @@ if options.key? :tag
36
39
  exit
37
40
  end
38
41
 
42
+ language.determine_readability_by_file(ARGV) if options.key? :readability
43
+
39
44
  ARGV.each { |file| language.analyze file }
40
45
 
41
46
  if options.key? :ignore
@@ -0,0 +1,47 @@
1
+ Feature: Readability
2
+ As a Business Analyst
3
+ I want to be informed about non readable features
4
+ so that I know when I need to restructure
5
+
6
+ Background:
7
+ Given a file named "readability.rb" with:
8
+ """
9
+ $LOAD_PATH << '../../lib'
10
+ require 'gherkin_language'
11
+
12
+ no_cache = true
13
+ ngrams = false
14
+ language = GherkinLanguage.new(no_cache, ngrams)
15
+ language.determine_readability_by_file %w(default.feature unreadable.feature)
16
+ exit language.report
17
+
18
+ """
19
+ And a file named "default.feature" with:
20
+ """
21
+ Feature: Default
22
+ Scenario: Tag
23
+ Given a test
24
+ When execute
25
+ Then pass
26
+ """
27
+
28
+ Scenario: Sort by readability
29
+ Given a file named "unreadable.feature" with:
30
+ """
31
+ Feature: Unreadable busting complexity check
32
+ Scenario: nonsense and unreadable
33
+ Given a fancy-hyper non-readable and quite complex test specification
34
+ When consider to execute that
35
+ Then verification is successful
36
+ """
37
+ When I run `ruby readability.rb`
38
+ Then it should pass with exactly:
39
+ """
40
+ Readability. Sorted from best to worst readable feature
41
+
42
+ 119: default.feature
43
+ 30: unreadable.feature
44
+
45
+ 2 files analyzed. Average readability is 74
46
+
47
+ """
@@ -1,14 +1,15 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'gherkin_language'
3
- s.version = '0.0.9'
4
- s.date = '2015-10-05'
3
+ s.version = '0.1.0'
4
+ s.date = '2015-10-11'
5
5
  s.summary = 'Gherkin Language'
6
- s.description = 'Check language of Gherkin Files'
6
+ s.description = 'Check language and readability of Gherkin Files'
7
7
  s.authors = ['Stefan Rohe']
8
8
  s.homepage = 'http://github.com/funkwerk/gherkin_language/'
9
9
  s.files = `git ls-files`.split("\n")
10
10
  s.executables = s.files.grep(%r{^bin/}) { |file| File.basename(file) }
11
11
  s.add_runtime_dependency 'gherkin', ['>= 2.12.2']
12
12
  s.add_runtime_dependency 'term-ansicolor', ['>= 1.3.2']
13
+ s.add_runtime_dependency 'syllables', ['>= 0.1.4']
13
14
  s.add_development_dependency 'aruba', ['>= 0.6.2']
14
15
  end
@@ -46,6 +46,33 @@ class GherkinLanguage
46
46
  end
47
47
  end
48
48
 
49
+ def determine_readability_by_file(files)
50
+ puts "Readability. Sorted from best to worst readable feature\n\n" if files.length > 1
51
+ readability_by_file = {}
52
+ files.each do |file|
53
+ sentences = extract_sentences parse(file)
54
+ readability_by_file[file] = readability sentences
55
+ end
56
+ average_readability = 0
57
+ readability_by_file.sort { |lhs, rhs| lhs[1] <=> rhs[1] }.reverse_each do |file, rating|
58
+ puts "#{rating.round}: #{file}"
59
+ average_readability += rating / files.length
60
+ end
61
+ puts "\n#{files.length} files analyzed. Average readability is #{average_readability.round}" if files.length > 1
62
+ end
63
+
64
+ def readability(sentences)
65
+ require 'syllables'
66
+
67
+ total_words = 0
68
+ total_syllabels = 0
69
+ Syllables.new(sentences.join '\n').to_h.each do |_word, syllabels|
70
+ total_words += 1
71
+ total_syllabels += syllabels
72
+ end
73
+ 206.835 - 1.015 * (total_words / sentences.length) - 84.6 * (total_syllabels / total_words)
74
+ end
75
+
49
76
  def accepted?(sentence)
50
77
  return false if @accepted_paragraphs.nil?
51
78
  key = :without_glossary
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gherkin_language
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Rohe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-05 00:00:00.000000000 Z
11
+ date: 2015-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gherkin
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.3.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: syllables
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.1.4
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 0.1.4
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: aruba
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -52,7 +66,7 @@ dependencies:
52
66
  - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: 0.6.2
55
- description: Check language of Gherkin Files
69
+ description: Check language and readability of Gherkin Files
56
70
  email:
57
71
  executables:
58
72
  - gherkin_language
@@ -71,6 +85,7 @@ files:
71
85
  - features/correct.feature
72
86
  - features/exception.feature
73
87
  - features/glossary.feature
88
+ - features/readability.feature
74
89
  - features/report.feature
75
90
  - features/sentences.feature
76
91
  - features/support/env.rb
@@ -100,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
115
  version: '0'
101
116
  requirements: []
102
117
  rubyforge_project:
103
- rubygems_version: 2.2.5
118
+ rubygems_version: 2.2.3
104
119
  signing_key:
105
120
  specification_version: 4
106
121
  summary: Gherkin Language