github_api 0.9.5 → 0.9.6

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -20,12 +20,12 @@ Supports all the API methods(nearly 200). It's build in a modular way, that is,
20
20
  * Fully customizable including advanced middleware stack construction.
21
21
  * Its comprehensive, you can request all GitHub API resources.
22
22
  * Flexible arguments parsing, you can write expressive and natural queries.
23
- * Requests pagination with convenient DSL.
23
+ * Requests pagination with convenient DSL and automatic option.
24
24
  * Easy error handling split for client and server type errors.
25
25
  * Supports multithreaded environment.
26
26
  * Custom mime types specification (Status: In Progess)
27
27
  * Request results caching (Status: TODO)
28
- * Fully tested with test coverage above 90% with over 1,500 specs and 700 features.
28
+ * Fully tested with test coverage above 90% with over 1,500 specs and 800 features.
29
29
 
30
30
  ## Installation
31
31
 
@@ -2,7 +2,7 @@ Feature: Github API auto pagination
2
2
 
3
3
  The gem permits to auto paginate resources.
4
4
 
5
- Scenario: Passing auto_pagionation param to instances
5
+ Scenario: Passing auto_pagionation param to request
6
6
 
7
7
  Given I have "Github::Repos" instance
8
8
  When I want to list resources
@@ -26,3 +26,14 @@ Feature: Github API auto pagination
26
26
  And the response type should be JSON
27
27
  And the response should have 134 items
28
28
 
