grape-swagger-representable 0.1.6 → 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
  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