randrizer 0.0.1 → 0.0.2

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: be06076a3c75b00ab51471e44ef3f7b6794423f9c5dbe4f9ff9b01efb4493fb6
4
- data.tar.gz: cea424a0ca6abd167ec418afbb7952c346304252f1da937f13d5eb85373ade6c
3
+ metadata.gz: b25e9cd95d331a6443f7b4773a8a0d762b5a874f9924212fb4a42bfd9416b1d6
4
+ data.tar.gz: d3ba8f10a4e122ff123576715ede100d88f521b7834468f9e2a444fad6f296f4
5
5
  SHA512:
6
- metadata.gz: 656b7243cc9ac2be824c6060a27ed88940316f57a5acd93140b3a99043283443130bc34b774c9ed0e43867beb6b54cf941dbebf46b1509b114dad37b4d30be41
7
- data.tar.gz: c5ca2206521f575429fbf281d45072f3025ba3ec5c367d971c55663209db339b7f7f0d8b173f3db1a0ceac4b6b3c6058bf162457523761138227d2ba1030b7ba
6
+ metadata.gz: 6260ab5766c17cd475ec5946faa1d5038fa4ea900afa1707226875bd09ae2ab91f053a63b76d3e9c7a8e084b389236af22bb929689db01db086ef211ef440ce6
7
+ data.tar.gz: 5f9481bd7bc97be037ded292ec46ddd32b7c02cdb4ddaaee41ab0a61fb39a0e354be17fbd90d2b0a3cec70282a1e57047c29e09ccac02db9aea7041834795276
@@ -0,0 +1,63 @@
1
+ version: 2
2
+
3
+ references:
4
+ install_bundle: &install_bundle
5
+ run:
6
+ name: Bundle
7
+ command: gem install bundler -v 2.1.4 && bundle install --path vendor/bundle --jobs=4 --retry=3
8
+
9
+ restore_bundle_cache: &restore_bundle_cache
10
+ restore_cache:
11
+ key: randrizer-{{ checksum "randrizer.gemspec" }}
12
+
13
+ save_bundle_cache: &save_bundle_cache
14
+ save_cache:
15
+ key: randrizer-{{ checksum "randrizer.gemspec" }}
16
+ paths:
17
+ - vendor/bundle
18
+
19
+ steps: &steps
20
+ - checkout
21
+ - *install_bundle
22
+ - *restore_bundle_cache
23
+ - *save_bundle_cache
24
+ - run:
25
+ name: RSpec
26
+ command: bundle exec rspec --format progress --format RspecJunitFormatter -o tmp/rspec-reports/unit.xml $(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)
27
+
28
+ jobs:
29
+ code_quality:
30
+ docker:
31
+ - image: circleci/ruby:2.7.0
32
+ steps:
33
+ - checkout
34
+ - *restore_bundle_cache
35
+ - *install_bundle
36
+ - *save_bundle_cache
37
+ - run:
38
+ name: Rubocop
39
+ command: bundle exec rubocop
40
+
41
+ tests-r2.5:
42
+ docker:
43
+ - image: circleci/ruby:2.5.7
44
+ steps: *steps
45
+
46
+ tests-r2.6:
47
+ docker:
48
+ - image: circleci/ruby:2.6.5
49
+ steps: *steps
50
+
51
+ tests-r2.7:
52
+ docker:
53
+ - image: circleci/ruby:2.7.0
54
+ steps: *steps
55
+
56
+ workflows:
57
+ version: 2
58
+ tests:
59
+ jobs:
60
+ - code_quality
61
+ - tests-r2.5
62
+ - tests-r2.6
63
+ - tests-r2.7
data/.gitignore CHANGED
@@ -2,10 +2,11 @@
2
2
 
3
3
  .data/
4
4
  .bundle/
5
+ doc/
5
6
  log/
6
7
  tmp/
7
8
  .idea/
8
-
9
+ .yardoc/
9
10
  .rspec_status
10
11
 
11
12
  .local_files
data/.rubocop.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  require: rubocop-rspec
2
2
 
3
3
  AllCops:
4
- TargetRubyVersion: 2.6.5
4
+ TargetRubyVersion: 2.7.0
5
5
  DisplayCopNames: true
6
6
  DisplayStyleGuide: true
7
7
  ExtraDetails: true
@@ -10,7 +10,7 @@ AllCops:
10
10
  - vendor/**/*
11
11
  - bin/**/*
12
12
 
13
- Lint/UnneededCopDisableDirective:
13
+ Lint/RedundantCopDisableDirective:
14
14
  Severity: error
15
15
 
