grape-swagger-representable 0.1.6 → 0.2.0

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
  SHA1:
3
- metadata.gz: a32638e1d76f204f7fedca553383f47649cf8b99
4
- data.tar.gz: ed4d7d8e9334ed7eeea881178b624b72406508a1
3
+ metadata.gz: 16bed46317a7ff343cc6c63c61b53ed61e569b34
4
+ data.tar.gz: b65dd960b7ea15d0daa0ab3a1efcee5baa03e792
5
5
  SHA512:
6
- metadata.gz: 439da9af2778912cd95009a3352b91113bee8d04e94b36bfce3fe0586e1b1dc989f384389968669251eca0c0db46cf2bfe3cb3afe72f55c9ae02514a976b801a
7
- data.tar.gz: 63a8711f3ef43c7f786c52d103f9a9d635ad7c6f26b02e911a7202256974def908a8aa8fbd6819a0cf56577dbd2fffb0961a28ed4748bec6d1ff6377da7f5837
6
+ metadata.gz: 5d9c600e84a70795644fa23e80a7a620d77da1490bda16b7f858f1bc14355779163e821846e3459c768101fc99459b6c1317fe4d2956d463cdca7f3760edf9f2
7
+ data.tar.gz: 37d417d8eaf1a7a57a397095d2d4978f4a11a369734d566263c4efb689b80492a5ecab2392dfeb7716532913916e36c5201aa971ec72af19ca31f29f2bd14b44
data/.rubocop.yml CHANGED
@@ -1,5 +1,34 @@
1
1
  AllCops:
2
2
  Exclude:
3
3
  - vendor/**/*
4
+ TargetRubyVersion: 2.4
4
5
 
5
6
  inherit_from: .rubocop_todo.yml
7
+
8
+ Layout/EmptyLinesAroundArguments:
9
+ Enabled: false
10
+
11
+ Layout/IndentHash:
12
+ EnforcedStyle: consistent
13
+
14
+ Metrics/BlockLength:
15
+ Exclude:
16
+ - spec/**/*
17
+
18
+ Metrics/ClassLength:
19
+ Max: 300
20
+
21
+ Metrics/LineLength:
22
+ Max: 120
23
+ Exclude:
24
+ - spec/**/*
25
+
26
+ Metrics/MethodLength:
27
+ Exclude:
28
+ - spec/**/*
29
+
30
+ Naming:
31
+ Enabled: false
32
+
33
+ Style/RegexpLiteral:
34
+ Enabled: false
data/.rubocop_todo.yml CHANGED
@@ -1,34 +1,29 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2017-11-19 22:40:01 +0200 using RuboCop version 0.51.0.
3
+ # on 2018-08-21 15:46:20 +0300 using RuboCop version 0.58.2.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
- # Offense count: 2
9
+ # Offense count: 3
10
10
  Metrics/AbcSize:
11
- Max: 34
12
-
13
- # Offense count: 8
14
- # Configuration parameters: CountComments, ExcludedMethods.
15
- Metrics/BlockLength:
16
- Max: 132
11
+ Max: 39
17
12
 
18
13
  # Offense count: 2
19
14
  Metrics/CyclomaticComplexity:
20
- Max: 15
15
+ Max: 19
21
16
 
22
- # Offense count: 67
17
+ # Offense count: 2
23
18
  # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
24
19
  # URISchemes: http, https
25
20
  Metrics/LineLength:
26
- Max: 160
21
+ Max: 130
27
22
 
28
23
  # Offense count: 2
29
24
  # Configuration parameters: CountComments.
30
25
  Metrics/MethodLength:
31
- Max: 36
26
+ Max: 35
32
27
 
33
28
  # Offense count: 1
34
29
  # Configuration parameters: CountKeywordArgs.
@@ -37,14 +32,7 @@ Metrics/ParameterLists:
37
32
 
38
33
  # Offense count: 2
39
34
  Metrics/PerceivedComplexity:
