medpass_resource_api 0.1.2

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.
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
+