liedetector 0.2.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 +7 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +43 -0
- data/Rakefile +1 -0
- data/bin/liedetector +7 -0
- data/lib/liedetector/markdown_runner.rb +63 -0
- data/lib/liedetector/request.rb +66 -0
- data/lib/liedetector/suite.rb +78 -0
- data/lib/liedetector/version.rb +3 -0
- data/lib/liedetector.rb +9 -0
- data/liedetector.gemspec +30 -0
- data/spec/liedetector_spec.rb +9 -0
- metadata +171 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d61795781cd370a2ac0d5aec455ce7ec975809bf
|
4
|
+
data.tar.gz: c2a9cfdc741c5f04a7976c144507d2a18a17aa14
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: dbb02fb245886090664c4b78ac42e8f0c73e59d2e750930189608517d3aff88f58aa78d5f636c658af654e949ecfce12ca39f9c56d2c5ad6c0848b56ce9b909e
|
7
|
+
data.tar.gz: d60f6ada6be527870ae719e953683e89bee2845316a3ce7a1e99497a7f30cd5bb4dbb4843b1ce31095fa7d9a489175f30754949aeffeeb5d7b0f0ccc789cdc81
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
GEM
|
2
|
+
remote: https://rubygems.org/
|
3
|
+
specs:
|
4
|
+
activesupport (4.1.4)
|
5
|
+
i18n (~> 0.6, >= 0.6.9)
|
6
|
+
json (~> 1.7, >= 1.7.7)
|
7
|
+
minitest (~> 5.1)
|
8
|
+
thread_safe (~> 0.1)
|
9
|
+
tzinfo (~> 1.1)
|
10
|
+
diff-lcs (1.2.5)
|
11
|
+
httpclient (2.4.0)
|
12
|
+
i18n (0.6.11)
|
13
|
+
json (1.8.1)
|
14
|
+
minitest (5.4.0)
|
15
|
+
oj (2.9.4)
|
16
|
+
redcarpet (3.1.2)
|
17
|
+
rspec (3.0.0)
|
18
|
+
rspec-core (~> 3.0.0)
|
19
|
+
rspec-expectations (~> 3.0.0)
|
20
|
+
rspec-mocks (~> 3.0.0)
|
21
|
+
rspec-core (3.0.3)
|
22
|
+
rspec-support (~> 3.0.0)
|
23
|
+
rspec-expectations (3.0.3)
|
24
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
25
|
+
rspec-support (~> 3.0.0)
|
26
|
+
rspec-mocks (3.0.3)
|
27
|
+
rspec-support (~> 3.0.0)
|
28
|
+
rspec-support (3.0.3)
|
29
|
+
thread_safe (0.3.4)
|
30
|
+
trafaret (1.5.7)
|
31
|
+
activesupport
|
32
|
+
tzinfo (1.2.1)
|
33
|
+
thread_safe (~> 0.1)
|
34
|
+
|
35
|
+
PLATFORMS
|
36
|
+
ruby
|
37
|
+
|
38
|
+
DEPENDENCIES
|
39
|
+
httpclient
|
40
|
+
oj
|
41
|
+
redcarpet
|
42
|
+
rspec
|
43
|
+
trafaret
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/liedetector
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
module LieDetector
|
2
|
+
class MarkdownRunner < Redcarpet::Render::Base
|
3
|
+
def initialize(suite)
|
4
|
+
@suite = suite
|
5
|
+
super()
|
6
|
+
end
|
7
|
+
|
8
|
+
def block_code(code, language)
|
9
|
+
@suite.code_block(code)
|
10
|
+
nil
|
11
|
+
end
|
12
|
+
|
13
|
+
[# block-level calls
|
14
|
+
:block_quote,
|
15
|
+
:block_html, :list, :list_item,
|
16
|
+
|
17
|
+
# span-level calls
|
18
|
+
:autolink, :codespan, :double_emphasis,
|
19
|
+
:emphasis, :underline, :raw_html,
|
20
|
+
:triple_emphasis, :strikethrough,
|
21
|
+
:superscript,
|
22
|
+
|
23
|
+
# footnotes
|
24
|
+
:footnotes, :footnote_def, :footnote_ref,
|
25
|
+
|
26
|
+
# low level rendering
|
27
|
+
# :entity, :normal_text
|
28
|
+
].each do |method|
|
29
|
+
define_method method do |*args|
|
30
|
+
@suite.push_descriptions args.first
|
31
|
+
nil
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def normal_text(text)
|
36
|
+
text
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
# Other methods where we don't return only a specific argument
|
41
|
+
def link(link, title, content)
|
42
|
+
@suite.push_descriptions "#{content} (#{link})"
|
43
|
+
nil
|
44
|
+
end
|
45
|
+
|
46
|
+
def image(link, title, content)
|
47
|
+
content &&= content + " "
|
48
|
+
@suite.push_descriptions "#{content}#{link}"
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
|
52
|
+
def paragraph(text)
|
53
|
+
@suite.push_descriptions("\n#{text}\n")
|
54
|
+
nil
|
55
|
+
end
|
56
|
+
|
57
|
+
LEVEL_DOTS = {1 => '=', 2 => '-', 3 => '.'}
|
58
|
+
def header(text, header_level)
|
59
|
+
@suite.push_descriptions("\n#{text}\n#{LEVEL_DOTS[header_level] * text.size}\n")
|
60
|
+
nil
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module LieDetector
|
2
|
+
class Request
|
3
|
+
def initialize(suite)
|
4
|
+
@suite = suite
|
5
|
+
end
|
6
|
+
|
7
|
+
def method(method)
|
8
|
+
@method = method
|
9
|
+
end
|
10
|
+
|
11
|
+
def path(path)
|
12
|
+
@path = path
|
13
|
+
end
|
14
|
+
|
15
|
+
def data(data)
|
16
|
+
@data = data
|
17
|
+
end
|
18
|
+
|
19
|
+
def query(query)
|
20
|
+
@query = query
|
21
|
+
end
|
22
|
+
|
23
|
+
def headers(headers)
|
24
|
+
@headers = headers
|
25
|
+
end
|
26
|
+
|
27
|
+
def await(trafaret)
|
28
|
+
@trafaret = T.construct(trafaret)
|
29
|
+
end
|
30
|
+
|
31
|
+
def description(description)
|
32
|
+
@description = description
|
33
|
+
end
|
34
|
+
|
35
|
+
def describe
|
36
|
+
"#{@description}\nExecute #{@method.to_s.upcase} #{@path}\n"
|
37
|
+
end
|
38
|
+
|
39
|
+
def status(status)
|
40
|
+
@status = status
|
41
|
+
end
|
42
|
+
|
43
|
+
def store(name)
|
44
|
+
@store_key = name
|
45
|
+
end
|
46
|
+
|
47
|
+
def call
|
48
|
+
res = @suite.session.send(
|
49
|
+
@method,
|
50
|
+
@suite.build_uri(@path, query: @query),
|
51
|
+
{
|
52
|
+
data: @data,
|
53
|
+
header: @suite.headers_defaults.merge(@headers || {})
|
54
|
+
}
|
55
|
+
)
|
56
|
+
unless res.status == @status
|
57
|
+
raise "Bad status(#{@status} != #{res.status}): #{res.inspect}"
|
58
|
+
end
|
59
|
+
res = @trafaret.call(Oj.load(res.content))
|
60
|
+
if res.is_a? Trafaret::Error
|
61
|
+
raise "Unmatched data #{res.dump}"
|
62
|
+
end
|
63
|
+
@suite.store_key(@store_key, res) if @store_key
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module LieDetector
|
2
|
+
class Suite
|
3
|
+
HEADERS_DEFAULTS = {'Accept' => 'application/json'}
|
4
|
+
HTTP_DEFAULTS = {host: '127.0.0.1', port: 3000}
|
5
|
+
|
6
|
+
def headers_defaults
|
7
|
+
HEADERS_DEFAULTS
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(filepath)
|
11
|
+
@filepath = filepath
|
12
|
+
end
|
13
|
+
|
14
|
+
def build_uri(path, query: nil, fragment: nil)
|
15
|
+
query = URI.encode_www_form(query) if query.is_a? Hash
|
16
|
+
URI::HTTP.build(HTTP_DEFAULTS.merge(path: path, query: query, fragment: fragment)).to_s
|
17
|
+
end
|
18
|
+
|
19
|
+
def session
|
20
|
+
@session ||= begin
|
21
|
+
session = HTTPClient.new
|
22
|
+
session.set_cookie_store("cookie.dat")
|
23
|
+
# session.debug_dev = STDOUT
|
24
|
+
session
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def push_descriptions(text)
|
29
|
+
@text ||= ''
|
30
|
+
@text += text
|
31
|
+
end
|
32
|
+
|
33
|
+
def register(cls, name)
|
34
|
+
@ordered ||= []
|
35
|
+
@registry ||= {}
|
36
|
+
@ordered << cls
|
37
|
+
@registry[name] = cls if name
|
38
|
+
cls.description(@text || '')
|
39
|
+
@text = ''
|
40
|
+
end
|
41
|
+
|
42
|
+
def store_key(key, data)
|
43
|
+
@store ||= {}
|
44
|
+
@store[key] = data
|
45
|
+
end
|
46
|
+
|
47
|
+
def store_data
|
48
|
+
@store
|
49
|
+
end
|
50
|
+
|
51
|
+
attr_reader :store
|
52
|
+
|
53
|
+
def run
|
54
|
+
markdown = Redcarpet::Markdown.new(LieDetector::MarkdownRunner.new(self), fenced_code_blocks: true)
|
55
|
+
markdown.render(File.new(@filepath).read)
|
56
|
+
|
57
|
+
@ordered.each do |test|
|
58
|
+
puts test.describe
|
59
|
+
test.call
|
60
|
+
puts 'passed'
|
61
|
+
puts
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def code_block(code)
|
66
|
+
self.instance_eval(code, @filepath)
|
67
|
+
end
|
68
|
+
|
69
|
+
# Sugar to not define classes in the doc
|
70
|
+
def request(name, method, path, &blk)
|
71
|
+
req = LieDetector::Request.new self
|
72
|
+
req.method method
|
73
|
+
req.path path
|
74
|
+
req.instance_exec &blk
|
75
|
+
register(req, name)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
data/lib/liedetector.rb
ADDED
data/liedetector.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'liedetector/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "liedetector"
|
8
|
+
spec.version = LieDetector::VERSION
|
9
|
+
spec.authors = ["Mikhail Krivushin"]
|
10
|
+
spec.email = ["krivushinme@gmail.com"]
|
11
|
+
spec.summary = %q{Markdown API description checker}
|
12
|
+
spec.description = %q{Small lib and script to check API description
|
13
|
+
in special format against test server}
|
14
|
+
spec.homepage = "https://github.com/Deepwalker/liedetector.rb"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0")
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_dependency "activesupport"
|
23
|
+
spec.add_dependency "trafaret"
|
24
|
+
spec.add_dependency "httpclient"
|
25
|
+
spec.add_dependency "oj"
|
26
|
+
spec.add_dependency "redcarpet"
|
27
|
+
spec.add_development_dependency "bundler", "~> 1.5"
|
28
|
+
spec.add_development_dependency "rake"
|
29
|
+
spec.add_development_dependency "rspec"
|
30
|
+
end
|
metadata
ADDED
@@ -0,0 +1,171 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: liedetector
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mikhail Krivushin
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-08-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: trafaret
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: httpclient
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: oj
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: redcarpet
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: bundler
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.5'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.5'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rake
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: |-
|
126
|
+
Small lib and script to check API description
|
127
|
+
in special format against test server
|
128
|
+
email:
|
129
|
+
- krivushinme@gmail.com
|
130
|
+
executables:
|
131
|
+
- liedetector
|
132
|
+
extensions: []
|
133
|
+
extra_rdoc_files: []
|
134
|
+
files:
|
135
|
+
- Gemfile
|
136
|
+
- Gemfile.lock
|
137
|
+
- Rakefile
|
138
|
+
- bin/liedetector
|
139
|
+
- lib/liedetector.rb
|
140
|
+
- lib/liedetector/markdown_runner.rb
|
141
|
+
- lib/liedetector/request.rb
|
142
|
+
- lib/liedetector/suite.rb
|
143
|
+
- lib/liedetector/version.rb
|
144
|
+
- liedetector.gemspec
|
145
|
+
- spec/liedetector_spec.rb
|
146
|
+
homepage: https://github.com/Deepwalker/liedetector.rb
|
147
|
+
licenses:
|
148
|
+
- MIT
|
149
|
+
metadata: {}
|
150
|
+
post_install_message:
|
151
|
+
rdoc_options: []
|
152
|
+
require_paths:
|
153
|
+
- lib
|
154
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
159
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
|
+
requirements:
|
161
|
+
- - ">="
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '0'
|
164
|
+
requirements: []
|
165
|
+
rubyforge_project:
|
166
|
+
rubygems_version: 2.2.2
|
167
|
+
signing_key:
|
168
|
+
specification_version: 4
|
169
|
+
summary: Markdown API description checker
|
170
|
+
test_files:
|
171
|
+
- spec/liedetector_spec.rb
|