vidalo 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ec108eae52b5747eee1c9274e0f12b622db0b375
4
+ data.tar.gz: 5ef829bdc878d526837c77f57cdb4a30e32d2294
5
+ SHA512:
6
+ metadata.gz: e5af7fb67661b82946e421a62a545eacc6b2863f939c0a0189f6af5ae104f4a147da3851ad191e1359260cb9d4ce1a0e0858296ea52b5fbf7d3732d68d4ea936
7
+ data.tar.gz: b5ace2570953e1c71a2759dc65ed891904446a70d406be6f342e0d7e63bb975db6b135a59d6084fd51eaaf4a02a6ca99c99c44242c17f1cbdb0ae1636abfe4ac
@@ -0,0 +1,37 @@
1
+ module Vidalo
2
+ module API
3
+ module Get
4
+ # Return Nokogiri object
5
+ def send_api_request(keyword, params = {})
6
+ request = @conn.get do |req|
7
+ req.url(keyword)
8
+ unless params.empty?
9
+ params.each do |param_key, param_value|
10
+ req.params[param_key] = param_value
11
+ end
12
+ end
13
+ end
14
+
15
+ unless request.status == 200
16
+ raise %{
17
+
18
+ Seems there is a problem when connect to Vidal server.
19
+ The HTTP request status code is: #{request.status}.
20
+
21
+ You may want to test the connection with the URL below in your browser:
22
+ #{request.env.url}
23
+ }
24
+ else
25
+ Nokogiri::XML(request.body).errors.empty? ?
26
+ Nokogiri::XML(request.body).remove_namespaces!.at('feed') :
27
+ nil
28
+ end
29
+ end
30
+
31
+ # Return number of total products
32
+ def get_number_of_products
33
+ send_api_request('products', { 'start-page' => 1, 'page-size' => 1 }).at('totalResults').text.to_i
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,49 @@
1
+ module Vidalo
2
+ module API
3
+ module Search
4
+ # Get result of a set of Nokogiri Objects
5
+ #
6
+ # @params type [String], query [String], start_page [Fixnum], page_size [Fixnum]
7
+ # @return [Array]
8
+ def search(type: nil, query: nil, start_page: 1, page_size: 10)
9
+ if type.nil?
10
+ raise ArgumentError.new 'Error: You need to define "type" at least (eg. "products")'
11
+ end
12
+ @res = send_api_request(type, {'q' => query, 'start-page' => start_page, 'page-size' => page_size })
13
+ @res.search('entry').to_a if @res
14
+ end
15
+
16
+
17
+ # Get result of a product's information
18
+ #
19
+ # @params id[Fixnum], aggregate[Array[String]], all_info[TrueClass]
20
+ # @return [Nokogiri]
21
+ #
22
+ # Example:
23
+ # api.search_product(id: 45, aggregate: ['UCD'])
24
+ # api.search_product(id: 45, all_info: true)
25
+ #
26
+ def search_product(id: nil, aggregate: [], all_info: nil)
27
+ raise %{
28
+
29
+ Need a Vidal Product ID.
30
+
31
+ } unless id.is_a? Fixnum || id.to_i.to_s == id
32
+ aggregate = %w(
33
+ molecules
34
+ indications
35
+ ald_detail
36
+ smr_asmr
37
+ atc_classification
38
+ VIDAL_CLASSIFICATION
39
+ product_range
40
+ document
41
+ reco
42
+ UCDS
43
+ UNITS
44
+ ) if all_info == true
45
+ @res = send_api_request("product/#{id}", { 'aggregate' => aggregate })
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,23 @@
1
+ require 'vidalo/parser'
2
+ require 'vidalo/api/get'
3
+ require 'vidalo/api/search'
4
+ VIDAL_API_URL = 'http://apirest-dev.vidal.fr/rest/api/'
5
+
6
+ module Vidalo
7
+ class Connection
8
+ include Vidalo::API::Get
9
+ include Vidalo::API::Search
10
+ include Vidalo::Parser
11
+ attr_reader :app_id, :app_key
12
+
13
+ def initialize(app_id, app_key)
14
+ @app_id = app_id
15
+ @app_key = app_key
16
+ @conn = Faraday.new(url: VIDAL_API_URL,
17
+ request: { params_encoder: Faraday::FlatParamsEncoder },
18
+ params: { app_id: app_id, app_key: app_key }) do |faraday|
19
+ faraday.adapter Faraday.default_adapter
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,22 @@
1
+ module Vidalo
2
+ module Parser
3
+ # Return string
4
+ def get_inner_text(type: nil, id: nil, node: nil)
5
+ if type.nil? || id.nil? || node.nil?
6
+ raise ArgumentError.new 'Error: You need to define "type", "id" and node name - eg. get_inner_text(type: "package", id: 5355, node: "title")'
7
+ end
8
+ result = send_api_request("#{type}/#{id}")
9
+ result ?
10
+ get_node_value(result.at('entry').at(node)) :
11
+ ""
12
+ end
13
+
14
+
15
+ # Return string
16
+ def get_node_value(node)
17
+ node ?
18
+ node.text :
19
+ ""
20
+ end
21
+ end
22
+ end
data/lib/vidalo.rb ADDED
@@ -0,0 +1 @@
1
+ require 'vidalo/connection'
metadata ADDED
@@ -0,0 +1,48 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vidalo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Xiaofan Wu
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-23 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A gem for using Vidal API easier
14
+ email: xfanwu@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/vidalo.rb
20
+ - lib/vidalo/api/get.rb
21
+ - lib/vidalo/api/search.rb
22
+ - lib/vidalo/connection.rb
23
+ - lib/vidalo/parser.rb
24
+ homepage: http://rubygems.org/gems/vidalo
25
+ licenses:
26
+ - MIT
27
+ metadata: {}
28
+ post_install_message:
29
+ rdoc_options: []
30
+ require_paths:
31
+ - lib
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubyforge_project:
44
+ rubygems_version: 2.4.8
45
+ signing_key:
46
+ specification_version: 4
47
+ summary: A gem for using Vidal API easier
48
+ test_files: []