angie-core-api 0.2.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c9c4e1950d918c943ea439283852bdedbc277fa08ccf9805148fd37ee7fa11ca
4
+ data.tar.gz: 33f633052bc842e7f82834af08ee0963bd5a90a1a2d43567416c75bb0a8e92f3
5
+ SHA512:
6
+ metadata.gz: cf72d5f0295090bf84031a74b765ea2f788f0216099af6f9b1af5ea18b46ccd491e3957f38c6eeaa4d9a6811a96926e52f7f2d5d15d4ae4db0f19bad1e33ca8a
7
+ data.tar.gz: b10fd6db11f46e3a96e20d1a85a3f350bd8279900616f49d50fae0edba216d9673af5fe94ab5e68f678a97fc531559830b8e89ad84526a2e31b4282c471b5604
@@ -0,0 +1,62 @@
1
+ require "httparty"
2
+
3
+ module AngieCoreApi
4
+ class Client
5
+ include HTTParty
6
+
7
+ read_timeout Integer(ENV["COREAPI_TIMEOUT"] || 5)
8
+
9
+ def data(http_method, url, body = {})
10
+ case http_method
11
+ when :get
12
+ parsed_response { self.class.get(api_url_for(url), headers: api_headers) }
13
+ when :post
14
+ parsed_response { self.class.post(api_url_for(url), body: body.to_json, headers: api_headers) }
15
+ end
16
+ end
17
+
18
+ def self.data(http_method, url, body = {})
19
+ self.new.data(http_method, url, body)
20
+ end
21
+
22
+ private
23
+
24
+ def api_headers
25
+ {
26
+ "Content-Type" => "application/json",
27
+ "Authorization" => "Bearer #{AngieCoreApi.configuration.token}"
28
+ }
29
+ end
30
+
31
+ def api_url_for(service_url)
32
+ File.join(AngieCoreApi.configuration.url, service_url)
33
+ end
34
+
35
+ def default_timeout
36
+ self.class.default_options[:timeout] || self.class.default_options[:read_timeout]
37
+ end
38
+
39
+ def parsed_response
40
+ response = yield
41
+ response.code == 200 ? response.parsed_response : nil
42
+ end
43
+
44
+ def get(url, headers: api_headers, timeout: default_timeout)
45
+ request(:get, url, headers: headers, timeout: timeout)
46
+ end
47
+
48
+ def post(url, body: {}, headers: api_headers, timeout: default_timeout)
49
+ request(:post, url, body: body, headers: headers, timeout: timeout)
50
+ end
51
+
52
+ def patch(url, body: {}, headers: api_headers, timeout: default_timeout)
53
+ request(:patch, url, body: body, headers: headers, timeout: timeout)
54
+ end
55
+
56
+ def request(http_method, url, options = {})
57
+ response = self.class.send(http_method, url, options) rescue OpenStruct.new(code: 599, parsed_response: {})
58
+ return {} unless response.code == 200 || response.code == 201
59
+ response.parsed_response
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,10 @@
1
+ require "active_support"
2
+
3
+ module AngieCoreApi
4
+ class Configuration
5
+ include ActiveSupport::Configurable
6
+
7
+ config_accessor(:url)
8
+ config_accessor(:token)
9
+ end
10
+ end
@@ -0,0 +1,17 @@
1
+ module AngieCoreApi
2
+ class DeliveryMethod
3
+ def initialize(mail) end
4
+
5
+ def deliver!(mail)
6
+ Notification.email(
7
+ from: mail.from,
8
+ to: mail.to,
9
+ cc: mail.cc,
10
+ bcc: mail.bcc,
11
+ subject: mail.subject,
12
+ text: mail.text_part ? mail.text_part.body&.raw_source : mail.body.raw_source,
13
+ html: mail.html_part&.body&.raw_source
14
+ )
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,8 @@
1
+ module AngieCoreApi
2
+ class Flight
3
+ def self.info(default_airport, airline, flight_number, date)
4
+ url = "/flights/#{default_airport}/#{URI.encode_www_form_component(airline)}/#{URI.encode_www_form_component(flight_number)}/#{date}"
5
+ Client.data(:get, url)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,17 @@
1
+ module AngieCoreApi
2
+ class Map
3
+ def self.travel_time(origin, location, radius, unit, size, zoom, locale)
4
+ url = "/maps/distancematrix/#{origin}/#{URI.encode(location)}/#{radius}/#{unit}/#{size}/#{zoom}/#{locale}"
5
+ Client.data(:get, url)
6
+ end
7
+
8
+ def self.local_places(origin, query, radius, unit, locale)
9
+ url = "/maps/places/#{origin}/#{URI.encode(query)}/#{radius}/#{unit}/#{locale}"
10
+ Client.data(:get, url)
11
+ end
12
+
13
+ def self.place_details(place_id)
14
+ Client.data(:get, "/maps/places/#{place_id}")
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,11 @@
1
+ module AngieCoreApi
2
+ class Notification
3
+ def self.email(options)
4
+ Client.data(:post, "/notifications/email", options)
5
+ end
6
+
7
+ def self.sms(options)
8
+ Client.data(:post, "/notifications/sms", options)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ module AngieCoreApi
2
+ class Railtie < Rails::Railtie
3
+ initializer "angie_core_api.add_delivery_method" do
4
+ ActiveSupport.on_load :action_mailer do
5
+ ActionMailer::Base.add_delivery_method(:angie_core_api, AngieCoreApi::DeliveryMethod)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module AngieCoreApi
2
+ class Weather
3
+ def self.info(latitude, longitude, unit, date, locale)
4
+ url = "/weather/coordination/#{latitude}/#{longitude}/#{unit}/#{locale}"
5
+ url += "?date=#{date}" if date&.present?
6
+ Client.data(:get, url)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ module AngieCoreApi
2
+ autoload :Configuration, "angie-core-api/configuration"
3
+ autoload :Client, "angie-core-api/client"
4
+ autoload :Flight, "angie-core-api/flight"
5
+ autoload :Map, "angie-core-api/map"
6
+ autoload :Notification, "angie-core-api/notification"
7
+ autoload :Weather, "angie-core-api/weather"
8
+ autoload :DeliveryMethod, "angie-core-api/delivery_method"
9
+
10
+ def self.configuration
11
+ @configuration ||= Configuration.new
12
+ end
13
+
14
+ def self.configure
15
+ yield configuration
16
+ end
17
+ end
18
+
19
+ require "angie-core-api/railtie" if defined?(Rails::Railtie)
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: angie-core-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.2
5
+ platform: ruby
6
+ authors:
7
+ - Hussein Choroomi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-08-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.18.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.18.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '6.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '6.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: actionmailer
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '6.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '6.0'
55
+ description: Angie CoreAPI Ruby gem
56
+ email:
57
+ - info@angie.ai
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - lib/angie-core-api.rb
63
+ - lib/angie-core-api/client.rb
64
+ - lib/angie-core-api/configuration.rb
65
+ - lib/angie-core-api/delivery_method.rb
66
+ - lib/angie-core-api/flight.rb
67
+ - lib/angie-core-api/map.rb
68
+ - lib/angie-core-api/notification.rb
69
+ - lib/angie-core-api/railtie.rb
70
+ - lib/angie-core-api/weather.rb
71
+ homepage: https://angie.ai
72
+ licenses: []
73
+ metadata:
74
+ homepage_uri: https://angie.ai
75
+ post_install_message:
76
+ rdoc_options: []
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: 2.3.0
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ requirements: []
90
+ rubygems_version: 3.0.3
91
+ signing_key:
92
+ specification_version: 4
93
+ summary: Angie CoreAPI Ruby gem
94
+ test_files: []