fundraiser 1.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.
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: []