fakeit 0.1.5 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 54c041ed8f46946a8641f52ae6397b00a5620cf53f813195df6694a1f36c2904
4
- data.tar.gz: 71d218c8c8aee2d0a9240785e43949a3fd9b3210f6ce817ba6dc224ccbffddd8
3
+ metadata.gz: 727b95e51aed4489946200aac98d814fe6132e0fe7857819b85e3f48d2f6ab40
4
+ data.tar.gz: f3a78ca7afd4782f7003cdd3b888e334e60ea8edfd59b1fec058c822cd72ca6a
5
5
  SHA512:
6
- metadata.gz: 88fdba5349cfc8f664bf321030c3e2de2446b2f677a249f5801ed00d8b37ca5291c8b5e59670c4bc5e1bb67327ef43a64f22b2fc22105f50e503b41c6d76724e
7
- data.tar.gz: 3edc63857c5447b41b8a1e6e8ebeef84ac676216ad0d27531905bcaded11b69da2b468828475d7db43674ac6708d8af800b53e5796f311a281043050b6c1020b
6
+ metadata.gz: 60bd99ceff20e1ee73843901d6ba5b29955f044092162428736ca093b4f32557c5de755eae435c98d0488fd40997d5c420fac6c067635191b0074cc23a7b09c1
7
+ data.tar.gz: b549806af5f29b2284023a637bf79f3cb770a9ca449f3079d5be5c997bccaa4d4fc41efe607258f96b7b6d487eeb6f8fd47ef1c383f2aa3a45f82920397fdf3d
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fakeit (0.1.5)
4
+ fakeit (0.2.0)
5
5
  faker (~> 1.9)
6
- openapi_parser (= 0.3.0)
6
+ openapi_parser (= 0.3.1)
7
7
  rack (~> 2.0)
8
8
  rack-cors (~> 1.0)
9
9
  slop (~> 4.6)
@@ -15,27 +15,17 @@ GEM
15
15
  byebug (11.0.1)
16
16
  concurrent-ruby (1.1.5)
17
17
  diff-lcs (1.3)
18
- docile (1.3.1)
19
- equatable (0.6.1)
20
- faker (1.9.4)
18
+ docile (1.3.2)
19
+ faker (1.9.6)
21
20
  i18n (>= 0.7)
22
- pastel (~> 0.7.2)
23
- thor (~> 0.20.0)
24
- tty-pager (~> 0.12.0)
25
- tty-screen (~> 0.6.5)
26
- tty-tree (~> 0.3.0)
27
21
  i18n (1.6.0)
28
22
  concurrent-ruby (~> 1.0)
29
- jaro_winkler (1.5.2)
23
+ jaro_winkler (1.5.3)
30
24
  json (2.2.0)
31
- openapi_parser (0.3.0)
25
+ openapi_parser (0.3.1)
32
26
  parallel (1.17.0)
33
- parser (2.6.2.1)
27
+ parser (2.6.3.0)
34
28
  ast (~> 2.4.0)
35
- pastel (0.7.3)
36
- equatable (~> 0.6)
37
- tty-color (~> 0.5)
38
- psych (3.1.0)
39
29
  rack (2.0.7)
40
30
  rack-cors (1.0.3)
41
31
  rack-test (1.1.0)
@@ -46,46 +36,30 @@ GEM
46
36
  rspec-core (~> 3.8.0)
47
37
  rspec-expectations (~> 3.8.0)
48
38
  rspec-mocks (~> 3.8.0)
49
- rspec-core (3.8.0)
39
+ rspec-core (3.8.2)
50
40
  rspec-support (~> 3.8.0)
51
- rspec-expectations (3.8.2)
41
+ rspec-expectations (3.8.4)
52
42
  diff-lcs (>= 1.2.0, < 2.0)
53
43
  rspec-support (~> 3.8.0)
54
- rspec-mocks (3.8.0)
44
+ rspec-mocks (3.8.1)
55
45
  diff-lcs (>= 1.2.0, < 2.0)
56
46
  rspec-support (~> 3.8.0)
