yard-rspec_examples 0.0.1 → 0.0.2

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: 601f363204ebbf3d59050eab358312982cefc6fa
4
- data.tar.gz: 68010e9a097bed8711e97f487654be151c63f515
3
+ metadata.gz: 622d647f404d59aeee33f91d2b98666bab13fb8e
4
+ data.tar.gz: bbfb8cdead28af1b2139fafa6d3b7608fc74e961
5
5
  SHA512:
6
- metadata.gz: 59af946589cc352e1e6c001b1fc7b579772682680cbedf281d5b5828573a52d510430ebe5a02c7ec8ee0b098a570fcb5f569d6e609cd7616b5369a36b56d8620
7
- data.tar.gz: 38d4807e9bf351ba80f957351883948345f439c62c167bcb4d1556eb738dd51c41a6b64cc5e11cda0d036b4b616e62d52816f1e9adefd8fee62d4cf75faf5fb6
6
+ metadata.gz: 11b660458e260e6f92a5a6f975f7bbb77b1da4e3e4e3c97e5d8dc7bb7fab4b9ac784a81c07a3f5a7139bcbc310b265679c57c241eac8ad23a24a6cd2a66a404d
7
+ data.tar.gz: 3877e218e518686565f7b0c405701b3aa21095b76eba397be8c262892e12c83ce8356e6d6d4ee2853c843cb0f5788eef93f318ff5e482a3f98e3439a42ace6b4
data/.gitignore CHANGED
@@ -1,4 +1,5 @@
1
1
  doc
2
2
  .yardoc
3
+ .ruby-version
3
4
  Gemfile.lock
4
- .ruby-version
5
+ coverage/.*
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.3
data/Gemfile CHANGED
@@ -1,8 +1,16 @@
1
- source "http://rubygems.org"
1
+ source "https://rubygems.org"
2
2
 
3
3
  gemspec
4
4
 
5
+ gem "rake"
6
+
5
7
  group :development do
8
+ gem 'coveralls', require: false
6
9
  gem "rspec"
7
10
  gem "yard"
11
+ gem 'byebug'
12
+ end
13
+
14
+ group :test do
15
+ gem 'nokogiri'
8
16
  end
