spree_essentials_jn 0.6.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.
Files changed (111) hide show
  1. data/.gitignore +10 -0
  2. data/.travis.yml +11 -0
  3. data/CHANGELOG.md +143 -0
  4. data/Gemfile +6 -0
  5. data/LICENSE +27 -0
  6. data/README.md +292 -0
  7. data/Rakefile +10 -0
  8. data/Versionfile +8 -0
  9. data/app/assets/images/admin/icons/pages.png +0 -0
  10. data/app/assets/images/blog/rss.png +0 -0
  11. data/app/assets/images/markitup/bg-container.png +0 -0
  12. data/app/assets/images/markitup/bg-editor.png +0 -0
  13. data/app/assets/images/markitup/bg-picker.png +0 -0
  14. data/app/assets/images/markitup/bold.png +0 -0
  15. data/app/assets/images/markitup/code.png +0 -0
  16. data/app/assets/images/markitup/h1.png +0 -0
  17. data/app/assets/images/markitup/h2.png +0 -0
  18. data/app/assets/images/markitup/h3.png +0 -0
  19. data/app/assets/images/markitup/h4.png +0 -0
  20. data/app/assets/images/markitup/h5.png +0 -0
  21. data/app/assets/images/markitup/h6.png +0 -0
  22. data/app/assets/images/markitup/handle.png +0 -0
  23. data/app/assets/images/markitup/image-picker.png +0 -0
  24. data/app/assets/images/markitup/italic.png +0 -0
  25. data/app/assets/images/markitup/link.png +0 -0
  26. data/app/assets/images/markitup/list-bullet.png +0 -0
  27. data/app/assets/images/markitup/list-numeric.png +0 -0
  28. data/app/assets/images/markitup/menu.png +0 -0
  29. data/app/assets/images/markitup/more-tag.png +0 -0
  30. data/app/assets/images/markitup/picture.png +0 -0
  31. data/app/assets/images/markitup/preview.png +0 -0
  32. data/app/assets/images/markitup/quotes.png +0 -0
  33. data/app/assets/images/markitup/submenu.png +0 -0
  34. data/app/assets/javascripts/admin/date.js +145 -0
  35. data/app/assets/javascripts/admin/jquery.autodate.js +110 -0
  36. data/app/assets/javascripts/admin/jquery.markitup.js +593 -0
  37. data/app/assets/javascripts/admin/markdown.set.js +95 -0
  38. data/app/assets/javascripts/admin/spree_essentials.js +1 -0
  39. data/app/assets/stylesheets/admin/markitup.css.erb +283 -0
  40. data/app/assets/stylesheets/admin/spree_essentials.css +3 -0
  41. data/app/controllers/spree/admin/markdown_controller.rb +7 -0
  42. data/app/controllers/spree/admin/uploads_controller.rb +16 -0
  43. data/app/helpers/spree/admin/spree_essentials_helper.rb +31 -0
  44. data/app/models/spree/asset_decorator.rb +7 -0
  45. data/app/models/spree/upload.rb +36 -0
  46. data/app/overrides/admin/spree_essentials.rb +13 -0
  47. data/app/validators/datetime_validator.rb +6 -0
  48. data/app/views/spree/admin/shared/_contents_sub_menu.html.erb +10 -0
  49. data/app/views/spree/admin/shared/_contents_tab.html.erb +1 -0
  50. data/app/views/spree/admin/uploads/_form.html.erb +8 -0
  51. data/app/views/spree/admin/uploads/edit.html.erb +23 -0
  52. data/app/views/spree/admin/uploads/index.html.erb +68 -0
  53. data/app/views/spree/admin/uploads/new.html.erb +22 -0
  54. data/app/views/spree/admin/uploads/picker.html.erb +11 -0
  55. data/config/locales/en.yml +45 -0
  56. data/config/locales/it.yml +40 -0
  57. data/config/locales/pl.yml +44 -0
  58. data/config/locales/ru.yml +41 -0
  59. data/config/routes.rb +7 -0
  60. data/lib/generators/spree_essentials/install_generator.rb +22 -0
  61. data/lib/spree_essentials.rb +28 -0
  62. data/lib/spree_essentials/engine.rb +25 -0
  63. data/lib/spree_essentials/testing/integration_case.rb +72 -0
  64. data/lib/spree_essentials/testing/test_helper.rb +30 -0
  65. data/lib/spree_essentials/version.rb +3 -0
  66. data/spree_essentials.gemspec +34 -0
  67. data/test/dummy_hooks/after_migrate.rb.sample +1 -0
  68. data/test/dummy_hooks/before_migrate.rb +30 -0
  69. data/test/dummy_hooks/templates/admin/all.css +3 -0
  70. data/test/dummy_hooks/templates/admin/all.js +1 -0
  71. data/test/dummy_hooks/templates/spree_user_error_fix.rb +3 -0
  72. data/test/dummy_hooks/templates/store/all.css +3 -0
  73. data/test/dummy_hooks/templates/store/all.js +1 -0
  74. data/test/dummy_hooks/templates/store/screen.css +749 -0
  75. data/test/integration/spree/admin/extension_integration_test.rb +50 -0
  76. data/test/integration/spree/admin/markdown_integration_test.rb +50 -0
  77. data/test/integration/spree/admin/upload_integration_test.rb +85 -0
  78. data/test/integration_test_helper.rb +2 -0
  79. data/test/spree_essential_example/README.md +3 -0
  80. data/test/spree_essential_example/app/controllers/spree/admin/examples_controller.rb +26 -0
  81. data/test/spree_essential_example/app/models/spree/example.rb +5 -0
  82. data/test/spree_essential_example/app/views/spree/admin/examples/_form.html.erb +21 -0
  83. data/test/spree_essential_example/app/views/spree/admin/examples/edit.html.erb +12 -0
  84. data/test/spree_essential_example/app/views/spree/admin/examples/index.html.erb +26 -0
  85. data/test/spree_essential_example/app/views/spree/admin/examples/new.html.erb +13 -0
  86. data/test/spree_essential_example/app/views/spree/admin/examples/show.html.erb +8 -0
  87. data/test/spree_essential_example/config/routes.rb +5 -0
  88. data/test/spree_essential_example/db/migrate/20120307043727_create_spree_examples.rb +12 -0
  89. data/test/spree_essential_example/lib/generators/spree_essentials/example_generator.rb +13 -0
  90. data/test/spree_essential_example/lib/spree_essential_example.rb +18 -0
  91. data/test/spree_essential_example/lib/spree_essential_example/engine.rb +21 -0
  92. data/test/spree_essential_example/lib/spree_essential_example/version.rb +3 -0
  93. data/test/spree_essential_example/spree_essential_example.gemspec +23 -0
  94. data/test/support/files/1.gif +0 -0
  95. data/test/support/files/1.jpg +0 -0
  96. data/test/support/files/1.png +0 -0
  97. data/test/support/files/2.gif +0 -0
  98. data/test/support/files/2.jpg +0 -0
  99. data/test/support/files/2.png +0 -0
  100. data/test/support/files/3.gif +0 -0
  101. data/test/support/files/3.jpg +0 -0
  102. data/test/support/files/3.png +0 -0
  103. data/test/support/files/test.pdf +0 -0
  104. data/test/support/files/test.zip +0 -0
  105. data/test/test_helper.rb +12 -0
  106. data/test/unit/spree/asset_test.rb +18 -0
  107. data/test/unit/spree/extension_test.rb +33 -0
  108. data/test/unit/spree/helpers/admin/spree_essentials_helper_test.rb +38 -0
  109. data/test/unit/spree/upload_test.rb +52 -0
  110. data/test/unit/validators/datetime_validator_test.rb +29 -0
  111. metadata +286 -0
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ *.gem
2
+ *.log
3
+ *.sqlite3
4
+ .bundle
5
+ .DS_Store
6
+ coverage
7
+ Gemfile.lock
8
+ pkg/*
9
+ test/dummy_hooks/after_migrate.rb
10
+ test/dummy
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - ree
6
+
7
+ before_script:
8
+ - "sh -e /etc/init.d/xvfb start"
9
+ - "bundle exec dummier"
10
+
11
+ script: "DISPLAY=:99.0 bundle exec rake"
data/CHANGELOG.md ADDED
@@ -0,0 +1,143 @@
1
+ ------------------------------------------------------------------------------
2
+ Change Log
3
+ ------------------------------------------------------------------------------
4
+
5
+ **0.50.0 - 2012/5/1**
6
+
7
+ * Depend on Spree 1.1.0
8
+ * Remove `add_attachment_file_size_to_assets` migration
9
+
10
+
11
+ **0.50.0.rc1 - 2012/4/11**
12
+
13
+ * Spree 1.1.x compatibility
14
+
15
+
16
+ **0.40.0 - 2012/4/11**
17
+
18
+ * Add Italian translation - (@iloveitaly)
19
+ * Add Russian translation - (@shaggyone)
20
+ * Release v0.40.0
21
+
22
+
23
+ **0.40.0.rc3 - 2012/3/7**
24
+
25
+ * Normalize upload attachment location
26
+ * Use rails engine conventions for installation
27
+ * Remove shared InstallGenerator class
28
+ * Improved test coverage
29
+ * Added test/spree_essential_example
30
+
31
+
32
+ **0.40.0.rc2, 0.3.3 - 2012/1/20**
33
+
34
+ * Precompile admin assets in production
35
+
36
+
37
+ **0.4.0.rc1 - 2012/1/16**
38
+
39
+ * Add Spree 1.0.0 compatibility
40
+ * Breaks with previous versions of Spree
41
+
42
+
43
+ **0.3.2 - 2011/12/30**
44
+
45
+ * Safer decorator load path
46
+
47
+
48
+ **0.3.1 - 2011/12/13**
49
+
50
+ * Fix broken markitup editor
51
+ * Rework 'selected' class on content tab
52
+
53
+
54
+ **0.3.0 - 2011/12/13**
55
+
56
+ * Upgrade to Spree 0.70.x
57
+ * Remove spork dependency
58
+
59
+
60
+ **0.2.3 - 2012/1/6**
61
+
62
+ * Removed automatic attachment config with SpreeHeroku [0.60.x]
63
+
64
+
65
+ **0.2.2 - 2011/7/22**
66
+
67
+ * Moved pagination above new image form
68
+
69
+
70
+ **0.2.1 - 2011/7/22**
71
+
72
+ * Added pagination to admin/uploads ... oops!
73
+
74
+
75
+ **0.2.0 - 2011/7/14**
76
+
77
+ * Depend on Spree 0.60.x and above
78
+ * Remove spree_auth dependency
79
+ * Removed `app/controllers/admin/resource_controller.rb` in favor of the Spree Default one
80
+ * Updated development gems to most recent versions
81
+
82
+
83
+ **0.1.4 - 2011/6/10**
84
+
85
+ * Removed console.log from jquery.autodate.js
86
+ * Updated resource controller with better flash message handling
87
+ * Added faker.lorem.words to en.yml to prevent NoMethodError in integration tests
88
+
89
+
90
+ **0.1.3 - 2011/6/8**
91
+
92
+ * Added test in teardown to check for missing translations
93
+ * Removed some old bits of CMS code
94
+
95
+
96
+ **0.1.2 - 2011/6/7**
97
+
98
+ * Added missing translation
99
+ * Cleanup
100
+
101
+
102
+ **0.1.1 - 2011/6/7**
103
+
104
+ * Released 0.1.1
105
+ * Updated resource_controller.rb to Spree 0.60.0's and added `translated_object_name` method. ([pull request #419](https://github.com/spree/spree/pull/419) on Spree)
106
+ * Added upload integration test
107
+ * Cleaned up en.yml
108
+
109
+
110
+ **2011/6/6**
111
+
112
+ * Removed `spree_auth` requirement
113
+ * Added a few test helpers
114
+ * Updated readme
115
+
116
+
117
+ **0.1.0 2011/6/1**
118
+
119
+ * Added [dummier](https://github.com/citrus/dummier)
120
+ * Removed some remaining CMS bits
121
+
122
+
123
+ **2011/4/26**
124
+
125
+ * Modularized CMS. It can now be found [here](https://github.com/citrus/spree_essential_cms)
126
+
127
+
128
+ **2011/4/12**
129
+
130
+ * Added content contexts for multiple contents per page
131
+ * Namespaced posts into blog/posts
132
+ * Added `<!-- more -->` tag to posts
133
+
134
+
135
+ **2011/4/4**
136
+
137
+ * Added Page Images and starting to remove resource_controller.
138
+
139
+
140
+ **2011/4/3**
141
+
142
+ * Automatically adds [Heroku](http://heroku.com) support when you include [spree_heroku](https://github.com/paxer/spree-heroku) in your Gemfile. Check the [spree_heroku readme](https://github.com/paxer/spree-heroku#readme) for full installation instructions.
143
+ * Creates default content when you create a new page.
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "http://rubygems.org"
2
+ gemspec
3
+
4
+ group :development, :test do
5
+ gem "spree_essential_example", :path => "test/spree_essential_example"
6
+ end
data/LICENSE ADDED
@@ -0,0 +1,27 @@
1
+ Copyright (c) 2011 Spencer Steffen and Citrus Media Group.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ * Neither the name of Citrus Media Group nor the names of its
15
+ contributors may be used to endorse or promote products derived from this
16
+ software without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,292 @@
1
+ # Spree Essentials [![Build Status](https://secure.travis-ci.org/citrus/spree_essentials.png)](http://travis-ci.org/citrus/spree_essentials)
2
+
3
+ Spree Essentials is the base for many content related extensions for Spree. It doesn't do much on it's own ;)
4
+
5
+ Spree Essentials provides other extensions with:
6
+
7
+ * An asset-upload interface
8
+ * An easy markdown editor with ajax preview
9
+ * Image picker for embedding uploaded images into markdown editor
10
+ * A common navigation tab ("Content")
11
+ * A shared `test_helper.rb`
12
+
13
+ Current essential-aware extensions include:
14
+
15
+ * [spree_essential_cms](https://github.com/citrus/spree_essential_cms): A full featured CMS with pages, contents, images and more
16
+ * [spree_essential_blog](https://github.com/citrus/spree_essential_blog): A blog complete with archives, categories, tags and related products
17
+ * [spree_essential_press](https://github.com/citrus/spree_essential_press): A simple press page for displaying media related content.
18
+
19
+
20
+ ------------------------------------------------------------------------------
21
+ Installation
22
+ ------------------------------------------------------------------------------
23
+
24
+ If you don't already have an existing Spree site, [click here](https://gist.github.com/946719) then come back later... You can also read the Spree docs [here](http://spreecommerce.com/documentation/getting_started.html)...
25
+
26
+ Spree Essentials can be installed by itself by adding the following to your Gemfile:
27
+
28
+ ```ruby
29
+ # Spree 1.1.x
30
+ gem 'spree_essentials', '~> 0.5.0'
31
+
32
+ # Spree 1.0.x
33
+ gem 'spree_essentials', '~> 0.4.0'
34
+
35
+ # Spree 0.70.x
36
+ gem 'spree_essentials', '~> 0.3.3'
37
+
38
+ # Spree 0.60.x
39
+ gem 'spree_essentials', '~> 0.2.3'
40
+ ```
41
+
42
+ This isn't necessary if you're using spree_essentials based extensions. If that's the case, just include the extensions normally:
43
+
44
+ ```ruby
45
+ gem 'spree_essential_cms'
46
+ gem 'spree_essential_blog'
47
+ ```
48
+
49
+ Then run:
50
+
51
+ ```bash
52
+ bundle install
53
+ ```
54
+
55
+ Once that's complete, run the migration generator and migrate your database:
56
+
57
+ To see your available generators run
58
+
59
+ ```bash
60
+ rails g
61
+ ```
62
+
63
+ Now run the generators for extensions you wish to install
64
+
65
+ ```bash
66
+ rails g spree_essentials:install
67
+ rails g spree_essentials:cms
68
+ rails g spree_essentials:blog
69
+ ```
70
+
71
+ Then migrate your database:
72
+
73
+ ```bash
74
+ rake db:migrate
75
+ ```
76
+
77
+ If that all went smoothly, you should be ready to boot the server with:
78
+
79
+ ```bash
80
+ rails s
81
+ ```
82
+
83
+ Now login to the admin and click on the 'Content' tab!
84
+
85
+
86
+
87
+
88
+ ------------------------------------------------------------------------------
89
+ Deploying
90
+ ------------------------------------------------------------------------------
91
+
92
+ Follow these steps if you plan host your attachments with a CDN like amazon s3. This is useful when deploying to [heroku](http://heroku.com).
93
+
94
+ First, add the [aws-sdk](http://rubygems.org/gems/aws-sdk) gem to your `Gemfile`
95
+
96
+ ```ruby
97
+ gem 'aws-sdk', '~> 1.3'
98
+ ```
99
+
100
+ Then run:
101
+
102
+ ```bash
103
+ bundle install
104
+ ```
105
+
106
+
107
+ Next, create some buckets on s3. I use the [s3cmd](http://s3tools.org/s3cmd).
108
+
109
+ ```bash
110
+ s3cmd mb s3://yoursite.dev --acl-public
111
+ s3cmd mb s3://yoursite.com --acl-public
112
+ ```
113
+
114
+
115
+ Now create a config file for s3 in `config/s3.yml`
116
+
117
+ ```yml
118
+ # config/s3.yml
119
+ defaults: &defaults
120
+ s3_protocol: http
121
+ access_key_id: YOUR_KEY
122
+ secret_access_key: YOUR_SECRET
123
+ bucket: yoursite.dev
124
+
125
+ development:
126
+ <<: *defaults
127
+
128
+ test:
129
+ <<: *defaults
130
+
131
+ production:
132
+ <<: *defaults
133
+ bucket: yoursite.com
134
+ ```
135
+
136
+
137
+ Lastly, create a [decorator](http://guides.spreecommerce.com/logic_customization.html) for the upload model in `app/models/spree/upload_decorator.rb`.
138
+
139
+ ```ruby
140
+ # app/models/spree/upload_decorator.rb
141
+ Spree::Upload.attachment_definitions[:attachment].merge!(
142
+ :storage => 's3',
143
+ :s3_credentials => Rails.root.join('config', 's3.yml'),
144
+ :path => "/uploads/:id/:style/:basename.:extension"
145
+ )
146
+ ```
147
+
148
+
149
+ If you're using the [CMS](https://github.com/citrus/spree_essential_cms) or [blog](https://github.com/citrus/spree_essential_blog) extensions you can set the config on each model like so:
150
+
151
+ ```ruby
152
+ # app/models/spree/asset_decorator.rb
153
+ [ Spree::Content, Spree::PageImage, Spree::PostImage, Spree::Upload ].each do |cls|
154
+ cls.attachment_definitions[:attachment].merge!(
155
+ :storage => 's3',
156
+ :s3_credentials => Rails.root.join('config', 's3.yml'),
157
+ :path => "/:class/:id/:style/:basename.:extension"
158
+ )
159
+ end
160
+ ```
161
+
162
+
163
+ That's all there is to it!
164
+
165
+
166
+ ------------------------------------------------------------------------------
167
+ Notes
168
+ ------------------------------------------------------------------------------
169
+
170
+ Spree Essentials is under constant development... Development is being done on OSX with Ruby 1.9.3 and usually the latest version of Spree. (currently 1.1.0)
171
+
172
+ Please let me know if you find any bugs or have feature requests you'd like to see.
173
+
174
+
175
+ ------------------------------------------------------------------------------
176
+ Testing
177
+ ------------------------------------------------------------------------------
178
+
179
+ The test suite can be run like so:
180
+
181
+ ```bash
182
+ git clone git://github.com/citrus/spree_essentials.git
183
+ cd spree_essentials
184
+ bundle install
185
+ bundle exec dummier
186
+ rake
187
+ ```
188
+
189
+
190
+ ------------------------------------------------------------------------------
191
+ Demo
192
+ ------------------------------------------------------------------------------
193
+
194
+ You can easily use the test/dummy app as a demo of spree_essentials. Just `cd` to where you develop and run:
195
+
196
+ ```bash
197
+ git clone git://github.com/citrus/spree_essentials.git
198
+ cd spree_essentials
199
+ cp test/dummy_hooks/after_migrate.rb.sample test/dummy_hooks/after_migrate.rb
200
+ bundle install
201
+ bundle exec dummier
202
+ cd test/dummy
203
+ rails s
204
+ ```
205
+
206
+
207
+ ------------------------------------------------------------------------------
208
+ To Do
209
+ ------------------------------------------------------------------------------
210
+
211
+ * better documentation (you know you want to help!)
212
+
213
+
214
+ ------------------------------------------------------------------------------
215
+ Change Log
216
+ ------------------------------------------------------------------------------
217
+
218
+ **0.50.0 - 2012/5/1**
219
+
220
+ * Depend on Spree 1.1.0
221
+ * Remove `add_attachment_file_size_to_assets` migration
222
+
223
+
224
+ **0.50.0.rc1 - 2012/4/11**
225
+
226
+ * Spree 1.1.x compatibility
227
+
228
+
229
+ **0.40.0 - 2012/4/11**
230
+
231
+ * Add Italian translation - (@iloveitaly)
232
+ * Add Russian translation - (@shaggyone)
233
+ * Release v0.40.0
234
+
235
+
236
+ **0.40.0.rc3 - 2012/3/7**
237
+
238
+ * Normalize upload attachment location
239
+ * Use rails engine conventions for installation
240
+ * Remove shared InstallGenerator class
241
+ * Improved test coverage
242
+ * Added test/spree_essential_example
243
+
244
+
245
+ **0.40.0.rc2, 0.3.3 - 2012/1/20**
246
+
247
+ * Precompile admin assets in production
248
+
249
+
250
+ **0.4.0.rc1 - 2012/1/16**
251
+
252
+ * Add Spree 1.0.0 compatibility
253
+ * Breaks with previous versions of Spree
254
+
255
+
256
+ **0.3.2 - 2011/12/30**
257
+
258
+ * Safer decorator load path
259
+
260
+
261
+ **0.3.1 - 2011/12/13**
262
+
263
+ * Fix broken markitup editor
264
+ * Rework 'selected' class on content tab
265
+
266
+
267
+ **0.3.0 - 2011/12/13**
268
+
269
+ * Upgrade to Spree 0.70.x
270
+ * Remove spork dependency
271
+
272
+
273
+ ....more in [CHANGELOG.md](https://github.com/citrus/spree_essentials/blob/master/CHANGELOG.md)
274
+
275
+
276
+ ------------------------------------------------------------------------------
277
+ Contributors
278
+ ------------------------------------------------------------------------------
279
+
280
+ * Spencer Steffen ([@citrus](https://github.com/citrus))
281
+ * Michael Bianco ([@iloveitaly](https://github.com/iloveitaly))
282
+ * Victor Zagorski ([@shaggyone](https://github.com/shaggyone))
283
+
284
+
285
+ If you'd like to help out feel free to fork and send me pull requests!
286
+
287
+
288
+ ------------------------------------------------------------------------------
289
+ License
290
+ ------------------------------------------------------------------------------
291
+
292
+ Copyright (c) 2011 - 2012 Spencer Steffen & Citrus, released under the New BSD License All rights reserved.