57
- rspec-support (3.8.0)
58
- rubocop (0.67.2)
47
+ rspec-support (3.8.2)
48
+ rubocop (0.72.0)
59
49
  jaro_winkler (~> 1.5.1)
60
50
  parallel (~> 1.10)
61
- parser (>= 2.5, != 2.5.1.1)
62
- psych (>= 3.1.0)
51
+ parser (>= 2.6)
63
52
  rainbow (>= 2.2.2, < 4.0)
64
53
  ruby-progressbar (~> 1.7)
65
- unicode-display_width (>= 1.4.0, < 1.6)
66
- ruby-progressbar (1.10.0)
67
- simplecov (0.16.1)
54
+ unicode-display_width (>= 1.4.0, < 1.7)
55
+ ruby-progressbar (1.10.1)
56
+ simplecov (0.17.0)
68
57
  docile (~> 1.1)
69
58
  json (>= 1.8, < 3)
70
59
  simplecov-html (~> 0.10.0)
71
60
  simplecov-html (0.10.2)
72
- slop (4.6.2)
73
- strings (0.1.5)
74
- strings-ansi (~> 0.1)
75
- unicode-display_width (~> 1.5)
76
- unicode_utils (~> 1.4)
77
- strings-ansi (0.1.0)
78
- thor (0.20.3)
79
- tty-color (0.5.0)
80
- tty-pager (0.12.1)
81
- strings (~> 0.1.4)
82
- tty-screen (~> 0.6)
83
- tty-which (~> 0.4)
84
- tty-screen (0.6.5)
85
- tty-tree (0.3.0)
86
- tty-which (0.4.1)
87
- unicode-display_width (1.5.0)
88
- unicode_utils (1.4.0)
61
+ slop (4.7.0)
62
+ unicode-display_width (1.6.0)
89
63
 
90
64
  PLATFORMS
91
65
  ruby
data/README.md CHANGED
@@ -9,9 +9,9 @@
9
9
 
10
10
  Create mock server from Openapi specification
11
11
 
12
- ## Description
12
+ ## Features
13
13
 
14
- * Randomly generated response
14
+ * Randomly or statically generated response
15
15
  * Request validation
16
16
  * Load specification from local or remote
17
17
  * Support specification in yaml or json format
@@ -37,14 +37,20 @@ Command line options:
37
37
  --spec spec file uri (required)
38
38
  -p, --port custom port
39
39
  -q, --quiet mute request and response log
40
- --permissive log validation error as warning instead of deny request
41
- --use-example use example provided in spec
40
+ --permissive log validation error as warning instead of denying request
41
+ --use-example use example provided in spec if exists
42
+
43
+ trial options:
44
+ --static generate static response
42
45
 
43
46
  other options:
44
47
  -v, --version
45
48
  -h, --help
46
49
 
47
50
  **Notes:**
51
+ * See [here](docs/random.md) for Openapi properties supported in random response generation
52
+ * See [here](docs/static.md) for default value in static response generation
53
+ * Regarding `--use-example` mode, property without example specified will still be randomly or statically generated
48
54
  * Random response generation can not handle recursive schema reference. If you do need it in your spec file, please provide `example` property for the recursive part of schema and specify `--use-example` option.
49
55
 
50
56
  ## Development
data/bin/fakeit CHANGED
@@ -10,8 +10,11 @@ begin
10
10
  o.string '--spec', 'spec file uri (required)', required: true
11
11
  o.integer '-p', '--port', 'custom port'
12
12
  o.bool '-q', '--quiet', 'mute request and response log'
13
- o.bool '--permissive', 'log validation error as warning instead of deny request'
14
- o.bool '--use-example', 'use example provided in spec'
13
+ o.bool '--permissive', 'log validation error as warning instead of denying request'
14
+ o.bool '--use-example', 'use example provided in spec if exists'
15
+ o.separator ''
16
+ o.separator 'trial options:'
17
+ o.bool '--static', 'generate static response'
15
18
  o.separator ''
16
19
  o.separator 'other options:'
17
20
  o.on '-v', '--version' do
@@ -41,7 +44,11 @@ trap(:INT) do
41
44
  end
42
45
  end
43
46
 
