spree_essentials_jn 0.6.0

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