16
16
  Lint/AmbiguousBlockAssociation:
@@ -32,7 +32,7 @@ Metrics/ClassLength:
32
32
  Metrics/MethodLength:
33
33
  Max: 58
34
34
 
35
- Metrics/LineLength:
35
+ Layout/LineLength:
36
36
  Max: 90
37
37
  Exclude:
38
38
  - 'Gemfile'
@@ -59,15 +59,24 @@ Style/StringLiterals:
59
59
  Exclude:
60
60
  - Gemfile
61
61
 
62
- Layout/IndentFirstArrayElement:
62
+ Layout/FirstArrayElementIndentation:
63
63
  EnforcedStyle: consistent
64
64
 
65
- Layout/IndentFirstHashElement:
65
+ Layout/FirstHashElementIndentation:
66
66
  EnforcedStyle: consistent
67
67
 
68
68
  Style/YodaCondition:
69
69
  Enabled: true
70
70
 
71
+ Style/HashEachMethods:
72
+ Enabled: true
73
+
74
+ Style/HashTransformKeys:
75
+ Enabled: true
76
+
77
+ Style/HashTransformValues:
78
+ Enabled: true
79
+
71
80
  RSpec/ExampleLength:
72
81
  Enabled: false
73
82
 
@@ -96,7 +105,7 @@ RSpec/ContextWording:
96
105
  - for
97
106
  - and
98
107
 
99
- Naming/UncommunicativeMethodParamName:
108
+ Naming/MethodParameterName:
100
109
  AllowedNames:
101
110
  # These are the default allowed names, set by Rubocop
102
111
  - io
data/.yardopts ADDED
@@ -0,0 +1 @@
1
+ --markup=markdown
data/lib/randrizer.rb CHANGED
@@ -2,4 +2,3 @@
2
2
 
3
3
  require "randrizer/version"
4
4
  require "randrizer/types"
5
- require "randrizer/drivers/json_schema"
data/lib/randrizer/cli.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require "randrizer/version"
4
4
  require "randrizer"
5
+ require "randrizer/drivers/json_schema"
5
6
 
6
7
  module Randrizer
7
8
  class Cli
@@ -33,7 +33,7 @@ module Randrizer
33
33
  root_type = attrs["type"]
34
34
  value_type = gen_value_type(root_type, attrs)
35
35
 
36
- unless required_keys.include?(key_type)
36
+ unless required_keys.include?(key)
37
37
  key_type = Types::Optional[inner_type: key_type]
38
38
  end
39
39
 
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "ruby2_keywords"
4
+ require "randrizer/types/type_validation_error"
5
+
6
+ module Randrizer
7
+ module Types
8
+ class BaseType
9
+ def initialize(*args, **kwargs, &block); end
10
+
11
+ # @raise [TypeValidationError] if the arguments given to the type are not valid
12
+ def validate!
13
+ raise NotImplementedError
14
+ end
15
+
16
+ class << self
17
+ # Required for compatibility with Ruby <= 2.6. See
18
+ # https://www.ruby-lang.org/en/news/2019/12/12/separation-of-positional-and-keyword-arguments-in-ruby-3-0/
19
+ ruby2_keywords def build(*args, &block)
20
+ new(*args, &block)
21
+ end
22
+
23
+ alias [] build
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,12 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "randrizer/types/type_builder"
3
+ require "randrizer/types/base_type"
4
4
 
5
5
  module Randrizer
6
6
  module Types
7
- class Bool
8
- include TypeBuilder
9
-
7
+ # A boolean type. Can be either `true` or `false`.
8
+ class Bool < BaseType
10
9
  PRESENCE_MAYBE = 0.5
11
10
 
12
11
  def initialize(true_prob: PRESENCE_MAYBE)
@@ -1,12 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "randrizer/types/type_builder"
3
+ require "randrizer/types/base_type"
4
4
 
5
5
  module Randrizer
6
6
  module Types
7
- class Const
8
- include TypeBuilder
9
-
7
+ # A constant type. Any type passed as argument will be returned as given.
8
+ class Const < BaseType
10
9
  def initialize(params)
11
10
  @params = params
12
11
  end
@@ -1,13 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "randrizer/types/skip"
4
- require "randrizer/types/type_builder"
4
+ require "randrizer/types/base_type"
5
5
 
6
6
  module Randrizer
7
7
  module Types
8
- class Dict
9
- include TypeBuilder
10
-
8
+ class Dict < BaseType
11
9
  def initialize(keys_def)
12
10
  @keys_def = keys_def
13
11
  end
@@ -1,12 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "randrizer/types/type_builder"
3
+ require "randrizer/types/base_type"
4
4
 
5
5
  module Randrizer
6
6
  module Types
7
- class Float
8
- include TypeBuilder
9
-
7
+ class Float < BaseType
10
8
  DEFAULT_MIN = 0.0
11
9
  DEFAULT_MAX = 9_999_999_999.0
12
10
 
@@ -1,13 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "randrizer/types/type_builder"
3
+ require "randrizer/types/base_type"
4
4
 
5
5
  module Randrizer
6
6
  module Types
7
- class Int
8
- include TypeBuilder
9
-
7
+ # A primitive integer type. The evaluation will generate a random number between
8
+ # the given `min` and `max`.
9
+ class Int < BaseType
10
+ # Default minimum generable number
10
11
  DEFAULT_MIN = 0
12
+
13
+ # Default maximum generable number
11
14
  DEFAULT_MAX = 9_999_999_999
12
15
 
13
16
  def initialize(min: DEFAULT_MIN, max: DEFAULT_MAX)
@@ -1,13 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "randrizer/types/skip"
4
- require "randrizer/types/type_builder"
4
+ require "randrizer/types/base_type"
5
5
 
6
6
  module Randrizer
7
7
  module Types
8
- class List
9
- include TypeBuilder
10
-
8
+ class List < BaseType
11
9
  def initialize(list_def)
12
10
  @list_def = list_def
13
11
  end
@@ -1,12 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "randrizer/types/type_builder"
3
+ require "randrizer/types/base_type"
4
4
 
5
5
  module Randrizer
6
6
  module Types
7
- class Nullable
8
- include TypeBuilder
9
-
7
+ class Nullable < BaseType
10
8
  def initialize(null_prob:, inner_type:)
11
9
  @null_prob = null_prob
12
10
  @inner_type = inner_type
@@ -1,12 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "randrizer/types/type_builder"
3
+ require "randrizer/types/base_type"
4
4
 
5
5
  module Randrizer
6
6
  module Types
7
- class OneOf
8
- include TypeBuilder
9
-
7
+ class OneOf < BaseType
10
8
  def initialize(list_def)
11
9
  @list_def = list_def
12
10
  end
@@ -1,13 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "randrizer/types/skip"
4
- require "randrizer/types/type_builder"
4
+ require "randrizer/types/base_type"
5
5
 
6
6
  module Randrizer
7
7
  module Types
8
- class Optional
9
- include TypeBuilder
10
-
8
+ class Optional < BaseType
11
9
  PRESENCE_MAYBE = 0.5
12
10
 
13
11
  def initialize(inner_type:, presence_prob: PRESENCE_MAYBE)
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "randrizer/types/base_type"
4
+
3
5
  module Randrizer
4
6
  module Types
5
- class Skip
7
+ class Skip < BaseType
6
8
  def ==(other)
7
9
  other.class == Skip
8
10
  end
@@ -1,12 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "randrizer/types/type_builder"
3
+ require "randrizer/types/base_type"
4
4
 
5
5
  module Randrizer
6
6
  module Types
7
- class String
8
- include TypeBuilder
9
-
7
+ class String < BaseType
10
8
  CHARS_NUMBERS = "0123456789"
11
9
  CHARS_SYMBOLS = " !\"£$%^&()=-*/[]#\\~"
12
10
  CHARS_LOWERCASE_LETTERS = "abcdfeghijklmnopqrstuvwxyz"
@@ -1,12 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "randrizer/types/type_builder"
3
+ require "randrizer/types/base_type"
4
4
 
5
5
  module Randrizer
6
6
  module Types
7
- class StringSequence
8
- include TypeBuilder
9
-
7
+ class StringSequence < BaseType
10
8
  ALLOWED_TYPES = [
11
9
  Types::Int,
12
10
  Types::String,
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Randrizer
4
+ module Types
5
+ class TypeValidationError < StandardError; end
6
+ end
7
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Randrizer
4
- VERSION = "0.0.1"
4
+ VERSION = "0.0.2"
5
5
  end
data/randrizer.gemspec CHANGED
@@ -24,10 +24,14 @@ Gem::Specification.new do |spec|
24
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
25
  spec.require_paths = ["lib"]
26
26
 
27
+ spec.add_dependency "ruby2_keywords", "~> 0.0.2"
28
+
27
29
  spec.add_development_dependency "bundler", "~> 2.0"
28
- spec.add_development_dependency "pry-byebug", "~> 3.7.0"
29
- spec.add_development_dependency "rake", "~> 10.0"
30
+ spec.add_development_dependency "pry-byebug", "~> 3.8.0"
31
+ spec.add_development_dependency "rake", "~> 13.0"
32
+ spec.add_development_dependency "redcarpet", "~> 3.5.0"
30
33
  spec.add_development_dependency "rspec", "~> 3.0"
31
- spec.add_development_dependency "rubocop", "~> 0.75.0"
32
- spec.add_development_dependency "rubocop-rspec", "~> 1.36.0"
34
+ spec.add_development_dependency "rspec_junit_formatter", "0.4.1"
35
+ spec.add_development_dependency "rubocop", "~> 0.80.0"
36
+ spec.add_development_dependency "rubocop-rspec", "~> 1.38.1"
33
37
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: randrizer
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
  - Ivan Giuliani
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-02-26 00:00:00.000000000 Z
11
+ date: 2020-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ruby2_keywords
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.2
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -30,28 +44,42 @@ dependencies:
30
44
  requirements:
31
45
  - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: 3.7.0
47
+ version: 3.8.0
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: 3.7.0
54
+ version: 3.8.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '10.0'
61
+ version: '13.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '13.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: 3.5.0
48
76
  type: :development
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
80
  - - "~>"
53
81
  - !ruby/object:Gem::Version
54
- version: '10.0'
82
+ version: 3.5.0
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: rspec
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -66,34 +94,48 @@ dependencies:
66
94
  - - "~>"
67
95
  - !ruby/object:Gem::Version
68
96
  version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec_junit_formatter
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 0.4.1
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 0.4.1
69
111
  - !ruby/object:Gem::Dependency
70
112
  name: rubocop
71
113
  requirement: !ruby/object:Gem::Requirement
72
114
  requirements:
73
115
  - - "~>"
74
116
  - !ruby/object:Gem::Version
75
- version: 0.75.0
117
+ version: 0.80.0
76
118
  type: :development
77
119
  prerelease: false
78
120
  version_requirements: !ruby/object:Gem::Requirement
79
121
  requirements:
80
122
  - - "~>"
81
123
  - !ruby/object:Gem::Version
82
- version: 0.75.0
124
+ version: 0.80.0
83
125
  - !ruby/object:Gem::Dependency
84
126
  name: rubocop-rspec
85
127
  requirement: !ruby/object:Gem::Requirement
86
128
  requirements:
87
129
  - - "~>"
88
130
  - !ruby/object:Gem::Version
89
- version: 1.36.0
131
+ version: 1.38.1
90
132
  type: :development
91
133
  prerelease: false
92
134
  version_requirements: !ruby/object:Gem::Requirement
93
135
  requirements:
94
136
  - - "~>"
95
137
  - !ruby/object:Gem::Version
96
- version: 1.36.0
138
+ version: 1.38.1
97
139
  description: Random data generator with type composition
98
140
  email:
99
141
  - giuliani.v@gmail.com
@@ -102,9 +144,11 @@ executables:
102
144
  extensions: []
103
145
  extra_rdoc_files: []
104
146
  files:
147
+ - ".circleci/config.yml"
105
148
  - ".gitignore"
106
149
  - ".rubocop.yml"
107
150
  - ".ruby-version"
151
+ - ".yardopts"
108
152
  - Gemfile
109
153
  - LICENCE.txt
110
154
  - README.md
@@ -116,6 +160,7 @@ files:
116
160
  - lib/randrizer/drivers/json_schema/typegen.rb
117
161
  - lib/randrizer/generator.rb
118
162
  - lib/randrizer/types.rb
163
+ - lib/randrizer/types/base_type.rb
119
164
  - lib/randrizer/types/bool.rb
120
165
  - lib/randrizer/types/const.rb
121
166
  - lib/randrizer/types/dict.rb
@@ -128,7 +173,7 @@ files:
128
173
  - lib/randrizer/types/skip.rb
129
174
  - lib/randrizer/types/string.rb
130
175
  - lib/randrizer/types/string_sequence.rb
131
- - lib/randrizer/types/type_builder.rb
176
+ - lib/randrizer/types/type_validation_error.rb
132
177
  - lib/randrizer/version.rb
133
178
  - randrizer.gemspec
134
179
  homepage: https://github.com/ivgiuliani/randrizer
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Randrizer
4
- module Types
5
- module TypeBuilder
6
- class ValidationError < StandardError; end
7
-
8
- def self.included(base)
9
- base.extend(ClassMethods)
10
- end
11
-
12
- def validate!
13
- raise NotImplementedError
14
- end
15
-
16
- module ClassMethods
17
- def build(*args, **params)
18
- new(*args, **params)
19
- end
20
-
21
- alias [] build
22
- end
23
- end
24
- end
25
- end