44
- options = Fakeit::App::Options.new(permissive: opts.permissive?, use_example: opts.use_example?)
47
+ options = Fakeit::App::Options.new(
48
+ permissive: opts.permissive?,
49
+ use_example: opts.use_example?,
50
+ static: opts.static?
51
+ )
45
52
  app = Fakeit.build(opts[:spec], options)
46
53
 
47
54
  app.use Rack::Cors do
data/docs/random.md ADDED
@@ -0,0 +1,31 @@
1
+ # Random
2
+
3
+ The following Openapi properties are supported in random response generation
4
+
5
+ |Type|Property|Notes|
6
+ |---|---|---|
7
+ |complex|oneOf| |
8
+ | |allOf| |
9
+ | |anyOf| |
10
+ |array|uniqueItems|Try to generate unique random items, but will give up after exceeding retry limits|
11
+ | |minItems|Default: `1`|
12
+ | |maxItems|Default: `minItems + 2`|
13
+ |string|enum| |
14
+ | |pattern| |
15
+ | |format=uri| |
16
+ | |format=uuid| |
17
+ | |format=guid| |
18
+ | |format=email| |
19
+ | |format=date|In past 100 days|
20
+ | |format=date-time|In past 100 days|
21
+ | |minLength|Default: `0`|
22
+ | |maxLength|Default: `minLength + 10`|
23
+ |integer|enum| |
24
+ | |minimum|Default: `1`|
25
+ | |maximum|Default: `2^32`|
26
+ | |exclusiveMinimum| |
27
+ | |exclusiveMaximum| |
28
+ | |multipleOf| |
29
+ |number|minimum|Default: `0.0`|
30
+ | |maximum|Default: `2^32`|
31
+ | |multipleOf| |
data/docs/static.md ADDED
@@ -0,0 +1,29 @@
1
+ # Static
2
+
3
+ Static value generation rule
4
+
5
+ |Type|Property|Rule|
6
+ |---|---|---|
7
+ |complex|oneOf|first item|
8
+ | |anyOf|same as allOf|
9
+ |array|N/A|size is `1`|
10
+ | |minItems|size is minItems|
11
+ |string|N/A|`string`|
12
+ | |enum|first item|
13
+ | |pattern|Generated but always the same|
14
+ | |format=uri|`https://some.uri`|
15
+ | |format=uuid|`11111111-1111-1111-1111-111111111111`|
16
+ | |format=guid|`11111111-1111-1111-1111-111111111111`|
17
+ | |format=email|`some@email.com`|
18
+ | |format=date|today|
19
+ | |format=date-time|midnight today|
20
+ | |minLength|`1` repeats for (minLength + 10) times if no maxLength specified|
21
+ | |maxLength|`1` repeats for maxLength times|
22
+ |integer|N/A|`1`|
23
+ | |enum|first item|
24
+ | |minimum|minimum|
25
+ | |exclusiveMinimum|minimum + 1|
26
+ | |multipleOf|minimum value meets multipleOf condition|
27
+ |number|N/A|0.0|
28
+ | |minimum|minimum rounded to 2 decimal places|
29
+ | |multipleOf|minimum value meets multipleOf condition|
data/fakeit.gemspec CHANGED
@@ -33,7 +33,7 @@ Gem::Specification.new do |spec|
33
33
  spec.add_development_dependency 'simplecov', '~> 0.16'
34
34
 
35
35
  spec.add_dependency 'faker', '~> 1.9'
36
- spec.add_dependency 'openapi_parser', '0.3.0'
36
+ spec.add_dependency 'openapi_parser', '0.3.1'
37
37
  spec.add_dependency 'rack', '~> 2.0'
38
38
  spec.add_dependency 'rack-cors', '~> 1.0'
39
39
  spec.add_dependency 'slop', '~> 4.6'
@@ -1,11 +1,12 @@
1
1
  module Fakeit
2
2
  module App
3
3
  class Options
4
- attr_reader :permissive, :use_example
4
+ attr_reader :permissive, :use_example, :static
5
5
 
6
- def initialize(permissive: false, use_example: false)
6
+ def initialize(permissive: false, use_example: false, static: false)
7
7
  @permissive = permissive
8
8
  @use_example = use_example
9
+ @static = static
9
10
  end
10
11
  end
11
12
  end
@@ -1,18 +1,26 @@
1
1
  module Fakeit
2
2
  module Openapi
3
3
  module Example
4
- MAX_SIZE = 3
5
-
6
- def array_example(use_example)
7
- size = retries = uniqueItems ? min_array : Faker::Number.between(min_array, max_array)
8
- [].tap { |result| generate_items(size, retries, use_example, result) }
4
+ def array_example(options)
5
+ example_options = add_depth(options)
6
+ example_options[:static] ? static_array_example(example_options) : random_array_example(example_options)
9
7
  end
10
8
 
11
9
  private
12
10
 
13
- def generate_items(size, retries, use_example, result)
11
+ def static_array_example(example_options)
12
+ size = retries = min_array
13
+ [].tap { |result| generate_items(size, retries, example_options, result) }
14
+ end
15
+
16
+ def random_array_example(example_options)
17
+ size = retries = uniqueItems ? min_array : Faker::Number.between(min_array, max_array(example_options[:depth]))
18
+ [].tap { |result| generate_items(size, retries, example_options, result) }
19
+ end
20
+
21
+ def generate_items(size, retries, example_options, result)
14
22
  loop do
15
- item = items.to_example(use_example)
23
+ item = items.to_example(example_options)
16
24
 
17
25
  if need_retry?(item, result, retries)
18
26
  retries -= 1
@@ -22,6 +30,10 @@ module Fakeit
22
30
  end
23
31
  end
24
32
 
33
+ def add_depth(example_options)
34
+ example_options.merge(depth: example_options[:depth] + 1)
35
+ end
36
+
25
37
  def need_retry?(item, result, retries)
26
38
  uniqueItems && result.include?(item) && retries.positive?
27
39
  end
@@ -30,8 +42,8 @@ module Fakeit
30
42
  minItems || 1
31
43
  end
32
44
 
33
- def max_array
34
- maxItems || MAX_SIZE
45
+ def max_array(depth)
46
+ maxItems || min_array + (depth > 1 ? 2 : 9)
35
47
  end
36
48
  end
37
49
  end
@@ -1,8 +1,8 @@
1
1
  module Fakeit
2
2
  module Openapi
3
3
  module Example
4
- def boolean_example
5
- Faker::Boolean.boolean
4
+ def boolean_example(example_options)
5
+ example_options[:static] || Faker::Boolean.boolean
6
6
  end
7
7
  end
8
8
  end
@@ -3,7 +3,21 @@ module Fakeit
3
3
  module Example
4
4
  BIG_INT = 2**32
5
5
 
6
- def integer_example
6
+ def integer_example(example_options)
7
+ example_options[:static] ? static_integer_example : random_integer_example
8
+ end
9
+
10
+ private
11
+
12
+ def static_integer_example
13
+ if enum
14
+ enum.to_a.first
15
+ else
16
+ int_rand_begin * int_multiple
17
+ end
18
+ end
19
+
20
+ def random_integer_example
7
21
  if enum
8
22
  enum.to_a.sample
9
23
  else
@@ -11,8 +25,6 @@ module Fakeit
11
25
  end
12
26
  end
13
27
 
14
- private
15
-
16
28
  def int_rand_begin
17
29
  min_int / int_multiple + int_rand_begin_adjust
18
30
  end
@@ -3,12 +3,22 @@ module Fakeit
3
3
  module Example
4
4
  BIG_NUM = 2**32
5
5
 
6
- def number_example
7
- (Faker::Number.between(num_rand_begin, num_rand_end) * num_multiple).round(2)
6
+ def number_example(example_options)
7
+ example_options[:static] ? static_number_example : random_number_example
8
8
  end
9
9
 
10
10
  private
11
11
 
12
+ def static_number_example
13
+ (num_rand_begin * num_multiple)
14
+ .then { |result| multipleOf ? result : result.round(2) }
15
+ end
16
+
17
+ def random_number_example
18
+ (Faker::Number.between(num_rand_begin, num_rand_end) * num_multiple)
19
+ .then { |result| multipleOf ? result : result.round(2) }
20
+ end
21
+
12
22
  def num_rand_begin
