medpass_resource_api 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'medpass_resource_api'
@@ -0,0 +1,205 @@
1
+ require 'singleton'
2
+
3
+ module MedpassResourceApi
4
+
5
+ USER_ARGS = [:login, :password, :group_id].freeze
6
+ PERSONAL_PROFILE_ARGS = [:email, :first_name, :last_name, :dob, :address, :postcode, :city, :phone, :mobile, :occupation_id, :nd, :gadu, :skype, :city_id, :province_id, :title, :biography]
7
+ SPECIALTY_PROFILE_ARGS = [:pwz, :specialty_id]
8
+
9
+ class Configuration
10
+ attr_accessor :api_key
11
+ attr_accessor :medpass_url
12
+ end
13
+
14
+ def self.configure(&block)
15
+ Base.configure(&block)
16
+ end
17
+
18
+ def self.configuration
19
+ Base.configuration
20
+ end
21
+
22
+ class Base
23
+
24
+ @@configuration = nil
25
+
26
+ def self.configuration
27
+ @@configuration
28
+ end
29
+
30
+ def self.configuration=(val)
31
+ @@configuration = val
32
+ end
33
+
34
+ def self.configure
35
+ self.configuration ||= Configuration.new
36
+ yield(configuration)
37
+ end
38
+
39
+
40
+ def self.register_user(group_id = 1, args = {})
41
+ arguments = {:user => get_user_args(args, group_id), :personal_profile => get_personal_profile_args(args)}
42
+ begin
43
+ res = MedpassUser.post(:register, :api_key => @@configuration.api_key, :args => arguments)
44
+ rescue ActiveResource::ResourceInvalid => error
45
+ wrap_error(error)
46
+ end
47
+ end
48
+
49
+ def self.register_doctor(args = {})
50
+ arguments = {:user => get_user_args(args, 2),
51
+ :personal_profile => get_personal_profile_args(args),
52
+ :specialty_profile => get_specialty_profile_args(args)}
53
+ MedpassUser.post(:register, :api_key => @@configuration.api_key, :args => arguments)
54
+ end
55
+
56
+ def self.get_user(login_or_openid_url, timestamp = nil)
57
+ login = get_login(login_or_openid_url)
58
+ res = begin
59
+ MedpassUser.find(login, :params =>{:timestamp => timestamp, :api_key => @@configuration.api_key})
60
+ rescue ArgumentError
61
+ nil
62
+ end
63
+ wrap_result(res)
64
+ end
65
+
66
+ def self.get_user_profile(login_or_openid_url, timestamp = nil)
67
+ login = get_login(login_or_openid_url)
68
+ res = begin
69
+ MedpassUser.find(login, :params =>{:timestamp => timestamp, :full_profile => true, :api_key => @@configuration.api_key})
70
+ rescue ArgumentError
71
+ nil
72
+ end
73
+ wrap_result(res)
74
+ end
75
+
76
+ def self.get_user_friends(login_or_openid_url)
77
+ login = get_login(login_or_openid_url)
78
+ wrap_result(MedpassUserFriend.find(:all, :params => {:user_id => login, :api_key => @@configuration.api_key}))
79
+ end
80
+
81
+
82
+ def self.get_user_message(login_or_openid_url, id)
83
+ login = get_login(login_or_openid_url)
84
+ wrap_result(MedpassMessage.find(id, :params => {:user_id => login, :api_key => @@configuration.api_key}))
85
+ end
86
+
87
+ def self.get_user_messages(login_or_openid_url, options = {})
88
+ login = get_login(login_or_openid_url)
89
+ if ['read','received','sent'].include? options[:scope].to_s
90
+ wrap_result(send("get_user_#{options[:scope]}_messages", login, options))
91
+ else
92
+ wrap_result(nil)
93
+ end
94
+ end
95
+
96
+ def self.get_user_received_messages(login_or_openid_url, options = {})
97
+ login = get_login(login_or_openid_url)
98
+ wrap_result(MedpassMessage.find(:all, :params => {:user_id => login, :api_key => @@configuration.api_key}.merge(options)))
99
+ end
100
+
101
+ def self.get_user_read_messages(login_or_openid_url, options = {})
102
+ login = get_login(login_or_openid_url)
103
+ wrap_result(MedpassMessage.get(:read, :user_id => login, :limit => options[:limit], :app => options[:app], :api_key => @@configuration.api_key))
104
+ end
105
+
106
+ def self.get_user_unread_messages(login_or_openid_url, options = {})
107
+ login = get_login(login_or_openid_url)
108
+ wrap_result(MedpassMessage.get(:unread, :user_id => login, :limit => options[:limit], :app => options[:app], :api_key => @@configuration.api_key))
109
+ end
110
+
111
+ def self.get_user_sent_messages(login_or_openid_url, options = {})
112
+ login = get_login(login_or_openid_url)
113
+ wrap_result(MedpassMessage.get(:sent, :user_id => login, :limit => options[:limit], :app => options[:app], :api_key => @@configuration.api_key))
114
+ end
115
+
116
+ def self.get_user_args(args, group_id)
117
+ returning Hash.new do |hash|
118
+ USER_ARGS.each{|k| hash[k] = args[k]}
119
+ hash[:group_id] = group_id
120
+ end
121
+ end
122
+
123
+ def self.get_personal_profile_args(args)
124
+ returning Hash.new do |hash|
125
+ PERSONAL_PROFILE_ARGS.each{|k| hash[k] = args[k]}
126
+ end
127
+ end
128
+
129
+ def self.get_specialty_profile_args(args)
130
+ returning Hash.new do |hash|
131
+ SPECIALTY_PROFILE_ARGS.each{|k| hash[k] = args[k]}
132
+ end
133
+ end
134
+
135
+
136
+ def self.wrap_result(result)
137
+ result.is_a?(Array) ? wrap_all(result) : wrap_one(result)
138
+ end
139
+
140
+ def self.wrap_error(error)
141
+ ErrorResult.new(error)
142
+ end
143
+
144
+ def self.wrap_one(result)
145
+ return NilResult.instance if result.nil?
146
+ Result.new(result)
147
+ end
148
+
149
+ def self.wrap_all(results)
150
+ return NilResult.instance if results.nil?
151
+ Result.build_all(results)
152
+ end
153
+
154
+ def self.get_login(login_or_openid_url)
155
+ core_medpass_url = configuration.medpass_url.split("http://").last
156
+ login_or_openid_url.gsub("/","").gsub('.beta.','.').split(".#{core_medpass_url}").last.gsub("http:","").gsub(".","-dot-")
157
+ end
158
+
159
+ end
160
+
161
+
162
+ class ErrorResult
163
+ attr_reader :raw_errors
164
+ def initialize(error)
165
+ @raw_errors = JSON.parse(error.response.body)
166
+ end
167
+
168
+ def errors_on(field)
169
+ @raw_errors[field] rescue nil
170
+ end
171
+
172
+ end
173
+
174
+
175
+ class NilResult
176
+ include Singleton
177
+ attr_accessor :raw_result
178
+ end
179
+
180
+
181
+ class Result
182
+
183
+ attr_reader :raw_result, :resource_type
184
+
185
+ def initialize(result)
186
+ @raw_result = result
187
+ end
188
+
189
+ # Nie wywalamy skryptu nawet jesli odwolamy sie do czegos czego dany obiekt nie posiada
190
+ def method_missing(method_name, *args)
191
+ return @raw_result.send(method_name) if @raw_result.respond_to?(method_name)
192
+ return @raw_result[method_name.to_s] rescue "brak"
193
+ end
194
+
195
+ def self.build_all(results)
196
+ returning [] do |result_list|
197
+ results.each{|result| result_list << self.new(result)}
198
+ end
199
+ end
200
+
201
+
202
+ end
203
+
204
+
205
+ end
@@ -0,0 +1,7 @@
1
+ module MedpassResourceApi
2
+ class MedpassMessage < ActiveResource::Base
3
+ self.site = "#{MedpassResourceApi.configuration.medpass_url}/resource_api/users/:user_id"
4
+ self.format = :json
5
+ self.element_name = 'message'
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module MedpassResourceApi
2
+ class MedpassUser < ActiveResource::Base
3
+ self.site = "#{MedpassResourceApi.configuration.medpass_url}/resource_api/"
4
+ self.format = :json
5
+ self.element_name = 'user'
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module MedpassResourceApi
2
+ class MedpassUserFriend < ActiveResource::Base
3
+ self.site = "#{MedpassResourceApi.configuration.medpass_url}/resource_api/users/:user_id"
4
+ self.format = :json
5
+ self.element_name = 'friend'
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: medpass_resource_api
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 2
9
+ version: 0.1.2
10
+ platform: ruby
11
+ authors:
12
+ - Wojciech Pasternak - voytee
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-04-15 00:00:00 +02:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: activeresource
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 2
29
+ - 0
30
+ - 2
31
+ version: 2.0.2
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ description: For Activeweb company purpose only
35
+ email: wpasternak@gmail.com
36
+ executables: []
37
+
38
+ extensions: []
39
+
40
+ extra_rdoc_files: []
41
+
42
+ files:
43
+ - init.rb
44
+ - lib/medpass_resource_api.rb
45
+ - lib/medpass_resource_api/medpass_user.rb
46
+ - lib/medpass_resource_api/medpass_user_friend.rb
47
+ - lib/medpass_resource_api/medpass_message.rb
48
+ has_rdoc: true
49
+ homepage:
50
+ licenses: []
51
+
52
+ post_install_message:
53
+ rdoc_options: []
54
+
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ segments:
62
+ - 0
63
+ version: "0"
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ segments:
69
+ - 0
70
+ version: "0"
71
+ requirements: []
72
+
73
+ rubyforge_project:
74
+ rubygems_version: 1.3.6
75
+ signing_key:
76
+ specification_version: 3
77
+ summary: Restful API for accessing medpass medical community resources
78
+ test_files: []
79
+