google-api-client 0.34.0 → 0.34.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.kokoro/continuous/linux.cfg +2 -2
  3. data/.kokoro/continuous/post.cfg +30 -0
  4. data/.kokoro/presubmit/linux.cfg +1 -1
  5. data/.kokoro/release.cfg +94 -0
  6. data/.repo-metadata.json +5 -0
  7. data/.rubocop.yml +5 -0
  8. data/CHANGELOG.md +18 -0
  9. data/Gemfile +1 -0
  10. data/Rakefile +71 -2
  11. data/generated/google/apis/bigquery_v2.rb +1 -1
  12. data/generated/google/apis/bigquery_v2/classes.rb +33 -0
  13. data/generated/google/apis/bigquery_v2/representations.rb +18 -0
  14. data/generated/google/apis/cloudshell_v1.rb +1 -1
  15. data/generated/google/apis/cloudshell_v1/classes.rb +2 -1
  16. data/generated/google/apis/cloudshell_v1alpha1.rb +1 -1
  17. data/generated/google/apis/cloudshell_v1alpha1/classes.rb +2 -1
  18. data/generated/google/apis/dlp_v2.rb +1 -1
  19. data/generated/google/apis/dlp_v2/classes.rb +25 -0
  20. data/generated/google/apis/dlp_v2/representations.rb +14 -0
  21. data/generated/google/apis/dlp_v2/service.rb +55 -43
  22. data/generated/google/apis/docs_v1.rb +1 -1
  23. data/generated/google/apis/docs_v1/classes.rb +8 -4
  24. data/generated/google/apis/genomics_v2alpha1.rb +1 -1
  25. data/generated/google/apis/recommender_v1beta1.rb +1 -1
  26. data/generated/google/apis/redis_v1.rb +1 -1
  27. data/generated/google/apis/redis_v1/classes.rb +11 -11
  28. data/generated/google/apis/redis_v1/service.rb +5 -5
  29. data/generated/google/apis/redis_v1beta1.rb +1 -1
  30. data/generated/google/apis/redis_v1beta1/classes.rb +11 -11
  31. data/generated/google/apis/redis_v1beta1/service.rb +5 -5
  32. data/generated/google/apis/securitycenter_v1.rb +1 -1
  33. data/generated/google/apis/securitycenter_v1/classes.rb +22 -18
  34. data/generated/google/apis/securitycenter_v1/service.rb +14 -12
  35. data/generated/google/apis/securitycenter_v1beta1.rb +1 -1
  36. data/generated/google/apis/securitycenter_v1beta1/classes.rb +8 -7
  37. data/generated/google/apis/securitycenter_v1beta1/service.rb +14 -12
  38. data/generated/google/apis/sheets_v4.rb +1 -1
  39. data/generated/google/apis/sheets_v4/classes.rb +768 -18
  40. data/generated/google/apis/sheets_v4/representations.rb +101 -0
  41. data/generated/google/apis/vision_v1.rb +1 -1
  42. data/generated/google/apis/vision_v1/classes.rb +66 -0
  43. data/generated/google/apis/vision_v1/representations.rb +32 -0
  44. data/generated/google/apis/vision_v1p1beta1.rb +1 -1
  45. data/generated/google/apis/vision_v1p1beta1/classes.rb +66 -0
  46. data/generated/google/apis/vision_v1p1beta1/representations.rb +32 -0
  47. data/generated/google/apis/vision_v1p2beta1.rb +1 -1
  48. data/generated/google/apis/vision_v1p2beta1/classes.rb +66 -0
  49. data/generated/google/apis/vision_v1p2beta1/representations.rb +32 -0
  50. data/lib/google/apis/core/upload.rb +4 -0
  51. data/lib/google/apis/version.rb +1 -1
  52. data/rakelib/devsite/devsite_builder.rb +126 -0
  53. data/rakelib/devsite/link_checker.rb +64 -0
  54. data/rakelib/devsite/repo_metadata.rb +56 -0
  55. metadata +9 -3
@@ -1144,6 +1144,12 @@ module Google
1144
1144
  include Google::Apis::Core::JsonObjectSupport
1145
1145
  end
1146
1146
 
