komoju 0.0.0 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,287 @@
1
+ require 'helper'
2
+
3
+ class SchemaTest < MiniTest::Unit::TestCase
4
+ # Schema.to_s returns a simple human-readable description of the schema
5
+ # instance with the description embedded in it.
6
+ def test_to_s
7
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
8
+ assert_equal(
9
+ '#<Heroics::Schema description="Sample schema for use in tests.">',
10
+ schema.to_s)
11
+ end
12
+
13
+ # Schema.resource returns a ResourceSchema for the named resource.
14
+ def test_resource
15
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
16
+ assert_equal('resource', schema.resource('resource').name)
17
+ end
18
+
19
+ # Schema.resource raises a SchemaError is an unknown resource is requested.
20
+ def test_resource_with_unknown_name
21
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
22
+ error = assert_raises Heroics::SchemaError do
23
+ schema.resource('unknown-resource')
24
+ end
25
+ assert_equal("Unknown resource 'unknown-resource'.", error.message)
26
+ end
27
+
28
+ # Schema.resources returns a sequence of ResourceSchema children.
29
+ def test_resources
30
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
31
+ assert_equal(['resource', 'another-resource'],
32
+ schema.resources.map(&:name))
33
+ end
34
+ end
35
+
36
+ class ResourceSchemaTest < MiniTest::Unit::TestCase
37
+ # ResourceSchema.link returns a LinkSchema for the named link.
38
+ def test_link
39
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
40
+ link = schema.resource('resource').link('list')
41
+ assert_equal('list', link.name)
42
+ end
43
+
44
+ # ResourceSchema.link raises a SchemaError is an unknown link is requested.
45
+ def test_link_with_unknown_name
46
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
47
+ error = assert_raises Heroics::SchemaError do
48
+ schema.resource('resource').link('unknown-link')
49
+ end
50
+ assert_equal("Unknown link 'unknown-link'.", error.message)
51
+ end
52
+
53
+ # ResourceSchema.links returns an array of LinkSchema children.
54
+ def test_links
55
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
56
+ assert_equal(
57
+ ['list', 'info', 'identify_resource', 'create', 'submit', 'update', 'delete'],
58
+ schema.resource('resource').links.map { |link| link.name })
59
+ end
60
+ end
61
+
62
+ class LinkSchemaTest < MiniTest::Unit::TestCase
63
+ # LinkSchema.name returns the sanitized link name.
64
+ def test_name
65
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
66
+ assert_equal('list', schema.resource('resource').link('list').name)
67
+ end
68
+
69
+ # LinkSchema.resource_name returns the parent resource name.
70
+ def test_resource_name
71
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
72
+ assert_equal('resource',
73
+ schema.resource('resource').link('list').resource_name)
74
+ end
75
+
76
+ # LinkSchema.description returns the link description.
77
+ def test_description
78
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
79
+ assert_equal('Show all sample resources',
80
+ schema.resource('resource').link('list').description)
81
+ end
82
+
83
+ # LinkSchema.parameters returns an empty array if the link doesn't require
84
+ # parameters.
85
+ def test_parameters_without_parameters
86
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
87
+ link = schema.resource('resource').link('list')
88
+ assert_equal([], link.parameters)
89
+ end
90
+
91
+ # LinkSchema.parameters returns an array of named parameter required to
92
+ # invoke the link correctly.
93
+ def test_parameters
94
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
95
+ link = schema.resource('resource').link('info')
96
+ assert_equal(['uuid_field'], link.parameters)
97
+ end
98
+
99
+ # LinkSchema.parameters returns a parameter name for multiple parameters
100
+ # when the parameter contains a 'oneOf' element that references more than
101
+ # one parameter.
102
+ def test_parameters_with_one_of_field
103
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
104
+ link = schema.resource('resource').link('identify_resource')
105
+ assert_equal(['uuid_field|email_field'], link.parameters)
106
+ end
107
+
108
+ # LinkSchema.parameter_details returns an empty array if the link doesn't
109
+ # require parameters.
110
+ def test_parameter_details_without_parameters
111
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
112
+ link = schema.resource('another-resource').link('create')
113
+ assert_equal([], link.parameter_details)
114
+ end
115
+
116
+ # LinkSchema.parameter_details returns an options parameter if the
117
+ # link is for a collection of instances.
118
+ def test_parameter_details_with_collection_options_parameter
119
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
120
+ link = schema.resource('resource').link('list')
121
+ parameters = link.parameter_details
122
+ parameter = parameters[0]
123
+ assert_equal('collection_options', parameter.name)
124
+ assert_equal('collection_options = {}', parameter.signature)
125
+ assert_equal('additional collection options to pass with the request', parameter.description)
126
+ end
127
+
128
+ # LinkSchema.parameter_details returns an array of Parameter with information
129
+ # about the parameters accepted by the link.
130
+ def test_parameter_details
131
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
132
+ link = schema.resource('resource').link('info')
133
+ parameters = link.parameter_details
134
+ assert_equal(1, parameters.length)
135
+ parameter = parameters[0]
136
+ assert_equal('resource_uuid_field', parameter.name)
137
+ assert_equal('resource_uuid_field', parameter.signature)
138
+ assert_equal('A sample UUID field', parameter.description)
139
+ end
140
+
141
+ # LinkSchema.parameter_details returns an array of ParameterChoices, when
142
+ # more than one value may be used with a property, with information about
143
+ # the parameters accepted by the link.
144
+ def test_parameter_details_with_one_of_field
145
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
146
+ link = schema.resource('resource').link('identify_resource')
147
+ parameters = link.parameter_details
148
+ assert_equal(1, parameters.length)
149
+ parameter = parameters[0]
150
+ assert_equal('resource_uuid_field_or_resource_email_field', parameter.name)
151
+ assert_equal('resource_uuid_field_or_resource_email_field', parameter.signature)
152
+ assert_equal('A sample UUID field or A sample email address field',
153
+ parameter.description)
154
+ end
155
+
156
+ # LinkSchema.body returns nil if the link doesn't accept a request body.
157
+ def test_example_body_without_body
158
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
159
+ link = schema.resource('resource').link('info')
160
+ assert_equal(nil, link.example_body)
161
+ end
162
+
163
+ # LinkSchema.body returns a sample body generated from the properties and
164
+ # embedded examples.
165
+ def test_example_body
166
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
167
+ link = schema.resource('resource').link('create')
168
+ assert_equal({'date_field' => '2013-10-19 22:10:29Z',
169
+ 'string_field' => 'Sample text.',
170
+ 'boolean_field' => true,
171
+ 'uuid_field' => '44724831-bf66-4bc2-865f-e2c4c2b14c78',
172
+ 'email_field' => 'username@example.com'},
173
+ link.example_body)
174
+ end
175
+
176
+ # LinkSchema.format_path converts an array of parameters into a path.
177
+ def test_format_path
178
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
179
+ link = schema.resource('resource').link('info')
180
+ assert_equal(['/resource/44724831-bf66-4bc2-865f-e2c4c2b14c78', nil],
181
+ link.format_path(['44724831-bf66-4bc2-865f-e2c4c2b14c78']))
182
+ end
183
+
184
+ # LinkSchema.format_path escapes special URL characters in parameters.
185
+ def test_format_path_with_illegal_literals
186
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
187
+ link = schema.resource('resource').link('info')
188
+ assert_equal(['/resource/foobar%25', nil],
189
+ link.format_path(['foobar%']))
190
+ end
191
+
192
+ # LinkSchema.format_path correctly returns a parameter as a body if a path
193
+ # doesn't have any parameters.
194
+ def test_format_path_with_body
195
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
196
+ link = schema.resource('resource').link('create')
197
+ assert_equal(['/resource', {'new' => 'resource'}],
198
+ link.format_path([{'new' => 'resource'}]))
199
+ end
200
+
201
+ # LinkSchema.format_path correctly returns a parameter as a body if a path
202
+ # doesn't have any parameters.
203
+ def test_format_path_with_path_and_body
204
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
205
+ link = schema.resource('resource').link('update')
206
+ assert_equal(['/resource/44724831-bf66-4bc2-865f-e2c4c2b14c78',
207
+ {'new' => 'resource'}],
208
+ link.format_path(['44724831-bf66-4bc2-865f-e2c4c2b14c78',
209
+ {'new' => 'resource'}]))
210
+ end
211
+
212
+ # LinkSchema.format_path raises an ArgumentError if too few parameters are
213
+ # provided
214
+ def test_format_path_with_too_few_parameters
215
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
216
+ link = schema.resource('resource').link('info')
217
+ error = assert_raises ArgumentError do
218
+ link.format_path([])
219
+ end
220
+ assert_equal('wrong number of arguments (0 for 1)', error.message)
221
+ end
222
+
223
+ # LinkSchema.format_path raises an ArgumentError if too many parameters are
224
+ # provided
225
+ def test_format_path_with_too_many_parameters
226
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
227
+ link = schema.resource('resource').link('info')
228
+ error = assert_raises ArgumentError do
229
+ link.format_path(['too', 'many', 'parameters'])
230
+ end
231
+ assert_equal('wrong number of arguments (3 for 1)', error.message)
232
+ end
233
+
234
+ # LinkSchema.pretty_resource_name returns the resource name in a pretty
235
+ # form, with underscores converted to dashes.
236
+ def test_pretty_resource_name
237
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
238
+ link = schema.resource('another-resource').link('list')
239
+ assert_equal('another-resource', link.pretty_resource_name)
240
+ end
241
+
242
+ # LinkSchema.pretty_name returns the link name in a pretty form, with
243
+ # underscores converted to dashes.
244
+ def test_pretty_resource_name
245
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
246
+ link = schema.resource('resource').link('identify_resource')
247
+ assert_equal('identify-resource', link.pretty_name)
248
+ end
249
+
250
+ # LinkSchema.content_type returns the media type associated with this
251
+ # resource.
252
+ def test_content_type
253
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
254
+ link = schema.resource('resource').link('submit')
255
+ assert_equal('application/x-www-form-urlencoded', link.content_type)
256
+ end
257
+
258
+ # The content type should default to application/json
259
+ def test_default_content_type
260
+ schema = Heroics::Schema.new(SAMPLE_SCHEMA)
261
+ link = schema.resource('resource').link('identify_resource')
262
+ assert_equal('application/json', link.content_type)
263
+ end
264
+ end
265
+
266
+ class DownloadSchemaTest < MiniTest::Unit::TestCase
267
+ include ExconHelper
268
+
269
+ # download_schema makes a request to fetch the schema, decodes the
270
+ # downloaded JSON and returns a Ruby hash.
271
+ def test_download_schema
272
+ Excon.stub(method: :get) do |request|
273
+ assert_equal('example.com', request[:host])
274
+ assert_equal('/schema', request[:path])
275
+ assert_equal('application/vnd.heroku+json; version=3',
276
+ request[:headers]['Accept'])
277
+ Excon.stubs.pop
278
+ {status: 200, headers: {'Content-Type' => 'application/json'},
279
+ body: MultiJson.dump(SAMPLE_SCHEMA)}
280
+ end
281
+
282
+ schema = Heroics::download_schema(
283
+ 'https://username:token@example.com/schema',
284
+ default_headers: {'Accept' => 'application/vnd.heroku+json; version=3'})
285
+ assert_equal(SAMPLE_SCHEMA, schema.schema)
286
+ end
287
+ end
@@ -0,0 +1,9 @@
1
+ require 'helper'
2
+
3
+ class VersionTest < MiniTest::Unit::TestCase
4
+ # Heroics::VERSION defines the version for the project in MAJOR.MINOR.PATCH
5
+ # format.
6
+ def test_version
7
+ assert_match(/\d+.\d+.\d+/, Heroics::VERSION)
8
+ end
9
+ end
@@ -0,0 +1,42 @@
1
+ require 'netrc'
2
+
3
+ _, token = Netrc.read['api.heroku.com']
4
+
5
+ require './lib/heroics'
6
+
7
+ heroics = Heroics.new(
8
+ :cache => Heroics::FileCache.new(token),
9
+ :token => token
10
+ )
11
+
12
+ heroics.apps.list
13
+ apps = heroics.apps.list # should use cache
14
+ puts(apps)
15
+ puts
16
+
17
+ app = heroics.apps.info('stringer-geemus')
18
+ puts(app)
19
+ puts
20
+
21
+ puts(heroics.apps('stringer-geemus'))
22
+ puts
23
+
24
+ collaborators = app.collaborators.list
25
+ puts(collaborators)
26
+ puts
27
+
28
+ collaborator_id = collaborators.first.id
29
+ collaborator = app.collaborators.info(collaborator_id)
30
+ puts(collaborator)
31
+ puts
32
+
33
+ regions = heroics.regions.list
34
+ puts(regions)
35
+ puts
36
+
37
+ region_id = regions.first.id
38
+ puts(heroics.regions.info(region_id))
39
+ puts
40
+
41
+ puts(heroics.regions(region_id))
42
+ puts
metadata CHANGED
@@ -1,15 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: komoju
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Ramsden
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-26 00:00:00.000000000 Z
11
+ date: 2015-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: erubis
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: excon
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: moneta
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: multi_json
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 1.9.2
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 1.9.2
69
+ - !ruby/object:Gem::Dependency
70
+ name: netrc
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
13
83
  - !ruby/object:Gem::Dependency
14
84
  name: bundler
15
85
  requirement: !ruby/object:Gem::Requirement
@@ -38,22 +108,79 @@ dependencies:
38
108
  - - "~>"
39
109
  - !ruby/object:Gem::Version
40
110
  version: '10.0'
41
- description: The easiest way to integrate all of Japan's esoteric payment options
111
+ - !ruby/object:Gem::Dependency
112
+ name: minitest
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 4.7.5
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 4.7.5
125
+ - !ruby/object:Gem::Dependency
126
+ name: turn
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: These are the ruby bindings for the Komoju API
42
140
  email:
43
- - rramsden@degica.com
44
- executables: []
141
+ - richard@rramsden.ca
142
+ executables:
143
+ - generate-client
45
144
  extensions: []
46
145
  extra_rdoc_files: []
47
146
  files:
48
147
  - ".gitignore"
148
+ - ".gitmodules"
49
149
  - Gemfile
150
+ - Gemfile.lock
50
151
  - LICENSE.txt
51
152
  - README.md
52
153
  - Rakefile
154
+ - bin/generate-client
53
155
  - komoju.gemspec
54
156
  - lib/komoju.rb
157
+ - lib/komoju/client.rb
55
158
  - lib/komoju/version.rb
56
- homepage: https://github.com/komoju/komoju-ruby
159
+ - test/client_test.rb
160
+ - test/helper.rb
161
+ - vendor/heroics/lib/heroics.rb
162
+ - vendor/heroics/lib/heroics/cli.rb
163
+ - vendor/heroics/lib/heroics/client.rb
164
+ - vendor/heroics/lib/heroics/client_generator.rb
165
+ - vendor/heroics/lib/heroics/command.rb
166
+ - vendor/heroics/lib/heroics/errors.rb
167
+ - vendor/heroics/lib/heroics/link.rb
168
+ - vendor/heroics/lib/heroics/naming.rb
169
+ - vendor/heroics/lib/heroics/resource.rb
170
+ - vendor/heroics/lib/heroics/schema.rb
171
+ - vendor/heroics/lib/heroics/version.rb
172
+ - vendor/heroics/test.rb
173
+ - vendor/heroics/test/cli_test.rb
174
+ - vendor/heroics/test/client_generator_test.rb
175
+ - vendor/heroics/test/client_test.rb
176
+ - vendor/heroics/test/command_test.rb
177
+ - vendor/heroics/test/helper.rb
178
+ - vendor/heroics/test/link_test.rb
179
+ - vendor/heroics/test/naming_test.rb
180
+ - vendor/heroics/test/resource_test.rb
181
+ - vendor/heroics/test/schema_test.rb
182
+ - vendor/heroics/test/version_test.rb
183
+ homepage: https://komoju.com
57
184
  licenses:
58
185
  - MIT
59
186
  metadata: {}
@@ -61,6 +188,7 @@ post_install_message:
61
188
  rdoc_options: []
62
189
  require_paths:
63
190
  - lib
191
+ - vendor/heroics/lib
64
192
  required_ruby_version: !ruby/object:Gem::Requirement
65
193
  requirements:
66
194
  - - ">="
@@ -76,5 +204,8 @@ rubyforge_project:
76
204
  rubygems_version: 2.2.2
77
205
  signing_key:
78
206
  specification_version: 4
79
- summary: Ruby bindings for the Komoju API
80
- test_files: []
207
+ summary: Komoju Ruby Bindings
208
+ test_files:
209
+ - test/client_test.rb
210
+ - test/helper.rb
211
+ has_rdoc: