fundraiser 1.0.0.beta

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 (54) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +72 -0
  3. data/Rakefile +35 -0
  4. data/app/assets/javascripts/fundraiser/application.js +15 -0
  5. data/app/assets/stylesheets/fundraiser/application.css +13 -0
  6. data/app/assets/stylesheets/fundraiser/styles/forms.css.scss +16 -0
  7. data/app/controllers/fundraiser/application_controller.rb +14 -0
  8. data/app/controllers/fundraiser/home_controller.rb +4 -0
  9. data/app/controllers/fundraiser/ipns_controller.rb +24 -0
  10. data/app/controllers/fundraiser/manage/base_controller.rb +7 -0
  11. data/app/controllers/fundraiser/manage/rewards_controller.rb +45 -0
  12. data/app/controllers/fundraiser/manage/settings_controller.rb +17 -0
  13. data/app/controllers/fundraiser/pledges_controller.rb +32 -0
  14. data/app/controllers/fundraiser/rewards_controller.rb +9 -0
  15. data/app/controllers/fundraiser/thanks_controller.rb +6 -0
  16. data/app/helpers/fundraiser/application_helper.rb +16 -0
  17. data/app/models/fundraiser/contribution.rb +25 -0
  18. data/app/models/fundraiser/pledge.rb +8 -0
  19. data/app/models/fundraiser/reward.rb +10 -0
  20. data/app/models/fundraiser/settings.rb +39 -0
  21. data/app/views/fundraiser/application/_alerts.html.haml +5 -0
  22. data/app/views/fundraiser/application/_bootstrap_text_area.html.haml +9 -0
  23. data/app/views/fundraiser/application/_bootstrap_text_field.html.haml +9 -0
  24. data/app/views/fundraiser/application/_navbar.html.haml +6 -0
  25. data/app/views/fundraiser/devise/sessions/new.html.haml +16 -0
  26. data/app/views/fundraiser/home/show.html.haml +1 -0
  27. data/app/views/fundraiser/manage/rewards/_form.html.haml +3 -0
  28. data/app/views/fundraiser/manage/rewards/_reward.html.haml +6 -0
  29. data/app/views/fundraiser/manage/rewards/edit.html.haml +10 -0
  30. data/app/views/fundraiser/manage/rewards/index.html.haml +6 -0
  31. data/app/views/fundraiser/manage/rewards/new.html.haml +10 -0
  32. data/app/views/fundraiser/manage/settings/edit.html.haml +15 -0
  33. data/app/views/fundraiser/pledges/new.html.haml +19 -0
  34. data/app/views/fundraiser/pledges/show.html.haml +1 -0
  35. data/app/views/fundraiser/rewards/_reward.html.haml +5 -0
  36. data/app/views/fundraiser/rewards/index.html.haml +7 -0
  37. data/app/views/fundraiser/thanks/show.html.haml +1 -0
  38. data/app/views/layouts/fundraiser/application.html.haml +13 -0
  39. data/config/initializers/settings.rb +6 -0
  40. data/config/locales/devise.en.yml +58 -0
  41. data/config/routes.rb +13 -0
  42. data/db/migrate/20121008183146_create_fundraiser_settings.rb +10 -0
  43. data/db/migrate/20121009000016_create_fundraiser_rewards.rb +11 -0
  44. data/db/migrate/20121009070136_create_fundraiser_pledges.rb +19 -0
  45. data/db/migrate/20121010182436_create_fundraiser_contributions.rb +12 -0
  46. data/lib/amazon/fps/signature_utils.rb +142 -0
  47. data/lib/amazon/fps/signature_utils_for_outbound.rb +179 -0
  48. data/lib/amazon/fps/widget.rb +58 -0
  49. data/lib/fundraiser.rb +16 -0
  50. data/lib/fundraiser/engine.rb +5 -0
  51. data/lib/fundraiser/version.rb +3 -0
  52. data/lib/generators/fundraiser/views_generator.rb +11 -0
  53. data/lib/tasks/fundraiser_tasks.rake +7 -0
  54. metadata +293 -0
@@ -0,0 +1,179 @@
1
+ ###############################################################################
2
+ # Copyright 2008-2010 Amazon Technologies, Inc
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ #
5
+ # You may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at: http://aws.amazon.com/apache2.0
7
+ # This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
8
+ # CONDITIONS OF ANY KIND, either express or implied. See the License for the
9
+ # specific language governing permissions and limitations under the License.
10
+ ##############################################################################
11
+
12
+ require 'base64'
13
+ require 'cgi'
14
+ require 'openssl'
15
+ require 'net/http'
16
+ require 'net/https'
17
+ require 'rexml/document'
18
+
19
+ module Amazon
20
+ module FPS
21
+ class SignatureUtilsForOutbound
22
+
23
+ SIGNATURE_KEYNAME = "signature"
24
+ SIGNATURE_METHOD_KEYNAME = "signatureMethod"
25
+ SIGNATURE_VERSION_KEYNAME = "signatureVersion"
26
+ CERTIFICATE_URL_KEYNAME = "certificateUrl"
27
+ CERTIFICATE_URL_ROOT = "https://fps.amazonaws.com/"
28
+ CERTIFICATE_URL_ROOT_SANDBOX = "https://fps.sandbox.amazonaws.com/"
29
+
30
+ FPS_PROD_ENDPOINT = CERTIFICATE_URL_ROOT
31
+ FPS_SANDBOX_ENDPOINT = CERTIFICATE_URL_ROOT_SANDBOX
32
+ ACTION_PARAM = "?Action=VerifySignature"
33
+ END_POINT_PARAM = "&UrlEndPoint="
34
+ HTTP_PARAMS_PARAM = "&HttpParameters="
35
+ VERSION_PARAM_VALUE = "&Version=2008-09-17"
36
+
37
+ USER_AGENT_STRING = "SigV2_MigrationSampleCode_Ruby-2010-09-13"
38
+
39
+ SIGNATURE_VERSION_1 = "1"
40
+ SIGNATURE_VERSION_2 = "2"
41
+ RSA_SHA1_ALGORITHM = "RSA-SHA1"
42
+
43
+ def initialize(aws_access_key, aws_secret_key)
44
+ @aws_secret_key = aws_secret_key
45
+ @aws_access_key = aws_access_key
46
+ end
47
+
48
+ def validate_request(args)
49
+ parameters = args[:parameters]
50
+ return validate_signature_v2(args) if (parameters[SIGNATURE_VERSION_KEYNAME] == SIGNATURE_VERSION_2)
51
+ return validate_signature_v1(args)
52
+ end
53
+
54
+ def validate_signature_v1(args)
55
+ parameters = args[:parameters]
56
+ signature = "";
57
+ if(parameters[SIGNATURE_KEYNAME] != nil) then
58
+ signature = parameters[SIGNATURE_KEYNAME];
59
+ else
60
+ raise "Signature is missing from parameters"
61
+ end
62
+
63
+ canonical = SignatureUtilsForOutbound::calculate_string_to_sign_v1(args)
64
+ digest = OpenSSL::Digest::Digest.new('sha1')
65
+ return signature == Base64.encode64(OpenSSL::HMAC.digest(digest, @aws_secret_key, canonical)).chomp
66
+ end
67
+
68
+ def validate_signature_v2(args)
69
+ [:parameters,
70
+ :http_method,
71
+ :url_end_point].each do |arg|
72
+ raise "#{arg.inspect} is missing from the arguments." unless args[arg]
73
+ end
74
+
75
+ url_end_point = args[:url_end_point]
76
+
77
+ parameters = args[:parameters]
78
+ raise ":parameters must be enumerable" unless args[:parameters].kind_of? Enumerable
79
+
80
+ signature = parameters[SIGNATURE_KEYNAME];
81
+ raise "'signature' is missing from the parameters." if (signature.nil? or signature.empty?)
82
+
83
+ signature_version = parameters[SIGNATURE_VERSION_KEYNAME];
84
+ raise "'signatureVersion' is missing from the parameters." if (signature_version.nil? or signature_version.empty?)
85
+ raise "'signatureVersion' present in parameters is invalid. Valid values are: 2" if (signature_version != SIGNATURE_VERSION_2)
86
+
87
+ signature_method = parameters[SIGNATURE_METHOD_KEYNAME]
88
+ raise "'signatureMethod' is missing from the parameters." if (signature_method.nil? or signature_method.empty?)
89
+ signature_algorithm = SignatureUtilsForOutbound::get_algorithm(signature_method)
90
+ raise "'signatureMethod' present in parameters is invalid. Valid values are: RSA-SHA1" if (signature_algorithm.nil?)
91
+
92
+ certificate_url = parameters[CERTIFICATE_URL_KEYNAME]
93
+ raise "'certificate_url' is missing from the parameters." if (certificate_url.nil? or certificate_url.empty?)
94
+
95
+ # Construct VerifySignatureAPI request
96
+ if(SignatureUtilsForOutbound::starts_with(certificate_url, FPS_SANDBOX_ENDPOINT) == true) then
97
+ verify_signature_request = FPS_SANDBOX_ENDPOINT
98
+ elsif(SignatureUtilsForOutbound::starts_with(certificate_url, FPS_PROD_ENDPOINT) == true) then
99
+ verify_signature_request = FPS_PROD_ENDPOINT
100
+ else
101
+ raise "'certificateUrl' received is not valid. Valid certificate urls start with " <<
102
+ CERTIFICATE_URL_ROOT << " or " << CERTIFICATE_URL_ROOT_SANDBOX << "."
103
+ end
104
+
105
+ verify_signature_request = verify_signature_request + ACTION_PARAM +
106
+ END_POINT_PARAM +
107
+ SignatureUtilsForOutbound::urlencode(url_end_point) +
108
+ VERSION_PARAM_VALUE +
109
+ HTTP_PARAMS_PARAM +
110
+ SignatureUtilsForOutbound::urlencode(SignatureUtilsForOutbound::get_http_params(parameters))
111
+
112
+ verify_signature_response = SignatureUtilsForOutbound::get_http_data(verify_signature_request)
113
+
114
+ # parse the response
115
+ document = REXML::Document.new(verify_signature_response)
116
+
117
+ status_el = document.elements['VerifySignatureResponse/VerifySignatureResult/VerificationStatus']
118
+ return (!status_el.nil? && status_el.text == "Success")
119
+ end
120
+
121
+ def self.calculate_string_to_sign_v1(args)
122
+ parameters = args[:parameters]
123
+
124
+ # exclude any existing Signature parameter from the canonical string
125
+ sorted = (parameters.reject { |k, v| ((k == SIGNATURE_KEYNAME)) }).sort { |a,b| a[0].downcase <=> b[0].downcase }
126
+
127
+ canonical = ''
128
+ sorted.each do |v|
129
+ canonical << v[0]
130
+ canonical << v[1] unless(v[1].nil?)
131
+ end
132
+
133
+ return canonical
134
+ end
135
+
136
+ def self.get_algorithm(signature_method)
137
+ return OpenSSL::Digest::SHA1.new if (signature_method == RSA_SHA1_ALGORITHM)
138
+ return nil
139
+ end
140
+
141
+ # Convert a string into URL encoded form.
142
+ def self.urlencode(plaintext)
143
+ CGI.escape(plaintext.to_s).gsub("+", "%20").gsub("%7E", "~")
144
+ end
145
+
146
+ def self.get_http_data(url)
147
+ #2. fetch certificate if not found in cache
148
+ uri = URI.parse(url)
149
+ http_session = Net::HTTP.new(uri.host, uri.port)
150
+ http_session.use_ssl = true
151
+ http_session.ca_file = 'ca-bundle.crt'
152
+ http_session.verify_mode = OpenSSL::SSL::VERIFY_PEER
153
+ http_session.verify_depth = 5
154
+
155
+ res = http_session.start {|http_session|
156
+ req = Net::HTTP::Get.new(url, {"User-Agent" => USER_AGENT_STRING})
157
+ http_session.request(req)
158
+ }
159
+
160
+ return res.body
161
+ end
162
+
163
+ def self.starts_with(string, prefix)
164
+ prefix = prefix.to_s
165
+ string[0, prefix.length] == prefix
166
+ end
167
+
168
+ def self.get_http_params(params)
169
+ params.map do |(k, v)|
170
+ urlencode(k) + "=" + urlencode(v)
171
+ end.join("&")
172
+ end
173
+
174
+ end
175
+
176
+ end
177
+ end
178
+
179
+
@@ -0,0 +1,58 @@
1
+ module Amazon
2
+ module FPS
3
+ class Widget
4
+ @@app_name = "ASP"
5
+ @@http_method = "POST"
6
+ @@service_end_point = "https://authorize.payments-sandbox.amazon.com/pba/paypipeline"
7
+
8
+ @@access_key = "<Paste your access key id here>"
9
+ @@secret_key = "<Paste your secret key here>"
10
+
11
+ def self.get_paynow_widget_params(amount, description, reference_id, immediate_return,
12
+ return_url, abandon_url, process_immediate, ipn_url, cobranding_style, signature_version,
13
+ signatureMethod)
14
+ form_hidden_inputs = {}
15
+ form_hidden_inputs["accessKey"] = Fundraiser::Settings.aws_access_key
16
+ form_hidden_inputs["amount"] = amount
17
+ form_hidden_inputs["description"] = description
18
+
19
+ form_hidden_inputs["referenceId"] = reference_id unless reference_id.nil?
20
+ form_hidden_inputs["immediateReturn"] = immediate_return unless immediate_return.nil?
21
+ form_hidden_inputs["returnUrl"] = return_url unless return_url.nil?
22
+ form_hidden_inputs["abandonUrl"] = abandon_url unless abandon_url.nil?
23
+ form_hidden_inputs["processImmediate"] = process_immediate unless process_immediate.nil?
24
+ form_hidden_inputs["ipnUrl"] = ipn_url unless ipn_url.nil?
25
+ form_hidden_inputs["cobrandingStyle"] = cobranding_style unless cobranding_style.nil?
26
+ form_hidden_inputs[Amazon::FPS::SignatureUtils::SIGNATURE_VERSION_KEYNAME] = signature_version unless signature_version.nil?
27
+ form_hidden_inputs[Amazon::FPS::SignatureUtils::SIGNATURE_METHOD_KEYNAME] = signatureMethod unless signatureMethod.nil?
28
+
29
+ form_hidden_inputs
30
+ end
31
+
32
+ def self.get_paynow_widget_form(form_hidden_inputs)
33
+ form = "<form action=\"" + @@service_end_point + "\" method=\"" + @@http_method + "\">\n"
34
+ form += "<input type=\"image\" src=\"https://authorize.payments-sandbox.amazon.com/pba/images/payNowButton.png\" border=\"0\">\n"
35
+ form_hidden_inputs.each { |k,v|
36
+ form += "<input type=\"hidden\" name=\"" + k + "\" value=\"" + v + "\" >\n"
37
+ }
38
+ form += "</form>\n"
39
+ end
40
+
41
+ def self.widget(amount, title, reward_id, return_url, ipn_url)
42
+ uri = URI.parse(@@service_end_point)
43
+ params = get_paynow_widget_params(amount, title, reward_id.to_s, "1",
44
+ return_url, nil, "0",
45
+ ipn_url, "logo", "2", Amazon::FPS::SignatureUtils::HMAC_SHA256_ALGORITHM)
46
+
47
+ signature = Amazon::FPS::SignatureUtils.sign_parameters({:parameters => params,
48
+ :aws_secret_key => Fundraiser::Settings.aws_secret_key,
49
+ :host => uri.host,
50
+ :verb => @@http_method,
51
+ :uri => uri.path })
52
+ params[Amazon::FPS::SignatureUtils::SIGNATURE_KEYNAME] = signature
53
+ paynow_widget_form = get_paynow_widget_form(params)
54
+ paynow_widget_form.html_safe
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,16 @@
1
+ require "fundraiser/engine"
2
+ require "haml-rails"
3
+ require "persistent_settings"
4
+ require "amazon/fps/signature_utils"
5
+ require "amazon/fps/signature_utils_for_outbound"
6
+ require "amazon/fps/widget"
7
+
8
+ require "generators/fundraiser/views_generator"
9
+
10
+ #TODO: This line is here due a Heroku issue:
11
+ #
12
+ # http://stackoverflow.com/questions/11703679/opensslsslsslerror-on-heroku
13
+ #
14
+ # No idea how it will work on other platforms
15
+ #
16
+ OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
@@ -0,0 +1,5 @@
1
+ module Fundraiser
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace Fundraiser
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module Fundraiser
2
+ VERSION = "1.0.0.beta"
3
+ end
@@ -0,0 +1,11 @@
1
+ require 'rails/generators'
2
+
3
+ module Fundraiser
4
+ class ViewsGenerator < ::Rails::Generators::Base
5
+ source_root File.expand_path('../../../../app/', __FILE__)
6
+
7
+ def copy_views
8
+ directory 'views', 'app/views'
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ namespace :fundraiser do
2
+ namespace :settings do
3
+ task :init => :environment do
4
+ Fundraiser::Settings.amazon!
5
+ end
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,293 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fundraiser
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.beta
5
+ prerelease: 6
6
+ platform: ruby
7
+ authors:
8
+ - David Padilla
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-10-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.8
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.8
30
+ - !ruby/object:Gem::Dependency
31
+ name: haml-rails
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 0.3.5
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.3.5
46
+ - !ruby/object:Gem::Dependency
47
+ name: persistent_settings
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 1.3.0
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 1.3.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: autotest
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: autotest-growl
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: capybara
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: faker
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: launchy
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: rspec-rails
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ - !ruby/object:Gem::Dependency
159
+ name: sqlite3
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ - !ruby/object:Gem::Dependency
175
+ name: vcr
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ! '>='
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ! '>='
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ - !ruby/object:Gem::Dependency
191
+ name: webmock
192
+ requirement: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ! '>='
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ type: :development
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ! '>='
204
+ - !ruby/object:Gem::Version
205
+ version: '0'
206
+ description: Mountable Engine to set up a Crowdfunding app
207
+ email:
208
+ - david@crowdint.com
209
+ executables: []
210
+ extensions: []
211
+ extra_rdoc_files: []
212
+ files:
213
+ - app/assets/javascripts/fundraiser/application.js
214
+ - app/assets/stylesheets/fundraiser/application.css
215
+ - app/assets/stylesheets/fundraiser/styles/forms.css.scss
216
+ - app/controllers/fundraiser/application_controller.rb
217
+ - app/controllers/fundraiser/home_controller.rb
218
+ - app/controllers/fundraiser/ipns_controller.rb
219
+ - app/controllers/fundraiser/manage/base_controller.rb
220
+ - app/controllers/fundraiser/manage/rewards_controller.rb
221
+ - app/controllers/fundraiser/manage/settings_controller.rb
222
+ - app/controllers/fundraiser/pledges_controller.rb
223
+ - app/controllers/fundraiser/rewards_controller.rb
224
+ - app/controllers/fundraiser/thanks_controller.rb
225
+ - app/helpers/fundraiser/application_helper.rb
226
+ - app/models/fundraiser/contribution.rb
227
+ - app/models/fundraiser/pledge.rb
228
+ - app/models/fundraiser/reward.rb
229
+ - app/models/fundraiser/settings.rb
230
+ - app/views/fundraiser/application/_alerts.html.haml
231
+ - app/views/fundraiser/application/_bootstrap_text_area.html.haml
232
+ - app/views/fundraiser/application/_bootstrap_text_field.html.haml
233
+ - app/views/fundraiser/application/_navbar.html.haml
234
+ - app/views/fundraiser/devise/sessions/new.html.haml
235
+ - app/views/fundraiser/home/show.html.haml
236
+ - app/views/fundraiser/manage/rewards/_form.html.haml
237
+ - app/views/fundraiser/manage/rewards/_reward.html.haml
238
+ - app/views/fundraiser/manage/rewards/edit.html.haml
239
+ - app/views/fundraiser/manage/rewards/index.html.haml
240
+ - app/views/fundraiser/manage/rewards/new.html.haml
241
+ - app/views/fundraiser/manage/settings/edit.html.haml
242
+ - app/views/fundraiser/pledges/new.html.haml
243
+ - app/views/fundraiser/pledges/show.html.haml
244
+ - app/views/fundraiser/rewards/_reward.html.haml
245
+ - app/views/fundraiser/rewards/index.html.haml
246
+ - app/views/fundraiser/thanks/show.html.haml
247
+ - app/views/layouts/fundraiser/application.html.haml
248
+ - config/initializers/settings.rb
249
+ - config/locales/devise.en.yml
250
+ - config/routes.rb
251
+ - db/migrate/20121008183146_create_fundraiser_settings.rb
252
+ - db/migrate/20121009000016_create_fundraiser_rewards.rb
253
+ - db/migrate/20121009070136_create_fundraiser_pledges.rb
254
+ - db/migrate/20121010182436_create_fundraiser_contributions.rb
255
+ - lib/amazon/fps/signature_utils.rb
256
+ - lib/amazon/fps/signature_utils_for_outbound.rb
257
+ - lib/amazon/fps/widget.rb
258
+ - lib/fundraiser/engine.rb
259
+ - lib/fundraiser/version.rb
260
+ - lib/fundraiser.rb
261
+ - lib/generators/fundraiser/views_generator.rb
262
+ - lib/tasks/fundraiser_tasks.rake
263
+ - MIT-LICENSE
264
+ - Rakefile
265
+ - README.md
266
+ homepage: https://github.com/crowdint/fundraiser
267
+ licenses: []
268
+ post_install_message:
269
+ rdoc_options: []
270
+ require_paths:
271
+ - lib
272
+ required_ruby_version: !ruby/object:Gem::Requirement
273
+ none: false
274
+ requirements:
275
+ - - ! '>='
276
+ - !ruby/object:Gem::Version
277
+ version: '0'
278
+ segments:
279
+ - 0
280
+ hash: -2185317738514943577
281
+ required_rubygems_version: !ruby/object:Gem::Requirement
282
+ none: false
283
+ requirements:
284
+ - - ! '>'
285
+ - !ruby/object:Gem::Version
286
+ version: 1.3.1
287
+ requirements: []
288
+ rubyforge_project:
289
+ rubygems_version: 1.8.23
290
+ signing_key:
291
+ specification_version: 3
292
+ summary: Mountable Engine to set up a Crowdfunding app
293
+ test_files: []