29
+ Scenario: Paginating single resource
30
+
31
+ Given I have "Github::Repos" instance
32
+ And I pass the following request options:
33
+ | user | repo | auto_pagination |
34
+ | wycats | thor | true |
35
+ When I want to get resource
36
+ And I make request within a cassette named "auto_pagination/repos/get"
37
+ Then the response status should be 200
38
+ And the response type should be JSON
39
+ And the response body name should be thor
@@ -0,0 +1,86 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://<BASIC_AUTH>@api.github.com/repos/wycats/thor?access_token=<TOKEN>
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/vnd.github.v3.full+json,application/vnd.github.beta.full+json;q=0.7,application/vnd.github+json;q=0.5,application/json;q=0.1
12
+ Accept-Charset:
13
+ - utf-8
14
+ User-Agent:
15
+ - Github Ruby Gem 0.9.5
16
+ Content-Type:
17
+ - application/json
18
+ Accept-Encoding:
19
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Server:
26
+ - GitHub.com
27
+ Date:
28
+ - Sat, 06 Apr 2013 19:45:34 GMT
29
+ Content-Type:
30
+ - application/json; charset=utf-8
31
+ Transfer-Encoding:
32
+ - chunked
33
+ Connection:
34
+ - keep-alive
35
+ Status:
36
+ - 200 OK
37
+ X-Ratelimit-Limit:
38
+ - '5000'
39
+ X-Ratelimit-Remaining:
40
+ - '4995'
41
+ Vary:
42
+ - Accept, Authorization, Cookie
43
+ Cache-Control:
44
+ - private, max-age=60, s-maxage=60
45
+ Last-Modified:
46
+ - Sat, 06 Apr 2013 17:25:26 GMT
47
+ Etag:
48
+ - ! '"19532db9c9ae7284243986dd05c79ea6"'
49
+ X-Github-Media-Type:
50
+ - github.v3; param=full; format=json
51
+ X-Content-Type-Options:
52
+ - nosniff
53
+ Content-Encoding:
54
+ - gzip
55
+ body:
56
+ encoding: ASCII-8BIT
57
+ string: !binary |-
58
+ H4sIAAAAAAAAA51Yy46rOBD9lQhpVpPEhM6jG2l0ZzbzAaOezWwiBxywGgyy
59
+ TUdp1P8+pwwEOrnqXGeT8KhzfFwuu6poA5kG8WoTbXbzQPFSBHFg80oH8+DY
60
+ FMW+f3Q6J9wa1r+pTkroIG6DosqkAqJ7DQyRrecBf+eW632jC7zMra1NzJgR
61
+ SaPFMtPd22VSlay7ZOvoebXd8SeR7KLoaXPgL7vVahu9ROv1S7QNX36kfwws
62
+ PFo/L8WSv/GSy6USlnFjhDXLTNq8ORDrb9HfsuSZMLgYRpteLxoj9GIdhcta
63
+ ZRA92OxJfXBPCwBf58VrORmcEblhF4/ktiyuHDEqHc2OVVFUJyCvbL8hZxcM
64
+ LZbDS5V544EhH0hjfcZ29i2jP7jtEwwGK65F6jF+j2iZi6fPlmlRV46qOZhE
65
+ y9rKSvmI+oIDT6UzruQH9+UBzgBOcnyGd/bAiXehvJzZAVpWa/nOkzO5QItE
66
+ yHe405vsCgkue65pW/+LwAw+54EbxeLJkRdGzLE/70fosPNTcVkYMP416+9U
67
+ NjtqHB6nSr/NbM7tDL4oeCLMTPM3MeMqnRlcQMwRJpehv91Izp39DhnGJ/Sd
68
+ JbmBYZ8AhKHfxNkbS5iW4beP8gT7jB8qzW11b6/eCvkCbtn0ltbcCl56C3Qg
69
+ gPOq8veMAwEsjWnEL4Xa7aQc1rAhhlVTHrCZf3Eb3NJ1PIDjWJeZEsLbIxdg
70
+ 685iknLQXCW5P9WAa1l35VaJZ96SCNMy/DoxRXXwZkDOYA7YMpNzosGT/SNa
71
+ iKnTMyHS4viQJMJdFFn9wGo5OQS80CAtWCyct54Bx9p+YgVXWUN1wPc56TYG
72
+ L0C4mZJUxj/uZuZblhEJmqRSVstD89ixMWJJUZcdscu8JzaBjkQuzfq6aJpq
73
+ 3fTKUt7Lebcu6mFfYvpBKoqjazq6v5+Kfy6LcC0bT7PuiOwZfb3Vn5GDHtaO
74
+ vBQYj2nscKz9veY2pxMB9DXXwldcD2PtgRvxuVwu21xwV9KVQj+wezoU4Fwn
75
+ OWoYXz3tgEPeLrl1deGR5KSoE4uKp95hfwGCpFsKX00dahoPNbojbyEONGUp
76
+ ZSGMrZT/GTUip3yqsvIo0avdr5xvw/4LuP1hpErEnBfFHFFlZSIRZ2gWaCVQ
77
+ Agn/2XcoyEWl6OJVC9Sh6Z5b1JJRGD4vws0i3L1GYRzu4qfVf7Bp6nRqs3pa
78
+ hOtFuH1d7eJoE0dbsqkbk480vcnmdbWJ12AKyYSSZVds4gq96E0L5gpMauNg
79
+ bEw+Gv85msaTLrg3TQqs3VUwfc/9fn3U/twcMvKqFDXSV99CQ/XpdFqeRd6k
80
+ 6H7tB7W6pFZ+wGS9iebBiVtUOUgLSdUoOHW1XYe0WF0aBM8/zeFMzNzsu4gO
81
+ Yqsb6gHwZNwlk4cn+SYHo6747rmjEH1+KbWu+j5fIbbRctVC9dyDih00dCV4
82
+ 7EATkyCml4PsQXAqjrwp7L6ruSC75Maid8FKC11COAU3fX7gaUmfH/o+hsJg
83
+ clPg2wNNDh0PvhJQZzIIgorP/wHunZF3+BAAAA==
84
+ http_version: !!null
85
+ recorded_at: Sat, 06 Apr 2013 19:45:34 GMT
86
+ recorded_with: VCR 2.4.0
@@ -80,6 +80,10 @@ Then /^the response (.*) link should contain:$/ do |type, table|
80
80
  end
81
81
  end
82
82
 
83
+ Then /^the response body (.*) should be (.*)$/ do |attr, result|
84
+ expect(@response.body[attr]).to eql result
85
+ end
86
+
83
87
  Then /^the response (.*) item (.*) should be (.*)$/ do |action, field, result|
84
88
  if action == 'first'
85
89
  @response.first.send(field).should eql result
@@ -12,20 +12,21 @@ module Github
12
12
  :Milestones => 'milestones'
13
13
 
14
14
  VALID_ISSUE_PARAM_NAMES = %w[
15
+ assignee
16
+ body
17
+ creator
18
+ direction
15
19
  filter
16
- state
17
20
  labels
18
- sort
19
- direction
20
- since
21
21
  milestone
22
- assignee
23
22
  mentioned
24
- title
25
- body
26
- resource
27
23
  mime_type
28
24
  org
25
+ resource
26
+ since
27
+ sort
28
+ state
29
+ title
29
30
  ].freeze
30
31
 
31
32
  VALID_ISSUE_PARAM_VALUES = {
@@ -108,6 +109,7 @@ module Github
108
109
  # * String User login
109
110
  # * <tt>none</tt> for Issues with no assigned User.
110
111
  # * <tt>*</tt> for Issues with any assigned User.
112
+ # <tt>:creator</tt> String User login
111
113
  # <tt>:mentioned</tt> String User login
112
114
  # <tt>:sort</tt> - <tt>created</tt>, <tt>updated</tt>, <tt>comments</tt>,
113
115
  # default: <tt>created</tt>
@@ -23,7 +23,7 @@ module Github
23
23
  # instances or just per given request.
24
24
  #
25
25
  def auto_paginate(auto=false)
26
- if current_api.auto_pagination? || auto
26
+ if (current_api.auto_pagination? || auto) && self.body.is_a?(Array)
27
27
  resources_bodies = []
28
28
  each_page { |resource| resources_bodies += resource.body }
29
29
  self.body = resources_bodies
@@ -25,12 +25,12 @@ module Github
25
25
  # Create a fork for the authenticated user
26
26
  #
27
27
  # = Inputs
28
- # * <tt>:org</tt> - Optional string - the name of the service that is being called.
28
+ # * <tt>:organization</tt> - Optional string - the name of the service that is being called.
29
29
  #
30
30
  # = Examples
31
31
  # github = Github.new
32
32
  # github.repos.forks.create 'user-name', 'repo-name',
33
- # "org" => "github"
33
+ # "organization" => "github"
34
34
  #
35
35
  def create(*args)
36
36
  arguments(args, :required => [:user, :repo])
@@ -56,12 +56,12 @@ module Github
56
56
  #
57
57
  # = Examples
58
58
  # github = Github.new
59
- # github.repos.hooks.get 'user-name', 'repo-name'
59
+ # github.repos.hooks.get 'user-name', 'repo-name', 'hook-id'
60
60
  #
61
61
  def get(*args)
62
- arguments(args, :required => [:user, :repo, :hook_id])
62
+ arguments(args, :required => [:user, :repo, :id])
63
63
 
64
- get_request("/repos/#{user}/#{repo}/hooks/#{hook_id}", arguments.params)
64
+ get_request("/repos/#{user}/#{repo}/hooks/#{id}", arguments.params)
65
65
  end
66
66
  alias :find :get
67
67
 
@@ -104,7 +104,7 @@ module Github
104
104
  #
105
105
  # = Examples
106
106
  # github = Github.new
107
- # github.repos.hooks.edit 'user-name', 'repo-name',
107
+ # github.repos.hooks.edit 'user-name', 'repo-name', 'hook-id',
108
108
  # "name" => "campfire",
109
109
  # "active" => true,
110
110
  # "config" => {
@@ -114,12 +114,12 @@ module Github
114
114
  # }
115
115
  #
116
116
  def edit(*args)
117
- arguments(args, :required => [:user, :repo, :hook_id]) do
117
+ arguments(args, :required => [:user, :repo, :id]) do
118
118
  sift VALID_HOOK_PARAM_NAMES, :recursive => false
119
119
  assert_required REQUIRED_PARAMS
120
120
  end
121
121
 
122
- patch_request("/repos/#{user}/#{repo}/hooks/#{hook_id}", arguments.params)
122
+ patch_request("/repos/#{user}/#{repo}/hooks/#{id}", arguments.params)
123
123
  end
124
124
 
125
125
  # Test a hook
@@ -131,10 +131,10 @@ module Github
131
131
  # github.repos.hooks.test 'user-name', 'repo-name', 'hook-id'
132
132
  #
133
133
  def test(*args)
134
- arguments(args, :required => [:user, :repo, :hook_id])
134
+ arguments(args, :required => [:user, :repo, :id])
135
135
  params = arguments.params
136
136
 
137
- post_request("/repos/#{user}/#{repo}/hooks/#{hook_id}/test", params)
137
+ post_request("/repos/#{user}/#{repo}/hooks/#{id}/test", params)
138
138
  end
139
139
 
140
140
  # Delete a hook
@@ -144,10 +144,10 @@ module Github
144
144
  # github.repos.hooks.delete 'user-name', 'repo-name', 'hook-id'
145
145
  #
146
146
  def delete(*args)
147
- arguments(args, :required => [:user, :repo, :hook_id])
147
+ arguments(args, :required => [:user, :repo, :id])
148
148
  params = arguments.params
149
149
 
150
- delete_request("/repos/#{user}/#{repo}/hooks/#{hook_id}", params)
150
+ delete_request("/repos/#{user}/#{repo}/hooks/#{id}", params)
151
151
  end
152
152
 
153
153
  end # Repos::Hooks
@@ -9,7 +9,7 @@ module Github
9
9
  METHODS_WITH_BODIES = [ :post, :put, :patch ]
10
10
 
11
11
  def get_request(path, params={}, options={})
12
- request(:get, path, params, options)
12
+ request(:get, path, params, options).auto_paginate
13
13
  end
14
14
 
15
15
  def patch_request(path, params={}, options={})
@@ -50,7 +50,7 @@ module Github
50
50
  request.body = extract_data_from_params(params) unless params.empty?
51
51
  end
52
52
  end
53
- ResponseWrapper.new(response, self).auto_paginate
53
+ ResponseWrapper.new(response, self)
54
54
  end
55
55
 
56
56
  private
@@ -4,7 +4,7 @@ module Github
4
4
  module VERSION
5
5
  MAJOR = 0
6
6
  MINOR = 9
7
- PATCH = 5
7
+ PATCH = 6
8
8
  BUILD = nil
9
9
 
10
10
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.');
@@ -2,15 +2,15 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
-
6
5
  describe Github::Request do
7
6
  let(:github) { Github::API.new }
8
7
  let(:path) { 'github.api/repos/users' }
9
8
  let(:params) { {} }
10
9
  let(:options) { {} }
10
+ let(:response) { double('response').as_null_object }
11
11
 
12
12
  it "knows how to make get request" do
13
- github.should_receive(:request).with(:get, path, params, options)
13
+ github.should_receive(:request).with(:get, path, params, options) { response }
14
14
  github.get_request path, params, options
15
15
  end
16
16
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.5
4
+ version: 0.9.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-01 00:00:00.000000000Z
12
+ date: 2013-04-06 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: hashie
16
- requirement: &2160880680 !ruby/object:Gem::Requirement
16
+ requirement: &2154609900 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '1.2'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2160880680
24
+ version_requirements: *2154609900
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: faraday
27
- requirement: &2160880120 !ruby/object:Gem::Requirement
27
+ requirement: &2154609200 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.8.1
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2160880120
35
+ version_requirements: *2154609200
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: multi_json
38
- requirement: &2160879660 !ruby/object:Gem::Requirement
38
+ requirement: &2154608740 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '1.4'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *2160879660
46
+ version_requirements: *2154608740
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: oauth2
49
- requirement: &2160879260 !ruby/object:Gem::Requirement
49
+ requirement: &2154608360 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *2160879260
57
+ version_requirements: *2154608360
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: nokogiri
60
- requirement: &2160878720 !ruby/object:Gem::Requirement
60
+ requirement: &2154607760 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.5.2
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *2160878720
68
+ version_requirements: *2154607760
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
- requirement: &2160878220 !ruby/object:Gem::Requirement
71
+ requirement: &2154607260 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *2160878220
79
+ version_requirements: *2154607260
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: cucumber
82
- requirement: &2160877760 !ruby/object:Gem::Requirement
82
+ requirement: &2154606800 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *2160877760
90
+ version_requirements: *2154606800
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: webmock
93
- requirement: &2160877300 !ruby/object:Gem::Requirement
93
+ requirement: &2154606340 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: 1.9.0
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *2160877300
101
+ version_requirements: *2154606340
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: vcr
104
- requirement: &2160876840 !ruby/object:Gem::Requirement
104
+ requirement: &2154605880 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ~>
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: 2.4.0
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *2160876840
112
+ version_requirements: *2154605880
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: simplecov
115
- requirement: &2160876380 !ruby/object:Gem::Requirement
115
+ requirement: &2154605420 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ~>
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: 0.7.1
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *2160876380
123
+ version_requirements: *2154605420
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: coveralls
126
- requirement: &2160875900 !ruby/object:Gem::Requirement
126
+ requirement: &2154604960 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ~>
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: 0.5.8
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *2160875900
134
+ version_requirements: *2154604960
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: guard
137
- requirement: &2160875500 !ruby/object:Gem::Requirement
137
+ requirement: &2154604560 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ! '>='
@@ -142,10 +142,10 @@ dependencies:
142
142
  version: '0'
143
143
  type: :development
144
144
  prerelease: false
145
- version_requirements: *2160875500
145
+ version_requirements: *2154604560
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: guard-rspec
148
- requirement: &2160875040 !ruby/object:Gem::Requirement
148
+ requirement: &2154604060 !ruby/object:Gem::Requirement
149
149
  none: false
150
150
  requirements:
151
151
  - - ! '>='
@@ -153,10 +153,10 @@ dependencies:
153
153
  version: '0'
154
154
  type: :development
155
155
  prerelease: false
156
- version_requirements: *2160875040
156
+ version_requirements: *2154604060
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: guard-cucumber
159
- requirement: &2160874620 !ruby/object:Gem::Requirement
159
+ requirement: &2154603540 !ruby/object:Gem::Requirement
160
160
  none: false
161
161
  requirements:
162
162
  - - ! '>='
@@ -164,10 +164,10 @@ dependencies:
164
164
  version: '0'
165
165
  type: :development
166
166
  prerelease: false
167
- version_requirements: *2160874620
167
+ version_requirements: *2154603540
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: rake
170
- requirement: &2160874200 !ruby/object:Gem::Requirement
170
+ requirement: &2154603000 !ruby/object:Gem::Requirement
171
171
  none: false
172
172
  requirements:
173
173
  - - ! '>='
@@ -175,10 +175,10 @@ dependencies:
175
175
  version: '0'
176
176
  type: :development
177
177
  prerelease: false
178
- version_requirements: *2160874200
178
+ version_requirements: *2154603000
179
179
  - !ruby/object:Gem::Dependency
180
180
  name: bundler
181
- requirement: &2160873780 !ruby/object:Gem::Requirement
181
+ requirement: &2154602420 !ruby/object:Gem::Requirement
182
182
  none: false
183
183
  requirements:
184
184
  - - ! '>='
@@ -186,7 +186,7 @@ dependencies:
186
186
  version: '0'
187
187
  type: :development
188
188
  prerelease: false
189
- version_requirements: *2160873780
189
+ version_requirements: *2154602420
190
190
  description: ! ' Ruby wrapper that supports all of the GitHub API v3 methods(nearly
191
191
  200). It''s build in a modular way, that is, you can either instantiate the whole
192
192
  api wrapper Github.new or use parts of it e.i. Github::Repos.new if working solely
@@ -225,6 +225,7 @@ files:
225
225
  - features/cassettes/arguments/orgs/get.yml
226
226
  - features/cassettes/arguments/pulls/get.yml
227
227
  - features/cassettes/arguments/repo_commits/get.yml
228
+ - features/cassettes/auto_pagination/repos/get.yml
228
229
  - features/cassettes/auto_pagination/repos/global_list.yml
229
230
  - features/cassettes/auto_pagination/repos/list.yml
230
231
  - features/cassettes/emojis/list.yml