coach4rb 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +16 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +31 -0
- data/Rakefile +8 -0
- data/coach4rb.gemspec +29 -0
- data/lib/coach4rb.rb +64 -0
- data/lib/coach4rb/builder.rb +142 -0
- data/lib/coach4rb/client.rb +116 -0
- data/lib/coach4rb/coach.rb +836 -0
- data/lib/coach4rb/json_response_parser.rb +11 -0
- data/lib/coach4rb/mixin/as_hash.rb +34 -0
- data/lib/coach4rb/mixin/auto_constructor.rb +71 -0
- data/lib/coach4rb/mixin/basic_auth.rb +23 -0
- data/lib/coach4rb/mixin/iterable.rb +40 -0
- data/lib/coach4rb/mixin/track_reader.rb +24 -0
- data/lib/coach4rb/mixin/track_writer.rb +19 -0
- data/lib/coach4rb/privacy.rb +11 -0
- data/lib/coach4rb/proxy.rb +143 -0
- data/lib/coach4rb/resource/entity.rb +47 -0
- data/lib/coach4rb/resource/entry.rb +126 -0
- data/lib/coach4rb/resource/page.rb +74 -0
- data/lib/coach4rb/resource/partnership.rb +37 -0
- data/lib/coach4rb/resource/sport.rb +19 -0
- data/lib/coach4rb/resource/subscription.rb +47 -0
- data/lib/coach4rb/resource/user.rb +49 -0
- data/lib/coach4rb/response_parser.rb +11 -0
- data/lib/coach4rb/version.rb +3 -0
- data/test/test_access_proxy.rb +58 -0
- data/test/test_client.rb +41 -0
- data/test/test_coach_client.rb +21 -0
- data/test/test_coach_entry.rb +141 -0
- data/test/test_coach_partnership.rb +115 -0
- data/test/test_coach_subscription.rb +110 -0
- data/test/test_coach_user.rb +191 -0
- data/test/test_entity.rb +63 -0
- data/test/test_entry_resource.rb +36 -0
- data/test/test_helper.rb +3 -0
- data/test/test_page.rb +82 -0
- data/test/test_partnership_resource.rb +69 -0
- data/test/test_sport_resource.rb +33 -0
- data/test/test_subscription_resource.rb +74 -0
- data/test/test_user_resource.rb +104 -0
- data/tools/.keep +0 -0
- metadata +190 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 412f9ffde0208d1f386a7a179ca397d044e90179
|
4
|
+
data.tar.gz: e862eea49492255fa1cd90240ffc8ca1493d0851
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: eea2b892f25a2c60673bf387be62016c98ba6cec03e9fdc3c24a0148e989963a8def1f46c26b7ef064fd46f2ecaa5356b2496d4e69f11c0e9cea22a72e09f4ba
|
7
|
+
data.tar.gz: e789f89d7244757f89c7d7245d7645edb6671a80442b70aad9584b791e5e07b2295bb5e7728963f66eb7eba538838b4c24ecf35243e48fc15c3cf369c14550ce
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Alexander Rueedlinger
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
Coach4rb
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'coach4rb'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install coach4rb
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
TODO: Write usage instructions here
|
24
|
+
|
25
|
+
## Contributing
|
26
|
+
|
27
|
+
1. Fork it ( https://github.com/[my-github-username]/coach4rb/fork )
|
28
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
29
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
30
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
31
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
data/coach4rb.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'coach4rb/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "coach4rb"
|
8
|
+
spec.version = Coach4rb::VERSION
|
9
|
+
spec.authors = ["Alexander Rueedlinger","Stefan Wanzenried","Roman Kuepper","Sveta Krasikova"]
|
10
|
+
spec.email = ["a.rueedlinger@gmail.com"]
|
11
|
+
spec.summary = %q{Coach4rb is client for the cyber coach webservice.}
|
12
|
+
spec.description = %q{Coach4rb is client for the cyber coach webservice @unifr.ch. }
|
13
|
+
spec.homepage = "https://github.com/lexruee/coach4rb"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
22
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
+
spec.add_development_dependency "minitest", '~>0'
|
24
|
+
|
25
|
+
spec.add_runtime_dependency "rest-client", '~>1.7'
|
26
|
+
spec.add_runtime_dependency "addressable", '~>2.3'
|
27
|
+
spec.add_runtime_dependency "gyoku", '~>1.2'
|
28
|
+
|
29
|
+
end
|
data/lib/coach4rb.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'rest_client'
|
2
|
+
require 'json'
|
3
|
+
require 'addressable/uri'
|
4
|
+
require 'gyoku'
|
5
|
+
require 'base64'
|
6
|
+
require 'ostruct'
|
7
|
+
|
8
|
+
require 'coach4rb/mixin/auto_constructor'
|
9
|
+
require 'coach4rb/mixin/as_hash'
|
10
|
+
require 'coach4rb/mixin/iterable'
|
11
|
+
require 'coach4rb/mixin/basic_auth'
|
12
|
+
require 'coach4rb/mixin/track_reader'
|
13
|
+
require 'coach4rb/mixin/track_writer'
|
14
|
+
|
15
|
+
require 'coach4rb/privacy'
|
16
|
+
require 'coach4rb/resource/entity'
|
17
|
+
require 'coach4rb/resource/page'
|
18
|
+
require 'coach4rb/resource/user'
|
19
|
+
require 'coach4rb/resource/sport'
|
20
|
+
require 'coach4rb/resource/entry'
|
21
|
+
require 'coach4rb/resource/partnership'
|
22
|
+
require 'coach4rb/resource/subscription'
|
23
|
+
|
24
|
+
|
25
|
+
require 'coach4rb/builder'
|
26
|
+
require 'coach4rb/proxy'
|
27
|
+
require 'coach4rb/response_parser'
|
28
|
+
require 'coach4rb/json_response_parser'
|
29
|
+
require 'coach4rb/coach'
|
30
|
+
require 'coach4rb/client'
|
31
|
+
require 'coach4rb/version'
|
32
|
+
|
33
|
+
|
34
|
+
module Coach4rb
|
35
|
+
|
36
|
+
# Creates a Coach4rb client given the configuration hash config.
|
37
|
+
#
|
38
|
+
# @param [Hash] config
|
39
|
+
# @return [Coach]
|
40
|
+
#
|
41
|
+
# ====Example
|
42
|
+
#
|
43
|
+
# @client = Coach4rb::Client.new(
|
44
|
+
# scheme: 'http',
|
45
|
+
# host: 'diufvm31.unifr.ch',
|
46
|
+
# port: 8090,
|
47
|
+
# path: '/CyberCoachServer/resources'
|
48
|
+
# )
|
49
|
+
#
|
50
|
+
def self.configure(config)
|
51
|
+
client = Client.new(
|
52
|
+
scheme: config[:scheme],
|
53
|
+
host: config[:host],
|
54
|
+
port: config[:port],
|
55
|
+
path: config[:path]
|
56
|
+
)
|
57
|
+
|
58
|
+
config[:debug] ||= false
|
59
|
+
|
60
|
+
response_parser = JsonResponseParser.new
|
61
|
+
Coach.new(client, response_parser, config[:debug])
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
module Coach4rb
|
2
|
+
|
3
|
+
module Builder
|
4
|
+
|
5
|
+
class Base
|
6
|
+
|
7
|
+
def initialize(a_hash={})
|
8
|
+
@struct = OpenStruct.new(a_hash)
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_xml
|
12
|
+
a_hash = to_adjusted_hash
|
13
|
+
Gyoku.xml(type => a_hash)
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
def method_missing(meth,*args,&block)
|
18
|
+
struct.send meth, *args, &block
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
def type
|
23
|
+
raise 'Error'
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def struct
|
30
|
+
@struct
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
def to_adjusted_hash
|
35
|
+
properties = struct.to_h
|
36
|
+
new_hash = {}
|
37
|
+
properties.each do |key, value|
|
38
|
+
string_key = key.to_s
|
39
|
+
string_key = string_key.gsub('_', '')
|
40
|
+
new_hash[string_key.to_sym] = value
|
41
|
+
end
|
42
|
+
new_hash
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
class Partnership < Base
|
49
|
+
|
50
|
+
def type
|
51
|
+
:partnership
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
class Subscription < Base
|
58
|
+
|
59
|
+
def type
|
60
|
+
:subscription
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
class User < Base
|
67
|
+
|
68
|
+
def type
|
69
|
+
:user
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
class Entry < Base
|
76
|
+
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
class Running < Entry
|
82
|
+
|
83
|
+
include Mixin::TrackWriter
|
84
|
+
|
85
|
+
def type
|
86
|
+
:entryrunning
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
class Cycling < Entry
|
93
|
+
|
94
|
+
include Mixin::TrackWriter
|
95
|
+
|
96
|
+
def type
|
97
|
+
:entrycycling
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
class Boxing < Entry
|
104
|
+
|
105
|
+
def type
|
106
|
+
:entryboxing
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
|
112
|
+
class Soccer < Entry
|
113
|
+
|
114
|
+
def type
|
115
|
+
:entrysoccer
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
class Entry
|
121
|
+
|
122
|
+
def self.builder(type)
|
123
|
+
klass = case type
|
124
|
+
when :running
|
125
|
+
Running
|
126
|
+
when :cycling
|
127
|
+
Cycling
|
128
|
+
when :boxing
|
129
|
+
Boxing
|
130
|
+
when :soccer
|
131
|
+
Soccer
|
132
|
+
else
|
133
|
+
raise 'Error: %s is not supported!' % type
|
134
|
+
end
|
135
|
+
klass.new(public_visible: Privacy::Public)
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
module Coach4rb
|
2
|
+
|
3
|
+
# This class provides a simple http client.
|
4
|
+
#
|
5
|
+
#
|
6
|
+
class Client
|
7
|
+
|
8
|
+
def initialize(a_hash)
|
9
|
+
@service_uri = Addressable::URI.new a_hash
|
10
|
+
@basic_options = {
|
11
|
+
accept: :json,
|
12
|
+
content_type: :xml
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
def service_uri
|
18
|
+
@service_uri
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
def path
|
23
|
+
@service_uri.path
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
def site
|
28
|
+
@service_uri.site
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def port
|
33
|
+
@service_uri.port
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
def host
|
38
|
+
@service_uri.host
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
def scheme
|
43
|
+
@service_uri.scheme
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
# Performs a get request.
|
48
|
+
#
|
49
|
+
# @param [String] url
|
50
|
+
# @param [Hash] options
|
51
|
+
# @param [Block] block
|
52
|
+
# @return [String] the payload of the response as string
|
53
|
+
def get(url, options={}, &block)
|
54
|
+
http_options = options.merge(@basic_options)
|
55
|
+
if block_given?
|
56
|
+
RestClient.get(url, http_options, &block)
|
57
|
+
else
|
58
|
+
RestClient.get(url, http_options)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
# Performs a put request.
|
64
|
+
#
|
65
|
+
# @param [String] url
|
66
|
+
# @param [String] payload
|
67
|
+
# @param [Block] block
|
68
|
+
# @return [String] the payload of the response as string
|
69
|
+
#
|
70
|
+
def put(url, payload, options={}, &block)
|
71
|
+
http_options = options.merge(@basic_options)
|
72
|
+
if block_given?
|
73
|
+
RestClient.put(url, payload, http_options, &block)
|
74
|
+
else
|
75
|
+
RestClient.put(url, payload, http_options)
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
# Performs a post request.
|
82
|
+
#
|
83
|
+
# @param [String] url
|
84
|
+
# @param [String] payload
|
85
|
+
# @param [Block] block
|
86
|
+
# @return [String] the payload of the response as string
|
87
|
+
#
|
88
|
+
def post(url, payload, options={}, &block)
|
89
|
+
http_options = options.merge(@basic_options)
|
90
|
+
if block_given?
|
91
|
+
RestClient.post(url, payload, http_options, &block)
|
92
|
+
else
|
93
|
+
RestClient.post(url, payload, http_options)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
# Performs a delete request.
|
99
|
+
#
|
100
|
+
# @param [String] url
|
101
|
+
# @param [Hash] options
|
102
|
+
# @param [Block] block
|
103
|
+
# @return [String] the payload of the response as string
|
104
|
+
#
|
105
|
+
def delete(url, options={}, &block)
|
106
|
+
http_options = options.merge(@basic_options)
|
107
|
+
if block_given?
|
108
|
+
RestClient.delete(url, http_options, &block)
|
109
|
+
else
|
110
|
+
RestClient.delete(url, http_options)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|