mta_json 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. data/README.md +17 -9
  2. data/examples/crud/README.md +13 -16
  3. data/examples/crud/meta.xml +0 -14
  4. data/lib/mta_json.rb +7 -6
  5. data/lib/mta_json/railtie.rb +12 -0
  6. data/lib/mta_json/version.rb +1 -1
  7. data/lib/mta_json/wrapper.rb +49 -22
  8. metadata +2 -133
  9. data/examples/crud/mta/crud/crud.lua +0 -0
  10. data/examples/crud/mta/crud/meta.xml +0 -3
  11. data/examples/crud/rails/.gitignore +0 -15
  12. data/examples/crud/rails/Gemfile +0 -40
  13. data/examples/crud/rails/Rakefile +0 -7
  14. data/examples/crud/rails/app/assets/images/rails.png +0 -0
  15. data/examples/crud/rails/app/assets/javascripts/application.js +0 -15
  16. data/examples/crud/rails/app/assets/javascripts/posts.js.coffee +0 -3
  17. data/examples/crud/rails/app/assets/stylesheets/application.css +0 -13
  18. data/examples/crud/rails/app/assets/stylesheets/posts.css.scss +0 -3
  19. data/examples/crud/rails/app/assets/stylesheets/scaffolds.css.scss +0 -69
  20. data/examples/crud/rails/app/controllers/application_controller.rb +0 -3
  21. data/examples/crud/rails/app/controllers/posts_controller.rb +0 -83
  22. data/examples/crud/rails/app/helpers/application_helper.rb +0 -2
  23. data/examples/crud/rails/app/helpers/posts_helper.rb +0 -2
  24. data/examples/crud/rails/app/mailers/.gitkeep +0 -0
  25. data/examples/crud/rails/app/models/.gitkeep +0 -0
  26. data/examples/crud/rails/app/models/post.rb +0 -3
  27. data/examples/crud/rails/app/views/layouts/application.html.erb +0 -14
  28. data/examples/crud/rails/app/views/posts/_form.html.erb +0 -25
  29. data/examples/crud/rails/app/views/posts/edit.html.erb +0 -6
  30. data/examples/crud/rails/app/views/posts/index.html.erb +0 -25
  31. data/examples/crud/rails/app/views/posts/new.html.erb +0 -5
  32. data/examples/crud/rails/app/views/posts/show.html.erb +0 -15
  33. data/examples/crud/rails/config.ru +0 -4
  34. data/examples/crud/rails/config/application.rb +0 -64
  35. data/examples/crud/rails/config/boot.rb +0 -6
  36. data/examples/crud/rails/config/database.yml +0 -25
  37. data/examples/crud/rails/config/environment.rb +0 -5
  38. data/examples/crud/rails/config/environments/development.rb +0 -37
  39. data/examples/crud/rails/config/environments/production.rb +0 -67
  40. data/examples/crud/rails/config/environments/test.rb +0 -37
  41. data/examples/crud/rails/config/initializers/backtrace_silencers.rb +0 -7
  42. data/examples/crud/rails/config/initializers/inflections.rb +0 -15
  43. data/examples/crud/rails/config/initializers/mime_types.rb +0 -5
  44. data/examples/crud/rails/config/initializers/secret_token.rb +0 -7
  45. data/examples/crud/rails/config/initializers/session_store.rb +0 -8
  46. data/examples/crud/rails/config/initializers/wrap_parameters.rb +0 -14
  47. data/examples/crud/rails/config/locales/en.yml +0 -5
  48. data/examples/crud/rails/config/routes.rb +0 -61
  49. data/examples/crud/rails/db/migrate/20130320115007_create_posts.rb +0 -10
  50. data/examples/crud/rails/db/schema.rb +0 -23
  51. data/examples/crud/rails/db/seeds.rb +0 -7
  52. data/examples/crud/rails/lib/assets/.gitkeep +0 -0
  53. data/examples/crud/rails/lib/tasks/.gitkeep +0 -0
  54. data/examples/crud/rails/log/.gitkeep +0 -0
  55. data/examples/crud/rails/public/404.html +0 -26
  56. data/examples/crud/rails/public/422.html +0 -26
  57. data/examples/crud/rails/public/500.html +0 -25
  58. data/examples/crud/rails/public/favicon.ico +0 -0
  59. data/examples/crud/rails/public/index.html +0 -241
  60. data/examples/crud/rails/public/robots.txt +0 -5
  61. data/examples/crud/rails/script/rails +0 -6
  62. data/examples/crud/rails/test/fixtures/.gitkeep +0 -0
  63. data/examples/crud/rails/test/fixtures/posts.yml +0 -9
  64. data/examples/crud/rails/test/functional/.gitkeep +0 -0
  65. data/examples/crud/rails/test/functional/posts_controller_test.rb +0 -49
  66. data/examples/crud/rails/test/integration/.gitkeep +0 -0
  67. data/examples/crud/rails/test/performance/browsing_test.rb +0 -12
  68. data/examples/crud/rails/test/test_helper.rb +0 -13
  69. data/examples/crud/rails/test/unit/.gitkeep +0 -0
  70. data/examples/crud/rails/test/unit/helpers/posts_helper_test.rb +0 -4
  71. data/examples/crud/rails/test/unit/post_test.rb +0 -7
  72. data/examples/crud/rails/vendor/assets/javascripts/.gitkeep +0 -0
  73. data/examples/crud/rails/vendor/assets/stylesheets/.gitkeep +0 -0
  74. data/examples/crud/rails/vendor/plugins/.gitkeep +0 -0
