komoju 0.0.0 → 0.0.3

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.
@@ -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: