aries 0.1.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a721b5050b0c0d62fac4c082a6999db9b0b7fd32
4
+ data.tar.gz: 83c31100b9aa075a09bad91bfa6215edf82fd5b6
5
+ SHA512:
6
+ metadata.gz: abbab34967cf7e96b9552886c2f777aeffefd67eca7295e180f871fc468065649a91faf586f58ff56325c5f10962e8ee48d055861b821f320242ceb67d5885aa
7
+ data.tar.gz: c7fa32042565cc17e52379d51d5c53d7497d228cf7781ef0872d80b3278635dabc6764c0ac320189f969c19abbcb16fb1d527a96659d0e9e5e62ed4b525a1cf2
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.2
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in aries.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,102 @@
1
+ # Aries
2
+
3
+ Aries is a iOS(Swift), Andorid(not yet, but future) HTTP client generator for APIs represented with JSON Schema
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'aries'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install aries
20
+
21
+ ## Usage
22
+
23
+ ### Generate a client
24
+
25
+ Aries generates an HTTP client from a JSON schema that describes your API. Look at prmd for tooling to help write a JSON schema. When you have a JSON schema prepared you can generate a client for your API
26
+
27
+ $ bin/aries generate json-schema.json
28
+
29
+ ### Custom Configuration
30
+
31
+ Aries can setup costom config for api client class name, base url, output path.
32
+
33
+ $ bin/aries generate json-schema.json --name MyApi \
34
+ --url http://api.myapp.com \
35
+ --output /path/to/dir
36
+
37
+ ### Swift(v1,1)
38
+
39
+ Dependent on [SwiftTask](https://github.com/ReactKit/SwiftTask), [Alamofire](https://github.com/Alamofire/Alamofire), [URITemplate](https://github.com/kylef/URITemplate.swift).
40
+ Aries api client should be used with these libraries, and works like promise style.
41
+
42
+ Aries api client behaves use the following.
43
+
44
+ ```
45
+
46
+ Api.TodoItem.Read().success { (value: AnyObject) -> Void in
47
+ let items = value as [[String:AnyObject]]
48
+ println(items)
49
+ }.failure { (error, isCancelled) -> Void in
50
+ return
51
+ }
52
+
53
+ ```
54
+
55
+ Aries has Custom Delegation for request, response for authenticatin, custom header, etc.
56
+
57
+ ```
58
+
59
+ @UIApplicationMain
60
+ class AppDelegate: UIResponder, UIApplicationDelegate, AriesApiDelegate {
61
+
62
+ self.token: String? = nil
63
+
64
+ func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
65
+ AriesApi.delegate = self
66
+ return true
67
+ }
68
+
69
+ func onFailure(err: NSError) -> NSError {
70
+ debugPrintln(err)
71
+ return err
72
+ }
73
+
74
+ func onSuccess(response: AnyObject) -> AnyObject {
75
+ debugPrintln(response)
76
+ return response
77
+ }
78
+
79
+ func beforeRequest(request: NSMutableURLRequest) -> NSMutableURLRequest {
80
+ debugPrintln(request)
81
+ request.setValue("Bearer \(self.token)", forHTTPHeaderField: "Authorization")
82
+ return request
83
+ }
84
+
85
+ }
86
+
87
+ ```
88
+
89
+
90
+ ## Development
91
+
92
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
93
+
94
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
95
+
96
+ ## Contributing
97
+
98
+ 1. Fork it ( https://github.com/[my-github-username]/aries/fork )
99
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
100
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
101
+ 4. Push to the branch (`git push origin my-new-feature`)
102
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/aries.gemspec ADDED
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'aries/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "aries"
8
+ spec.version = Aries::VERSION
9
+ spec.authors = ["yss44"]
10
+ spec.email = ["nya060@gmail.com"]
11
+
12
+ spec.summary = %q{Aries is a iOS(Swift), Android(java,not yet) API Client generator represented with JSON Schema}
13
+ spec.description = %q{Aries is a iOS(Swift), Andorid(not yet, but future) HTTP client generator for APIs represented with JSON Schema}
14
+ spec.homepage = "https://github.com/yss44/aries"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "bin"
19
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_dependency "addressable"
23
+ spec.add_dependency "thor"
24
+ spec.add_dependency "activesupport"
25
+ spec.add_dependency "json_schema"
26
+ spec.add_dependency "erubis"
27
+ spec.add_development_dependency "bundler", "~> 1.8"
28
+ spec.add_development_dependency "rake", "~> 10.0"
29
+ spec.add_development_dependency "pry"
30
+ spec.add_development_dependency "rack-json_schema"
31
+ end
data/bin/aries ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "aries"
5
+
6
+
7
+ Aries::Cli.start(ARGV)
@@ -0,0 +1,277 @@
1
+ //
2
+ // RackJsonSchemaApi.swift
3
+ //
4
+ // Auto generated by Aries on 2015/04/11.
5
+ // Do not modify this file directory
6
+ //
7
+
8
+ import Alamofire
9
+ import SwiftTask
10
+ import URITemplate
11
+
12
+ typealias RackJsonSchemaApiResponse = Task<Int,AnyObject,NSError>
13
+
14
+ protocol RackJsonSchemaApiDelegate {
15
+ func customReqeust(request: NSMutableURLRequest) -> NSMutableURLRequest
16
+ func onDefaultSuccess(response: AnyObject) -> AnyObject
17
+ func onDefaultFailure(err: NSError) -> NSError
18
+ }
19
+
20
+ class RackJsonSchemaApi {
21
+
22
+ private struct BaseUrlStringStruct{ static var url = "http://localhost:5000" }
23
+ class var BaseUrlString: String {
24
+ get{ return BaseUrlStringStruct.url }
25
+ set{ BaseUrlStringStruct.url = newValue }
26
+ }
27
+
28
+ // workaround tips
29
+ // After updated swift 1.2, use ( static var someVariable: Int = 0 ) instead
30
+ private struct delegateStruct{ static var detegator: RackJsonSchemaApiDelegate? }
31
+ class var delegate: RackJsonSchemaApiDelegate? {
32
+ get{ return delegateStruct.detegator }
33
+ set{ delegateStruct.detegator = newValue }
34
+ }
35
+
36
+ private class func defaultURLRequest(let path: String, let method: Alamofire.Method) -> NSMutableURLRequest {
37
+ let URL = NSURL(string: RackJsonSchemaApi.BaseUrlString)!
38
+ let mutableURLRequest = NSMutableURLRequest(URL: URL.URLByAppendingPathComponent(path))
39
+
40
+ mutableURLRequest.HTTPMethod = method.rawValue
41
+ mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
42
+ mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Accept")
43
+
44
+ if let delegate = self.delegate?{
45
+ return delegate.customReqeust(mutableURLRequest)
46
+ }
47
+
48
+ return mutableURLRequest
49
+ }
50
+
51
+ private class func generateURI(template: String, params: [String: AnyObject]?) -> String {
52
+ if let params = params {
53
+ return URITemplate(template: template).expand(params)
54
+ }
55
+ return template
56
+ }
57
+
58
+ class Base {
59
+
60
+ private class func request(URLRequest: URLRequestConvertible) -> RackJsonSchemaApiResponse {
61
+ return RackJsonSchemaApiResponse {(progress, fulfill, reject, configure) in
62
+ let alam = Alamofire.request(URLRequest)
63
+ .validate()
64
+ .responseJSON({ (req, res, data, err) -> Void in
65
+
66
+ if let err = err {
67
+ reject(self.buildErr(res, data: data, err: err))
68
+ return
69
+ }
70
+ fulfill(data!)
71
+ })
72
+ debugPrintln(alam)
73
+ configure.pause = { [weak alam] in if let alam = alam { alam.suspend() } }
74
+ configure.resume = { [weak alam] in if let alam = alam { alam.resume() } }
75
+ configure.cancel = { [weak alam] in if let alam = alam { alam.cancel() } }
76
+ }.then({ (data, errorInfo) -> RackJsonSchemaApiResponse in
77
+ return RackJsonSchemaApiResponse { (progress, fulfill, reject, configure) in
78
+ if(errorInfo == nil){
79
+ if let delegate = RackJsonSchemaApi.delegate {
80
+ let newData: AnyObject = delegate.onDefaultSuccess(data!)
81
+ fulfill(newData)
82
+ return
83
+ }
84
+ fulfill(data!)
85
+ return
86
+ }else{
87
+ let (err, isCancelled) = errorInfo!
88
+ if let err = err {
89
+ if let delegate = RackJsonSchemaApi.delegate{
90
+ let newErr = delegate.onDefaultFailure(err)
91
+ reject(newErr)
92
+ return
93
+ }
94
+ reject(err)
95
+ return
96
+ }
97
+ }
98
+ }
99
+
100
+ })
101
+ }
102
+
103
+ private class func buildErr(res: NSHTTPURLResponse?, data: AnyObject?, err: NSError?) -> NSError {
104
+ var userInfo = [String: AnyObject]()
105
+ if let res = res {
106
+ userInfo["statusCode"] = res.statusCode
107
+ }else{
108
+ userInfo["statusCode"] = 502
109
+ }
110
+ if let data: AnyObject = data {
111
+ userInfo["response"] = data
112
+ }
113
+ if let err = err {
114
+ userInfo["originalError"] = err
115
+ }
116
+ var error = NSError(domain: "com.aries.error", code: -1, userInfo: userInfo)
117
+ return error
118
+ }
119
+
120
+ }
121
+
122
+
123
+ class App: Base {
124
+
125
+
126
+ class func Create(name: String? = nil) -> RackJsonSchemaApiResponse {
127
+ var params = [String: AnyObject]()
128
+
129
+
130
+ if let name = name {
131
+ params["name"] = name
132
+ }
133
+
134
+ return request(Router.Create(params))
135
+ }
136
+
137
+
138
+ class func Delete(appId: String) -> RackJsonSchemaApiResponse {
139
+ var params = [String: AnyObject]()
140
+
141
+ params["appId"] = appId
142
+
143
+
144
+ return request(Router.Delete(params))
145
+ }
146
+
147
+
148
+ class func Info(appId: String) -> RackJsonSchemaApiResponse {
149
+ var params = [String: AnyObject]()
150
+
151
+ params["appId"] = appId
152
+
153
+
154
+ return request(Router.Info(params))
155
+ }
156
+
157
+
158
+ class func Info(appId: String) -> RackJsonSchemaApiResponse {
159
+ var params = [String: AnyObject]()
160
+
161
+ params["appId"] = appId
162
+
163
+
164
+ return request(Router.Info(params))
165
+ }
166
+
167
+
168
+ class func List() -> RackJsonSchemaApiResponse {
169
+ var params: [String: AnyObject]? = nil
170
+
171
+
172
+
173
+ return request(Router.List(params))
174
+ }
175
+
176
+
177
+ class func Update(appId: String, name: String? = nil) -> RackJsonSchemaApiResponse {
178
+ var params = [String: AnyObject]()
179
+
180
+ params["appId"] = appId
181
+
182
+ if let name = name {
183
+ params["name"] = name
184
+ }
185
+
186
+ return request(Router.Update(params))
187
+ }
188
+
189
+
190
+ class func Create(appId: String, file: String? = nil) -> RackJsonSchemaApiResponse {
191
+ var params = [String: AnyObject]()
192
+
193
+ params["appId"] = appId
194
+
195
+ if let file = file {
196
+ params["file"] = file
197
+ }
198
+
199
+ return request(Router.Create(params))
200
+ }
201
+
202
+
203
+ private enum Router: URLRequestConvertible {
204
+
205
+ case Create([String: AnyObject]?)
206
+ case Delete([String: AnyObject]?)
207
+ case Info([String: AnyObject]?)
208
+ case Info([String: AnyObject]?)
209
+ case List([String: AnyObject]?)
210
+ case Update([String: AnyObject]?)
211
+ case Create([String: AnyObject]?)
212
+ var method: Alamofire.Method {
213
+ switch self {
214
+ case .Create:
215
+ return .POST
216
+ case .Delete:
217
+ return .DELETE
218
+ case .Info:
219
+ return .GET
220
+ case .Info:
221
+ return .GET
222
+ case .List:
223
+ return .GET
224
+ case .Update:
225
+ return .PATCH
226
+ case .Create:
227
+ return .POST
228
+ }
229
+ }
230
+
231
+ var path: String {
232
+ switch self {
233
+ case .Create(let params):
234
+ return RackJsonSchemaApi.generateURI("/apps", params: params)
235
+ case .Delete(let params):
236
+ return RackJsonSchemaApi.generateURI("/apps/{appId}", params: params)
237
+ case .Info(let params):
238
+ return RackJsonSchemaApi.generateURI("/apps/{appId}", params: params)
239
+ case .Info(let params):
240
+ return RackJsonSchemaApi.generateURI("/apps/{appId}/text", params: params)
241
+ case .List(let params):
242
+ return RackJsonSchemaApi.generateURI("/apps", params: params)
243
+ case .Update(let params):
244
+ return RackJsonSchemaApi.generateURI("/apps/{appId}", params: params)
245
+ case .Create(let params):
246
+ return RackJsonSchemaApi.generateURI("/apps/{appId}/files", params: params)
247
+ }
248
+ }
249
+
250
+ // MARK: URLRequestConvertible
251
+
252
+ var URLRequest: NSURLRequest {
253
+ switch self{
254
+ case .Create(let parameters):
255
+ return Alamofire.ParameterEncoding.JSON.encode(RackJsonSchemaApi.defaultURLRequest(path, method: method), parameters: parameters).0
256
+ case .Delete(let parameters):
257
+ return Alamofire.ParameterEncoding.JSON.encode(RackJsonSchemaApi.defaultURLRequest(path, method: method), parameters: parameters).0
258
+ case .Info(let parameters):
259
+ return Alamofire.ParameterEncoding.URL.encode(RackJsonSchemaApi.defaultURLRequest(path, method: method), parameters: parameters).0
260
+ case .Info(let parameters):
261
+ return Alamofire.ParameterEncoding.URL.encode(RackJsonSchemaApi.defaultURLRequest(path, method: method), parameters: parameters).0
262
+ case .List(let parameters):
263
+ return Alamofire.ParameterEncoding.URL.encode(RackJsonSchemaApi.defaultURLRequest(path, method: method), parameters: parameters).0
264
+ case .Update(let parameters):
265
+ return Alamofire.ParameterEncoding.JSON.encode(RackJsonSchemaApi.defaultURLRequest(path, method: method), parameters: parameters).0
266
+ case .Create(let parameters):
267
+ return Alamofire.ParameterEncoding.JSON.encode(RackJsonSchemaApi.defaultURLRequest(path, method: method), parameters: parameters).0
268
+ }
269
+ }
270
+
271
+ }
272
+
273
+
274
+ }
275
+
276
+
277
+ }