data/README.md CHANGED
@@ -3,6 +3,8 @@
3
3
  Wraps MTA:SA's JSON format to support named parameters and different HTTP
4
4
  methods with callRemote.
5
5
 
6
+ See [Multi Theft Auto: San Andreas](http://mtasa.com/).
7
+
6
8
  ## Installation
7
9
 
8
10
  Add this line to your application's Gemfile:
@@ -17,11 +19,21 @@ Or install it yourself as:
17
19
 
18
20
  $ gem install mta_json
19
21
 
20
- ---
22
+ ## Configuration
23
+
24
+ ### Whitelist for POST, PUT and DELETE
25
+
26
+ GET-requests are always processed.
27
+
28
+ POST-, PUT- and DELETE-requests are handled via an ip whitelist. The only
29
+ entry for this list is `127.0.0.1` per default.
30
+ It can be **overwritten** with the following code in your `application.rb`:
21
31
 
22
- You'll need to add the following line to your `config/application.rb`:
32
+ config.mta_json.whitelist = %w(1.2.3.4 1.2.3.5)
23
33
 
24
- config.middleware.insert_before Rack::MethodOverride, MtaJson::Wrapper
34
+ Or, to still allow requests from your local machine:
35
+
36
+ config.mta_json.whitelist = %w(1.2.3.4 1.2.3.5 127.0.0.1)
25
37
 
26
38
  ## Usage
27
39
 
@@ -122,9 +134,5 @@ A more complete example can be found in `examples/crud`.
122
134
 
123
135
  ## TODOs
124
136
 
125
- * Special care should be taken with the default POST method, there currently is
126
- no way to set a CSRF-Token. This can be worked around by using:
127
-
128
- <pre>skip_before_filter :verify_authenticity_token, :only => :your_method</pre>
129
-
130
- * The code doesn't insert itself as middleware automatically, see Installation section.
137
+ * running rails behind a proxy/load balancer and IP resolution together with
138
+ the whitelist?
@@ -3,23 +3,8 @@
3
3
 
4
4
  Tests whether you can create, read, update and delete posts from MTA
5
5
 
6
- ## Running the example
7
-
8
- Start the rails server:
9
-
10
- $ cd rails
11
- $ rails s
12
-
13
- Start the MTA Server and type the following commands:
14
-
15
- $ aclrequest crud allow all
16
- $ start crud
17
-
18
- After that, the following commands are available within MTA (console, in-game)
19
-
20
- * **/posts** - lists all posts
21
6
 
22
- ## How this was built - in rails
7
+ ## Building a simple CRUD-based controller
23
8
 
24
9
  Creating the project:
25
10
 
@@ -38,3 +23,15 @@ Generating a model Post along with a matching Controller:
38
23
  Migrates the database to include the new posts table:
39
24
 
40
25
  $ rake db:migrate
26
+
27
+ ## Running the example
28
+
29
+ Start the rails server:
30
+
31
+ $ cd rails
32
+ $ rails s
33
+
34
+ Start the MTA Server and type the following commands:
35
+
36
+ $ aclrequest crud allow all
37
+ $ start crud
@@ -1,14 +0,0 @@
1
- <!--
2
- mta_json crud example to interact with rails.
3
-
4
- See https://github.com/mabako/mta_json
5
- -->
6
- <meta>
7
- <!-- Script source file -->
8
- <script src="crud.lua"/>
9
-
10
- <!-- This wouldn't make sense without callRemote, would it? -->
11
- <aclrequest>
12
- <right name="function.callRemote" access="true" />
13
- </aclrequest>
14
- </meta>
data/lib/mta_json.rb CHANGED
@@ -1,6 +1,7 @@
1
- require "mta_json/version"
2
- require "mta_json/wrapper"
3
-
4
- module MtaJson
5
-
6
- end
1
+ require "mta_json/version"
2
+ require "mta_json/wrapper"
3
+ require "mta_json/railtie" if defined? ::Rails::Railtie
4
+
5
+ module MtaJson
6
+
7
+ end
@@ -0,0 +1,12 @@
1
+ module MtaJson
2
+ class Railtie < Rails::Railtie
3
+ config.mta_json = ActiveSupport::OrderedOptions.new
4
+
5
+ # default whitelist includes only the local ip.
6
+ config.mta_json.whitelist = %w(127.0.0.1)
7
+
8
+ initializer "mta_json.configure" do |app|
9
+ app.middleware.use MtaJson::Wrapper
10
+ end
11
+ end
12
+ end
@@ -1,3 +1,3 @@
1
1
  module MtaJson
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -12,15 +12,19 @@ module MtaJson
12
12
  BODY = 'rack.input'.freeze
13
13
  FORM_INPUT = 'rack.request.form_input'.freeze
14
14
  FORM_HASH = 'rack.request.form_hash'.freeze
15
+ SESSION = 'rack.session'.freeze
15
16
  METHOD = 'REQUEST_METHOD'.freeze
16
17
  POST = 'POST'.freeze
17
18
  PATH_INFO = 'PATH_INFO'.freeze
19
+ IP = 'REMOTE_ADDR'.freeze
20
+ CSRF_TOKEN = 'X-CSRF-Token'.freeze
18
21
 
19
22
  # HTTP-Response-Headers
20
23
  CONTENT_LENGTH = 'Content-Length'.freeze
21
24
 
22
25
  # Allowed Methods to be set by MTA
23
- ALLOWED_METHODS = %w(POST GET PUT DELETE)
26
+ ALLOWED_METHODS = %w(GET)
27
+ ALLOWED_METHODS_PRIVATE = %w(POST PUT DELETE)
24
28
 
25
29
  def initialize app
26
30
  @app = app
@@ -65,9 +69,14 @@ module MtaJson
65
69
  # optional options!
66
70
  update_options env, json[1].with_indifferent_access if json.size >= 2
67
71
 
72
+ verify_request_method env
73
+
68
74
  # any parameters given? otherwise we don't really care for any params
69
75
  update_params env, json[0] if json.size >= 1 and json[0] != 0 # 0 is nil in terms of callRemote. JSON has 'null' though!
70
76
 
77
+ # add some CSRF info... maybe.
78
+ add_csrf_info env
79
+
71
80
  # call the other middlewares
72
81
  status, headers, response = @app.call(env)
73
82
 
@@ -91,30 +100,48 @@ module MtaJson
91
100
  end
92
101
  end
93
102
 
94
- # update all of the parameter-related values in the current request's environment
95
- def update_params env, json
96
- env[FORM_HASH] = json
97
- env[BODY] = StringIO.new(Rack::Utils.build_query(json))
98
- env[FORM_INPUT] = env[BODY]
99
- end
103
+ private
104
+ # update all of the parameter-related values in the current request's environment
105
+ def update_params env, json
106
+ env[FORM_HASH] = json
107
+ env[BODY] = env[FORM_INPUT] = StringIO.new(Rack::Utils.build_query(json))
108
+ end
100
109
 
101
- # updates the options
102
- def update_options env, options
103
- # switch between POST and GET?
104
- if ALLOWED_METHODS.include?(options[:method])
105
- # (possibly) TODO - pass parameters for GET instead of POST in update_params then?
106
- # see https://github.com/rack/rack/blob/master/lib/rack/request.rb -> def GET
107
- env[METHOD] = options[:method]
110
+ # make sure the request came from a whitelisted ip, or uses a publically accessible request method
111
+ def verify_request_method env
112
+ allowed = ALLOWED_METHODS
113
+ allowed |= ALLOWED_METHODS_PRIVATE if whitelisted?(env)
114
+ if !allowed.include?(env[METHOD])
115
+ raise "Request method #{env[METHOD]} not allowed"
116
+ end
117
+ end
118
+
119
+ # updates the options
120
+ def update_options env, options
121
+ if options[:method] and (ALLOWED_METHODS | ALLOWED_METHODS_PRIVATE).include?(options[:method])
122
+ # (possibly) TODO - pass parameters for GET instead of POST in update_params then?
123
+ # see https://github.com/rack/rack/blob/master/lib/rack/request.rb -> def GET
124
+ env[METHOD] = options[:method]
125
+ end
126
+ end
127
+
128
+ # adds csrf info to non-GET requests of whitelisted IPs
129
+ def add_csrf_info env
130
+ env[CSRF_TOKEN] = env[SESSION][:_csrf_token] = SecureRandom.base64(32).to_s if env[METHOD] != 'GET' and whitelisted?(env)
108
131
  end
109
- end
110
132
 
111
- # returns the response body: old response body + headers as a JSON array
112
- def to_response response, headers
113
- body = ""
114
- response.each do |s|
115
- body << s.to_s
133
+ # TODO might need to revise this behing proxies
134
+ def whitelisted? env
135
+ Railtie.config.mta_json.whitelist.include?(env[IP])
136
+ end
137
+
138
+ # returns the response body: old response body + headers as a JSON array
139
+ def to_response response, headers
140
+ body = ""
141
+ response.each do |s|
142
+ body << s.to_s
143
+ end
144
+ ["[#{body},#{headers.to_json.to_s}]"]
116
145
  end
117
- ["[#{body},#{headers.to_json.to_s}]"]
118
146
  end
119
- end
120
147
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mta_json
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -59,73 +59,8 @@ files:
59
59
  - examples/crud/README.md
60
60
  - examples/crud/crud.lua
61
61
  - examples/crud/meta.xml
62
- - examples/crud/mta/crud/crud.lua
63
- - examples/crud/mta/crud/meta.xml
64
- - examples/crud/rails/.gitignore
65
- - examples/crud/rails/Gemfile
66
- - examples/crud/rails/Rakefile
67
- - examples/crud/rails/app/assets/images/rails.png
68
- - examples/crud/rails/app/assets/javascripts/application.js
69
- - examples/crud/rails/app/assets/javascripts/posts.js.coffee
70
- - examples/crud/rails/app/assets/stylesheets/application.css
71
- - examples/crud/rails/app/assets/stylesheets/posts.css.scss
72
- - examples/crud/rails/app/assets/stylesheets/scaffolds.css.scss
73
- - examples/crud/rails/app/controllers/application_controller.rb
74
- - examples/crud/rails/app/controllers/posts_controller.rb
75
- - examples/crud/rails/app/helpers/application_helper.rb
76
- - examples/crud/rails/app/helpers/posts_helper.rb
77
- - examples/crud/rails/app/mailers/.gitkeep
78
- - examples/crud/rails/app/models/.gitkeep
79
- - examples/crud/rails/app/models/post.rb
80
- - examples/crud/rails/app/views/layouts/application.html.erb
81
- - examples/crud/rails/app/views/posts/_form.html.erb
82
- - examples/crud/rails/app/views/posts/edit.html.erb
83
- - examples/crud/rails/app/views/posts/index.html.erb
84
- - examples/crud/rails/app/views/posts/new.html.erb
85
- - examples/crud/rails/app/views/posts/show.html.erb
86
- - examples/crud/rails/config.ru
87
- - examples/crud/rails/config/application.rb
88
- - examples/crud/rails/config/boot.rb
89
- - examples/crud/rails/config/database.yml
90
- - examples/crud/rails/config/environment.rb
91
- - examples/crud/rails/config/environments/development.rb
92
- - examples/crud/rails/config/environments/production.rb
93
- - examples/crud/rails/config/environments/test.rb
94
- - examples/crud/rails/config/initializers/backtrace_silencers.rb
95
- - examples/crud/rails/config/initializers/inflections.rb
96
- - examples/crud/rails/config/initializers/mime_types.rb
97
- - examples/crud/rails/config/initializers/secret_token.rb
98
- - examples/crud/rails/config/initializers/session_store.rb
99
- - examples/crud/rails/config/initializers/wrap_parameters.rb
100
- - examples/crud/rails/config/locales/en.yml
101
- - examples/crud/rails/config/routes.rb
102
- - examples/crud/rails/db/migrate/20130320115007_create_posts.rb
103
- - examples/crud/rails/db/schema.rb
104
- - examples/crud/rails/db/seeds.rb
105
- - examples/crud/rails/lib/assets/.gitkeep
106
- - examples/crud/rails/lib/tasks/.gitkeep
107
- - examples/crud/rails/log/.gitkeep
108
- - examples/crud/rails/public/404.html
109
- - examples/crud/rails/public/422.html
110
- - examples/crud/rails/public/500.html
111
- - examples/crud/rails/public/favicon.ico
112
- - examples/crud/rails/public/index.html
113
- - examples/crud/rails/public/robots.txt
114
- - examples/crud/rails/script/rails
115
- - examples/crud/rails/test/fixtures/.gitkeep
116
- - examples/crud/rails/test/fixtures/posts.yml
117
- - examples/crud/rails/test/functional/.gitkeep
118
- - examples/crud/rails/test/functional/posts_controller_test.rb
119
- - examples/crud/rails/test/integration/.gitkeep
120
- - examples/crud/rails/test/performance/browsing_test.rb
121
- - examples/crud/rails/test/test_helper.rb
122
- - examples/crud/rails/test/unit/.gitkeep
123
- - examples/crud/rails/test/unit/helpers/posts_helper_test.rb
124
- - examples/crud/rails/test/unit/post_test.rb
125
- - examples/crud/rails/vendor/assets/javascripts/.gitkeep
126
- - examples/crud/rails/vendor/assets/stylesheets/.gitkeep
127
- - examples/crud/rails/vendor/plugins/.gitkeep
128
62
  - lib/mta_json.rb
63
+ - lib/mta_json/railtie.rb
129
64
  - lib/mta_json/version.rb
130
65
  - lib/mta_json/wrapper.rb
131
66
  - mta_json.gemspec
@@ -158,69 +93,3 @@ test_files:
158
93
  - examples/crud/README.md
159
94
  - examples/crud/crud.lua
160
95
  - examples/crud/meta.xml
161
- - examples/crud/mta/crud/crud.lua
162
- - examples/crud/mta/crud/meta.xml
163
- - examples/crud/rails/.gitignore
164
- - examples/crud/rails/Gemfile
165
- - examples/crud/rails/Rakefile
166
- - examples/crud/rails/app/assets/images/rails.png
167
- - examples/crud/rails/app/assets/javascripts/application.js
168
- - examples/crud/rails/app/assets/javascripts/posts.js.coffee
169
- - examples/crud/rails/app/assets/stylesheets/application.css
170
- - examples/crud/rails/app/assets/stylesheets/posts.css.scss
171
- - examples/crud/rails/app/assets/stylesheets/scaffolds.css.scss
172
- - examples/crud/rails/app/controllers/application_controller.rb
173
- - examples/crud/rails/app/controllers/posts_controller.rb
174
- - examples/crud/rails/app/helpers/application_helper.rb
175
- - examples/crud/rails/app/helpers/posts_helper.rb
176
- - examples/crud/rails/app/mailers/.gitkeep
177
- - examples/crud/rails/app/models/.gitkeep
178
- - examples/crud/rails/app/models/post.rb
179
- - examples/crud/rails/app/views/layouts/application.html.erb
180
- - examples/crud/rails/app/views/posts/_form.html.erb
181
- - examples/crud/rails/app/views/posts/edit.html.erb
182
- - examples/crud/rails/app/views/posts/index.html.erb
183
- - examples/crud/rails/app/views/posts/new.html.erb
184
- - examples/crud/rails/app/views/posts/show.html.erb
185
- - examples/crud/rails/config.ru
186
- - examples/crud/rails/config/application.rb
187
- - examples/crud/rails/config/boot.rb
188
- - examples/crud/rails/config/database.yml
189
- - examples/crud/rails/config/environment.rb
190
- - examples/crud/rails/config/environments/development.rb
191
- - examples/crud/rails/config/environments/production.rb
192
- - examples/crud/rails/config/environments/test.rb
193
- - examples/crud/rails/config/initializers/backtrace_silencers.rb
194
- - examples/crud/rails/config/initializers/inflections.rb
195
- - examples/crud/rails/config/initializers/mime_types.rb
196
- - examples/crud/rails/config/initializers/secret_token.rb
197
- - examples/crud/rails/config/initializers/session_store.rb
198
- - examples/crud/rails/config/initializers/wrap_parameters.rb
199
- - examples/crud/rails/config/locales/en.yml
200
- - examples/crud/rails/config/routes.rb
201
- - examples/crud/rails/db/migrate/20130320115007_create_posts.rb
202
- - examples/crud/rails/db/schema.rb
203
- - examples/crud/rails/db/seeds.rb
204
- - examples/crud/rails/lib/assets/.gitkeep
205
- - examples/crud/rails/lib/tasks/.gitkeep
206
- - examples/crud/rails/log/.gitkeep
207
- - examples/crud/rails/public/404.html
208
- - examples/crud/rails/public/422.html
209
- - examples/crud/rails/public/500.html
210
- - examples/crud/rails/public/favicon.ico
211
- - examples/crud/rails/public/index.html
212
- - examples/crud/rails/public/robots.txt
213
- - examples/crud/rails/script/rails
214
- - examples/crud/rails/test/fixtures/.gitkeep
215
- - examples/crud/rails/test/fixtures/posts.yml
216
- - examples/crud/rails/test/functional/.gitkeep
217
- - examples/crud/rails/test/functional/posts_controller_test.rb
218
- - examples/crud/rails/test/integration/.gitkeep
219
- - examples/crud/rails/test/performance/browsing_test.rb
220
- - examples/crud/rails/test/test_helper.rb
221
- - examples/crud/rails/test/unit/.gitkeep
222
- - examples/crud/rails/test/unit/helpers/posts_helper_test.rb
223
- - examples/crud/rails/test/unit/post_test.rb
224
- - examples/crud/rails/vendor/assets/javascripts/.gitkeep
225
- - examples/crud/rails/vendor/assets/stylesheets/.gitkeep
226
- - examples/crud/rails/vendor/plugins/.gitkeep
File without changes
@@ -1,3 +0,0 @@
1
- <meta>
2
- <script src="crud.lua"/>
3
- </meta>
@@ -1,15 +0,0 @@
1
- # See http://help.github.com/ignore-files/ for more about ignoring files.
2
- #
3
- # If you find yourself ignoring temporary files generated by your text editor
4
- # or operating system, you probably want to add a global ignore instead:
5
- # git config --global core.excludesfile ~/.gitignore_global
6
-
7
- # Ignore bundler config
8
- /.bundle
9
-
10
- # Ignore the default SQLite database.
11
- /db/*.sqlite3
12
-
13
- # Ignore all logfiles and tempfiles.
14
- /log/*.log
15
- /tmp
@@ -1,40 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rails', '3.2.12'
4
-
5
- # Bundle edge Rails instead:
6
- # gem 'rails', :git => 'git://github.com/rails/rails.git'
7
-
8
- gem 'sqlite3'
9
-
10
-
11
- # Gems used only for assets and not required
12
- # in production environments by default.
13
- group :assets do
14
- gem 'sass-rails', '~> 3.2.3'
15
- gem 'coffee-rails', '~> 3.2.1'
16
-
17
- # See https://github.com/sstephenson/execjs#readme for more supported runtimes
18
- # gem 'therubyracer', :platforms => :ruby
19
-
20
- gem 'uglifier', '>= 1.0.3'
21
- end
22
-
23
- gem 'jquery-rails'
24
-
25
- # To use ActiveModel has_secure_password
26
- # gem 'bcrypt-ruby', '~> 3.0.0'
27
-
28
- # To use Jbuilder templates for JSON
29
- # gem 'jbuilder'
30
-
31
- # Use unicorn as the app server
32
- # gem 'unicorn'
33
-
34
- # Deploy with Capistrano
35
- # gem 'capistrano'
36
-
37
- # To use debugger
38
- # gem 'debugger'
39
-
40
- gem 'mta_json'