1147
+ class GoogleCloudVisionV1p4beta1Celebrity
1148
+ class Representation < Google::Apis::Core::JsonRepresentation; end
1149
+
1150
+ include Google::Apis::Core::JsonObjectSupport
1151
+ end
1152
+
1147
1153
  class GoogleCloudVisionV1p4beta1ColorInfo
1148
1154
  class Representation < Google::Apis::Core::JsonRepresentation; end
1149
1155
 
@@ -1186,6 +1192,12 @@ module Google
1186
1192
  include Google::Apis::Core::JsonObjectSupport
1187
1193
  end
1188
1194
 
1195
+ class GoogleCloudVisionV1p4beta1FaceRecognitionResult
1196
+ class Representation < Google::Apis::Core::JsonRepresentation; end
1197
+
1198
+ include Google::Apis::Core::JsonObjectSupport
1199
+ end
1200
+
1189
1201
  class GoogleCloudVisionV1p4beta1GcsDestination
1190
1202
  class Representation < Google::Apis::Core::JsonRepresentation; end
1191
1203
 
@@ -3652,6 +3664,15 @@ module Google
3652
3664
  end
3653
3665
  end
3654
3666
 
3667
+ class GoogleCloudVisionV1p4beta1Celebrity
3668
+ # @private
3669
+ class Representation < Google::Apis::Core::JsonRepresentation
3670
+ property :description, as: 'description'
3671
+ property :display_name, as: 'displayName'
3672
+ property :name, as: 'name'
3673
+ end
3674
+ end
3675
+
3655
3676
  class GoogleCloudVisionV1p4beta1ColorInfo
3656
3677
  # @private
3657
3678
  class Representation < Google::Apis::Core::JsonRepresentation
@@ -3722,6 +3743,8 @@ module Google
3722
3743
  collection :landmarks, as: 'landmarks', class: Google::Apis::VisionV1p1beta1::GoogleCloudVisionV1p4beta1FaceAnnotationLandmark, decorator: Google::Apis::VisionV1p1beta1::GoogleCloudVisionV1p4beta1FaceAnnotationLandmark::Representation
3723
3744
 
3724
3745
  property :pan_angle, as: 'panAngle'
3746
+ collection :recognition_result, as: 'recognitionResult', class: Google::Apis::VisionV1p1beta1::GoogleCloudVisionV1p4beta1FaceRecognitionResult, decorator: Google::Apis::VisionV1p1beta1::GoogleCloudVisionV1p4beta1FaceRecognitionResult::Representation
3747
+
3725
3748
  property :roll_angle, as: 'rollAngle'
3726
3749
  property :sorrow_likelihood, as: 'sorrowLikelihood'
3727
3750
  property :surprise_likelihood, as: 'surpriseLikelihood'
@@ -3739,6 +3762,15 @@ module Google
3739
3762
  end
3740
3763
  end
3741
3764
 
3765
+ class GoogleCloudVisionV1p4beta1FaceRecognitionResult
3766
+ # @private
3767
+ class Representation < Google::Apis::Core::JsonRepresentation
3768
+ property :celebrity, as: 'celebrity', class: Google::Apis::VisionV1p1beta1::GoogleCloudVisionV1p4beta1Celebrity, decorator: Google::Apis::VisionV1p1beta1::GoogleCloudVisionV1p4beta1Celebrity::Representation
3769
+
3770
+ property :confidence, as: 'confidence'
3771
+ end
3772
+ end
3773
+
3742
3774
  class GoogleCloudVisionV1p4beta1GcsDestination
3743
3775
  # @private
3744
3776
  class Representation < Google::Apis::Core::JsonRepresentation
@@ -27,7 +27,7 @@ module Google
27
27
  # @see https://cloud.google.com/vision/
28
28
  module VisionV1p2beta1
29
29
  VERSION = 'V1p2beta1'
30
- REVISION = '20191011'
30
+ REVISION = '20191105'
31
31
 
32
32
  # View and manage your data across Google Cloud Platform services
33
33
  AUTH_CLOUD_PLATFORM = 'https://www.googleapis.com/auth/cloud-platform'
@@ -7442,6 +7442,38 @@ module Google
7442
7442
  end
7443
7443
  end
7444
7444
 
7445
+ # A Celebrity is a group of Faces with an identity.
7446
+ class GoogleCloudVisionV1p4beta1Celebrity
7447
+ include Google::Apis::Core::Hashable
7448
+
7449
+ # The Celebrity's description.
7450
+ # Corresponds to the JSON property `description`
7451
+ # @return [String]
7452
+ attr_accessor :description
7453
+
7454
+ # The Celebrity's display name.
7455
+ # Corresponds to the JSON property `displayName`
7456
+ # @return [String]
7457
+ attr_accessor :display_name
7458
+
7459
+ # The resource name of the preloaded Celebrity. Has the format
7460
+ # `builtin/`mid``.
7461
+ # Corresponds to the JSON property `name`
7462
+ # @return [String]
7463
+ attr_accessor :name
7464
+
7465
+ def initialize(**args)
7466
+ update!(**args)
7467
+ end
7468
+
7469
+ # Update properties of this object
7470
+ def update!(**args)
7471
+ @description = args[:description] if args.key?(:description)
7472
+ @display_name = args[:display_name] if args.key?(:display_name)
7473
+ @name = args[:name] if args.key?(:name)
7474
+ end
7475
+ end
7476
+
7445
7477
  # Color information consists of RGB channels, score, and the fraction of
7446
7478
  # the image that the color occupies in the image.
7447
7479
  class GoogleCloudVisionV1p4beta1ColorInfo
@@ -7786,6 +7818,14 @@ module Google
7786
7818
  # @return [Float]
7787
7819
  attr_accessor :pan_angle
7788
7820
 
7821
+ # Additional recognition information. Only computed if
7822
+ # image_context.face_recognition_params is provided, **and** a match is found
7823
+ # to a Celebrity in the input CelebritySet. This field is
7824
+ # sorted in order of decreasing confidence values.
7825
+ # Corresponds to the JSON property `recognitionResult`
7826
+ # @return [Array<Google::Apis::VisionV1p2beta1::GoogleCloudVisionV1p4beta1FaceRecognitionResult>]
7827
+ attr_accessor :recognition_result
7828
+
7789
7829
  # Roll angle, which indicates the amount of clockwise/anti-clockwise rotation
7790
7830
  # of the face relative to the image vertical about the axis perpendicular to
7791
7831
  # the face. Range [-180,180].
@@ -7830,6 +7870,7 @@ module Google
7830
7870
  @landmarking_confidence = args[:landmarking_confidence] if args.key?(:landmarking_confidence)
7831
7871
  @landmarks = args[:landmarks] if args.key?(:landmarks)
7832
7872
  @pan_angle = args[:pan_angle] if args.key?(:pan_angle)
7873
+ @recognition_result = args[:recognition_result] if args.key?(:recognition_result)
7833
7874
  @roll_angle = args[:roll_angle] if args.key?(:roll_angle)
7834
7875
  @sorrow_likelihood = args[:sorrow_likelihood] if args.key?(:sorrow_likelihood)
7835
7876
  @surprise_likelihood = args[:surprise_likelihood] if args.key?(:surprise_likelihood)
@@ -7865,6 +7906,31 @@ module Google
7865
7906
  end
7866
7907
  end
7867
7908
 
7909
+ # Information about a face's identity.
7910
+ class GoogleCloudVisionV1p4beta1FaceRecognitionResult
7911
+ include Google::Apis::Core::Hashable
7912
+
7913
+ # A Celebrity is a group of Faces with an identity.
7914
+ # Corresponds to the JSON property `celebrity`
7915
+ # @return [Google::Apis::VisionV1p2beta1::GoogleCloudVisionV1p4beta1Celebrity]
7916
+ attr_accessor :celebrity
7917
+
7918
+ # Recognition confidence. Range [0, 1].
7919
+ # Corresponds to the JSON property `confidence`
7920
+ # @return [Float]
7921
+ attr_accessor :confidence
7922
+
7923
+ def initialize(**args)
7924
+ update!(**args)
7925
+ end
7926
+
7927
+ # Update properties of this object
7928
+ def update!(**args)
7929
+ @celebrity = args[:celebrity] if args.key?(:celebrity)
7930
+ @confidence = args[:confidence] if args.key?(:confidence)
7931
+ end
7932
+ end
7933
+
7868
7934
  # The Google Cloud Storage location where the output will be written to.
7869
7935
  class GoogleCloudVisionV1p4beta1GcsDestination
7870
7936
  include Google::Apis::Core::Hashable
@@ -1144,6 +1144,12 @@ module Google
1144
1144
  include Google::Apis::Core::JsonObjectSupport
1145
1145
  end
1146
1146
 
1147
+ class GoogleCloudVisionV1p4beta1Celebrity
1148
+ class Representation < Google::Apis::Core::JsonRepresentation; end
1149
+
1150
+ include Google::Apis::Core::JsonObjectSupport
1151
+ end
1152
+
1147
1153
  class GoogleCloudVisionV1p4beta1ColorInfo
1148
1154
  class Representation < Google::Apis::Core::JsonRepresentation; end
1149
1155
 
@@ -1186,6 +1192,12 @@ module Google
1186
1192
  include Google::Apis::Core::JsonObjectSupport
1187
1193
  end
1188
1194
 
1195
+ class GoogleCloudVisionV1p4beta1FaceRecognitionResult
1196
+ class Representation < Google::Apis::Core::JsonRepresentation; end
1197
+
1198
+ include Google::Apis::Core::JsonObjectSupport
1199
+ end
1200
+
1189
1201
  class GoogleCloudVisionV1p4beta1GcsDestination
1190
1202
  class Representation < Google::Apis::Core::JsonRepresentation; end
1191
1203
 
@@ -3652,6 +3664,15 @@ module Google
3652
3664
  end
3653
3665
  end
3654
3666
 
3667
+ class GoogleCloudVisionV1p4beta1Celebrity
3668
+ # @private
3669
+ class Representation < Google::Apis::Core::JsonRepresentation
3670
+ property :description, as: 'description'
3671
+ property :display_name, as: 'displayName'
3672
+ property :name, as: 'name'
3673
+ end
3674
+ end
3675
+
3655
3676
  class GoogleCloudVisionV1p4beta1ColorInfo
3656
3677
  # @private
3657
3678
  class Representation < Google::Apis::Core::JsonRepresentation
@@ -3722,6 +3743,8 @@ module Google
3722
3743
  collection :landmarks, as: 'landmarks', class: Google::Apis::VisionV1p2beta1::GoogleCloudVisionV1p4beta1FaceAnnotationLandmark, decorator: Google::Apis::VisionV1p2beta1::GoogleCloudVisionV1p4beta1FaceAnnotationLandmark::Representation
3723
3744
 
3724
3745
  property :pan_angle, as: 'panAngle'
3746
+ collection :recognition_result, as: 'recognitionResult', class: Google::Apis::VisionV1p2beta1::GoogleCloudVisionV1p4beta1FaceRecognitionResult, decorator: Google::Apis::VisionV1p2beta1::GoogleCloudVisionV1p4beta1FaceRecognitionResult::Representation
3747
+
3725
3748
  property :roll_angle, as: 'rollAngle'
3726
3749
  property :sorrow_likelihood, as: 'sorrowLikelihood'
3727
3750
  property :surprise_likelihood, as: 'surpriseLikelihood'
@@ -3739,6 +3762,15 @@ module Google
3739
3762
  end
3740
3763
  end
3741
3764
 
3765
+ class GoogleCloudVisionV1p4beta1FaceRecognitionResult
3766
+ # @private
3767
+ class Representation < Google::Apis::Core::JsonRepresentation
3768
+ property :celebrity, as: 'celebrity', class: Google::Apis::VisionV1p2beta1::GoogleCloudVisionV1p4beta1Celebrity, decorator: Google::Apis::VisionV1p2beta1::GoogleCloudVisionV1p4beta1Celebrity::Representation
3769
+
3770
+ property :confidence, as: 'confidence'
3771
+ end
3772
+ end
3773
+
3742
3774
  class GoogleCloudVisionV1p4beta1GcsDestination
3743
3775
  # @private
3744
3776
  class Representation < Google::Apis::Core::JsonRepresentation
@@ -138,6 +138,10 @@ module Google
138
138
  @state = :start
139
139
  @upload_url = nil
140
140
  @offset = 0
141
+ # Prevent the command from populating the body with form encoding, by
142
+ # asserting that it already has a body. Form encoding is never used
143
+ # by upload requests.
144
+ self.body = '' unless self.body
141
145
  super
142
146
  end
143
147
 
@@ -15,7 +15,7 @@
15
15
  module Google
16
16
  module Apis
17
17
  # Client library version
18
- VERSION = '0.34.0'.freeze
18
+ VERSION = '0.34.1'.freeze
19
19
 
20
20
  # Current operating system
21
21
  # @private
@@ -0,0 +1,126 @@
1
+ require "pathname"
2
+ require "tmpdir"
3
+
4
+ require_relative "repo_metadata.rb"
5
+
6
+ class DevsiteBuilder
7
+ def initialize build_tag = nil
8
+ @build_tag = build_tag || latest_tag
9
+ @output_dir = "doc"
10
+ end
11
+
12
+ def build tag
13
+ checkout_tag tag
14
+ doc_path = tmp_dir + @output_dir
15
+ FileUtils.remove_dir doc_path if Dir.exist? doc_path
16
+ markup = "--markup markdown --markup-provider redcarpet"
17
+
18
+ Dir.chdir tmp_dir do
19
+ cmds = ["-o #{@output_dir}", markup]
20
+ cmd "yard --verbose #{cmds.join ' '}"
21
+ end
22
+ metadata.build doc_path
23
+ end
24
+
25
+ def upload
26
+ Dir.chdir tmp_dir + @output_dir do
27
+ opts = [
28
+ "--credentials=#{ENV['KOKORO_KEYSTORE_DIR']}/73713_docuploader_service_account",
29
+ "--staging-bucket=#{ENV.fetch 'STAGING_BUCKET', 'docs-staging'}",
30
+ "--metadata-file=./docs.metadata"
31
+ ]
32
+ cmd "python3 -m docuploader upload . #{opts.join ' '}"
33
+ end
34
+ end
35
+
36
+ def publish tag = nil
37
+ build(tag || @build_tag)
38
+ upload
39
+ end
40
+
41
+ def publish_if_missing tag = nil
42
+ tag ||= @build_tag
43
+ puts tag
44
+ puts missing? tag
45
+ publish tag if missing? tag
46
+ end
47
+
48
+ def missing? tag
49
+ require "httparty"
50
+
51
+ url = "https://googleapis.dev/ruby/google-api-client/v#{version tag}/index.html"
52
+ response = HTTParty.get url
53
+ response.code != 200
54
+ rescue StandardError
55
+ true
56
+ end
57
+
58
+ def cmd line
59
+ puts line
60
+ output = `#{line}`
61
+ puts output
62
+ output
63
+ end
64
+
65
+ def metadata
66
+ return @metadata if @metadata
67
+
68
+ metadata_json = "#{tmp_dir}/.repo-metadata.json"
69
+ @metadata = RepoMetadata.from_source metadata_json if File.file? metadata_json
70
+ @metadata ||= RepoMetadata.from_source "name" => "google-api-client",
71
+ "distribution-name" => "google-api-client",
72
+ "language" => "ruby"
73
+ @metadata["version"] = version @build_tag
74
+ @metadata
75
+ end
76
+
77
+ def checkout_tag git_tag
78
+ Dir.chdir tmp_dir do
79
+ `git checkout tags/#{git_tag} -b v#{version git_tag}`
80
+ end
81
+ end
82
+
83
+ def version git_tag
84
+ m = git_tag.match(/(\d+\.\d+\.\d+)/)
85
+ return m if m.nil?
86
+ m[0]
87
+ end
88
+
89
+ def versions
90
+ Dir.chdir tmp_dir do
91
+ tags.map { |t| version t }.reject(&:nil?).sort_by { |v| Gem::Version.new v }.reverse
92
+ end
93
+ end
94
+
95
+ def tags
96
+ Dir.chdir tmp_dir do
97
+ `git tag`.split "\n"
98
+ end
99
+ end
100
+
101
+ def latest_version
102
+ @latest_version ||= versions.first
103
+ end
104
+
105
+ def latest_tag
106
+ @latest_tag ||= tags.select { |t| t.include? latest_version }.min_by(&:size)
107
+ end
108
+
109
+ def tmp_dir
110
+ return @tmp_dir if @tmp_dir
111
+
112
+ tmp = Dir.tmpdir
113
+ dir_name = "google-api-ruby-client"
114
+ @tmp_dir = Pathname.new(tmp) + dir_name
115
+ FileUtils.remove_dir @tmp_dir if Dir.exist? @tmp_dir
116
+
117
+ Dir.chdir tmp do
118
+ `git clone https://github.com/googleapis/google-api-ruby-client.git`
119
+ end
120
+ Dir.chdir @tmp_dir do
121
+ `git fetch`
122
+ end
123
+
124
+ @tmp_dir
125
+ end
126
+ end
@@ -0,0 +1,64 @@
1
+ require "open3"
2
+
3
+ class LinkChecker
4
+ def initialize
5
+ @failed = false
6
+ end
7
+
8
+ def run
9
+ job_info
10
+ git_commit = ENV.fetch "KOKORO_GITHUB_COMMIT", "master"
11
+
12
+ markdown_files = Dir.glob "**/*.md"
13
+ broken_markdown_links = check_links(markdown_files,
14
+ "https://github.com/googleapis/google-api-ruby-client/tree/#{git_commit}",
15
+ " --skip '^(?!(\\Wruby.*google|.*google.*\\Wruby|.*cloud\\.google\\.com))'")
16
+
17
+ broken_devsite_links = check_links(["google-api-client"],
18
+ "https://googleapis.dev/ruby",
19
+ "/latest/ --recurse --skip https:.*github.*")
20
+
21
+ puts_broken_links broken_markdown_links
22
+ puts_broken_links broken_devsite_links
23
+ end
24
+
25
+ def check_links location_list, base, tail
26
+ broken_links = Hash.new { |h, k| h[k] = [] }
27
+ location_list.each do |location|
28
+ out, err, st = Open3.capture3 "npx linkinator #{base}/#{location}#{tail}"
29
+ puts out
30
+ unless st.to_i.zero?
31
+ @failed = true
32
+ puts err
33
+ end
34
+ checked_links = out.split "\n"
35
+ checked_links.select! { |link| link =~ /\[\d+\]/ && !link.include?("[200]") }
36
+ unless checked_links.empty?
37
+ @failed = true
38
+ broken_links[location] += checked_links
39
+ end
40
+ end
41
+ broken_links
42
+ end
43
+
44
+ def puts_broken_links link_hash
45
+ link_hash.each do |location, links|
46
+ puts "#{location} contains the following broken links:"
47
+ links.each { |link| puts " #{link}" }
48
+ puts ""
49
+ end
50
+ end
51
+
52
+ def job_info
53
+ line_length = "Using Ruby - #{RUBY_VERSION}".length + 8
54
+ puts
55
+ puts "#" * line_length
56
+ puts "### Using Ruby - #{RUBY_VERSION} ###"
57
+ puts "#" * line_length
58
+ puts
59
+ end
60
+
61
+ def exit_status
62
+ @failed ? 1 : 0
63
+ end
64
+ end
@@ -0,0 +1,56 @@
1
+ require "json"
2
+
3
+ class RepoMetadata
4
+ attr_accessor :data
5
+
6
+ def initialize data
7
+ @data = data
8
+ normalize_data!
9
+ end
10
+
11
+ def allowed_fields
12
+ [
13
+ "name", "version", "language", "distribution-name",
14
+ "product-page", "github-repository", "issue-tracker"
15
+ ]
16
+ end
17
+
18
+ def build output_directory
19
+ fields = @data.to_a.map { |kv| "--#{kv[0]} #{kv[1]}" }
20
+ Dir.chdir output_directory do
21
+ cmd "python3 -m docuploader create-metadata #{fields.join ' '}"
22
+ end
23
+ end
24
+
25
+ def normalize_data!
26
+ @data.delete_if { |k, _| !allowed_fields.include?(k) }
27
+ end
28
+
29
+ def [] key
30
+ data[key]
31
+ end
32
+
33
+ def []= key, value
34
+ @data[key] = value
35
+ end
36
+
37
+ def cmd line
38
+ puts line
39
+ output = `#{line}`
40
+ puts output
41
+ output
42
+ end
43
+
44
+ def self.from_source source
45
+ if source.is_a? RepoMetadata
46
+ data = source.data
47
+ elsif source.is_a? Hash
48
+ data = source
49
+ elsif File.file? source
50
+ data = JSON.parse File.read(source)
51
+ else
52
+ raise "Source must be a path, hash, or RepoMetadata instance"
53
+ end
54
+ RepoMetadata.new data
55
+ end
56
+ end