mutations-validate-outcome 0.7.22 → 0.7.29

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
  SHA1:
3
- metadata.gz: 2bd9b50392d4cd8659d609f182db477f237ec0b4
4
- data.tar.gz: b83e83ea46b4128d0da1c42c541344d14cf6f64b
3
+ metadata.gz: 6b6b4cbb1076d7ff847aacb574feadb923f3f3fe
4
+ data.tar.gz: 1aa782c70b954269660512a7ba700f5fba1ffe4c
5
5
  SHA512:
6
- metadata.gz: 3645782fd77a42c27a33045570169c3101c14f4aad9d3704961eb645bc908cf9c6e4e336b08db80685a75d9845220140fdaf256bda69a1c68bebad87b2a46763
7
- data.tar.gz: b4fc4ecc05833d28082e078fa41ba0387501b084fd712478f77600465ad315604c9f59c0a666709580fc09b34c076f9be9ec2ba68f8eb446c795abff32b691ef
6
+ metadata.gz: 60b055c38e0ce56785c79eae7b37845a136056e9969ea9535168b009ccc4717b47e45d07b65defa5c653a0b14a0831a6e98fc1245d105bbc03b1ae1499adf2a7
7
+ data.tar.gz: df70e4f27652fb56e3c8dc7320183b7dee45a9f25d90c71e76101551188ff85ca2df1084c4df1bba69bc672dda1653401b3c4c9d0a4f0b5eb2b9dda3307f07ab
data/.rubocop.yml ADDED
@@ -0,0 +1,31 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ Style/AsciiComments:
4
+ Enabled: false
5
+
6
+ Style/MethodDefParentheses:
7
+ Enabled: false
8
+
9
+ Style/MultilineBlockChain:
10
+ Enabled: false
11
+
12
+ Style/ParallelAssignment:
13
+ Enabled: false
14
+
15
+ Metrics/AbcSize:
16
+ Max: 100
17
+
18
+ Metrics/ClassLength:
19
+ Max: 200
20
+
21
+ Metrics/CyclomaticComplexity:
22
+ Max: 42
23
+
24
+ Metrics/LineLength:
25
+ Max: 180
26
+
27
+ Metrics/MethodLength:
28
+ Max: 64
29
+
30
+ Metrics/PerceivedComplexity:
31
+ Max: 42
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,96 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2016-05-26 14:17:34 +0200 using RuboCop version 0.40.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 2
10
+ # Cop supports --auto-correct.
11
+ # Configuration parameters: SupportedStyles, IndentationWidth.
12
+ # SupportedStyles: outdent, indent
13
+ Style/AccessModifierIndentation:
14
+ EnforcedStyle: outdent
15
+
16
+ # Offense count: 5
17
+ Style/Documentation:
18
+ Exclude:
19
+ - 'spec/**/*'
20
+ - 'test/**/*'
21
+ - 'lib/mutations/additional_filter.rb'
22
+ - 'lib/mutations/command_returning_array.rb'
23
+ - 'lib/mutations/command_returning_hash.rb'
24
+ - 'lib/mutations/outcome_hash_filter.rb'
25
+ - 'lib/mutations_validate_outcome.rb'
26
+
27
+ # Offense count: 2
28
+ # Cop supports --auto-correct.
29
+ Style/EmptyCaseCondition:
30
+ Exclude:
31
+ - 'lib/mutations/outcome_hash_filter.rb'
32
+
33
+ # Offense count: 2
34
+ # Cop supports --auto-correct.
35
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
36
+ # SupportedStyles: empty_lines, no_empty_lines
37
+ Style/EmptyLinesAroundBlockBody:
38
+ Exclude:
39
+ - 'spec/command_returning_array_spec.rb'
40
+ - 'spec/command_returning_hash_spec.rb'
41
+
42
+ # Offense count: 4
43
+ # Cop supports --auto-correct.
44
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
45
+ # SupportedStyles: empty_lines, no_empty_lines
46
+ Style/EmptyLinesAroundClassBody:
47
+ Exclude:
48
+ - 'spec/command_returning_array_spec.rb'
49
+ - 'spec/command_returning_hash_spec.rb'
50
+
51
+ # Offense count: 2
52
+ # Cop supports --auto-correct.
53
+ # Configuration parameters: AllowForAlignment, ForceEqualSignAlignment.
54
+ Style/ExtraSpacing:
55
+ Exclude:
56
+ - 'spec/command_returning_array_spec.rb'
57
+ - 'spec/command_returning_hash_spec.rb'
58
+
59
+ # Offense count: 1
60
+ # Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist.
61
+ # NamePrefix: is_, has_, have_
62
+ # NamePrefixBlacklist: is_, has_, have_
63
+ # NameWhitelist: is_a?
64
+ Style/PredicateName:
65
+ Exclude:
66
+ - 'spec/**/*'
67
+ - 'lib/mutations/command_returning_hash.rb'
68
+
69
+ # Offense count: 1
70
+ # Cop supports --auto-correct.
71
+ # Configuration parameters: SupportedStyles.
72
+ # SupportedStyles: compact, exploded
73
+ Style/RaiseArgs:
74
+ EnforcedStyle: compact
75
+
76
+ # Offense count: 2
77
+ # Cop supports --auto-correct.
78
+ # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SupportedStyles.
79
+ # SupportedStyles: space, no_space
80
+ Style/SpaceInsideHashLiteralBraces:
81
+ Enabled: false
82
+
83
+ # Offense count: 60
84
+ # Cop supports --auto-correct.
85
+ # Configuration parameters: EnforcedStyle, SupportedStyles, ConsistentQuotesInMultiline.
86
+ # SupportedStyles: single_quotes, double_quotes
87
+ Style/StringLiterals:
88
+ Enabled: false
89
+
90
+ # Offense count: 2
91
+ # Cop supports --auto-correct.
92
+ # Configuration parameters: ExactNameMatch, AllowPredicates, AllowDSLWriters, IgnoreClassMethods, Whitelist.
93
+ # Whitelist: to_ary, to_a, to_c, to_enum, to_h, to_hash, to_i, to_int, to_io, to_open, to_path, to_proc, to_r, to_regexp, to_str, to_s, to_sym
94
+ Style/TrivialAccessors:
95
+ Exclude:
96
+ - 'lib/mutations_validate_outcome.rb'
data/README.md CHANGED
@@ -21,7 +21,7 @@ In your code:
21
21
 
22
22
  ```diff
23
23
  - require 'mutations'
24
- + require 'mutations-validate-outcome'
24
+ + require 'mutations_validate_outcome'
25
25
  ```
26
26
 
27
27
  ## Differences against [`cypriss/mutations`](https://github.com/cypriss/mutations)
@@ -0,0 +1,73 @@
1
+ require_relative 'command_returning_hash'
2
+
3
+ module Mutations
4
+ class CommandReturningArray < CommandReturningHash
5
+ class << self
6
+ def create_outcome_attr_methods(meth, &block)
7
+ outcome_filters.send(meth, &block)
8
+ keys = outcome_filters.send("#{meth}_keys")
9
+ keys.each do |key|
10
+ define_method("outcome_#{key}") { @outputs.map { |o| o[key] } }
11
+ define_method("outcome_#{key}_present?") { @outputs.map { |o| o.key?(key) } }
12
+ end
13
+ end
14
+ private :create_outcome_attr_methods
15
+
16
+ # %i(required optional).each do |m|
17
+ # meth = :"outcome_#{m}"
18
+ # define_method(meth) do |&block|
19
+ # create_outcome_attr_methods(meth, &block)
20
+ # end
21
+ # end
22
+
23
+ def outcome_required(&block)
24
+ create_outcome_attr_methods(:outcome_required, &block)
25
+ end
26
+
27
+ def outcome_optional(&block)
28
+ create_outcome_attr_methods(:outcome_optional, &block)
29
+ end
30
+ end
31
+
32
+ def errors
33
+ return nil unless errors?
34
+
35
+ ErrorHash.new.tap do |h|
36
+ h.merge! @errors if has_errors?
37
+
38
+ case @outcome_errors
39
+ when ErrorHash then h.merge! @outcome_errors
40
+ when Hash
41
+ h.merge!(@outcome_errors.each_with_object({}) do |(idx, err), memo|
42
+ memo.merge! err[:errors].map { |k, v| [:"#{k}_#{idx}", v] }.to_h
43
+ end)
44
+ end
45
+ end
46
+ end
47
+
48
+ def run
49
+ return validation_outcome if has_errors?
50
+ validation_outcome(
51
+ execute.tap do |result|
52
+ if result.is_a?(Array)
53
+ result.each_with_index.with_object({}) do |(e, i), memo|
54
+ _, outcome_error = self.class.outcome_filters.filter(e)
55
+ outcome_error = validate_outcome(e) if outcome_error.nil?
56
+ memo[i] = { outcome: e, errors: outcome_error } unless outcome_error.nil?
57
+ end.tap do |errs|
58
+ @outcome_errors = errs unless errs.empty?
59
+ end
60
+ else
61
+ add_outcome_error :self, :type, "This mutation must return Array instance (was #{result.class})"
62
+ end
63
+ end
64
+ )
65
+ end
66
+
67
+ protected
68
+
69
+ def filtered result
70
+ @outputs = result.is_a?(Array) && has_outcome_errors? ? result.reject.with_index { |_, i| @outcome_errors[i] } : result
71
+ end
72
+ end
73
+ end
@@ -1,5 +1,5 @@
1
1
  module Mutations
2
2
  module ValidateOutcome
3
- VERSION = '0.7.22'.freeze
3
+ VERSION = '0.7.29'.freeze
4
4
  end
5
5
  end
@@ -29,6 +29,7 @@ require 'mutations/outcome_hash_filter'
29
29
  require 'mutations/outcome'
30
30
  require 'mutations/command'
31
31
  require_relative './mutations/command_returning_hash.rb'
32
+ require_relative './mutations/command_returning_array.rb'
32
33
 
33
34
  module Mutations
34
35
  class << self
@@ -48,6 +49,47 @@ module Mutations
48
49
  @cache_constants
49
50
  end
50
51
  end
52
+
53
+ class ValidationException
54
+ def inspect
55
+ # rubocop:disable Style/FormatString
56
+ oid = '%x' % (object_id << 1)
57
+ "#<Mutations::ValidationException:0x#{oid.rjust(14, '0')} @errors=<#{errors}>>"
58
+ # rubocop:enable Style/FormatString
59
+ end
60
+
61
+ def message
62
+ errors.map do |k, v|
63
+ "#{k}: “#{v.message || v.symbol}”"
64
+ end.join(', ')
65
+ end
66
+ end
67
+
68
+ class YoValidationException < ValidationException
69
+ attr_reader :cause, :owner
70
+ def initialize(e, owner = nil)
71
+ super(e.is_a?(ValidationException) ? e.errors : Mutations::ErrorHash[error: Mutations::ErrorAtom.new(e.message.to_sym, e.class.name.to_sym, message: e.message)])
72
+ @cause, @owner = e, owner || caller
73
+ end
74
+ end
75
+
76
+ class Command
77
+ class << self
78
+ def yo! *args
79
+ result = run!(*args)
80
+ case name # name of the class
81
+ when ->(_) { !const_defined?('Hashie::Mash') } then result
82
+ when /Hash\z/ then ::Hashie::Mash.new(result)
83
+ when /Array\z/ then result.map { |h| ::Hashie::Mash.new(h) }
84
+ else result
85
+ end
86
+ rescue => e
87
+ yve = YoValidationException.new(e, self)
88
+ # we’ll re-raise either if no block was given, or if the block returned truthy
89
+ raise yve if !block_given? || (yield yve)
90
+ end
91
+ end
92
+ end
51
93
  end
52
94
 
53
95
  Mutations.cache_constants = true
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mutations-validate-outcome
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.22
4
+ version: 0.7.29
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aleksei Matiushkin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-18 00:00:00.000000000 Z
11
+ date: 2016-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -125,6 +125,8 @@ files:
125
125
  - ".codeclimate.yml"
126
126
  - ".gitignore"
127
127
  - ".rspec"
128
+ - ".rubocop.yml"
129
+ - ".rubocop_todo.yml"
128
130
  - ".travis.yml"
129
131
  - CODE_OF_CONDUCT.md
130
132
  - Gemfile
@@ -132,6 +134,7 @@ files:
132
134
  - README.md
133
135
  - Rakefile
134
136
  - lib/mutations/additional_filter.rb
137
+ - lib/mutations/command_returning_array.rb
135
138
  - lib/mutations/command_returning_hash.rb
136
139
  - lib/mutations/outcome_hash_filter.rb
137
140
  - lib/mutations/version.rb