Class: Xing::SpecDoc::ApiDoccer

Inherits:
Object
  • Object
show all
Defined in:
lib/xing/specdoc/api-doccer.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(example, request, response, patterner = nil) ⇒ ApiDoccer

Returns a new instance of ApiDoccer.



11
12
13
14
15
16
# File 'lib/xing/specdoc/api-doccer.rb', line 11

def initialize(example, request, response, patterner=nil)
  @example = example
  @request = request
  @response = response
  @patterner = patterner || ApiDoccer.patterner
end

Instance Attribute Details

#exampleObject (readonly)

Returns the value of attribute example.



18
19
20
# File 'lib/xing/specdoc/api-doccer.rb', line 18

def example
  @example
end

#patternerObject (readonly)

Returns the value of attribute patterner.



18
19
20
# File 'lib/xing/specdoc/api-doccer.rb', line 18

def patterner
  @patterner
end

#requestObject (readonly)

Returns the value of attribute request.



18
19
20
# File 'lib/xing/specdoc/api-doccer.rb', line 18

def request
  @request
end

#responseObject (readonly)

Returns the value of attribute response.



18
19
20
# File 'lib/xing/specdoc/api-doccer.rb', line 18

def response
  @response
end

Class Method Details

.patternerObject



7
8
9
# File 'lib/xing/specdoc/api-doccer.rb', line 7

def self.patterner
  @patterner ||= Patterner.new(Rails.application.routes)
end

Instance Method Details

#base_filenameObject



24
25
26
27
28
29
30
31
# File 'lib/xing/specdoc/api-doccer.rb', line 24

def base_filename
  @base_filename ||=
    begin
      pattern = patterner.build(request).sub(%r{^/},"").gsub(%{/:},":").gsub(%r{/},"-")
      File::join(example.[:doc_path],
                 "#{request.method}+#{response.status}@#{pattern}")
    end
end

#documentObject



45
46
47
# File 'lib/xing/specdoc/api-doccer.rb', line 45

def document
  @document ||= Document.new(output_path, response.body)
end

#example_passed?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/xing/specdoc/api-doccer.rb', line 41

def example_passed?
  example.exception.nil?
end

#existing_bodyObject



37
38
39
# File 'lib/xing/specdoc/api-doccer.rb', line 37

def existing_body
  JSON.parse(File.read(output_path))
end

#filenameObject



33
34
35
# File 'lib/xing/specdoc/api-doccer.rb', line 33

def filename
  base_filename + ".json"
end

#output_pathObject



20
21
22
# File 'lib/xing/specdoc/api-doccer.rb', line 20

def output_path
  @output_path ||= File::join( SpecDoc.response_target_dir, filename )
end

#significant_change?Boolean

Returns:

  • (Boolean)


49
50
51
52
53
# File 'lib/xing/specdoc/api-doccer.rb', line 49

def significant_change?
  document.different_from?(existing_body)
rescue Errno::ENOENT
  true
end

#storeObject



55
56
57
58
59
# File 'lib/xing/specdoc/api-doccer.rb', line 55

def store
  if example_passed?
    Xing::SpecDoc.store(self)
  end
end