whurl_engine 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.markdown +61 -0
- data/Rakefile +39 -0
- data/app/assets/flash/whurl_engine/ZeroClipboard.swf +0 -0
- data/app/assets/flash/whurl_engine/ZeroClipboard10.swf +0 -0
- data/app/assets/flash/whurl_engine/clippy.swf +0 -0
- data/app/assets/images/whurl_engine/add.png +0 -0
- data/app/assets/images/whurl_engine/bg_new.png +0 -0
- data/app/assets/images/whurl_engine/clipboard.png +0 -0
- data/app/assets/images/whurl_engine/container_bg.png +0 -0
- data/app/assets/images/whurl_engine/container_bottom.png +0 -0
- data/app/assets/images/whurl_engine/container_top.png +0 -0
- data/app/assets/images/whurl_engine/copyURL.png +0 -0
- data/app/assets/images/whurl_engine/delete.png +0 -0
- data/app/assets/images/whurl_engine/devil_128x128.png +0 -0
- data/app/assets/images/whurl_engine/devil_16x16.png +0 -0
- data/app/assets/images/whurl_engine/devil_256x256.png +0 -0
- data/app/assets/images/whurl_engine/devil_32x32.png +0 -0
- data/app/assets/images/whurl_engine/devil_64x64.png +0 -0
- data/app/assets/images/whurl_engine/header_button.png +0 -0
- data/app/assets/images/whurl_engine/input_titles.png +0 -0
- data/app/assets/images/whurl_engine/logo.png +0 -0
- data/app/assets/images/whurl_engine/param_button.png +0 -0
- data/app/assets/images/whurl_engine/rails.png +0 -0
- data/app/assets/images/whurl_engine/send_button.jpg +0 -0
- data/app/assets/images/whurl_engine/splash.png +0 -0
- data/app/assets/javascripts/whurl_engine/ZeroClipboard.js +311 -0
- data/app/assets/javascripts/whurl_engine/application.js +159 -0
- data/app/assets/javascripts/whurl_engine/jquery-1.7.1.min.js +4 -0
- data/app/assets/javascripts/whurl_engine/jquery-ui-1.8.16.min.js +791 -0
- data/app/assets/stylesheets/whurl_engine/application.css.scss +7 -0
- data/app/assets/stylesheets/whurl_engine/code.css.scss +13 -0
- data/app/assets/stylesheets/whurl_engine/jquery.ui.autocomplete.css.scss +55 -0
- data/app/assets/stylesheets/whurl_engine/whurls.css.scss +358 -0
- data/app/controllers/whurl_engine/application_controller.rb +4 -0
- data/app/controllers/whurl_engine/whurl_requests_controller.rb +50 -0
- data/app/helpers/whurl_engine/application_helper.rb +32 -0
- data/app/models/whurl_engine/any_client.rb +7 -0
- data/app/models/whurl_engine/whurl_request.rb +37 -0
- data/app/views/layouts/whurl_engine/application.html.haml +56 -0
- data/app/views/whurl_engine/whurl_requests/_form.html.haml +51 -0
- data/app/views/whurl_engine/whurl_requests/_input_set.html.haml +4 -0
- data/app/views/whurl_engine/whurl_requests/edit.html.haml +29 -0
- data/app/views/whurl_engine/whurl_requests/new.html.haml +5 -0
- data/app/views/whurl_engine/whurl_requests/show.html.haml +1 -0
- data/config/initializers/httparty/response.rb +37 -0
- data/config/routes.rb +5 -0
- data/db/migrate/20110209054322_create_whurl_requests_table.rb +14 -0
- data/db/migrate/20111210192724_add_description_to_whurl_requests.rb +9 -0
- data/db/migrate/20111210201607_add_custom_url_to_whurl_requests.rb +9 -0
- data/db/migrate/20111220233800_create_fields_for_whurl_requests.rb +18 -0
- data/db/migrate/20111221010348_copy_data_to_new_fields.rb +39 -0
- data/db/migrate/20111221011145_drop_data_from_whurl_requestss.rb +9 -0
- data/lib/tasks/whurl_engine_tasks.rake +4 -0
- data/lib/whurl_engine.rb +5 -0
- data/lib/whurl_engine/engine.rb +5 -0
- data/lib/whurl_engine/version.rb +3 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +9 -0
- data/test/dummy/app/assets/stylesheets/application.css +7 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/layouts/whurl_engine/application.html.haml +56 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +45 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.sample.yml +17 -0
- data/test/dummy/config/database.yml +17 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +30 -0
- data/test/dummy/config/environments/production.rb +60 -0
- data/test/dummy/config/environments/test.rb +39 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +10 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/db/schema.rb +31 -0
- data/test/dummy/log/development.log +5633 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +26 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/tmp/cache/assets/C1B/810/sprockets%2Ff86f239423289738079ca3c0620b0203 +0 -0
- data/test/dummy/tmp/cache/assets/C3A/230/sprockets%2F86b30811052f3f9107867785fe676b98 +0 -0
- data/test/dummy/tmp/cache/assets/C3C/1E0/sprockets%2F8930cb230c644524697589c895d58c58 +0 -0
- data/test/dummy/tmp/cache/assets/C6D/500/sprockets%2Fa60a126c749b135b047d47c9116f7010 +0 -0
- data/test/dummy/tmp/cache/assets/C6E/690/sprockets%2F541821c1465d0b184df51e0a086c2617 +0 -0
- data/test/dummy/tmp/cache/assets/C71/B70/sprockets%2F2608911ae1a9d40c31128bea84417087 +0 -0
- data/test/dummy/tmp/cache/assets/C85/760/sprockets%2F67d86b8948de011684953a4b2d30c280 +0 -0
- data/test/dummy/tmp/cache/assets/CA5/D90/sprockets%2F718b681081f0c3ab0096b20afc567359 +0 -0
- data/test/dummy/tmp/cache/assets/CB8/FF0/sprockets%2F789d641670bfe15510034f63eb635ff8 +0 -0
- data/test/dummy/tmp/cache/assets/CB9/340/sprockets%2Fc383855f31a6f96cfad737d462029019 +0 -0
- data/test/dummy/tmp/cache/assets/CBD/A60/sprockets%2F8e7fec8543052565b343a93c7b174d78 +0 -0
- data/test/dummy/tmp/cache/assets/CE6/140/sprockets%2F97da5e07430aa9249a9633e88c5073ea +0 -0
- data/test/dummy/tmp/cache/assets/CE8/710/sprockets%2F0578ecd79cad102753e7972f371ea580 +0 -0
- data/test/dummy/tmp/cache/assets/D01/6E0/sprockets%2F3974f4fd239fc76f2d9700899609da7e +0 -0
- data/test/dummy/tmp/cache/assets/D09/700/sprockets%2F68ca75710cc64126df7d1a6638ca16d1 +0 -0
- data/test/dummy/tmp/cache/assets/D18/6A0/sprockets%2Fdf8266a6da92a42ce29b771318176dc9 +0 -0
- data/test/dummy/tmp/cache/assets/D1C/440/sprockets%2Fd5f5cd99df7e614581ec5f2256403e33 +0 -0
- data/test/dummy/tmp/cache/assets/D20/140/sprockets%2F5014845cec156ff8444609f3f9dc84ce +0 -0
- data/test/dummy/tmp/cache/assets/D20/DF0/sprockets%2Fb3f333b87e8897356bf2e2e9138bb4d5 +0 -0
- data/test/dummy/tmp/cache/assets/D2C/DB0/sprockets%2F802a914bb4d275c8c34a3aa5ec134d54 +0 -0
- data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/D37/320/sprockets%2F1c5dd3b8b6b30a68c19225a0915d8c6f +0 -0
- data/test/dummy/tmp/cache/assets/D39/780/sprockets%2F0da3fdc5af08e2938cc21829334b1d48 +0 -0
- data/test/dummy/tmp/cache/assets/D3D/010/sprockets%2F389924c72fa75b369a0e61aacfa230e8 +0 -0
- data/test/dummy/tmp/cache/assets/D47/370/sprockets%2Fdab9545772e7beac9914f404d45c462e +0 -0
- data/test/dummy/tmp/cache/assets/D47/570/sprockets%2F78c33a7e0fcca296909068fb8173cc1f +0 -0
- data/test/dummy/tmp/cache/assets/D4C/8D0/sprockets%2F024e6456c9877ae45cdb28d7d16e06fe +0 -0
- data/test/dummy/tmp/cache/assets/D54/ED0/sprockets%2F71c9fa01091d432b131da3bb73faf3d4 +0 -0
- data/test/dummy/tmp/cache/assets/D59/1C0/sprockets%2Fdd4546ee9edb36c3647329828e791dfd +0 -0
- data/test/dummy/tmp/cache/assets/D66/D70/sprockets%2Ffdf1533f584b1ba62ce0ca92848b14d3 +0 -0
- data/test/dummy/tmp/cache/assets/D6F/A10/sprockets%2F3fa8ede522a279bfc12817267d1ca57e +0 -0
- data/test/dummy/tmp/cache/assets/D7A/860/sprockets%2F1ee925188e47da5e45dcedfd81f71441 +0 -0
- data/test/dummy/tmp/cache/assets/D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384 +0 -0
- data/test/dummy/tmp/cache/assets/D89/CF0/sprockets%2Fb85f0f6129d17ceff85999cf571f3f1b +0 -0
- data/test/dummy/tmp/cache/assets/D90/E50/sprockets%2Fec69848c01c4dd45c809da4f0bb0a11c +0 -0
- data/test/dummy/tmp/cache/assets/D92/D80/sprockets%2Fada8029522185c3ca0656cf64bccb3fe +0 -0
- data/test/dummy/tmp/cache/assets/D9D/AC0/sprockets%2F082b6d491d42f3a4febe3cb4d0983e6d +0 -0
- data/test/dummy/tmp/cache/assets/DA4/180/sprockets%2F118a85fd98ac4bda49f6485fd41aca44 +0 -0
- data/test/dummy/tmp/cache/assets/DB4/C60/sprockets%2F6ee1d0983f6518ba5dc089797bfc6ffa +0 -0
- data/test/dummy/tmp/cache/assets/DBD/7A0/sprockets%2F872f84e976ebe7654383dfdc7cfec1c6 +0 -0
- data/test/dummy/tmp/cache/assets/DBF/440/sprockets%2F88adba908c22af8b331e4d1a7b5ad07b +0 -0
- data/test/dummy/tmp/cache/assets/DD7/420/sprockets%2F11c951f1c4e2bfc0d7c1b10e0bb1b2be +0 -0
- data/test/dummy/tmp/cache/assets/DD9/530/sprockets%2Fca5bb0d6ddfeec8760903809a7c9bb98 +0 -0
- data/test/dummy/tmp/cache/assets/DE2/AA0/sprockets%2Fd355cc1e9a71d9e9ae68a8a4e48d9ae6 +0 -0
- data/test/dummy/tmp/cache/assets/DED/EF0/sprockets%2Fba8239fd72bb07104cbbac6a91cd70ef +0 -0
- data/test/dummy/tmp/cache/assets/DF6/6E0/sprockets%2Fe6bd0ba980148fb1e6621e7fdda61afb +0 -0
- data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/E29/F00/sprockets%2F5b6ee8619eacc15eaf00c329cedff60a +0 -0
- data/test/dummy/tmp/cache/assets/E2E/590/sprockets%2Fe4c10fd74fddddb456cc924c38ddc26c +0 -0
- data/test/dummy/tmp/cache/assets/E56/EE0/sprockets%2Fb7fe1dd66e801cfbf780cb27aeece10a +0 -0
- data/test/dummy/tmp/cache/assets/E5D/680/sprockets%2F5ef33ecefc8e09aafd4d2725c0ef0a9c +0 -0
- data/test/dummy/tmp/pids/server.pid +1 -0
- data/test/fixtures/whurl_engine/whurl_requests.yml +11 -0
- data/test/functional/whurl_engine/api_call_controller_test.rb +21 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/test_helper.rb +10 -0
- data/test/unit/helpers/whurl_engine/api_call_helper_test.rb +6 -0
- data/test/unit/whurl_engine/whurl_request_test.rb +9 -0
- data/test/whurl_engine_test.rb +7 -0
- metadata +394 -0
@@ -0,0 +1,32 @@
|
|
1
|
+
module WhurlEngine
|
2
|
+
module ApplicationHelper
|
3
|
+
def clippy(text, bgcolor='#FFFFFF')
|
4
|
+
swf_path = asset_path('whurl_engine/clippy.swf')
|
5
|
+
html = <<-EOF
|
6
|
+
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
|
7
|
+
width="16"
|
8
|
+
height="16"
|
9
|
+
id="clippy" >
|
10
|
+
<param name="movie" value="#{swf_path}"/>
|
11
|
+
<param name="allowScriptAccess" value="always" />
|
12
|
+
<param name="quality" value="high" />
|
13
|
+
<param name="scale" value="noscale" />
|
14
|
+
<param NAME="FlashVars" value="text=#{text}">
|
15
|
+
<param name="bgcolor" value="#{bgcolor}">
|
16
|
+
<embed src="#{swf_path}"
|
17
|
+
width="16"
|
18
|
+
height="16"
|
19
|
+
name="clippy"
|
20
|
+
quality="high"
|
21
|
+
allowScriptAccess="always"
|
22
|
+
type="application/x-shockwave-flash"
|
23
|
+
pluginspage="http://www.macromedia.com/go/getflashplayer"
|
24
|
+
FlashVars="text=#{text}"
|
25
|
+
bgcolor="#{bgcolor}"
|
26
|
+
/>
|
27
|
+
</object>
|
28
|
+
EOF
|
29
|
+
html.html_safe
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module WhurlEngine
|
2
|
+
class WhurlRequest < ActiveRecord::Base
|
3
|
+
serialize :data
|
4
|
+
serialize :query, Hash
|
5
|
+
serialize :headers, Hash
|
6
|
+
|
7
|
+
after_initialize {
|
8
|
+
default_values
|
9
|
+
generate_hash_key if new_record?
|
10
|
+
}
|
11
|
+
|
12
|
+
validates_uniqueness_of :custom_url, :if => Proc.new { |model| !model.custom_url.blank? }
|
13
|
+
validates_format_of :custom_url, :allow_blank => true, :allow_nil => true, :with => /^[\w\-]+$/i, :message => "can only contain letters, numbers, hyphens and underscores."
|
14
|
+
|
15
|
+
scope :saved, where("custom_url IS NOT NULL AND custom_url <> ''").order(:custom_url)
|
16
|
+
|
17
|
+
def slug
|
18
|
+
hash_key || custom_url
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
def default_values
|
23
|
+
self.query ||= {}
|
24
|
+
self.headers ||= {}
|
25
|
+
end
|
26
|
+
|
27
|
+
def generate_hash_key
|
28
|
+
upper_bound = 36**6 -1 #max 6 characters
|
29
|
+
new_hash_key = rand(upper_bound).to_s(36)
|
30
|
+
if new_hash_key.match(/^whurl/)
|
31
|
+
generate_hash_key
|
32
|
+
else
|
33
|
+
self.hash_key = new_hash_key
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
!!!
|
2
|
+
%html
|
3
|
+
%head
|
4
|
+
= stylesheet_link_tag("whurl_engine/application")
|
5
|
+
= javascript_include_tag("whurl_engine/jquery-1.7.1.min")
|
6
|
+
= javascript_include_tag("whurl_engine/jquery-ui-1.8.16.min")
|
7
|
+
= javascript_include_tag("whurl_engine/application")
|
8
|
+
= javascript_include_tag("whurl_engine/ZeroClipboard")
|
9
|
+
:javascript
|
10
|
+
$(document).ready(function() {
|
11
|
+
ZeroClipboard.setMoviePath('#{asset_path('whurl_engine/ZeroClipboard10.swf')}');
|
12
|
+
});
|
13
|
+
|
14
|
+
%title Whurl - API Console
|
15
|
+
:javascript
|
16
|
+
$(function() {
|
17
|
+
$('#saved_whurls').hover(
|
18
|
+
function () {
|
19
|
+
$(this).stop().animate({'marginLeft':'-2px'},200);
|
20
|
+
},
|
21
|
+
function () {
|
22
|
+
$(this).stop().animate({'marginLeft':'-400px'},200);
|
23
|
+
}
|
24
|
+
);
|
25
|
+
});
|
26
|
+
%body
|
27
|
+
- if flash[:message] || flash[:warning]
|
28
|
+
.flash
|
29
|
+
- if flash[:message]
|
30
|
+
%span.message= flash[:message]
|
31
|
+
- if flash[:warning]
|
32
|
+
%span.warning= flash[:warning]
|
33
|
+
#wrapper
|
34
|
+
=link_to(image_tag("whurl_engine/logo.png", :height => "147", :width => "521", :class => 'logo'), root_url)
|
35
|
+
%p.tagline The Whurl Console makes HTTP requests against the API of your choice.
|
36
|
+
.containerTop
|
37
|
+
#container
|
38
|
+
.content
|
39
|
+
= yield
|
40
|
+
.footer
|
41
|
+
%p
|
42
|
+
Created by
|
43
|
+
= succeed "." do
|
44
|
+
%a.contact{:href => "mailto:will.read@gmail.com"} Will Read
|
45
|
+
See it on
|
46
|
+
= succeed "." do
|
47
|
+
%a{:href => "https://github.com/tildewill/whurl"} Github
|
48
|
+
%br/
|
49
|
+
%span.meadowfete
|
50
|
+
Designed by
|
51
|
+
= succeed "." do
|
52
|
+
%a.meadowfete{:href => "http://meadowfete.com", :target => "_blank"} Meadowfete
|
53
|
+
=image_tag("whurl_engine/container_bottom.png", :height => "56", :width => "980")
|
54
|
+
%ol#saved_whurls
|
55
|
+
- WhurlEngine::WhurlRequest.saved.each do |whurl|
|
56
|
+
%li=link_to(whurl.custom_url, short_path(:slug => whurl.custom_url))
|
@@ -0,0 +1,51 @@
|
|
1
|
+
- if @whurl.errors.any?
|
2
|
+
%ul#errors
|
3
|
+
- @whurl.errors.full_messages.each do |msg|
|
4
|
+
%li= msg
|
5
|
+
.top
|
6
|
+
= form_for(@whurl, :method => :post, :url => {:action => :create}) do |f|
|
7
|
+
.row
|
8
|
+
.section_title
|
9
|
+
%span.hTitle URL
|
10
|
+
= f.select(:http_method, options_for_select(["GET", "POST", "PUT", "DELETE"], @whurl.http_method))
|
11
|
+
\/
|
12
|
+
\#{f.text_field(:url, :class => "long")}
|
13
|
+
.row
|
14
|
+
.section_title
|
15
|
+
.hTitle
|
16
|
+
%a#trashheaders= image_tag('whurl_engine/delete.png', :class => 'action_button', :title => "trash all headers")
|
17
|
+
%a#add_header= image_tag('whurl_engine/add.png', :class => 'action_button', :title => "add another header")
|
18
|
+
Headers
|
19
|
+
#headers
|
20
|
+
= render :partial => 'input_set', :locals => {:set_name => 'header', :f => f, :key => nil, :value => nil, :disabled => true}
|
21
|
+
- @whurl.headers.each do |key, value|
|
22
|
+
= render :partial => 'input_set', :locals => {:set_name => 'header', :f => f, :key => key, :value => value, :disabled => false}
|
23
|
+
= render :partial => 'input_set', :locals => {:set_name => 'header', :f => f, :key => nil, :value => nil, :disabled => false}
|
24
|
+
.row
|
25
|
+
.section_title
|
26
|
+
.hTitle
|
27
|
+
%a#trashqueries= image_tag('whurl_engine/delete.png', :class => 'action_button', :title => "trash all parameters")
|
28
|
+
%a#add_param= image_tag('whurl_engine/add.png', :class => 'action_button', :title => "add another parameter")
|
29
|
+
Query
|
30
|
+
#params
|
31
|
+
= render :partial => 'input_set', :locals => {:set_name => 'param', :f => f, :key => nil, :value => nil, :disabled => true}
|
32
|
+
- @whurl.query.each do |key, value|
|
33
|
+
= render :partial => 'input_set', :locals => {:set_name => 'param', :f => f, :key => key, :value => value, :disabled => false}
|
34
|
+
= render :partial => 'input_set', :locals => {:set_name => 'param', :f => f, :key => nil, :value => nil, :disabled => false}
|
35
|
+
.row
|
36
|
+
.section_title
|
37
|
+
.hTitle Body
|
38
|
+
#post_body
|
39
|
+
= f.text_area(:body)
|
40
|
+
.row
|
41
|
+
.section_title
|
42
|
+
%span.hTitle Description (optional)
|
43
|
+
#post_description
|
44
|
+
= f.text_area(:description)
|
45
|
+
.row
|
46
|
+
.section_title
|
47
|
+
%span.hTitle Custom URL (optional)
|
48
|
+
#custom_url
|
49
|
+
= f.text_field(:custom_url, :value => nil)
|
50
|
+
%input.submit{:type => "submit", :value => "Give it a Whurl!"}/
|
51
|
+
%input#clearFields.reset{:type => "button", :value => "Reset"}/
|
@@ -0,0 +1,4 @@
|
|
1
|
+
%div{:class => "#{set_name}_pair"}
|
2
|
+
= text_field_tag("#{set_name}_keys[]", key, :class => "key", :disabled => disabled)
|
3
|
+
= text_field_tag("#{set_name}_values[]", value, :class => "value", :disabled => disabled)
|
4
|
+
%a{:class => "delete_#{set_name}"}= image_tag("whurl_engine/delete.png", :class => 'delete_button')
|
@@ -0,0 +1,29 @@
|
|
1
|
+
= javascript_include_tag("whurl_engine/ZeroClipboard")
|
2
|
+
|
3
|
+
- unless @description.blank?
|
4
|
+
.response_section
|
5
|
+
.response_section_title Description
|
6
|
+
#edit_description
|
7
|
+
= @description
|
8
|
+
.response_section
|
9
|
+
.response_section_title Response Headers
|
10
|
+
#response_header
|
11
|
+
= find_and_preserve(@response_headers)
|
12
|
+
.response_section
|
13
|
+
.response_section_title
|
14
|
+
Response Body #{image_tag("whurl_engine/clipboard.png", :id => "copy_to_clipboard")}
|
15
|
+
.response_container
|
16
|
+
= find_and_preserve(@api_response)#.force_encoding(WhurlEngine::Application.config.encoding))
|
17
|
+
= render :partial => 'form'
|
18
|
+
#permalink_container
|
19
|
+
Share this Whurl:
|
20
|
+
%input#permalink_text_box{:type => "text", :value => request.url, :readonly => true}
|
21
|
+
=clippy(request.url, "#F7E391")
|
22
|
+
:javascript
|
23
|
+
$(function() {
|
24
|
+
ZeroClipboard.setMoviePath('#{asset_path('whurl_engine/ZeroClipboard10.swf')}' );
|
25
|
+
var clip = new ZeroClipboard.Client();
|
26
|
+
clip.setHandCursor(true);
|
27
|
+
clip.setText($('.CodeRay td.code').text());
|
28
|
+
clip.glue('copy_to_clipboard');
|
29
|
+
});
|
@@ -0,0 +1 @@
|
|
1
|
+
= @api_response
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'coderay'
|
3
|
+
require 'httparty'
|
4
|
+
|
5
|
+
module HTTParty
|
6
|
+
class Response < HTTParty::BasicObject
|
7
|
+
class Headers
|
8
|
+
def to_s
|
9
|
+
headers = []
|
10
|
+
each_capitalized do |name, value|
|
11
|
+
headers << "#{name}: #{value}"
|
12
|
+
end
|
13
|
+
headers.join("\n")
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_html(options = {:line_numbers => nil})
|
17
|
+
::CodeRay.scan(to_s, :txt).div(options)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_html(options = {:line_numbers => :table})
|
22
|
+
return "<pre>(Empty)</pre>" unless body.present?
|
23
|
+
case content_type
|
24
|
+
when /xml/
|
25
|
+
::CodeRay.scan(body, :xml).div(options)
|
26
|
+
when /html/
|
27
|
+
::CodeRay.scan(body, :html).div(options)
|
28
|
+
when /json|javascript/
|
29
|
+
::CodeRay.scan(::JSON.pretty_generate(::JSON.parse(body)), :json).div(options)
|
30
|
+
when /image|jpg|jpeg|gif|png|bmp|binary/
|
31
|
+
"<img src=\"data:binary/octet;base64,#{Base64.encode64(response.body)}\" />"
|
32
|
+
else
|
33
|
+
body
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/config/routes.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateWhurlRequestsTable < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :whurl_engine_whurl_requests do |t|
|
4
|
+
t.string :hash_key, :limit => 6, :null => false
|
5
|
+
t.text :data
|
6
|
+
t.timestamps
|
7
|
+
end
|
8
|
+
add_index :whurl_engine_whurl_requests, :hash_key, :unique => true
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.down
|
12
|
+
drop_table :whurl_engine_whurl_requests
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class CreateFieldsForWhurlRequests < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
add_column :whurl_engine_whurl_requests, :http_method, :string, :limit => 10
|
4
|
+
add_column :whurl_engine_whurl_requests, :body, :text
|
5
|
+
add_column :whurl_engine_whurl_requests, :query, :text
|
6
|
+
add_column :whurl_engine_whurl_requests, :headers, :text
|
7
|
+
add_column :whurl_engine_whurl_requests, :url, :text
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.down
|
12
|
+
remove_column :whurl_engine_whurl_requests, :http_method
|
13
|
+
remove_column :whurl_engine_whurl_requests, :body
|
14
|
+
remove_column :whurl_engine_whurl_requests, :query
|
15
|
+
remove_column :whurl_engine_whurl_requests, :headers
|
16
|
+
remove_column :whurl_engine_whurl_requests, :url
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class CopyDataToNewFields < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
WhurlEngine::WhurlRequest.all.each do |whurl|
|
4
|
+
return if whurl.data.nil?
|
5
|
+
whurl.http_method = whurl.data[:http_method]
|
6
|
+
whurl.query = whurl.data[:query]
|
7
|
+
whurl.url = whurl.data[:url]
|
8
|
+
whurl.body = whurl.data[:body]
|
9
|
+
whurl.headers = whurl.data[:headers]
|
10
|
+
unless whurl.save
|
11
|
+
puts "-" * 100
|
12
|
+
p whurl.id
|
13
|
+
pp whurl.errors
|
14
|
+
puts "-" * 100
|
15
|
+
else
|
16
|
+
p "Updated #{whurl.id}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.down
|
22
|
+
WhurlEngine::WhurlRequest.all.each do |whurl|
|
23
|
+
whurl.data ||= {}
|
24
|
+
whurl.data[:http_method] = whurl.http_method
|
25
|
+
whurl.data[:query] = whurl.query
|
26
|
+
whurl.data[:url] = whurl.url
|
27
|
+
whurl.data[:body] = whurl.body
|
28
|
+
whurl.data[:headers] = whurl.headers
|
29
|
+
unless whurl.save
|
30
|
+
puts "-" * 100
|
31
|
+
p whurl.id
|
32
|
+
pp whurl.errors
|
33
|
+
puts "-" * 100
|
34
|
+
else
|
35
|
+
p "Updated #{whurl.id}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/whurl_engine.rb
ADDED
data/test/dummy/Rakefile
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
3
|
+
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
4
|
+
|
5
|
+
require File.expand_path('../config/application', __FILE__)
|
6
|
+
|
7
|
+
Dummy::Application.load_tasks
|
@@ -0,0 +1,9 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into including all the files listed below.
|
2
|
+
// Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
|
3
|
+
// be included in the compiled file accessible from http://example.com/assets/application.js
|
4
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
5
|
+
// the compiled file.
|
6
|
+
//
|
7
|
+
//= require jquery
|
8
|
+
//= require jquery_ujs
|
9
|
+
//= require_tree .
|
@@ -0,0 +1,7 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll automatically include all the stylesheets available in this directory
|
3
|
+
* and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
|
4
|
+
* the top of the compiled file, but it's generally better to create a new file per style scope.
|
5
|
+
*= require_self
|
6
|
+
*= require_tree .
|
7
|
+
*/
|