noti 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,22 @@
1
+ module Noti
2
+ class Notification
3
+
4
+ attr_accessor :title, :sub_title, :text, :sound, :url
5
+
6
+ def deliver_to(user)
7
+ data = {
8
+ :app => Noti.app,
9
+ :user => user,
10
+ :notification => {
11
+ :title => self.title,
12
+ :sub_title => self.sub_title,
13
+ :text => self.text,
14
+ :url => self.url,
15
+ :sound => self.sound
16
+ }
17
+ }
18
+ Noti::Request.request('add', data) && true
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,79 @@
1
+ module Noti
2
+ class Request
3
+
4
+ def self.request(path, data = {})
5
+ req = self.new(path, :post)
6
+ req.data = data
7
+ req.make && req.success? ? req.output : false
8
+ end
9
+
10
+ attr_reader :path, :method, :client
11
+ attr_accessor :data
12
+
13
+ def initialize(path, method = :get)
14
+ @path = path
15
+ @method = method
16
+ end
17
+
18
+ def success?
19
+ @success || false
20
+ end
21
+
22
+ def output
23
+ @output || nil
24
+ end
25
+
26
+ def make
27
+ uri = URI.parse(["http://notiapp.com", "api/v1", @path].join('/'))
28
+ http_request = http_class.new(uri.request_uri)
29
+ http_request.initialize_http_header({"User-Agent" => "NotiRubyClient/#{Noti::VERSION}"})
30
+ http_request.content_type = 'application/json'
31
+
32
+ http = Net::HTTP.new(uri.host, uri.port)
33
+
34
+ if uri.scheme == 'https'
35
+ http.use_ssl = true
36
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
37
+ end
38
+
39
+ http_result = http.request(http_request, @data.to_json)
40
+ if http_result.body == 'true'
41
+ @output = true
42
+ elsif http_result.body == 'false'
43
+ @output = false
44
+ else
45
+ @output = JSON.parse(http_result.body)
46
+ end
47
+ @success = case http_result
48
+ when Net::HTTPSuccess
49
+ true
50
+ when Net::HTTPServiceUnavailable
51
+ raise Noti::Errors::ServiceUnavailable
52
+ when Net::HTTPForbidden, Net::HTTPUnauthorized
53
+ raise Noti::Errors::AccessDenied, "Access Denied for '#{Noti.application}'"
54
+ when Net::HTTPNotFound
55
+ json = JSON.parse(http_result.body)
56
+ raise Noti::Errors::NotFound, json['error']
57
+ when Net::HTTPClientError
58
+ json = JSON.parse(http_result.body)
59
+ raise Noti::Errors::ValidationError, json.to_s
60
+ else
61
+ raise Noti::Errors::CommunicationError, http_result.body
62
+ end
63
+ self
64
+ end
65
+
66
+ private
67
+
68
+ def http_class
69
+ case @method
70
+ when :post then Net::HTTP::Post
71
+ when :put then Net::HTTP::Put
72
+ when :delete then Net::HTTP::Delete
73
+ else
74
+ Net::HTTP::Get
75
+ end
76
+ end
77
+
78
+ end
79
+ end
data/lib/noti/token.rb ADDED
@@ -0,0 +1,20 @@
1
+ module Noti
2
+ class Token
3
+
4
+ attr_accessor :request_token, :redirect_url
5
+
6
+ def self.create_request_token(redirect_url)
7
+ request = Noti::Request.request("request_access", :app => Noti.app, :redirect_url => redirect_url)
8
+ token = self.new
9
+ token.request_token = request['request_token']
10
+ token.redirect_url = request['redirect_url']
11
+ token
12
+ end
13
+
14
+ def self.get_access_token(request_token)
15
+ request = Noti::Request.request("get_access_token", :app => Noti.app, :request_token => request_token)
16
+ request['access_token']
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,3 @@
1
+ module Noti
2
+ VERSION = '1.0.0'
3
+ end
data/lib/noti.rb ADDED
@@ -0,0 +1,27 @@
1
+ require 'uri'
2
+ require 'net/https'
3
+ require 'json'
4
+
5
+ require 'noti/version'
6
+ require 'noti/request'
7
+ require 'noti/token'
8
+ require 'noti/notification'
9
+
10
+ module Noti
11
+ class << self
12
+
13
+ # Stores the application key for the application
14
+ attr_accessor :app
15
+
16
+ end
17
+
18
+ class Error < StandardError; end
19
+ module Errors
20
+ class ServiceUnavailable < Error; end
21
+ class AccessDenied < Error; end
22
+ class NotFound < Error; end
23
+ class CommunicationError < Error; end
24
+ class ValidationError < Error; end
25
+ end
26
+
27
+ end
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: noti
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Adam Cooke
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-20 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: json
16
+ requirement: &70229269592780 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70229269592780
25
+ description:
26
+ email: adam@atechmedia.com
27
+ executables: []
28
+ extensions: []
29
+ extra_rdoc_files: []
30
+ files:
31
+ - lib/noti.rb
32
+ - lib/noti/notification.rb
33
+ - lib/noti/request.rb
34
+ - lib/noti/token.rb
35
+ - lib/noti/version.rb
36
+ homepage: http://notiapp.com
37
+ licenses: []
38
+ post_install_message:
39
+ rdoc_options: []
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ requirements: []
55
+ rubyforge_project:
56
+ rubygems_version: 1.8.10
57
+ signing_key:
58
+ specification_version: 3
59
+ summary: Easy to use client library for Noti
60
+ test_files: []