data/README.md ADDED
@@ -0,0 +1,84 @@
1
+ [![Build Status](http://img.shields.io/travis/UP-nxt/yard-rspec_examples.svg)](https://travis-ci.org/UP-nxt/yard-rspec_examples)
2
+ [![Dependency Status](https://img.shields.io/gemnasium/UP-nxt/yard-rspec_examples.svg)](https://gemnasium.com/UP-nxt/yard-rspec_examples)
3
+ [![Code Climate](http://img.shields.io/codeclimate/github/UP-nxt/yard-rspec_examples.svg)](https://codeclimate.com/UP-nxt/yard-rspec_examples)
4
+ [![Coverage Status](https://coveralls.io/repos/UP-nxt/yard-rspec_examples/badge.svg?branch=master&service=github)](https://coveralls.io/github/UP-nxt/yard-rspec_examples?branch=master)
5
+
6
+
7
+ # yard-rspec_examples
8
+
9
+ Yard plugin to include examples in the generated doc through rspec
10
+
11
+ ## Installation
12
+
13
+ In order to install it you just have to install it gem from gemcutter
14
+
15
+ gem install yard-rspec_examples
16
+
17
+ ## Description
18
+
19
+ This plugin simply includes an example tag and recreates it with the source code that corresponds
20
+ to the first example included in the describe blocks below.
21
+ This have to be defined inside a describe block called "#method_name" that, in turn,
22
+ has to be defined in a describe block with the class name, i.e. the regular way people use rspec when testing objects.
23
+
24
+ So, for example,
25
+
26
+ Given this source code:
27
+
28
+ class Foo
29
+ ##
30
+ # This is a foo method with an example
31
+ # @rspec_example
32
+ def foo_method
33
+ end
34
+ end
35
+
36
+ And this spec:
37
+
38
+ describe Foo do
39
+ describe "#foo_method" do
40
+ it "works this way" do
41
+ this = "is"
42
+ # The code that will be included in the example
43
+ end
44
+ end
45
+ end
46
+
47
+ A result like this is to be expected
48
+
49
+ class Foo
50
+ ##
51
+ # This is a foo method with an example
52
+ # @example
53
+ # this = "is"
54
+ # # The code that will be included in the example
55
+ def foo_method
56
+ end
57
+ end
58
+
59
+ Another usage is to pass the example's name to the tag, using the regular conventions for rspec descriptions as they
60
+ are used with the ```--example``` option of the rspec executable.
61
+
62
+ @rspec_example #foo_method works this way
63
+ class Foo
64
+ ##
65
+ # This is a foo method with an example
66
+ # @rspec_example works this way
67
+ def foo_method
68
+ end
69
+ end
70
+
71
+ @rspec_example Foo#foo_method works this way
72
+ class AnotherClass
73
+ end
74
+
75
+ ## Using it
76
+
77
+ In order to use it, you just have to add the --plugin param plus yours
78
+
79
+ yardoc --plugin yar-rspec_examples [OPTS]
80
+
81
+
82
+ ## Copyright
83
+ Copyright partly(c) 2011 Jose Fernandez (magec).
84
+ See LICENSE.txt for further details.
data/Rakefile CHANGED
@@ -1,18 +1,7 @@
1
- #!/usr/bin/env rake
2
- begin
3
- require 'bundler/setup'
4
- rescue LoadError
5
- puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
- end
7
-
8
- Bundler::GemHelper.install_tasks
9
-
10
1
  require 'rspec/core/rake_task'
11
2
 
12
- RSpec::Core::RakeTask.new(:spec) do |t|
13
- t.rspec_opts = "--color"
3
+ RSpec::Core::RakeTask.new(:spec) do |spec|
4
+ spec.rspec_opts = ['--options', 'spec/rspec.opts']
14
5
  end
15
6
 
16
- require 'rubygems'
17
-
18
- require 'rake'
7
+ task default: [:spec]
@@ -4,6 +4,7 @@ require 'yard/rspec_examples/it_handler'
4
4
  require 'yard/rspec_examples/module_handler'
5
5
  require 'yard/rspec_examples/describe_handler'
6
6
  require 'yard/rspec_examples/parser_trace'
7
+ require 'yard/tags/rspec_example_tag'
7
8
 
8
9
  ##
9
10
  # This class will hold a map that associates the method descriptions with its source code
@@ -15,36 +16,8 @@ end
15
16
 
16
17
  module YARD
17
18
  module Tags
18
- ##
19
- # A new type of tags has to be used cause we need to intercept the
20
- # text call and generate its contents (in generation time, after everything was parsed)
21
- class RSpecExampleTag < Tag
22
- def text
23
- # for now, we just handle case where describes are derived from the context
24
- example_description = rspec_description(object).gsub(/^::/,'').gsub(/ ::/, ' ')
25
- example_description += " #{name}" unless name.empty?
26
- key = RSpecExampleRegistry.example_map.keys.detect{|k| k.include?(example_description)}
27
- puts "[warn] Could not find example '#{example_description}'" unless key
28
- @text = RSpecExampleRegistry.example_map[key]
29
- end
30
-
31
- private
32
- def rspec_description(object)
33
- case object
34
- when CodeObjects::RootObject
35
- ""
36
- when CodeObjects::MethodObject
37
- "#{rspec_description(object.namespace)} ##{object.name}"
38
- when CodeObjects::ClassObject
39
- "#{rspec_description(object.namespace)}::#{object.name}"
40
- when CodeObjects::ModuleObject
41
- "#{rspec_description(object.namespace)}#{object.name} "
42
- end
43
- end
44
- end
45
-
46
19
  class DefaultFactory
47
- def parse_tag_with_rspec_example_tag(tagname, text)
20
+ def parse_tag_with_rspec_example_tag(_, text)
48
21
  RSpecExampleTag.new(:example, "", [], text)
49
22
  end
50
23
  end
@@ -5,30 +5,13 @@ module YARD
5
5
  class RSpecDescribeHandler < YARD::Handlers::Ruby::Base
6
6
 
7
7
  handles method_call(:describe)
8
+ handles method_call(:context)
8
9
 
9
10
  def process
10
11
  param = statement.parameters.first
11
-
12
- subject = nil
13
-
14
- # A class is being declared
15
- if param.type == :var_ref && param.children.first.type == :const
16
- subject = param.children.first.source
17
- end
18
-
19
- # A class is being declared (with a nested name)
20
- if param.type == :const_path_ref
21
- subject = param.children.map { |i| i.source }.join("::")
22
- end
23
-
24
- # A method is being declared
25
- if param.type == :string_literal && param.source =~ /^"#/
26
- subject = param.source.delete('"|\ ')
27
- end
28
-
29
- ParserTrace.path.push(subject.dup) if subject
12
+ ParserTrace.stack.push(param)
30
13
  parse_block(statement.last.last)
31
- ParserTrace.path.pop if subject
14
+ ParserTrace.stack.pop
32
15
  end
33
16
  end
34
17
  end
@@ -6,10 +6,15 @@ module YARD
6
6
  handles method_call(:it)
7
7
 
8
8
  def process
9
- it_description = statement.parameters.source[1...-1]
10
- rspec_path_string = ParserTrace.path.dup.push(it_description).join(' ')
11
- #TODO: indentation depends on level of test indents.
12
- RSpecExampleRegistry.example_map[rspec_path_string] = statement.block.last.source.gsub("\n ", "\n")
9
+ it_description = statement.parameters.empty? ? '' : statement.parameters.source[1...-1]
10
+ rspec_path_string = full_example_description(it_description)
11
+ RSpecExampleRegistry.example_map[rspec_path_string] = statement.block.source.gsub(/\A\s*do\s*^(.*)end\s*\z/m, '\\1')
12
+ .gsub(/\Ado;\s*(.*)\s*end\z/m, '\\1')
13
+ .gsub(/\A{\s*(.*)\s*}/m, '\\1').rstrip
14
+ end
15
+
16
+ def full_example_description(it_description)
17
+ "#{ParserTrace.full_description} #{it_description}"
13
18
  end
14
19
  end
15
20
  end
@@ -4,29 +4,9 @@ module YARD
4
4
  handles :module
5
5
 
6
6
  def process
7
- # param = statement.parameters.first
8
- #
9
- # subject = nil
10
- #
11
- # # A class is being declared
12
- # if param.type == :var_ref && param.children.first.type == :const
13
- # subject = param.children.first.source
14
- # end
15
- #
16
- # # A class is being declared (with a nested name)
17
- # if param.type == :const_path_ref
18
- # subject = param.children.map { |i| i.source }.join("::")
19
- # end
20
- #
21
- # # A method is being declared
22
- # if param.type == :string_literal && param.source =~ /^"#/
23
- # subject = param.source.delete('"|\ ')
24
- # end
25
- #
26
- #TODO: probably thave to strip namespace from the module
27
- ParserTrace.path.push(statement.module_name.path)
7
+ ParserTrace.stack.push(statement.first)
28
8
  parse_block(statement.last.last)
29
- ParserTrace.path.pop
9
+ ParserTrace.stack.pop
30
10
  end
31
11
 
32
12
  end
@@ -1,8 +1,25 @@
1
1
  module YARD
2
2
  module RSpecExamples
3
3
  class ParserTrace
4
- def self.path
5
- @path ||= []
4
+ def self.stack
5
+ @stack ||= []
6
+ end
7
+
8
+ def self.full_description
9
+ @stack.reverse.reduce("") do |result, o|
10
+ case o.type
11
+ when :string_literal
12
+ description = o.source[1..-2]
13
+ prefix = description =~ /^(#|\.|::)/ ? '' : ' '
14
+ prefix + description + result
15
+ when :var_ref
16
+ "::#{o.path.first}#{result}"
17
+ when :const_ref
18
+ "::#{o.path.first}#{result}"
19
+ else
20
+ o.source + result
21
+ end
22
+ end.gsub(/^::/, '')
6
23
  end
7
24
  end
8
25
  end
@@ -1,5 +1,5 @@
1
1
  module YARD
2
2
  module RSpecExamples
3
- VERSION = '0.0.1'
3
+ VERSION = '0.0.2'
4
4
  end
5
5
  end
@@ -0,0 +1,51 @@
1
+ module YARD
2
+ module Tags
3
+ ##
4
+ # A new type of tags has to be used cause we need to intercept the
5
+ # text call and generate its contents (in generation time, after everything was parsed)
6
+ class RSpecExampleTag < Tag
7
+ def text
8
+ # for now, we just handle case where describes are derived from the context
9
+ example_description = full_rspec_description
10
+ key = find_key(example_description, @name)
11
+ puts "[warn] Could not find example '#{example_description}'" unless key
12
+ @text = RSpecExampleRegistry.example_map[key]
13
+ end
14
+
15
+ def name
16
+ find_key(full_rspec_description, @name) || ''
17
+ end
18
+
19
+ private
20
+
21
+ def find_key(example_description, name)
22
+ key = RSpecExampleRegistry.example_map.keys.detect { |k| k.include?(example_description) }
23
+ key || RSpecExampleRegistry.example_map.keys.detect { |k| k.include?(name) }
24
+ end
25
+
26
+ def full_rspec_description
27
+ example_description = rspec_description(object).gsub(/^::/, '')
28
+ example_description + (@name.empty? ? '' : (@name.to_s =~ /^(#|\.)/ ? @name.to_s : " #{@name}"))
29
+ end
30
+
31
+ def rspec_description(object)
32
+ case object
33
+ when CodeObjects::RootObject
34
+ ""
35
+ when CodeObjects::MethodObject
36
+ if object.scope == :instance
37
+ "#{rspec_description(object.namespace)}##{object.name}"
38
+ else
39
+ "#{rspec_description(object.namespace)}.#{object.name}"
40
+ end
41
+ when CodeObjects::ClassObject
42
+ "::#{object.name}"
43
+ when CodeObjects::ModuleObject
44
+ "#{rspec_description(object.namespace)}::#{object.name}"
45
+ else
46
+ ""
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -1,19 +1,28 @@
1
+ # @rspec_example #foo_method
2
+ # @rspec_example #foo_method also supports this
1
3
  class Foo
2
4
  ##
3
5
  # This is a foo method with an example
4
6
  # @rspec_example
5
7
  # @rspec_example also supports this
8
+ # @rspec_example supports single line do begin
9
+ # @rspec_example supports curly braces syntax
6
10
  def foo_method
7
11
  end
8
12
  end
9
13
 
10
14
  class Foo
15
+ # @rspec_example Bar#bar_method
11
16
  class Bar
12
17
  ##
13
18
  # This is a class nested example
14
19
  # @rspec_example
15
20
  def bar_method
16
21
  end
22
+
23
+ # @rspec_example
24
+ def self.class_method
25
+ end
17
26
  end
18
27
  end
19
28
 
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ class Eggplant
4
+ # @rspec_example
5
+ def instance_method
6
+ end
7
+ end
8
+
9
+ describe Eggplant do
10
+ subject { -> { Eggplant.new.instance_method } }
11
+ it { is_expected.not_to raise_error }
12
+ end
13
+
14
+ describe 'rspec_examples' do
15
+ context 'with inline examples' do
16
+ before { YARD.parse(__FILE__) }
17
+ subject do
18
+ output = YARD::Registry.all(:class).find { |i| i.to_s == "Eggplant" }
19
+ output = YARD::Templates::Engine.render(OPTIONS.merge(:object => output))
20
+ Nokogiri.HTML(output).css('.examples .example').map(&:text)
21
+ end
22
+ it { is_expected.to include 'is_expected.not_to raise_error' }
23
+ end
24
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ class NamedExample
4
+ # @rspec_example can be executed
5
+ def a_method
6
+ end
7
+ end
8
+
9
+ describe NamedExample do
10
+ describe '#a_method' do
11
+ it 'can be executed' do
12
+ NamedExample.new.a_method
13
+ end
14
+ end
15
+ end
16
+
17
+ describe NamedExample do
18
+ subject do
19
+ -> {
20
+ YARD.parse(__FILE__)
21
+ output = YARD::Registry.all(:class).find { |i| i.to_s == 'NamedExample' }
22
+ YARD::Templates::Engine.render(OPTIONS.merge(:object => output))
23
+ }
24
+ end
25
+
26
+ it { is_expected.not_to output.to_stdout }
27
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ # @rspec_example Beetroot#instance_method
4
+ # @rspec_example Beetroot.class_method
5
+ class Asparagus
6
+ # @rspec_example #instance_method
7
+ # @rspec_example .class_method
8
+ class Beetroot
9
+ # @rspec_example
10
+ def instance_method
11
+ end
12
+
13
+ # @rspec_example
14
+ def self.class_method
15
+ end
16
+ end
17
+ end
18
+
19
+ # @rspec_example Asparagus::Beetroot#instance_method
20
+ # @rspec_example Asparagus::Beetroot.class_method
21
+ class Zucchini
22
+ end
23
+
24
+ describe Asparagus::Beetroot do
25
+ describe '#instance_method' do
26
+ it 'can be called' do
27
+ Asparagus::Beetroot.new.instance_method
28
+ end
29
+ end
30
+ describe '.class_method' do
31
+ it 'can be called' do
32
+ Asparagus::Beetroot.class_method
33
+ end
34
+ end
35
+ end
36
+
37
+ describe 'rspec_examples' do
38
+ context 'with nested classes' do
39
+ it "renders without warning" do
40
+ expect do
41
+ YARD.parse(__FILE__)
42
+ YARD::Registry.all.each do |o|
43
+ YARD::Templates::Engine.render(OPTIONS.merge(:object => o))
44
+ end
45
+ end.not_to output.to_stdout
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ # @rspec_example NestedModule::EmbeddedClass#instance_method
4
+ # @rspec_example NestedModule::EmbeddedClass.class_method
5
+ module TopModule
6
+ # @rspec_example EmbeddedClass#instance_method
7
+ # @rspec_example EmbeddedClass.class_method
8
+ module NestedModule
9
+ # @rspec_example #instance_method
10
+ # @rspec_example .class_method
11
+ class EmbeddedClass
12
+ # @rspec_example
13
+ def instance_method
14
+ end
15
+
16
+ # @rspec_example
17
+ def self.class_method
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ # @rspec_example TopModule::NestedModule::EmbeddedClass#instance_method
24
+ # @rspec_example TopModule::NestedModule::EmbeddedClass.class_method
25
+ class AnotherClass
26
+ end
27
+
28
+ module TopModule
29
+ module NestedModule
30
+ describe EmbeddedClass do
31
+ describe '#instance_method' do
32
+ it 'can be called' do
33
+ EmbeddedClass.new.instance_method
34
+ end
35
+ end
36
+ describe '.class_method' do
37
+ it 'can be called' do
38
+ EmbeddedClass.class_method
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+
45
+ module TopModule
46
+ module NestedModule
47
+ describe EmbeddedClass do
48
+ it "renders without warning" do
49
+ expect do
50
+ YARD.parse(__FILE__)
51
+ YARD::Registry.all.each do |o|
52
+ YARD::Templates::Engine.render(OPTIONS.merge(:object => o))
53
+ end
54
+ end.not_to output.to_stdout
55
+ #end.to raise_error
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ # @rspec_example simple context can be instantiated
4
+ class SimpleClass
5
+ end
6
+
7
+ describe SimpleClass do
8
+ context 'with simple context' do
9
+ it 'can be instantiated' do
10
+ SimpleClass.new
11
+ end
12
+ end
13
+ end
14
+
15
+ describe SimpleClass do
16
+ subject {
17
+ YARD.parse(__FILE__)
18
+ output = YARD::Registry.all(:class).find { |i| i.to_s == 'SimpleClass' }
19
+ output = YARD::Templates::Engine.render(OPTIONS.merge(:object => output))
20
+ Nokogiri.HTML(output).css('.examples .inline').map(&:text)
21
+ }
22
+
23
+ it 'has the right example title' do
24
+ expect(subject).to include "\nSimpleClass with simple context can be instantiated\n"
25
+ end
26
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,24 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
4
+ require 'yard'
5
+ require 'nokogiri'
6
+ require 'byebug'
1
7
  require 'yard-rspec_examples'
8
+
2
9
  require 'fixtures/example_file'
3
10
 
11
+ OPTIONS = {
12
+ :format => :html,
13
+ :template => :default,
14
+ :markup => :rdoc,
15
+ :serializer => YARD::Serializers::FileSystemSerializer.new,
16
+ :default_return => "Object",
17
+ :hide_void_return => false,
18
+ :no_highlight => false,
19
+ :files => []
20
+ }
21
+
4
22
  RSpec.configure do |config|
5
23
 
6
24
  end
@@ -1,17 +1,6 @@
1
1
  require 'spec_helper'
2
- require 'yard'
3
- EXAMPLE_DOC_DIR=[File.expand_path(File.dirname(__FILE__) + "/fixtures/*.rb"), File.expand_path(File.dirname(__FILE__) + "/*.rb")]
4
2
 
5
- OPTIONS = {
6
- :format => :html,
7
- :template => :default,
8
- :markup => :rdoc,
9
- :serializer => YARD::Serializers::FileSystemSerializer.new,
10
- :default_return => "Object",
11
- :hide_void_return => false,
12
- :no_highlight => false,
13
- :files => []
14
- }
3
+ EXAMPLE_DOC_DIR=[File.expand_path(File.dirname(__FILE__) + "/fixtures/*.rb"), File.expand_path(File.dirname(__FILE__) + "/*.rb")]
15
4
 
16
5
  describe "Using the rspec_example tag in the method comment" do
17
6
  before(:each) do
@@ -24,11 +13,23 @@ describe "Using the rspec_example tag in the method comment" do
24
13
  @nested_class_output = YARD::Templates::Engine.render(OPTIONS.merge(:object => nested_class))
25
14
  end
26
15
 
16
+ it "spawns no warnings on the fixtures" do
17
+ expect do
18
+ YARD.parse(EXAMPLE_DOC_DIR)
19
+ foo = YARD::Registry.all(:class).find { |i| i.to_s == "Foo" }
20
+ @class_foo_output = YARD::Templates::Engine.render(OPTIONS.merge(:object => foo))
21
+ bar = YARD::Registry.all(:class).find { |i| i.to_s == "Foo::Bar" }
22
+ @class_bar_output = YARD::Templates::Engine.render(OPTIONS.merge(:object => bar))
23
+ nested_class = YARD::Registry.all(:module).find { |i| i.to_s == "My" }
24
+ @nested_class_output = YARD::Templates::Engine.render(OPTIONS.merge(:object => nested_class))
25
+ end.not_to output.to_stdout
26
+ end
27
+
27
28
  it "displays warning on unfound example" do
28
29
  expect do
29
30
  invalid_class = YARD::Registry.all(:class).find { |i| i.to_s == "InvalidClass" }
30
31
  @invalid_class_output = YARD::Templates::Engine.render(OPTIONS.merge(:object => invalid_class))
31
- end.to output("[warn] Could not find example 'InvalidClass #some_method invalid'\n").to_stdout
32
+ end.to output("[warn] Could not find example 'InvalidClass#some_method invalid'\n").to_stdout
32
33
  end
33
34
 
34
35
  it "creates an example tag in the registry" do
@@ -40,15 +41,22 @@ describe "Using the rspec_example tag in the method comment" do
40
41
  end
41
42
 
42
43
  it "includes the comments in the example as well" do
43
- # TODO: comments as first line get stripped away right now.
44
44
  expect(@class_foo_output).to match /With some comments/
45
45
  end
46
46
 
47
+ it "supports single line do begin" do
48
+ expect(Nokogiri.HTML(@class_foo_output).css('.examples .example').map(&:text)).to include('"abracadabra"')
49
+ end
50
+
51
+ it "supports curly braces syntax" do
52
+ expect(Nokogiri.HTML(@class_foo_output).css('.examples .example').map(&:text)).to include('"curly braces"')
53
+ end
54
+
47
55
  it "works with nested classes" do
48
56
  expect(@class_bar_output).to match /nested_class/
49
57
  end
50
58
 
51
- it "works with module/class/classs nestes classes" do
59
+ it "works with module/class/class nestes classes" do
52
60
  expect(@nested_class_output).to match /super_nested_class/
53
61
  end
54
62
 
@@ -59,23 +67,18 @@ end
59
67
 
60
68
  # A bit of a hack, this is the spec that is going to be used as fixture for the plugin
61
69
  describe Foo do
62
- describe "#foo_method" do
70
+ context "#foo_method" do
63
71
  it "works this way" do
64
- this = "is"
65
- just = "example code"
66
72
  # With some comments
67
- [1, 2, 3].each do |i|
68
- i
69
- end
70
73
  end
71
74
 
72
75
  it "also supports this" do
73
- 0 + 0
74
76
  # comment for 'also support this' it
75
- 1 + 2
76
- # kilo
77
- 4 + 3
78
77
  end
78
+
79
+ it "supports single line do begin" do; "abracadabra" end
80
+
81
+ it("supports curly braces syntax"){"curly braces"}
79
82
  end
80
83
  end
81
84
 
@@ -86,6 +89,12 @@ describe Foo::Bar do
86
89
  nested_class = nil
87
90
  end
88
91
  end
92
+
93
+ describe ".class_method" do
94
+ it 'is defined' do
95
+ Foo::Bar.class_method
96
+ end
97
+ end
89
98
  end
90
99
 
91
100
  module My
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yard-rspec_examples
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bert Bruynooghe
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-01-12 00:00:00.000000000 Z
12
+ date: 2016-03-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: yard
@@ -35,11 +35,11 @@ files:
35
35
  - ".document"
36
36
  - ".gitignore"
37
37
  - ".rspec"
38
+ - ".travis.yml"
38
39
  - ".yardopts"
39
40
  - Gemfile
40
- - Gemfile.lock
41
41
  - LICENSE.txt
42
- - README.rdoc
42
+ - README.md
43
43
  - Rakefile
44
44
  - lib/yard-rspec_examples.rb
45
45
  - lib/yard/rspec_examples/describe_handler.rb
@@ -47,7 +47,13 @@ files:
47
47
  - lib/yard/rspec_examples/module_handler.rb
48
48
  - lib/yard/rspec_examples/parser_trace.rb
49
49
  - lib/yard/rspec_examples/version.rb
50
+ - lib/yard/tags/rspec_example_tag.rb
50
51
  - spec/fixtures/example_file.rb
52
+ - spec/inline_examples_spec.rb
53
+ - spec/named_examples_spec.rb
54
+ - spec/nested_class_spec.rb
55
+ - spec/nested_modules_spec.rb
56
+ - spec/simple_context_spec.rb
51
57
  - spec/spec_helper.rb
52
58
  - spec/yard-rspec_examples_spec.rb
53
59
  - yard-rspec_examples.gemspec
@@ -76,6 +82,11 @@ specification_version: 4
76
82
  summary: Yard plugin to include RSpec examples in documentation
77
83
  test_files:
78
84
  - spec/fixtures/example_file.rb
85
+ - spec/inline_examples_spec.rb
86
+ - spec/named_examples_spec.rb
87
+ - spec/nested_class_spec.rb
88
+ - spec/nested_modules_spec.rb
89
+ - spec/simple_context_spec.rb
79
90
  - spec/spec_helper.rb
80
91
  - spec/yard-rspec_examples_spec.rb
81
92
  has_rdoc:
data/README.rdoc DELETED
@@ -1,75 +0,0 @@
1
- = yard-rspec_examples
2
-
3
- Yard plugin to include examples in the generated doc through rspec
4
-
5
- == Installation
6
-
7
- In order to install it you just have to install it gem from gemcutter
8
-
9
- gem install yard-rspec_examples
10
-
11
- == Description
12
-
13
- This plugin simply includes an example tag and recreates it with the source code that corresponds
14
- to the first example included in the describe blocks below.
15
- This have to be defined inside a describe block called "#method_name" that, in turn,
16
- has to be defined in a describe block with the class name, i.e. the regular way people use rspec when testing objects.
17
-
18
- So, for example,
19
-
20
- Given this source code:
21
-
22
- class Foo
23
- ##
24
- # This is a foo method with an example
25
- # @rspec_example
26
- def foo_method
27
- end
28
- end
29
-
30
- And this spec:
31
-
32
- describe Foo do
33
- describe "#foo_method" do
34
- it "works this way" do
35
- this = "is"
36
- # The code that will be included in the example
37
- end
38
- end
39
- end
40
-
41
- A result like this is to be expected
42
- class Foo
43
- ##
44
- # This is a foo method with an example
45
- # @example
46
- # this = "is"
47
- # # The code that will be included in the example
48
- def foo_method
49
- end
50
- end
51
-
52
- Another usage is to pass the example's name to the tag:
53
-
54
- class Foo
55
- ##
56
- # This is a foo method with an example
57
- # @rspec_example works this way
58
- def foo_method
59
- end
60
- end
61
-
62
-
63
-
64
-
65
- == Using it
66
-
67
- In order to use it, you just have to add the --plugin param plus yours
68
-
69
- yardoc --plugin yar-rspec_examples [OPTS]
70
-
71
-
72
- == Copyright
73
- Copyright (c) 2011 Jose Fernandez (magec). See LICENSE.txt for
74
- further details.
75
-