refworks 0.0.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.
Files changed (140) hide show
  1. checksums.yaml +15 -0
  2. data/README.md +120 -0
  3. data/lib/refworks.rb +183 -0
  4. data/lib/refworks/authentication/authentication_request.rb +17 -0
  5. data/lib/refworks/authentication/authentication_response.rb +3 -0
  6. data/lib/refworks/authentication/delsess/authentication_delsess_request.rb +20 -0
  7. data/lib/refworks/authentication/delsess/authentication_delsess_response.rb +3 -0
  8. data/lib/refworks/authentication/newsess/authentication_newsess_request.rb +37 -0
  9. data/lib/refworks/authentication/newsess/authentication_newsess_response.rb +10 -0
  10. data/lib/refworks/authentication/newtempusersess/authentication_newtempusersess_request.rb +21 -0
  11. data/lib/refworks/authentication/newtempusersess/authentication_newtempusersess_response.rb +9 -0
  12. data/lib/refworks/authentication/ping/authentication_ping_request.rb +21 -0
  13. data/lib/refworks/authentication/ping/authentication_ping_response.rb +3 -0
  14. data/lib/refworks/authentication/userexists/authentication_userexists_request.rb +37 -0
  15. data/lib/refworks/authentication/userexists/authentication_userexists_response.rb +3 -0
  16. data/lib/refworks/authors/all/authors_all_request.rb +29 -0
  17. data/lib/refworks/authors/all/authors_all_response.rb +3 -0
  18. data/lib/refworks/authors/author.rb +10 -0
  19. data/lib/refworks/authors/authors_request.rb +23 -0
  20. data/lib/refworks/authors/authors_response.rb +32 -0
  21. data/lib/refworks/authors/search/authors_search_request.rb +23 -0
  22. data/lib/refworks/authors/search/authors_search_response.rb +3 -0
  23. data/lib/refworks/descriptors/all/descriptors_all_request.rb +21 -0
  24. data/lib/refworks/descriptors/all/descriptors_all_response.rb +3 -0
  25. data/lib/refworks/descriptors/descriptor.rb +8 -0
  26. data/lib/refworks/descriptors/descriptors_request.rb +17 -0
  27. data/lib/refworks/descriptors/descriptors_response.rb +31 -0
  28. data/lib/refworks/descriptors/search/descriptors_search_request.rb +24 -0
  29. data/lib/refworks/descriptors/search/descriptors_search_response.rb +3 -0
  30. data/lib/refworks/folders/all/folders_all_request.rb +20 -0
  31. data/lib/refworks/folders/all/folders_all_response.rb +3 -0
  32. data/lib/refworks/folders/folder.rb +10 -0
  33. data/lib/refworks/folders/folders_request.rb +17 -0
  34. data/lib/refworks/folders/folders_response.rb +32 -0
  35. data/lib/refworks/folders/search/folders_search_request.rb +21 -0
  36. data/lib/refworks/folders/search/folders_search_response.rb +3 -0
  37. data/lib/refworks/importfilter/allavailable/importfilter_allavailable_request.rb +20 -0
  38. data/lib/refworks/importfilter/allavailable/importfilter_allavailable_response.rb +3 -0
  39. data/lib/refworks/importfilter/allglobal/importfilter_allglobal_request.rb +20 -0
  40. data/lib/refworks/importfilter/allglobal/importfilter_allglobal_response.rb +3 -0
  41. data/lib/refworks/importfilter/favorites/importfilter_favorites_request.rb +20 -0
  42. data/lib/refworks/importfilter/favorites/importfilter_favorites_response.rb +3 -0
  43. data/lib/refworks/importfilter/importfilter.rb +18 -0
  44. data/lib/refworks/importfilter/importfilter_request.rb +16 -0
  45. data/lib/refworks/importfilter/importfilter_response.rb +35 -0
  46. data/lib/refworks/importfilter/search/importfilter_search_request.rb +22 -0
  47. data/lib/refworks/importfilter/search/importfilter_search_response.rb +3 -0
  48. data/lib/refworks/manuscript/all/manuscript_all_request.rb +22 -0
  49. data/lib/refworks/manuscript/all/manuscript_all_response.rb +13 -0
  50. data/lib/refworks/manuscript/baseurl/manuscript_baseurl_request.rb +22 -0
  51. data/lib/refworks/manuscript/baseurl/manuscript_baseurl_response.rb +13 -0
  52. data/lib/refworks/manuscript/byid/manuscript_byid_request.rb +32 -0
  53. data/lib/refworks/manuscript/byid/manuscript_byid_response.rb +3 -0
  54. data/lib/refworks/manuscript/file/manuscript_file_request.rb +22 -0
  55. data/lib/refworks/manuscript/file/manuscript_file_response.rb +18 -0
  56. data/lib/refworks/manuscript/folder/manuscript_folder_request.rb +22 -0
  57. data/lib/refworks/manuscript/folder/manuscript_folder_response.rb +14 -0
  58. data/lib/refworks/manuscript/manuscript_request.rb +20 -0
  59. data/lib/refworks/manuscript/manuscript_response.rb +3 -0
  60. data/lib/refworks/manuscript/mylist/manuscript_mylist_request.rb +21 -0
  61. data/lib/refworks/manuscript/mylist/manuscript_mylist_response.rb +14 -0
  62. data/lib/refworks/periodicals/all/periodicals_all_request.rb +21 -0
  63. data/lib/refworks/periodicals/all/periodicals_all_response.rb +3 -0
  64. data/lib/refworks/periodicals/periodical.rb +9 -0
  65. data/lib/refworks/periodicals/periodicals_request.rb +17 -0
  66. data/lib/refworks/periodicals/periodicals_response.rb +31 -0
  67. data/lib/refworks/periodicals/search/periodicals_search_request.rb +22 -0
  68. data/lib/refworks/periodicals/search/periodicals_search_response.rb +3 -0
  69. data/lib/refworks/properties/encoding/encoding.rb +3 -0
  70. data/lib/refworks/properties/encoding/properties_encoding_request.rb +20 -0
  71. data/lib/refworks/properties/encoding/properties_encoding_response.rb +3 -0
  72. data/lib/refworks/properties/fieldlabels/fieldlabel.rb +13 -0
  73. data/lib/refworks/properties/fieldlabels/properties_fieldlabels_request.rb +22 -0
  74. data/lib/refworks/properties/fieldlabels/properties_fieldlabels_response.rb +20 -0
  75. data/lib/refworks/properties/fieldlabels/reftypeFieldlabels.rb +11 -0
  76. data/lib/refworks/properties/languages/language.rb +8 -0
  77. data/lib/refworks/properties/languages/properties_languages_request.rb +22 -0
  78. data/lib/refworks/properties/languages/properties_languages_response.rb +20 -0
  79. data/lib/refworks/properties/outputlanguage/outputlanguage.rb +8 -0
  80. data/lib/refworks/properties/outputlanguage/properties_outputlanguage_request.rb +22 -0
  81. data/lib/refworks/properties/outputlanguage/properties_outputlanguage_response.rb +20 -0
  82. data/lib/refworks/properties/properties_request.rb +15 -0
  83. data/lib/refworks/properties/properties_response.rb +3 -0
  84. data/lib/refworks/properties/sortlocales/properties_sortlocales_request.rb +20 -0
  85. data/lib/refworks/properties/sortlocales/properties_sortlocales_response.rb +20 -0
  86. data/lib/refworks/properties/sortlocales/sortlocale.rb +8 -0
  87. data/lib/refworks/properties/sourcetypes/properties_sourcetypes_request.rb +21 -0
  88. data/lib/refworks/properties/sourcetypes/properties_sourcetypes_response.rb +20 -0
  89. data/lib/refworks/properties/sourcetypes/sourcetype.rb +8 -0
  90. data/lib/refworks/properties/typelabels/properties_typelabels_request.rb +21 -0
  91. data/lib/refworks/properties/typelabels/properties_typelabels_response.rb +20 -0
  92. data/lib/refworks/properties/typelabels/typelabel.rb +8 -0
  93. data/lib/refworks/reference.rb +526 -0
  94. data/lib/refworks/reference/get/reference_get_request.rb +21 -0
  95. data/lib/refworks/reference/get/reference_get_response.rb +7 -0
  96. data/lib/refworks/reference/reference_request.rb +15 -0
  97. data/lib/refworks/reference/reference_response.rb +3 -0
  98. data/lib/refworks/request.rb +50 -0
  99. data/lib/refworks/response.rb +12 -0
  100. data/lib/refworks/retrieve/advancesearch/retrieve_advancesearch_request.rb +41 -0
  101. data/lib/refworks/retrieve/advancesearch/retrieve_advancesearch_response.rb +3 -0
  102. data/lib/refworks/retrieve/all/retrieve_all_request.rb +21 -0
  103. data/lib/refworks/retrieve/all/retrieve_all_response.rb +3 -0
  104. data/lib/refworks/retrieve/author/retrieve_author_request.rb +23 -0
  105. data/lib/refworks/retrieve/author/retrieve_author_response.rb +3 -0
  106. data/lib/refworks/retrieve/byid/retrieve_byid_request.rb +22 -0
  107. data/lib/refworks/retrieve/byid/retrieve_byid_response.rb +3 -0
  108. data/lib/refworks/retrieve/count/retrieve_count_request.rb +21 -0
  109. data/lib/refworks/retrieve/count/retrieve_count_response.rb +16 -0
  110. data/lib/refworks/retrieve/descriptor/retrieve_descriptor_request.rb +22 -0
  111. data/lib/refworks/retrieve/descriptor/retrieve_descriptor_response.rb +3 -0
  112. data/lib/refworks/retrieve/dup/retrieve_dup_request.rb +21 -0
  113. data/lib/refworks/retrieve/dup/retrieve_dup_response.rb +3 -0
  114. data/lib/refworks/retrieve/folder/retrieve_folder_request.rb +21 -0
  115. data/lib/refworks/retrieve/folder/retrieve_folder_response.rb +3 -0
  116. data/lib/refworks/retrieve/modsince/retrieve_modsince_request.rb +23 -0
  117. data/lib/refworks/retrieve/modsince/retrieve_modsince_response.rb +3 -0
  118. data/lib/refworks/retrieve/nofolder/retrieve_nofolder_request.rb +20 -0
  119. data/lib/refworks/retrieve/nofolder/retrieve_nofolder_response.rb +3 -0
  120. data/lib/refworks/retrieve/periodical/retrieve_periodical_request.rb +22 -0
  121. data/lib/refworks/retrieve/periodical/retrieve_periodical_response.rb +3 -0
  122. data/lib/refworks/retrieve/quick/retrieve_quick_request.rb +23 -0
  123. data/lib/refworks/retrieve/quick/retrieve_quick_response.rb +3 -0
  124. data/lib/refworks/retrieve/retrieve_request.rb +22 -0
  125. data/lib/refworks/retrieve/retrieve_response.rb +34 -0
  126. data/lib/refworks/retrieve/saved/retrieve_saved_request.rb +22 -0
  127. data/lib/refworks/retrieve/saved/retrieve_saved_response.rb +3 -0
  128. data/lib/refworks/retrieve/specialfolder/retrieve_specialfolder_request.rb +21 -0
  129. data/lib/refworks/retrieve/specialfolder/retrieve_specialfolder_response.rb +3 -0
  130. data/lib/refworks/savedsearch/all/savedsearch_all_request.rb +21 -0
  131. data/lib/refworks/savedsearch/all/savedsearch_all_response.rb +3 -0
  132. data/lib/refworks/savedsearch/get/savedsearch_get_request.rb +22 -0
  133. data/lib/refworks/savedsearch/get/savedsearch_get_response.rb +3 -0
  134. data/lib/refworks/savedsearch/savedsearch.rb +21 -0
  135. data/lib/refworks/savedsearch/savedsearch_parameter.rb +18 -0
  136. data/lib/refworks/savedsearch/savedsearch_parameter_component.rb +10 -0
  137. data/lib/refworks/savedsearch/savedsearch_request.rb +15 -0
  138. data/lib/refworks/savedsearch/savedsearch_response.rb +24 -0
  139. data/lib/refworks/version.rb +3 -0
  140. metadata +224 -0
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MDY3YTk4NGZkNjk5Y2UwZmVlNmM1Y2NkMWJiYTg4MWQ2ODI5ODM3OQ==
5
+ data.tar.gz: !binary |-
6
+ OGFjOTc1ODY1ODhkOWUyZDY4OTE0YzIzZjBjMWRkMDhhN2FlNWNiZg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ NzY5MDA5YjQxYjY2ODcwODQ0MTI2Y2VlNTIxZGNmMTc0NTU0NGNlZDljOWNk
10
+ NzhlZTM1N2M1YzczOTc3ZmJkMDUxZmM1NTZkZWFlZDgyODBjNTQwYzRkZTVk
11
+ YmQ4ZDFjMTNmNWQzZTkzYjVhYTg4ZDgyOTQwOThlMDM4MDk0YTI=
12
+ data.tar.gz: !binary |-
13
+ YTY3ZmZhZTdlMzIxOWIxZWRhYzgwNGRhYmMyNmU5NWJiMjc1YjFkZTlhNTEy
14
+ NDIxMWQxYjBlZGRjNzIyN2JiZDFkNmJkODgyNjNmODZiMjY0Mjk5NGU2Zjdl
15
+ ZWE2YTBlM2Y4NjFkODcwYTMzOWViYzQ5ZTU4YTYyNDUxNTg5OTk=
data/README.md ADDED
@@ -0,0 +1,120 @@
1
+ refworks-api-ruby
2
+ =================
3
+
4
+ A Ruby interface to the RefWorks API.
5
+
6
+ Usage
7
+ -----
8
+
9
+ Please see examples/ in the source code repo for sample configuration and usage.
10
+
11
+ In particular, please read the comments in refworks-sample.rb, as they contain important information about how
12
+ to determine the set of parameters needed for each API method call.
13
+
14
+ Current Status
15
+ --------------
16
+
17
+ The code is currently ALPHA quality. It has received minimal testing and needs more edge case checking and such.
18
+ I've opted to release early to see if there is community interest in further development. For a first pass, I
19
+ focused on implementing (some of) the read portions of the API, so that the code could be used against an
20
+ RefWorks database which is already populated.
21
+
22
+ Class-by-class status and notes are below.
23
+
24
+ Attachments
25
+ - Nothing implemented
26
+
27
+ Authentication
28
+ - delsess, newsess, newtempusersess, ping, userexists are implemented.
29
+ - newrefsharesess not implemented.
30
+
31
+ Authors,Descriptors,Periodicals,Folders
32
+ - all and search are implemented.
33
+ - addref (GET), addref (POST), clear, create, delete, edit, removeref (GET), removeref (POST) are not implemented.
34
+ - note that in the code, these are broken out into four different classes.
35
+
36
+ Batch
37
+ - Nothing implemented.
38
+
39
+ Deleted
40
+ - Nothing implemented.
41
+
42
+ ImportFilter
43
+ - allavailable, allglobal, favorites, search are implemented.
44
+ - savelastused is not implemented.
45
+
46
+ Manuscript
47
+ - all, baseurl, byid, file, folder, mylist are implemented.
48
+ - openoffice, word, xml are not implemented.
49
+
50
+ MyList
51
+ - Nothing implemented.
52
+
53
+ OutputStyle
54
+ - Nothing implemented.
55
+
56
+ Properties [Complete]
57
+ - encoding, fieldlabels, languages, outputlanguage, sortlocales, sourcetypes, typelabels are implemented.
58
+
59
+ PubMed
60
+ - Nothing implemented.
61
+
62
+ Reference
63
+ - get implemented.
64
+ - add, addcomment, delete (GET), delete (POST), deletecomment, edit, editcomment, globaledit, import,
65
+ importendnote, importpreview, openurl not implemented.
66
+
67
+ Retrieve
68
+ - advancesearch, all, author, byid, count, descriptor, dup, folder, modsince, nofolder, periodical, quick,
69
+ saved, specialfolder implemented.
70
+ - byid (POST), openurl not implemented.
71
+
72
+ RSS
73
+ - Nothing implemented.
74
+
75
+ SavedSearch
76
+ - all, get implemented.
77
+ - add, delete, edit not implemented.
78
+
79
+ ShareProperties
80
+ - Nothing implemented.
81
+
82
+ Subscriber
83
+ - Nothing implemented.
84
+
85
+ SubscriberPrefs
86
+ - Nothing implemented.
87
+
88
+ User
89
+ - Nothing implemented.
90
+
91
+ Utility
92
+ - Nothing implemented.
93
+
94
+ Z39
95
+ - Nothing implemented.
96
+
97
+ Basic Code Flow
98
+ ---------------
99
+
100
+ 1. The user instantiates a Refworks client (Refworks.new). Refworks sets up a session via the API as part of
101
+ initialization.
102
+ 2. The user issues an API request by invoking Refworks.request.
103
+ 3. Refworks.request resolves and instantiates the Request class for the specific API method being called
104
+ (e.g. RetrieveAllRequest).
105
+ 4. Refworks.request uses the method-specific Request class (for method-specific parameters) and the to assemble
106
+ the query string, determine the URL and HTTP verb to use, and issues the request.
107
+ 5. Refworks.request receives the response and instantiates the method-specific Response class
108
+ (e.g. RetrieveAllResponse).
109
+ 6. The user accesses the method-specific Response class to retrieve the data and/or return codes for the operation.
110
+
111
+ Each Response class returns its own set of data - for example, a call to the all method of the retrieve class
112
+ returns a set of Reference objects, whereas a call to the search method of the authors class returns a set of
113
+ Author objects. See the documentation for each class and method for full details.
114
+
115
+ Useful Links
116
+ ------------
117
+
118
+ RefWorks API Reference: http://rwt.refworks.com/rwapireference/
119
+ RefWorks Tagged Format Reference: http://www.refworks.com/rwathens/help/RefWorks_Tagged_Format.htm
120
+
data/lib/refworks.rb ADDED
@@ -0,0 +1,183 @@
1
+ $LOAD_PATH << File.expand_path(File.dirname(File.realpath(__FILE__)) + '/..')
2
+ require 'rubygems'
3
+ require 'bundler/setup'
4
+
5
+ # This will recursively load all child classes - done this way
6
+ # because there are many, many child classes, and makes it easier
7
+ # to keep adding support for more parts of the refworks API
8
+ require 'httparty'
9
+ require 'cgi'
10
+ require 'pp'
11
+ require 'require_all'
12
+ require_rel 'refworks'
13
+
14
+ # This is the main entry class to the API. It handles session attainment, assembles and
15
+ # issues requests, and routes responses to the appropriate response object.
16
+ # @api public
17
+ class Refworks
18
+ include HTTParty
19
+
20
+ attr_reader :api_url, :access_key, :secret_key, :login_name, :password, :group_code, :id, :sess
21
+
22
+ # Create a new Refworks client instance.
23
+ # @example
24
+ # rwc = Refworks.new({:access_key => 'YOUR_ACCESS_KEY_HERE',
25
+ # :secret_key => 'YOUR_SECRET_KEY_HERE',
26
+ # :id => '', # Either id -or- group_code is needed
27
+ # :group_code => 'YOUR_GROUP_CODE_HERE',
28
+ # :login_name => 'YOUR_LOGIN_NAME_HERE',
29
+ # :password => 'YOUR_PASSWORD_HERE',
30
+ # :api_url => 'https://www.refworks.com/api2/',
31
+ # :httparty_debug => 0, # or a true value to turn on httparty debug output
32
+ # :httparty_timeout => 300, # may need to set higher if your database is very large
33
+ # })
34
+ # @param [Hash] params The configuration settings for this instance of the Refworks API client. See example above
35
+ # for list of possible/required keys.
36
+ def initialize(params)
37
+
38
+ # configure HTTParty using its debug_output and default_timeout methods if user passed in values for these
39
+ # (otherwise it uses HTTParty defaults)
40
+ if params[:httparty_debug]
41
+ self.class.debug_output $stderr
42
+ end
43
+ if params[:httparty_timeout]
44
+ self.class.default_timeout(params[:httparty_timeout])
45
+ end
46
+
47
+ # populate the attributes
48
+ @api_url = params[:api_url]
49
+ @access_key = params[:access_key]
50
+ @secret_key = params[:secret_key]
51
+ @login_name = params[:login_name]
52
+ @password = params[:password]
53
+ @group_code = params[:group_code]
54
+ @id = params[:id]
55
+
56
+ # probably should check here that I have the minimal set of required attributes to continue
57
+
58
+ # Can't do much without a session, so get one now
59
+ # May need to refactor this - there are parts of the API that don't strictly need a session
60
+ if (@group_code)
61
+ response = request('authentication', 'newsess',
62
+ {
63
+ :login_name => @login_name,
64
+ :group_code => @group_code,
65
+ :password => @password,
66
+ }
67
+ )
68
+ else
69
+ response = request('authentication', 'newsess',
70
+ {
71
+ :login_name => @login_name,
72
+ :id => @id,
73
+ :password => @password,
74
+ }
75
+ )
76
+ end
77
+
78
+ # Grab the session string.
79
+ @sess = response.sess
80
+
81
+ # Need some error checking here
82
+ end
83
+
84
+ private
85
+
86
+ # Returns appropriate request class name constant given class and method strings
87
+ #
88
+ # @param [String] class_name The class name being called in the Refworks API
89
+ # @param [String] method_name The method name being called in the Refworks API
90
+ # @return [Object] The class constant for the request class
91
+ def resolve_request_class(class_name, method_name)
92
+ Object.const_get([class_name, method_name, 'Request'].collect(&:capitalize).join)
93
+ end
94
+
95
+ # Produce appropriate response class name constant given class and method strings
96
+ #
97
+ # @param [String] class_name The class name being called in the Refworks API
98
+ # @param [String] method_name The method name being called in the Refworks API
99
+ # @return [Object] The class constant for the response class
100
+ def resolve_response_class(class_name, method_name)
101
+ Object.const_get([class_name, method_name, 'Response'].collect(&:capitalize).join)
102
+ end
103
+
104
+ protected
105
+
106
+ # Combines the request, signature and session query parameters, CGI-escaping
107
+ # them in the process, and returns a query string.
108
+ #
109
+ # @param [Hash] request_params Request-specific parameters, including the class, the method, and any method params
110
+ # @param [Hash] signature_params The signature parameters for this call
111
+ # @return [String] The fully-formed and escaped query string
112
+ def generate_query_params(request_params, signature_params)
113
+
114
+ # create a CGI-escaped query string fragment out of all of the request-specific parameters
115
+ request_param_string = request_params.collect { |key, value|
116
+ # sometimes a method parameter is an array - like multiple id's for the retrieve->byid id parameter
117
+ if value.is_a?(Array)
118
+ value.collect { |x|
119
+ x = CGI.escape(x.to_s)
120
+ "#{key}=#{x}"}.join("&")
121
+ # but most method parameters are scalar
122
+ else
123
+ value = CGI.escape(value.to_s)
124
+ "#{key}=#{value}"
125
+ end
126
+ }.join("&")
127
+
128
+ # create a CGI-escaped query string fragment out of the signature pieces
129
+ signature_param_string = signature_params.collect { |key, value|
130
+ value = CGI.escape(value.to_s)
131
+ "#{key}=#{value}"}.join("&")
132
+
133
+ # create a CGI-escaped query string fragment out of the session
134
+ # Session string handling needs to be more elegant. Too hard coded/inflexible
135
+ if sess
136
+ session_param_string = "sess=" + CGI.escape(sess)
137
+ else
138
+ session_param_string = ''
139
+ end
140
+
141
+ # combine all and return
142
+ request_param_string + '&' + signature_param_string + '&' + session_param_string
143
+ end
144
+
145
+ public
146
+
147
+ # Issue a request to the Refworks API and use the response to construct a Response object. This method is the
148
+ # primary way that users interact with the Refworks API.
149
+ # @example
150
+ # response = rwc.request('retrieve', 'quick', {:search => "Jones"})
151
+ # @param [String] class_name The class name being called in the Refworks API
152
+ # @param [String] method_name The method name being called in the Refworks API
153
+ # @param [Hash] method_params A Hash containing a method-specific set of parameters. See the documentation for each
154
+ # method for more info. This can be omitted in the case of a method that does not require any parameters.
155
+ # @return [Object] A child object of the Response object (specific to the particular API call being made)
156
+ def request(class_name, method_name, method_params = {})
157
+
158
+ # Resolve the request class and use it to retrieve the request-specific query parameters
159
+ request_class = resolve_request_class(class_name, method_name)
160
+ request_info = request_class.generate_request_info(method_params)
161
+
162
+ # Generate a signature for this call
163
+ signature_params = request_class.generate_signature(class_name, access_key, secret_key)
164
+
165
+ # Put it all together to complete the query string
166
+ query_params = self.generate_query_params(request_info[:params], signature_params)
167
+
168
+ # Some parts of the API use a different URL than the base URL, so we check for that here and assemble
169
+ # the entire request URL
170
+ url = (method_params[:base_url] || api_url) + "?#{query_params}"
171
+
172
+ # make the request
173
+ if request_class.http_request_verb == 'POST'
174
+ raw_response = self.class.post(url, :body => request_info[:body], :headers => request_info[:headers])
175
+ else
176
+ raw_response = self.class.get(url)
177
+ end
178
+
179
+ # Resolve, instantiate and return the response class
180
+ response_class = resolve_response_class(class_name, method_name)
181
+ response_class.new(raw_response)
182
+ end
183
+ end
@@ -0,0 +1,17 @@
1
+ class AuthenticationRequest < Request
2
+
3
+ def self.call_class
4
+ 'authentication'
5
+ end
6
+
7
+ def self.generate_class_params(params)
8
+ # handle params common to all Retrieve calls
9
+ class_name = call_class()
10
+
11
+ # query parameters common to all Retrieve calls
12
+ {
13
+ :class => class_name,
14
+ }
15
+ end
16
+
17
+ end
@@ -0,0 +1,3 @@
1
+ class AuthenticationResponse < Response
2
+ # To change this template use File | Settings | File Templates.
3
+ end
@@ -0,0 +1,20 @@
1
+ class AuthenticationDelsessRequest < AuthenticationRequest
2
+ def self.call_method
3
+ 'delsess'
4
+ end
5
+
6
+ def self.generate_request_info(params)
7
+
8
+ # get common Authentication parameters
9
+ class_params = generate_class_params(params)
10
+
11
+ # query parameters for the ping call
12
+ method_params = { :method => call_method,
13
+ }
14
+
15
+ query_string_params = class_params.merge(method_params)
16
+
17
+ # return the request info
18
+ {:params => query_string_params}
19
+ end
20
+ end
@@ -0,0 +1,3 @@
1
+ class AuthenticationDelsessResponse < AuthenticationResponse
2
+
3
+ end
@@ -0,0 +1,37 @@
1
+ class AuthenticationNewsessRequest < AuthenticationRequest
2
+
3
+ def self.call_method
4
+ 'newsess'
5
+ end
6
+
7
+ def self.http_request_verb
8
+ 'POST'
9
+ end
10
+
11
+ def self.generate_request_info(params)
12
+
13
+ class_name = call_class()
14
+ method_name = call_method()
15
+
16
+ # query parameters for the newsess call
17
+ query_string_params = {
18
+ :class => class_name,
19
+ :method => method_name,
20
+ }
21
+
22
+ # Construct the XML payload for the newsess call.
23
+ login_name = params[:login_name]
24
+ password = params[:password]
25
+ group_code = params[:group_code]
26
+
27
+ message_body = <<-EOS
28
+ <RWRequest class="authentication" method="newsess">
29
+ <AcctInfo loginName="#{login_name}" groupCode="#{group_code}" password="#{password}"></AcctInfo>
30
+ </RWRequest>
31
+ EOS
32
+
33
+ # return the request info
34
+ {:params => query_string_params, :body => message_body, :headers => {'Content-type' => 'text/xml'}}
35
+ end
36
+
37
+ end
@@ -0,0 +1,10 @@
1
+ class AuthenticationNewsessResponse < AuthenticationResponse
2
+
3
+ attr_reader :sess
4
+
5
+ def initialize(raw_response)
6
+ super(raw_response)
7
+ @sess = self.parsed_response["refworks"]["RWResult"]["CallInfo"]["sess"]
8
+ end
9
+
10
+ end
@@ -0,0 +1,21 @@
1
+ class AuthenticationNewtempusersessRequest < AuthenticationRequest
2
+ def self.call_method
3
+ 'newtempusersess'
4
+ end
5
+
6
+ def self.generate_request_info(params)
7
+
8
+ # get common Authentication parameters
9
+ class_params = generate_class_params(params)
10
+
11
+ # query parameters for the newtempusersess call
12
+ method_params = { :method => call_method,
13
+ }
14
+
15
+ query_string_params = class_params.merge(method_params)
16
+
17
+ # return the request info
18
+ {:params => query_string_params}
19
+ end
20
+
21
+ end
@@ -0,0 +1,9 @@
1
+ class AuthenticationNewtempusersessResponse < AuthenticationResponse
2
+
3
+ attr_reader :tempsess
4
+
5
+ def initialize(raw_response)
6
+ super(raw_response)
7
+ @tempsess = self.parsed_response["refworks"]["RWResult"]["CallInfo"]["sess"]
8
+ end
9
+ end