40
- Max: 18
41
-
42
- # Offense count: 1
43
- # Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
44
- # AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
45
- Naming/FileName:
46
- Exclude:
47
- - 'lib/grape-swagger-representable.rb'
35
+ Max: 21
48
36
 
49
37
  # Offense count: 2
50
38
  Style/Documentation:
data/Gemfile CHANGED
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in grape-swagger-representable.gemspec
4
6
  gemspec
5
7
 
6
- gem 'grape-swagger', github: 'ruby-grape/grape-swagger'
8
+ gem 'grape-swagger', git: 'https://github.com/ruby-grape/grape-swagger.git'
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
3
5
 
data/bin/pry CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'grape-swagger/representable'
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
1
2
 
2
- lib = File.expand_path('../lib', __FILE__)
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'grape-swagger/representable/version'
5
6
 
@@ -18,7 +19,7 @@ Gem::Specification.new do |s|
18
19
  s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
20
  s.require_paths = ['lib']
20
21
 
21
- s.add_runtime_dependency 'grape-swagger', '>= 0.20.4'
22
+ s.add_runtime_dependency 'grape-swagger', '>= 0.31.0'
22
23
  s.add_runtime_dependency 'representable'
23
24
 
24
25
  s.add_development_dependency 'bundler', '~> 1.12'
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'grape-swagger/representable'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'grape-swagger'
2
4
  require 'representable'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GrapeSwagger
2
4
  module Representable
3
5
  class Parser
@@ -75,33 +77,60 @@ module GrapeSwagger
75
77
  }
76
78
  end
77
79
  else
78
- attributes = parse_representer(representer)
79
- attributes = attributes.deep_merge!(parse_representer(nested)) if nested
80
+ attributes, required = combine(representer, nested)
80
81
 
81
82
  if is_a_collection
82
83
  {
83
84
  type: :array,
84
- items: {
85
+ items: with_required({
85
86
  type: :object,
86
87
  properties: attributes
87
- },
88
+ }, required),
88
89
  description: documentation[:desc] || property[:desc] || ''
89
90
  }
90
91
  else
91
- {
92
+ with_required({
92
93
  type: :object,
93
94
  properties: attributes,
94
95
  description: documentation[:desc] || property[:desc] || ''
95
- }
96
+ }, required)
96
97
  end
97
98
  end
98
99
  end
99
100
 
100
101
  def parse_representer(representer)
101
- representer.map.each_with_object({}) do |value, property|
102
+ properties = representer.map.each_with_object({}) do |value, property|
102
103
  property_name = value[:as].try(:call) || value.name
103
104
  property[property_name] = parse_representer_property(value)
104
105
  end
106
+
107
+ required = representer.map
108
+ .select { |value| value[:documentation] && value[:documentation][:required] }
109
+ .map { |value| value[:as] || value.name }
110
+
111
+ [properties, required]
112
+ end
113
+
114
+ def combine(representer, nested)
115
+ attributes, required = parse_representer(representer)
116
+ return [attributes, required] unless nested
117
+
118
+ nested_attributes, nested_required = parse_representer(nested) if nested
119
+ final_attributes = attributes.deep_merge!(nested_attributes)
120
+
121
+ overrided = (attributes.keys & nested_attributes.keys)
122
+
123
+ final_required = (required + nested_required)
124
+ .uniq
125
+ .select { |k| (overrided.include?(k) && nested_required.include?(k)) || !overrided.include?(k) }
126
+
127
+ [final_attributes, final_required]
128
+ end
129
+
130
+ def with_required(hash, required)
131
+ return hash if required.empty?
132
+ hash[:required] = required
133
+ hash
105
134
  end
106
135
  end
107
136
  end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GrapeSwagger
2
4
  module Representable
3
- VERSION = '0.1.6'.freeze
5
+ VERSION = '0.2.0'
4
6
  end
5
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape-swagger-representable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kirill Zaitsev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-03-14 00:00:00.000000000 Z
11
+ date: 2018-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grape-swagger
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.20.4
19
+ version: 0.31.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.20.4
26
+ version: 0.31.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: representable
29
29
  requirement: !ruby/object:Gem::Requirement