ychaker-zeep_it 0.0.4

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,20 @@
1
+ Copyright (c) 2009 Youssef Chaker
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,65 @@
1
+ = ZeepIt
2
+
3
+ ZeepIt is a plugin that leverages the zeep-messaging gem to create the models/controllers/views required to get your app ready to use the Zeep Mobile SMS service.
4
+
5
+ All you need to do is install the plugin, run the setup and sign up for an account at http://zeepmobile.com. Then make sure that your callback URL in your Zeep Mobile account point to http://www.yourdomain.com/zeep_sms/incoming and you add your api_key and you secret_key to config/zeep_it.yml and you'll be good to go.
6
+
7
+
8
+ == Prerequisites
9
+
10
+ A Zeep Mobile (http://zeepmobile.com) account and the respective API and SECRET keys.
11
+
12
+
13
+ == Install
14
+
15
+ Install from gihub:
16
+ gem sources -a http://gems.github.com
17
+ sudo gem install ychaker-zeep_it
18
+
19
+ you only have to update your gem sources once
20
+
21
+ == Setup
22
+
23
+ From your Rails App root directory run:
24
+
25
+ rake zeep_it:setup
26
+
27
+ (make sure your db is already created!)
28
+
29
+ Then edit config/zeep_it.yml with the correct API and SECRET keys.
30
+
31
+
32
+ == Examples
33
+
34
+ Example of using the helper method for displaying the Zeep Mobile:
35
+
36
+ <%= zeep_form(user_id) %>
37
+
38
+ Example of sending an SMSL
39
+
40
+ ZeepSms::send_sms('user_id', 'body of SMS')
41
+
42
+ Example of creating a ZeepSms and sending it:
43
+
44
+ sms = ZeepSms.new(:login=> 'user_id', :raw =>'body of SMS')
45
+ sms.send_text
46
+
47
+ Examples of parsing an SMS:
48
+
49
+ sms = ZeepSms.new(:login=> 'user_id', :raw =>'body of SMS')
50
+ sms.parse_for(:keyword => 'user:')
51
+ #=> returns the text found after the keywork and before the next space
52
+ sms.parse_for(:pattern => /[0-9]/)
53
+ #=> returns the text found after the first digit and before the next space
54
+ sms.parse_for(:common => 'twitter')
55
+ #=> returns the text found after the first '@' and before the next space
56
+ sms.parse_for({:common => 'bang'}, true)
57
+ #=> returns the text found between the previous space and the next space
58
+ #=> removing the '!' in between
59
+
60
+ Also returns the rest of the SMS omitting the 5-8 code in the beginning
61
+
62
+
63
+ == Copyright
64
+
65
+ Copyright (c) 2009 Youssef Chaker, released under the MIT license
@@ -0,0 +1,54 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/testtask'
4
+ require 'rake/rdoctask'
5
+ require 'rake/gempackagetask'
6
+
7
+ desc 'Default: run unit tests.'
8
+ task :default => :test
9
+
10
+ desc 'Test the zeep_it plugin.'
11
+ Rake::TestTask.new(:test) do |t|
12
+ t.libs << 'lib'
13
+ t.libs << 'test'
14
+ t.pattern = 'test/**/*_test.rb'
15
+ t.verbose = true
16
+ end
17
+
18
+ desc 'Generate documentation for the zeep_it plugin.'
19
+ Rake::RDocTask.new(:rdoc) do |rdoc|
20
+ rdoc.rdoc_dir = 'rdoc'
21
+ rdoc.title = 'ZeepIt'
22
+ rdoc.options << '--line-numbers' << '--inline-source'
23
+ rdoc.rdoc_files.include('README.rdoc')
24
+ rdoc.rdoc_files.include('lib/**/*.rb')
25
+ end
26
+
27
+ PKG_FILES = FileList[
28
+ '[a-zA-Z]*',
29
+ 'generators/**/*',
30
+ 'lib/**/*',
31
+ 'rails/**/*',
32
+ 'tasks/**/*',
33
+ 'test/**/*'
34
+ ]
35
+
36
+ spec = Gem::Specification.new do |s|
37
+ s.name = "zeep_it"
38
+ s.version = "0.0.4"
39
+ s.author = "Youssef Chaker"
40
+ s.email = "youssefchaker@youhhoo.com"
41
+ s.homepage = "http://github.com/ychaker/zeep_it"
42
+ s.platform = Gem::Platform::RUBY
43
+ s.summary = "Get your app Zeep Mobile ready"
44
+ s.description = "Get your app Zeep Mobile ready"
45
+ s.files = PKG_FILES.to_a
46
+ s.require_path = "lib"
47
+ s.has_rdoc = true
48
+ s.extra_rdoc_files = ["README.rdoc"]
49
+ end
50
+
51
+ desc 'Turn this plugin into a gem.'
52
+ Rake::GemPackageTask.new(spec) do |pkg|
53
+ pkg.gem_spec = spec
54
+ end
@@ -0,0 +1,7 @@
1
+ class ZeepItRouteGenerator < Rails::Generator::Base #:nodoc:
2
+ def manifest #:nodoc:
3
+ record do |m|
4
+ m.zeep_it_route
5
+ end
6
+ end
7
+ end
@@ -0,0 +1 @@
1
+ # Install hook code here
@@ -0,0 +1,104 @@
1
+ class ZeepSmsController < ApplicationController
2
+
3
+ # GET /zeep_sms
4
+ # GET /zeep_sms.xml
5
+ def index
6
+ respond_to do |format|
7
+ format.html # index.html.erb
8
+ format.xml { render :xml => @sms }
9
+ end
10
+ end
11
+
12
+ # GET /zeep_sms/incoming
13
+ # GET /zeep_sms/incoming.xml
14
+ #
15
+ # Callback URL
16
+ # When users send SMS messages to your website, Zeep Mobile send the requests to this URL.
17
+ # I.e. http://example.com/zeep_sms/incoming
18
+ def incoming
19
+ response.headers["Content-Type"] = "text/plain; charset=utf-8"
20
+ #Read params from the text message
21
+
22
+ if (params[:uid] && params[:body])
23
+ @userid = params[:uid]
24
+ @body = params[:body]
25
+ sms = ZeepSms.new(:raw => @body, :login => @userid)
26
+ end
27
+
28
+ end
29
+
30
+ # CRUD method templates:
31
+
32
+ # GET /zeep_sms/1
33
+ # GET /zeep_sms/1.xml
34
+ # def show
35
+ # @sms = ZeepSms.find(params[:id])
36
+ #
37
+ # respond_to do |format|
38
+ # format.html # show.html.erb
39
+ # format.xml { render :xml => @sms }
40
+ # end
41
+ # end
42
+
43
+ # GET /zeep_sms/new
44
+ # GET /zeep_sms/new.xml
45
+ # def new
46
+ # @sms = ZeepSms.new
47
+ #
48
+ # respond_to do |format|
49
+ # format.html # new.html.erb
50
+ # format.xml { render :xml => @sms }
51
+ # end
52
+ # end
53
+
54
+ # GET /zeep_sms/1/edit
55
+ # def edit
56
+ # @sms = ZeepSms.find(params[:id])
57
+ # end
58
+
59
+ # POST /zeep_sms
60
+ # POST /zeep_sms.xml
61
+ # def create
62
+ # @sms = ZeepSms.new(params[:sms])
63
+ #
64
+ # respond_to do |format|
65
+ # if @sms.save
66
+ # flash[:notice] = 'Sms was successfully created.'
67
+ # format.html { redirect_to(@sms) }
68
+ # format.xml { render :xml => @sms, :status => :created, :location => @sms }
69
+ # else
70
+ # format.html { render :action => "new" }
71
+ # format.xml { render :xml => @sms.errors, :status => :unprocessable_entity }
72
+ # end
73
+ # end
74
+ # end
75
+
76
+ # PUT /zeep_sms/1
77
+ # PUT /zeep_sms/1.xml
78
+ # def update
79
+ # @sms = ZeepSms.find(params[:id])
80
+ #
81
+ # respond_to do |format|
82
+ # if @sms.update_attributes(params[:sms])
83
+ # flash[:notice] = 'Sms was successfully updated.'
84
+ # format.html { redirect_to(@sms) }
85
+ # format.xml { head :ok }
86
+ # else
87
+ # format.html { render :action => "edit" }
88
+ # format.xml { render :xml => @sms.errors, :status => :unprocessable_entity }
89
+ # end
90
+ # end
91
+ # end
92
+
93
+ # DELETE /zeep_sms/1
94
+ # DELETE /zeep_sms/1.xml
95
+ # def destroy
96
+ # @sms = ZeepSms.find(params[:id])
97
+ # @sms.destroy
98
+ #
99
+ # respond_to do |format|
100
+ # format.html { redirect_to(sms_url) }
101
+ # format.xml { head :ok }
102
+ # end
103
+ # end
104
+ end
@@ -0,0 +1,11 @@
1
+ module ZeepSmsHelper
2
+
3
+ # Render the Zeep Mobile phone registration form
4
+ #
5
+ # Example:
6
+ # <%= zeep_form(user_id) %>
7
+ #
8
+ def zeep_form(user_id = '')
9
+ render :partial => 'zeep_sms/form', :locals => {:user_id => user_id}
10
+ end
11
+ end
@@ -0,0 +1,101 @@
1
+ require 'rubygems'
2
+ require 'zeep/messaging'
3
+
4
+ class ZeepSms < ActiveRecord::Base
5
+ RAILS_ROOT ||= File.dirname(__FILE__) + '/../../../..'
6
+ file = YAML::load(IO.read("#{RAILS_ROOT}/config/zeep_it.yml"))
7
+
8
+ # Zeep Mobile keys extracted from config/zeep_it.yml
9
+ SECRET_KEY = file['SECRET_KEY']
10
+ API_KEY = file['API_KEY']
11
+
12
+ # Send any SMS by providing the user loging and body
13
+ #
14
+ # Example:
15
+ # ZeepSms::send_sms('user_id', 'body of SMS')
16
+ def self.send_sms(login, body)
17
+ Zeep::Base.configure_credentials(self::API_KEY, self::SECRET_KEY)
18
+ Zeep::Messaging.send_message(login, body)
19
+ end
20
+
21
+ # Send the SMS
22
+ #
23
+ # Example:
24
+ # sms = ZeepSms.new(:login=> 'user_id', :raw =>'body of SMS')
25
+ # sms.send_text
26
+ def send_text
27
+ Zeep::Base.configure_credentials(self::API_KEY, self::SECRET_KEY)
28
+ Zeep::Messaging.send_message(self.login, self.raw)
29
+ end
30
+
31
+ # Parse an SMS for a particular keyword or pattern
32
+ #
33
+ # Examples:
34
+ # parse_for(:keyword => 'user:')
35
+ # => returns the text found after the keywork and before the next space
36
+ # parse_for(:pattern => /[0-9]/)
37
+ # => returns the text found after the first digit and before the next space
38
+ # parse_for(:common => 'twitter')
39
+ # => returns the text found after the first '@' and before the next space
40
+ # parse_for({:common => 'bang'}, true)
41
+ # => returns the text found between the previous space and the next space
42
+ # => removing the '!' in between
43
+ #
44
+ # Also returns the rest of the SMS omitting the 5-8 code in the beginning
45
+ def parse_sms(hash={}, keepPrevious=false)
46
+ prev = /.*/
47
+ if keepPrevious
48
+ prev = ''
49
+ end
50
+ key, rest = ''
51
+ result = {:key => key, :rest => rest}
52
+ keyword = extract_keyword(hash)
53
+ key = parse_for(self.raw, keyword, keepPrevious)
54
+ rest = self.raw.sub(/#{keyword}#{key}\s+/, '')
55
+ rest.sub!(/[\w]+\s+{1}/, '').chomp!
56
+ result = {:key => key, :rest => rest}
57
+ end
58
+
59
+ private
60
+ def extract_keyword(hash={}) #:nodoc:
61
+ keyword = ''
62
+ if !hash[:keyword].blank?
63
+ keyword = hash[:keyword]
64
+ elsif !hash[:pattern].blank?
65
+ keyword = hash[:pattern]
66
+ elsif !hash[:common].blank?
67
+ if hash[:common] == 'twitter'
68
+ keyword = '@'
69
+ elsif hash[:common] == 'hashtag'
70
+ keyword = '#'
71
+ elsif hash[:common] == 'USD'
72
+ keyword = '$'
73
+ elsif hash[:common] == 'percent'
74
+ keyword = '%'
75
+ elsif hash[:common] == 'bang'
76
+ keyword = '!'
77
+ elsif hash[:common] == 'colon'
78
+ keyword = ':'
79
+ end
80
+ end
81
+ keyword
82
+ end
83
+
84
+ def parse_for(body, keyword, keepPrevious=false) #:nodoc:
85
+ prev = /.*/
86
+ if keepPrevious
87
+ prev = ''
88
+ end
89
+ result = ''
90
+ unless keyword.blank?
91
+ body.split(/\s+/).each do |word|
92
+ regex = /#{keyword}/
93
+ if regex.match(word)
94
+ result = word.sub(/#{prev}#{keyword}/, '')
95
+ break
96
+ end
97
+ end
98
+ end
99
+ result
100
+ end
101
+ end
@@ -0,0 +1,10 @@
1
+ <% user_id ||= ' ' %>
2
+
3
+ <div class="zeep-help">
4
+ To receive text messages please make sure you have created a zeepmobile account below (widget may take a few seconds to load). Ads may be inserted with your text messages, but you will not be spammed.
5
+ </div>
6
+ <iframe
7
+ style="width: 100%; height: 300px; border: none;"
8
+ id="zeep_mobile_settings_panel"
9
+ src="https://secure.zeepmobile.com/subscription/settings?api_key=<%= ZeepSms::API_KEY %>&user_id=<%= user_id %>">
10
+ </iframe>
File without changes
@@ -0,0 +1,6 @@
1
+ <h3>Create your Zeep Mobile accound</h3>
2
+
3
+ <!-- Example of displaying the Zeep Mobile form for registering a phone number -->
4
+ <!-- A unique ID should be passed on to identify the user -->
5
+ <% user_id = @user_id.nil? ? '' : @user_id %>
6
+ <%= zeep_form(user_id) %>
@@ -0,0 +1,13 @@
1
+ class CreateZeepSms < ActiveRecord::Migration #:nodoc:
2
+ def self.up
3
+ create_table :zeep_sms do |t|
4
+ t.string "raw"
5
+ t.string "login"
6
+ t.timestamps
7
+ end
8
+ end
9
+
10
+ def self.down
11
+ drop_table :zeep_sms
12
+ end
13
+ end
@@ -0,0 +1,18 @@
1
+ Copyright (c) 2008 Zeep Mobile (zeepmobile.com)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to
5
+ deal in the Software without restriction, including without limitation the
6
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
+ sell copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16
+ THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,42 @@
1
+ = Zeep Mobile Messaging - SMS Made Easy.
2
+
3
+ With just a few lines of code, Zeep Mobile's API lets your web app communicate with your users over SMS. Zeep Mobile makes it easy to:
4
+
5
+ * Manage your users' mobile content subscriptions
6
+ * Send and receive SMS content
7
+
8
+ These libraries take care of the HTTP Header signing and posting to the HTTP endpoint.
9
+
10
+ = Development
11
+
12
+ http://code.google.com/p/zeep-messaging/ is the home of this project. For read-only access to the subversion repo; this should sort you out:
13
+
14
+ $ svn checkout http://zeep-messaging.googlecode.com/svn/ruby/ trunk/ zeep-messaging-read-only
15
+
16
+ = Installing zeep-messaging
17
+
18
+ Until we start publishing to rubyforge (coming soon) you'll have to get the latest gem from here:
19
+
20
+ http://code.google.com/p/zeep-messaging/downloads/list
21
+
22
+ Download it and then:
23
+
24
+ $ gem install zeep-messaging-0.1.X.gem
25
+
26
+ = Getting Started
27
+
28
+ * Head to http://zeepmobile.com/ and get a developer account.
29
+ * Open your account page: https://secure.zeepmobile.com/account/
30
+ * Register a new application.
31
+ * Note your API_KEY and SECRET_KEY
32
+
33
+ require 'rubygems' # Only required if you've installed the gem version
34
+ require 'zeep/messaging'
35
+
36
+ Zeep::Base.configure_credentials(<your api key>, <your secret key>)
37
+
38
+ Zeep::send_message(<user_id>, "'Art thou not Romeo, and a Montague?'")
39
+
40
+ Wasn't that easy?
41
+
42
+ As always, any and all feedback is appreciated. You can find me at simon@zeepmobile.com.