Skip to content

Commit

Permalink
Add configuration option: keep_source_order
Browse files Browse the repository at this point in the history
 * Sorts examples by :description if true
 * Sorts resources by :resource_name if true
  • Loading branch information
AncientLeGrey committed Apr 10, 2012
1 parent 382a9c5 commit 01dd285
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 10 deletions.
1 change: 1 addition & 0 deletions README.md
Expand Up @@ -30,6 +30,7 @@ See the `example` folder for a sample Rails app that has been documented.
- filter - Filter by example document type - filter - Filter by example document type
- exclusion_filter - Filter by example document type - exclusion_filter - Filter by example document type
- url_prefix - Add before all links on the index page, useful if docs are located in `public/docs` - url_prefix - Add before all links on the index page, useful if docs are located in `public/docs`
- keep_source_order - By default examples and resources are ordered by description. Set to true keep the source order.


### Example Configuration ### Example Configuration
`spec/spec_helper.rb` `spec/spec_helper.rb`
Expand Down
1 change: 1 addition & 0 deletions lib/rspec_api_documentation/configuration.rb
Expand Up @@ -56,6 +56,7 @@ def self.add_setting(name, opts = {})
} }


add_setting :curl_host, :default => nil add_setting :curl_host, :default => nil
add_setting :keep_source_order, :default => false


def settings def settings
@settings ||= {} @settings ||= {}
Expand Down
2 changes: 1 addition & 1 deletion lib/rspec_api_documentation/html_writer.rb
Expand Up @@ -36,7 +36,7 @@ def initialize(index, configuration)
end end


def sections def sections
IndexWriter.sections(examples) IndexWriter.sections(examples, @configuration)
end end


def examples def examples
Expand Down
7 changes: 4 additions & 3 deletions lib/rspec_api_documentation/index_writer.rb
@@ -1,10 +1,11 @@
module RspecApiDocumentation module RspecApiDocumentation
module IndexWriter module IndexWriter
def sections(examples) def sections(examples, configuration)
resources = examples.group_by(&:resource_name).inject([]) do |arr, (resource_name, examples)| resources = examples.group_by(&:resource_name).inject([]) do |arr, (resource_name, examples)|
arr << { :resource_name => resource_name, :examples => examples.sort_by(&:description) } ordered_examples = configuration.keep_source_order ? examples : examples.sort_by(&:description)
arr << { :resource_name => resource_name, :examples => ordered_examples }
end end
resources.sort_by { |resource| resource[:resource_name] } configuration.keep_source_order ? resources : resources.sort_by { |resource| resource[:resource_name] }
end end
module_function :sections module_function :sections
end end
Expand Down
2 changes: 1 addition & 1 deletion lib/rspec_api_documentation/json_writer.rb
Expand Up @@ -34,7 +34,7 @@ def initialize(index, configuration)
end end


def sections def sections
IndexWriter.sections(examples) IndexWriter.sections(examples, @configuration)
end end


def examples def examples
Expand Down
1 change: 1 addition & 0 deletions spec/configuration_spec.rb
Expand Up @@ -50,6 +50,7 @@
its(:app) { should be_nil } its(:app) { should be_nil }
its(:curl_host) { should be_nil } its(:curl_host) { should be_nil }
its(:url_prefix) { should be_blank } its(:url_prefix) { should be_blank }
its(:keep_source_order) { should be_false }
end end


describe "#define_groups" do describe "#define_groups" do
Expand Down
29 changes: 24 additions & 5 deletions spec/index_writer_spec.rb
Expand Up @@ -7,14 +7,33 @@
let(:example_3) { stub(:resource_name => "Cart", :description => "Creating an cart") } let(:example_3) { stub(:resource_name => "Cart", :description => "Creating an cart") }
let(:examples) { [example_1, example_2, example_3] } let(:examples) { [example_1, example_2, example_3] }


subject { RspecApiDocumentation::IndexWriter.sections(examples) } context "with default value for keep_source_order" do
let(:configuration) { RspecApiDocumentation::Configuration.new }
subject { RspecApiDocumentation::IndexWriter.sections(examples, configuration) }


it "should group examples by resource name" do it "should group examples by resource name" do
subject.map { |resource| resource[:resource_name] }.should == ["Cart", "Order"] subject.map { |resource| resource[:resource_name] }.should =~ ["Cart", "Order"]
end

it "should order resources by resource name" do
subject.map { |resource| resource[:resource_name] }.should == ["Cart", "Order"]
end

it "should order examples by description" do
subject.detect { |resource| resource[:resource_name] == "Order"}[:examples].should == [example_2, example_1]
end
end end


it "should order examples by description" do context "with keep_source_order set to true" do
subject.detect { |resource| resource[:resource_name] == "Order"}[:examples].should == [example_2, example_1] subject { RspecApiDocumentation::IndexWriter.sections(examples, stub(:keep_source_order => true)) }

it "should order resources by source code declaration" do
subject.map { |resource| resource[:resource_name] }.should == ["Order", "Cart"]
end

it "should order examples by source code declaration" do
subject.detect { |resource| resource[:resource_name] == "Order"}[:examples].should =~ [example_1, example_2]
end
end end
end end
end end

0 comments on commit 01dd285

Please sign in to comment.