faast 1.0.0

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f96e92940ec6183438d43391cb63f11a747bc68e
4
+ data.tar.gz: 59a1539092c2769659be16519eac13431a8b622a
5
+ SHA512:
6
+ metadata.gz: 3dab61332d6dc16125a4116bc64450caf613e8389ee155651d035a60034e3ab26fe03ef53d7525741d23611833587dc3edb8230f5500305a32109aa773ce7bad
7
+ data.tar.gz: 2a439ed6e059f5cdc95c37baf4e3f30cded5ac2842458fdaaa2015db387c6903a561a1a971dbde7af55bd5dd639743e531548ad0f39f1e7ac71115b3ed4e7ede
@@ -0,0 +1,6 @@
1
+ ##### v0.1.0 (2013-06-25) #####
2
+ * fixed: setting user credentials at the `Notification` level
3
+ * fixed: issues with Ruby 1.8 and 1.9 related to HTTPS support
4
+
5
+ ##### v0.0.1 (2013-06-09) #####
6
+ * initial release
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ group :test do
4
+ gem 'rake'
5
+ gem 'coveralls'
6
+ end
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2013 Chris Lucas <chris@chrisjlucas.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,35 @@
1
+ [![Coverage Status](https://coveralls.io/repos/cjlucas/ruby-faast/badge.png)](https://coveralls.io/r/cjlucas/ruby-faast)
2
+ [![Build Status](https://travis-ci.org/cjlucas/ruby-faast.png?branch=master)](https://travis-ci.org/cjlucas/ruby-faast)
3
+
4
+ This is a simple library for the [Faast](http://www.faast.io/) push notification service.
5
+
6
+ Currently only the REST API is supported.
7
+
8
+ ---
9
+ ## Synopsis ##
10
+
11
+ ```ruby
12
+ require 'faast'
13
+
14
+ # user credentials can be set at the module level or directly in the Notification instance
15
+ Faast.user_credentials = 'api_key'
16
+
17
+ # create a notification instance
18
+ notification = Faast::Notification.new
19
+
20
+ notification.title = 'This is the title'
21
+ notification.message = 'This is the message'
22
+ notfication.icon_url = 'https://github.com/favicon.ico'
23
+
24
+ notification.send
25
+ # => #<Net::HTTPOK 200 OK readbody=true>
26
+
27
+ # or use the block interface (this is prefered)
28
+ resp = Faast::Notification.send do |notification|
29
+ notification.title = 'This is the title'
30
+ notification.message = 'This is the message'
31
+ notfication.icon_url = 'https://github.com/favicon.ico'
32
+ end
33
+
34
+ resp
35
+ # => #<Net::HTTPOK 200 OK readbody=true>
@@ -0,0 +1,27 @@
1
+ $LOAD_PATH.unshift(File.expand_path('../lib', __FILE__))
2
+
3
+ require 'rake/testtask'
4
+
5
+ require 'faast/version'
6
+
7
+ task :default => [:test]
8
+
9
+ task :test do
10
+ Rake::TestTask.new do |t|
11
+ t.libs << 'test'
12
+ t.test_files = FileList['test/test_*.rb']
13
+ t.verbose = true
14
+ end
15
+ end
16
+
17
+ task :build do
18
+ system 'gem build faast.gemspec'
19
+ end
20
+
21
+ task :release => :build do
22
+ system "gem push faast-#{Faast::VERSION}.gem"
23
+ end
24
+
25
+ task :clean do
26
+ system 'rm -f *.gem'
27
+ end
@@ -0,0 +1,20 @@
1
+ $LOAD_PATH.unshift(File.expand_path('../lib', __FILE__))
2
+
3
+ require 'faast/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'faast'
7
+ s.version = Faast::VERSION
8
+ s.summary = 'A ruby library for the Faast push notification service'
9
+ #s.description = <<-EOF
10
+ #EOF
11
+ s.authors = ['Chris Lucas']
12
+ s.email = ['chris@chrisjlucas.com']
13
+ s.homepage = 'https://github.com/cjlucas/ruby-faast'
14
+ s.license = 'MIT'
15
+ s.files = `git ls-files | egrep '^[^\.]'`.split(/\r?\n/)
16
+ s.test_files = s.files.select { |f| f.match(/^test\/.*\.rb$/) }
17
+ s.platform = Gem::Platform::RUBY
18
+
19
+ s.add_development_dependency('rake')
20
+ end
@@ -0,0 +1,98 @@
1
+ require 'net/http'
2
+
3
+ module Faast
4
+ URL = 'https://www.appnotifications.com/account/notifications.json'
5
+
6
+ class << self
7
+ attr_accessor :user_credentials
8
+ end
9
+
10
+ class Notification
11
+ attr_accessor :user_credentials
12
+ attr_accessor :message
13
+ attr_accessor :long_message
14
+ attr_accessor :long_message_preview
15
+ attr_accessor :title
16
+ attr_accessor :subtitle
17
+ attr_accessor :message_level
18
+ attr_accessor :silent
19
+ attr_accessor :action_loc_key
20
+ attr_accessor :icon_url
21
+ attr_accessor :sound
22
+
23
+ simple_fields = [
24
+ :message,
25
+ :long_message,
26
+ :long_message_preview,
27
+ :title,
28
+ :subtitle,
29
+ :action_loc_key,
30
+ :icon_url,
31
+ ]
32
+
33
+ def initialize
34
+ @data = {}
35
+ self.user_credentials = Faast.user_credentials
36
+ end
37
+
38
+ def user_credentials=(user_credentials)
39
+ @user_credentials = user_credentials
40
+ @data['user_credentials'] = user_credentials
41
+ end
42
+
43
+ def message_level=(message_level)
44
+ self.class.assert_num_in_range(message_level, -2..2)
45
+ @message_level = message_level
46
+ @data['notification[message_level]'] = message_level
47
+ end
48
+
49
+ def silent=(silent)
50
+ @silent = silent
51
+ @data['notification[silent]'] = silent ? 1 : 0
52
+ end
53
+
54
+ def sound=(sound)
55
+ self.class.assert_num_in_range(sound, 1..40)
56
+ @sound = sound
57
+ @data['notification[sound]'] = sound
58
+ end
59
+
60
+ def send
61
+ uri = URI(URL)
62
+
63
+ http = Net::HTTP.new(uri.host, uri.port)
64
+ http.use_ssl = true
65
+
66
+ req = Net::HTTP::Post.new(uri.to_s)
67
+ req.set_form_data(@data)
68
+
69
+ http.request(req)
70
+ end
71
+
72
+ def self.send
73
+ if block_given?
74
+ notif = self.new
75
+ yield notif
76
+ notif.send
77
+ end
78
+ end
79
+
80
+ # create setters for simple fields
81
+ simple_fields.each do |field|
82
+ define_method("#{field}=") do |input|
83
+ ivar = "@#{field}"
84
+ url_param = "notification[#{field}]"
85
+ instance_variable_set(ivar, input)
86
+ @data[url_param] = input
87
+ end
88
+ end
89
+
90
+ private
91
+
92
+ def self.assert_num_in_range(num, range)
93
+ unless range.include?(num)
94
+ raise ArgumentError, "Expected number between #{range}"
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,9 @@
1
+ module Faast
2
+ class Version
3
+ MAJOR = 1
4
+ MINOR = 0
5
+ TINY = 0
6
+ end
7
+
8
+ VERSION = [Version::MAJOR, Version::MINOR, Version::TINY].join('.')
9
+ end
@@ -0,0 +1,7 @@
1
+ require 'bundler'
2
+ Bundler.require(:test)
3
+
4
+ require 'test/unit'
5
+ require 'coveralls'
6
+
7
+ Coveralls.wear!
@@ -0,0 +1,24 @@
1
+ require 'test_helper'
2
+
3
+ require 'faast'
4
+
5
+ class TestPost < Test::Unit::TestCase
6
+ def test_post_no_api_key
7
+ resp = Faast::Notification.send { |notification| }
8
+ assert_block { resp.is_a?(Net::HTTPUnauthorized) }
9
+ end
10
+
11
+ def test_post_with_api_key
12
+ user_credentials_file = File.expand_path('../user_creds.txt', __FILE__)
13
+
14
+ if File.exists?(user_credentials_file)
15
+ resp = Faast::Notification.send do |notification|
16
+ notification.user_credentials = File.read(user_credentials_file).strip
17
+ notification.title = '[ruby-faast] this is the title'
18
+ notification.message = '[ruby-faast] this is the message'
19
+ end
20
+
21
+ assert_block { resp.is_a?(Net::HTTPSuccess) }
22
+ end
23
+ end
24
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: faast
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Chris Lucas
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description:
28
+ email:
29
+ - chris@chrisjlucas.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - CHANGELOG.md
35
+ - Gemfile
36
+ - LICENSE
37
+ - README.md
38
+ - Rakefile
39
+ - faast.gemspec
40
+ - lib/faast.rb
41
+ - lib/faast/version.rb
42
+ - test/test_helper.rb
43
+ - test/test_post.rb
44
+ homepage: https://github.com/cjlucas/ruby-faast
45
+ licenses:
46
+ - MIT
47
+ metadata: {}
48
+ post_install_message:
49
+ rdoc_options: []
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubyforge_project:
64
+ rubygems_version: 2.1.11
65
+ signing_key:
66
+ specification_version: 4
67
+ summary: A ruby library for the Faast push notification service
68
+ test_files:
69
+ - test/test_helper.rb
70
+ - test/test_post.rb