purple_ai_wifi 0.0.1

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 (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/purple_wifi.rb +115 -0
  3. metadata +44 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2dd07d9513a776bbb200ae8f1fb18c83fda47eca
4
+ data.tar.gz: a0bb469b59eda2df75dd405a04430123bb2182e7
5
+ SHA512:
6
+ metadata.gz: 3694e280281b4c84d642e770f25ffd424f47234013700c517df44d8b05e4c5f8184e5667acaf3a7fa4ed9e2ef2025369d90278d832b8ecd4e7940bf876c7bd88
7
+ data.tar.gz: 9a8d25883fff97114757451be8c1979ffd04b99f6efb3b7b23daf8578c981a337f37aa979c785bf7cfe21b6b30b402748aaac3fa3f6723bc2b0d9e0421eb5886
@@ -0,0 +1,115 @@
1
+ # Dependencies
2
+ require 'json'
3
+ require 'net/http'
4
+ require 'openssl'
5
+ require 'time'
6
+ require 'uri'
7
+ class PurpleWifi
8
+ # Class attributes
9
+ attr_accessor :public_key, :secret_key, :domain, :target, :venue, :date_from, :date_to
10
+ def initialize(domain, public_key, secret_key, target = :venues)
11
+
12
+ @domain = domain
13
+ @public_key = public_key
14
+ @secret_key = secret_key
15
+ @target = target
16
+
17
+ @venue = venue
18
+ @date_from = date_from
19
+ @date_to = date_to
20
+
21
+ @request_time = Time.now.httpdate
22
+ end
23
+
24
+ def generate_url
25
+ if @target == 'venue'
26
+ "https://#{@domain}/api/company/v1/venues"
27
+ elsif @target == 'visitor'
28
+ # If the user HASN'T passed the from/to dates, then the last part of the request url will be missing:
29
+ url_end = ''
30
+
31
+ # If the user HAS passed the from/to dates, then this creates the last part of the request url:
32
+ if @date_from != '' && @date_to != ''
33
+ url_end = "?from=#{@date_from}&to=#{@date_to}"
34
+ end
35
+ "https://#{@domain}/api/company/v1/venue/#{venue}/visitors#{url_end}"
36
+ end
37
+ end
38
+
39
+ def generate_signature
40
+ line1 = "application/json"
41
+ line2 = "#{@domain}"
42
+ if @target == 'venue'
43
+ line3 = "/api/company/v1/venues"
44
+ elsif @target == 'visitor'
45
+ if @date_from == '' && @date_to == ''
46
+ line3 = "/api/company/v1/venue/#{@venue}/visitors"
47
+ elsif @date_from != '' && @date_to != ''
48
+ line3 = "/api/company/v1/venue/#{@venue}/visitors?from=#{@date_from}&to=#{@date_to}"
49
+ end
50
+ end
51
+ line4 = @request_time
52
+ [line1, line2, line3, line4].join("\n") + "\n\n"
53
+ #"#{line1}\r\n#{line2}\r\n#{line3}\r\n#{line4}\r\n"
54
+ end
55
+
56
+ def generate_hash
57
+ OpenSSL::HMAC.hexdigest('SHA256', @secret_key, generate_signature)
58
+ #OpenSSL::HMAC.hexdigest('SHA256', @secret_key, generate_signature)
59
+ end
60
+
61
+ def generate_header
62
+ {
63
+ 'Content-Type' => 'application/json',
64
+ 'Content-Length' => '0',
65
+ 'Date' => @request_time,
66
+ 'X-API-Authorization' => @public_key + ':' + generate_hash
67
+ }
68
+ end
69
+
70
+ def venues_json
71
+ # Returns a json object containing full details of all venues in the Purple instance.
72
+ @target = 'venue'
73
+ uri = URI.parse(generate_url)
74
+ http = Net::HTTP.new(uri.host, uri.port)
75
+ http.use_ssl = true
76
+ request = Net::HTTP::Get.new(uri.request_uri)
77
+ request.initialize_http_header(generate_header)
78
+ response = http.request(request)
79
+ JSON.parse(response.body)
80
+ end
81
+
82
+ def venues
83
+ if venues_json['success']
84
+ venue_json = venues_json
85
+ end
86
+
87
+ for venue in 0...venue_json['data']['venues'].size
88
+ names = [venue_json['data']['venues'][venue]['name']]
89
+ end
90
+ for venue in 0...venue_json['data']['venues'].size
91
+ ids = [venue_json['data']['venues'][venue]['id']]
92
+ end
93
+
94
+ venue_dict = {}
95
+ for venue in 0...venue_json['data']['venues'].size
96
+ venue_dict[venue] = names[venue], ids[venue]
97
+ end
98
+ venue_dict
99
+ end
100
+
101
+ def visitor_json(venue, date_from = '', date_to = '')
102
+ @target = 'visitor'
103
+ @venue = venue
104
+ @date_from = date_from
105
+ @date_to = date_to
106
+ uri = URI.parse(generate_url)
107
+ http = Net::HTTP.new(uri.host, uri.port)
108
+ http.use_ssl = true
109
+ request = Net::HTTP::Get.new(uri.request_uri)
110
+ request.initialize_http_header(generate_header)
111
+ response = http.request(request)
112
+ JSON.parse(response.body)
113
+ end
114
+
115
+ end
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: purple_ai_wifi
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Renzo Diaz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-09-09 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A simple gem for retrieve data from purple.ai API
14
+ email: dev.renzo.diaz@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/purple_wifi.rb
20
+ homepage: https://rubygems.org/gem/purple_ai_wifi
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.6.13
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: Get visits, venues, visitors
44
+ test_files: []