randrizer 0.0.1 → 0.0.2

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 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