poundpay 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.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ pkg/
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use --create --install 1.9.2@poundpay >& /dev/null
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in poundpay.gemspec
4
+ gemspec
data/README ADDED
File without changes
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1 @@
1
+ rack
@@ -0,0 +1,3 @@
1
+ # echo 'Switching rvm gemset ...'
2
+ rvm use --create --install 1.9.1@poundpay-simple_application >& /dev/null
3
+ # rvm gemset import >& /dev/null
@@ -0,0 +1,8 @@
1
+ Simple example of PoundPay's REST API.
2
+
3
+ The example creates a Rack application that servers one page. In that one
4
+ page, the user is presented with secure iframe served by PoundPay to pay
5
+ david@example.com $200 for a pair of Beat by Dr. Dre on our simple marketplace.
6
+
7
+ To run the example, run the command `rackup` and visit http://localhost:9292
8
+
@@ -0,0 +1,65 @@
1
+ require 'uri'
2
+ require 'net/http'
3
+ require 'net/https'
4
+ require 'json'
5
+ require 'erb'
6
+
7
+ require 'config'
8
+
9
+
10
+ class PoundPay
11
+ attr_reader :api_url, :version, :sid, :token
12
+
13
+ def initialize(api_url, version, sid, token)
14
+ @api_url = api_url
15
+ @version = version
16
+ @sid = sid
17
+ @token = token
18
+ end
19
+
20
+ def post(endpoint, params)
21
+ request_url = "#{@api_url}/#{@version}/#{endpoint}"
22
+ puts request_url, params
23
+ uri = URI.parse request_url
24
+ http = Net::HTTP.new uri.host, uri.port
25
+ http.use_ssl = true
26
+ req = Net::HTTP::Post.new uri.request_uri
27
+ req.set_form_data params
28
+ req.basic_auth @sid, @token
29
+ response = http.request req
30
+ JSON.load response.body
31
+ end
32
+ end
33
+
34
+
35
+ class SimpleApplication
36
+ attr_reader :poundpay_client
37
+
38
+ def initialize
39
+ config = SimpleApplication::CONFIG[:poundpay]
40
+ @poundpay_client = PoundPay.new(config[:api_url], config[:version], config[:sid], config[:token])
41
+ end
42
+
43
+ def call(env)
44
+ unless env['REQUEST_PATH'] == '/' and env['REQUEST_METHOD'] == 'GET'
45
+ return [404, {"Content-Type" => "text/plain"}, ["Page Not Found"]]
46
+ end
47
+ # Create payment request
48
+ params = {
49
+ 'amount' => 20000, # In USD cents
50
+ 'payer_fee_amount' => 0,
51
+ 'payer_email_address' => 'goliath@example.com',
52
+ 'recipient_fee_amount' => 500,
53
+ 'recipient_email_address' => 'david@example.com',
54
+ 'description' => 'Beats by Dr. Dre',
55
+ }
56
+ payment = @poundpay_client.post 'payments', params
57
+ puts payment
58
+
59
+ # Render and return page
60
+ www_poundpay_url = SimpleApplication::CONFIG[:poundpay][:www_url]
61
+ template = ERB.new(open("index.html.erb").read)
62
+ page = template.result(binding)
63
+ [200, {"Content-Type" => "text/html"}, [page]]
64
+ end
65
+ end
@@ -0,0 +1,11 @@
1
+ class SimpleApplication
2
+ CONFIG = {
3
+ poundpay: {
4
+ api_url: "https://api-sandbox.poundpay.com",
5
+ www_url: "https://www-sandbox.poundpay.com",
6
+ version: "silver",
7
+ sid: "DV8539761e250011e0a81d1231400042c7",
8
+ token: "5d291d63059f5c2fe8d144820a847982a9fba7004a1009a35ed7a5fdf1f67960",
9
+ }
10
+ }
11
+ end
@@ -0,0 +1,6 @@
1
+ require 'application'
2
+
3
+ use Rack::ShowExceptions
4
+ use Rack::Lint
5
+
6
+ run SimpleApplication.new
@@ -0,0 +1,18 @@
1
+ <html>
2
+ <title>Simple Marketplace</title>
3
+ <script src="<%= www_poundpay_url %>/js/poundpay.js"></script>
4
+ <body>
5
+ <h1>Simple Marketplace</h1>
6
+ <h2><%= payment['description'] %></h2>
7
+ <div id="pound-root"></div>
8
+ <script type="text/javascript">
9
+ PoundPay.init({
10
+ // success: successCallback, // Optional js callback
11
+ payment_sid: "<%= payment['sid'] %>",
12
+ server: "<%= www_poundpay_url %>",
13
+ cardholder_name: "David Stonethrower", // Optional
14
+ phone_number: "6505551234" // Optional
15
+ });
16
+ </script>
17
+ </body>
18
+ </html>
@@ -0,0 +1,14 @@
1
+ require 'active_resource/formats/json_format'
2
+
3
+ module Poundpay
4
+ module Formats
5
+ module UrlencodedJsonFormat
6
+ extend ActiveResource::Formats::JsonFormat
7
+ extend self
8
+
9
+ def mime_type
10
+ "application/x-www-form-urlencoded"
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,52 @@
1
+ require 'cgi'
2
+ require 'active_resource'
3
+ require 'poundpay/formats'
4
+
5
+ module Poundpay
6
+ class Resource < ActiveResource::Base
7
+ self.format = Formats::UrlencodedJsonFormat
8
+
9
+ class << self
10
+ attr_accessor_with_default(:primary_key, 'sid')
11
+
12
+ # Modified default to not use an extension
13
+ def element_path(id, prefix_options = {}, query_options = nil)
14
+ prefix_options, query_options = split_options(prefix_options) if query_options.nil?
15
+ "#{prefix(prefix_options)}#{collection_name}/#{URI.escape id.to_s}#{query_string(query_options)}"
16
+ end
17
+
18
+ # Modified default to not use an extension
19
+ def new_element_path(prefix_options = {})
20
+ "#{prefix(prefix_options)}#{collection_name}/new"
21
+ end
22
+
23
+ # Modified default to not use an extension
24
+ def collection_path(prefix_options = {}, query_options = nil)
25
+ prefix_options, query_options = split_options(prefix_options) if query_options.nil?
26
+ "#{prefix(prefix_options)}#{collection_name}#{query_string(query_options)}"
27
+ end
28
+
29
+ # Handle paginated collections
30
+ def instantiate_collection(collection, prefix_options = {})
31
+ # TODO: Consume pages
32
+ collection = collection[collection_name]
33
+ super(collection, prefix_options)
34
+ end
35
+ end
36
+
37
+ # Poundpay accepts urlencoded form parameters
38
+ # Ideally we should override this functionality in the format, but it's not very straightforward to do so
39
+ def encode
40
+ urlencode(@attributes)
41
+ end
42
+
43
+ def collection_name
44
+ self.class.collection_name
45
+ end
46
+
47
+ protected
48
+ def urlencode(params)
49
+ params.to_a.collect! { |k, v| "#{k}=#{CGI.escape(v.to_s)}" }.join("&")
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,3 @@
1
+ module Poundpay
2
+ VERSION = "0.0.1"
3
+ end
data/lib/poundpay.rb ADDED
@@ -0,0 +1,33 @@
1
+ require 'poundpay/resource'
2
+
3
+ module Poundpay
4
+ API_URL = "https://api.poundpay.com"
5
+ VERSION = "silver"
6
+
7
+ class << self
8
+ def configure(developer_sid, auth_token, api_url=API_URL, version=VERSION)
9
+ unless developer_sid.start_with? "DV"
10
+ raise ArgumentError.new "developer_sid should start with DV. Make sure " \
11
+ "you're using the right developer_sid"
12
+ end
13
+ Resource.site = "#{api_url}/#{version}/"
14
+ Resource.user = developer_sid
15
+ Resource.password = auth_token
16
+ end
17
+ end
18
+
19
+ class Developer < Resource
20
+ class << self
21
+ def me
22
+ find(self.user)
23
+ end
24
+ end
25
+ end
26
+
27
+ class Payment < Resource
28
+ def release
29
+ self.status = 'RELEASED'
30
+ self.save
31
+ end
32
+ end
33
+ end
data/poundpay.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "poundpay/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "poundpay"
7
+ s.version = Poundpay::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Matin Tamizi"]
10
+ s.email = "devsupport@poundpay.com"
11
+ s.homepage = "http://github.com/poundpay/poundpay-ruby"
12
+ s.summary = %q{Poundpay Ruby library}
13
+ s.description = %q{Payments platform for marketplaces}
14
+
15
+ s.rubyforge_project = "poundpay"
16
+
17
+ s.add_dependency("activeresource", ">= 3.0")
18
+
19
+ s.files = `git ls-files`.split("\n")
20
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
22
+ s.require_paths = ["lib"]
23
+ end
@@ -0,0 +1,34 @@
1
+ require 'poundpay'
2
+
3
+ describe Poundpay do
4
+ describe "#configure" do
5
+ it "should require developer_sid to start with DV" do
6
+ expect {
7
+ # Pass developer_sid and auth_token in wrong order
8
+ Poundpay.configure(
9
+ "c31155b9f944d7aed204bdb2a253fef13b4fdcc6ae1540200449cc4526b2381a",
10
+ "DV0383d447360511e0bbac00264a09ff3c",
11
+ )
12
+ }.to raise_error(ArgumentError, /DV/)
13
+ end
14
+
15
+ it "should be configured with default api_url and version" do
16
+ developer_sid = "DV0383d447360511e0bbac00264a09ff3c"
17
+ auth_token = "c31155b9f944d7aed204bdb2a253fef13b4fdcc6ae1540200449cc4526b2381a"
18
+ Poundpay.configure(developer_sid, auth_token)
19
+ Poundpay::Resource.user.should == developer_sid
20
+ Poundpay::Resource.password.should == auth_token
21
+ Poundpay::Resource.site.to_s.should == "https://api.poundpay.com/silver/"
22
+ end
23
+
24
+ it "should accept optional api_url and version" do
25
+ Poundpay.configure(
26
+ "DV0383d447360511e0bbac00264a09ff3c",
27
+ "c31155b9f944d7aed204bdb2a253fef13b4fdcc6ae1540200449cc4526b2381a",
28
+ api_url="https://api-sandbox.poundpay.com",
29
+ version="gold",
30
+ )
31
+ Poundpay::Resource.site.to_s.should == "https://api-sandbox.poundpay.com/gold/"
32
+ end
33
+ end
34
+ end
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: poundpay
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Matin Tamizi
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-02-11 00:00:00 -08:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: activeresource
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 3
30
+ - 0
31
+ version: "3.0"
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ description: Payments platform for marketplaces
35
+ email: devsupport@poundpay.com
36
+ executables: []
37
+
38
+ extensions: []
39
+
40
+ extra_rdoc_files: []
41
+
42
+ files:
43
+ - .gitignore
44
+ - .rvmrc
45
+ - Gemfile
46
+ - README
47
+ - Rakefile
48
+ - examples/simple_application/.gems
49
+ - examples/simple_application/.rvmrc
50
+ - examples/simple_application/README
51
+ - examples/simple_application/application.rb
52
+ - examples/simple_application/config.rb
53
+ - examples/simple_application/config.ru
54
+ - examples/simple_application/index.html.erb
55
+ - lib/poundpay.rb
56
+ - lib/poundpay/formats.rb
57
+ - lib/poundpay/resource.rb
58
+ - lib/poundpay/version.rb
59
+ - poundpay.gemspec
60
+ - spec/poundpay_spec.rb
61
+ has_rdoc: true
62
+ homepage: http://github.com/poundpay/poundpay-ruby
63
+ licenses: []
64
+
65
+ post_install_message:
66
+ rdoc_options: []
67
+
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ segments:
76
+ - 0
77
+ version: "0"
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ segments:
84
+ - 0
85
+ version: "0"
86
+ requirements: []
87
+
88
+ rubyforge_project: poundpay
89
+ rubygems_version: 1.3.7
90
+ signing_key:
91
+ specification_version: 3
92
+ summary: Poundpay Ruby library
93
+ test_files:
94
+ - spec/poundpay_spec.rb