13
23
  multipleOf ? (min_num / multipleOf).ceil : min_num
14
24
  end
@@ -1,8 +1,8 @@
1
1
  module Fakeit
2
2
  module Openapi
3
3
  module Example
4
- def object_example(use_example)
5
- properties.each_with_object({}) { |(name, schema), obj| obj[name] = schema.to_example(use_example) }
4
+ def object_example(example_options)
5
+ properties.each_with_object({}) { |(name, schema), obj| obj[name] = schema.to_example(example_options) }
6
6
  end
7
7
  end
8
8
  end
@@ -1,7 +1,19 @@
1
1
  module Fakeit
2
2
  module Openapi
3
3
  module Example
4
- FORMAT_HANDLERS = {
4
+ STATIC_FORMAT_HANDLERS = {
5
+ 'uri' => -> { 'https://some.uri' },
6
+ 'uuid' => -> { '11111111-1111-1111-1111-111111111111' },
7
+ 'guid' => -> { '11111111-1111-1111-1111-111111111111' },
8
+ 'email' => -> { 'some@email.com' },
9
+ 'date' => -> { Date.today.iso8601 },
10
+ 'date-time' => lambda do
11
+ now = Time.now
12
+ Time.new(now.year, now.month, now.day, 0, 0, 0, now.utc_offset).iso8601
13
+ end
14
+ }.freeze
15
+
16
+ RANDOM_FORMAT_HANDLERS = {
5
17
  'uri' => -> { Faker::Internet.url },
6
18
  'uuid' => -> { SecureRandom.uuid },
7
19
  'guid' => -> { SecureRandom.uuid },
@@ -10,16 +22,39 @@ module Fakeit
10
22
  'date-time' => -> { Faker::Time.backward(100).iso8601 }
11
23
  }.freeze
12
24
 
13
- def string_example
25
+ def string_example(example_options)
26
+ example_options[:static] ? static_string_example : random_string_example
27
+ end
28
+
29
+ private
30
+
31
+ def static_string_example
32
+ Faker::Config.random = Random.new(1) # Fix seed for faker
33
+
34
+ if enum then enum.to_a.first
35
+ elsif pattern then Faker::Base.regexify(pattern)
36
+ elsif format then static_string_format
37
+ elsif length_constraint then static_string_with_length
38
+ else 'string'
39
+ end
40
+ end
41
+
42
+ def random_string_example
14
43
  if enum then enum.to_a.sample
15
44
  elsif pattern then Faker::Base.regexify(pattern)
16
- elsif format then string_format
45
+ elsif format then random_string_format
17
46
  elsif length_constraint then string_with_length
18
47
  else Faker::Book.title
19
48
  end
20
49
  end
21
50
 
22
- private
51
+ def static_string_with_length
52
+ '1' * max_string_length
53
+ end
54
+
55
+ def static_string_format
56
+ (STATIC_FORMAT_HANDLERS[format] || method(:unknown_format))[]
57
+ end
23
58
 
24
59
  def length_constraint
25
60
  minLength || maxLength
@@ -37,8 +72,8 @@ module Fakeit
37
72
  maxLength || min_string_length + 10
38
73
  end
39
74
 
40
- def string_format
41
- (FORMAT_HANDLERS[format] || method(:unknown_format))[]
75
+ def random_string_format
76
+ (RANDOM_FORMAT_HANDLERS[format] || method(:unknown_format))[]
42
77
  end
43
78
 
44
79
  def unknown_format
@@ -1,10 +1,10 @@
1
1
  module Fakeit
2
2
  module Openapi
3
3
  class Operation
4
- def initialize(request_operation, options)
4
+ def initialize(request_operation, app_options)
5
5
  @request_operation = request_operation
6
6
  @validator = Fakeit::Validation::Validator.new(request_operation)
7
- @options = options
7
+ @app_options = app_options
8
8
  end
9
9
 
10
10
  def status
@@ -13,7 +13,7 @@ module Fakeit
13
13
 
14
14
  def headers
15
15
  response_headers
16
- &.map { |k, v| [k, v.schema.to_example(@options.use_example)] }
16
+ &.map { |k, v| [k, v.schema.to_example(example_options)] }
17
17
  .to_h
18
18
  .tap { |headers| headers['Content-Type'] = response_content_type if response_content_type }
19
19
  end
@@ -21,7 +21,7 @@ module Fakeit
21
21
  def body
22
22
  response_schema
23
23
  &.schema
24
- &.to_example(@options.use_example)
24
+ &.to_example(example_options)
25
25
  &.then(&JSON.method(:generate))
26
26
  .to_s
27
27
  end
@@ -32,6 +32,10 @@ module Fakeit
32
32
 
33
33
  private
34
34
 
35
+ def example_options
36
+ { use_example: @app_options.use_example, static: @app_options.static, depth: 0 }
37
+ end
38
+
35
39
  def response_content
36
40
  response.last.content&.find { |k, _| k =~ %r{^application/.*json} }
37
41
  end
@@ -10,42 +10,39 @@ module Fakeit
10
10
  module Schema
11
11
  include Fakeit::Openapi::Example
12
12
 
13
- def to_example(use_example = false)
14
- return example if use_example && example
13
+ def to_example(**example_options)
14
+ return example if example_options[:use_example] && example
15
15
 
16
- return one_of_example(use_example) if one_of
17
- return all_of_example(use_example) if all_of
18
- return any_of_example(use_example) if any_of
16
+ return one_of_example(example_options) if one_of
17
+ return all_of_example(example_options) if all_of
18
+ return any_of_example(example_options) if any_of
19
19
 
20
- type_based_example(use_example)
20
+ type_based_example(example_options)
21
21
  end
22
22
 
23
23
  private
24
24
 
25
- def one_of_example(use_example)
26
- one_of.sample.to_example(use_example)
25
+ def one_of_example(example_options)
26
+ example_options[:static] ? one_of.first.to_example(example_options) : one_of.sample.to_example(example_options)
27
27
  end
28
28
 
29
- def all_of_example(use_example)
29
+ def all_of_example(example_options)
30
30
  all_of
31
31
  .select { |option| option.type == 'object' }
32
- .map { |option| option.to_example(use_example) }
32
+ .map { |option| option.to_example(example_options) }
33
33
  .reduce(&:merge)
34
34
  end
35
35
 
36
- def any_of_example(use_example)
36
+ def any_of_example(example_options)
37
37
  any_of
38
38
  .select { |option| option.type == 'object' }
39
- .sample(Faker::Number.between(1, any_of.size))
40
- .map { |option| option.to_example(use_example) }
39
+ .then { |options| example_options[:static] ? options : options.sample(Faker::Number.between(1, any_of.size)) }
40
+ .map { |option| option.to_example(example_options) }
41
41
  .reduce(&:merge)
42
42
  end
43
43
 
44
- def type_based_example(use_example)
45
- case type
46
- when 'string', 'integer', 'number', 'boolean' then send("#{type}_example")
47
- when 'array', 'object' then send("#{type}_example", use_example)
48
- end
44
+ def type_based_example(example_options)
45
+ send("#{type}_example", example_options) if %w[string integer number boolean array object].include?(type)
49
46
  end
50
47
  end
51
48
  end
@@ -1,3 +1,3 @@
1
1
  module Fakeit
2
- VERSION = '0.1.5'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fakeit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Feng
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-28 00:00:00.000000000 Z
11
+ date: 2019-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -128,14 +128,14 @@ dependencies:
128
128
  requirements:
129
129
  - - '='
130
130
  - !ruby/object:Gem::Version
131
- version: 0.3.0
131
+ version: 0.3.1
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - '='
137
137
  - !ruby/object:Gem::Version
138
- version: 0.3.0
138
+ version: 0.3.1
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: rack
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -196,6 +196,8 @@ files:
196
196
  - README.md
197
197
  - Rakefile
198
198
  - bin/fakeit
199
+ - docs/random.md
200
+ - docs/static.md
199
201
  - fakeit.gemspec
200
202
  - lib/fakeit.rb
201
203
  - lib/fakeit/app/app.rb