agile-proxy-jruby 0.1.25-jruby
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.bowerrc +3 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.rubocop.yml +36 -0
- data/.travis.yml +10 -0
- data/Gemfile +4 -0
- data/Guardfile +20 -0
- data/LICENSE +22 -0
- data/README.md +131 -0
- data/Rakefile +15 -0
- data/agile-proxy.gemspec +60 -0
- data/assets/index.html +39 -0
- data/assets/ui/app/AgileProxyApi.js +31 -0
- data/assets/ui/app/app.js +1 -0
- data/assets/ui/app/controller/Stubs.js +64 -0
- data/assets/ui/app/controller/main.js +12 -0
- data/assets/ui/app/directive/AppEnhancedFormElement.js +21 -0
- data/assets/ui/app/directive/AppFor.js +16 -0
- data/assets/ui/app/directive/AppResponseEditor.js +54 -0
- data/assets/ui/app/model/RequestSpec.js +6 -0
- data/assets/ui/app/routes.js +11 -0
- data/assets/ui/app/service/Dialog.js +49 -0
- data/assets/ui/app/service/DomId.js +10 -0
- data/assets/ui/app/service/Error.js +7 -0
- data/assets/ui/app/service/Stub.js +36 -0
- data/assets/ui/app/view/404.html +2 -0
- data/assets/ui/app/view/dialog/error.html +10 -0
- data/assets/ui/app/view/dialog/yesNo.html +8 -0
- data/assets/ui/app/view/responses/editForm.html +78 -0
- data/assets/ui/app/view/status.html +1 -0
- data/assets/ui/app/view/stubs.html +19 -0
- data/assets/ui/app/view/stubs/edit.html +58 -0
- data/assets/ui/css/main.css +3 -0
- data/bin/agile_proxy +4 -0
- data/bower.json +27 -0
- data/config.yml +6 -0
- data/db.yml +10 -0
- data/db/migrations/20140818110800_create_users.rb +9 -0
- data/db/migrations/20140818134700_create_applications.rb +10 -0
- data/db/migrations/20140818135200_create_request_specs.rb +13 -0
- data/db/migrations/20140821115300_create_responses.rb +14 -0
- data/db/migrations/20140823082900_add_method_to_request_specs.rb +7 -0
- data/db/migrations/20140823083900_rename_request_spec_columns.rb +8 -0
- data/db/migrations/20141031072100_add_url_type_to_request_specs.rb +8 -0
- data/db/migrations/20141105125600_add_conditions_to_request_specs.rb +7 -0
- data/db/migrations/20141106083100_add_username_and_password_to_applications.rb +8 -0
- data/db/migrations/20141119143800_add_record_to_applications.rb +7 -0
- data/db/migrations/20141119174300_create_recordings.rb +18 -0
- data/db/migrations/20150221152500_add_record_requests_to_request_specs.rb +7 -0
- data/db/schema.rb +78 -0
- data/db/seed.rb +26 -0
- data/echo_server.rb +19 -0
- data/examples/README.md +1 -0
- data/examples/facebook_api.html +59 -0
- data/examples/tumblr_api.html +22 -0
- data/lib/agile_proxy.rb +8 -0
- data/lib/agile_proxy/api/applications.rb +77 -0
- data/lib/agile_proxy/api/recordings.rb +52 -0
- data/lib/agile_proxy/api/request_spec_recordings.rb +52 -0
- data/lib/agile_proxy/api/request_specs.rb +86 -0
- data/lib/agile_proxy/api/root.rb +45 -0
- data/lib/agile_proxy/cli.rb +116 -0
- data/lib/agile_proxy/config.rb +66 -0
- data/lib/agile_proxy/handlers/handler.rb +43 -0
- data/lib/agile_proxy/handlers/proxy_handler.rb +111 -0
- data/lib/agile_proxy/handlers/request_handler.rb +75 -0
- data/lib/agile_proxy/handlers/stub_handler.rb +146 -0
- data/lib/agile_proxy/mitm.crt +22 -0
- data/lib/agile_proxy/mitm.key +27 -0
- data/lib/agile_proxy/model/application.rb +20 -0
- data/lib/agile_proxy/model/recording.rb +17 -0
- data/lib/agile_proxy/model/request_spec.rb +48 -0
- data/lib/agile_proxy/model/response.rb +51 -0
- data/lib/agile_proxy/model/user.rb +17 -0
- data/lib/agile_proxy/proxy_connection.rb +112 -0
- data/lib/agile_proxy/rack/get_only_cache.rb +30 -0
- data/lib/agile_proxy/route.rb +106 -0
- data/lib/agile_proxy/router.rb +99 -0
- data/lib/agile_proxy/server.rb +119 -0
- data/lib/agile_proxy/servers/api.rb +40 -0
- data/lib/agile_proxy/servers/request_spec.rb +40 -0
- data/lib/agile_proxy/servers/request_spec_direct.rb +35 -0
- data/lib/agile_proxy/version.rb +6 -0
- data/load_proxy.js +39 -0
- data/log/.gitkeep +0 -0
- data/spec/common_helper.rb +32 -0
- data/spec/fixtures/example_static_file.html +1 -0
- data/spec/fixtures/test-server.crt +15 -0
- data/spec/fixtures/test-server.key +15 -0
- data/spec/integration/helpers/request_spec_helper.rb +84 -0
- data/spec/integration/specs/lib/server_spec.rb +474 -0
- data/spec/integration_spec_helper.rb +16 -0
- data/spec/spec_helper.rb +39 -0
- data/spec/support/test_server.rb +105 -0
- data/spec/unit/agile_proxy/api/applications_spec.rb +102 -0
- data/spec/unit/agile_proxy/api/common_helper.rb +31 -0
- data/spec/unit/agile_proxy/api/recordings_spec.rb +115 -0
- data/spec/unit/agile_proxy/api/request_spec_recordings_spec.rb +119 -0
- data/spec/unit/agile_proxy/api/request_specs_spec.rb +159 -0
- data/spec/unit/agile_proxy/handlers/handler_spec.rb +8 -0
- data/spec/unit/agile_proxy/handlers/proxy_handler_spec.rb +138 -0
- data/spec/unit/agile_proxy/handlers/request_handler_spec.rb +76 -0
- data/spec/unit/agile_proxy/handlers/stub_handler_spec.rb +177 -0
- data/spec/unit/agile_proxy/model/recording_spec.rb +0 -0
- data/spec/unit/agile_proxy/model/request_spec_spec.rb +45 -0
- data/spec/unit/agile_proxy/model/response_spec.rb +38 -0
- data/spec/unit/agile_proxy/server_spec.rb +91 -0
- data/spec/unit/agile_proxy/servers/api_spec.rb +35 -0
- data/spec/unit/agile_proxy/servers/request_spec_direct_spec.rb +51 -0
- data/spec/unit/agile_proxy/servers/request_spec_spec.rb +35 -0
- metadata +736 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 15926e8c2229e6d48005ff1c7196558359b5fe69
|
4
|
+
data.tar.gz: ab1f1ad24f3f00219c3035a70901f4d8f94270ea
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 801ae9e3cee2fd6cc108b853bf1f0696f7acb067356f9629975408623f3d5a66823491571996dde5e8a86e2b9aa39f4d9b5d0a6b3a469a3802b77977727d88a4
|
7
|
+
data.tar.gz: 029dc8adb94c4c3f8f07572a60f08f409521d72c31ce1dafebb4456e3e951ea742257f4d90f0a0c185c027f63225b6b0b250d6dcbcaa473d0b287ac42273b358
|
data/.bowerrc
ADDED
data/.gitignore
ADDED
data/.rspec
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
AllCops:
|
2
|
+
Exclude:
|
3
|
+
- 'db/**/*'
|
4
|
+
- 'assets/**/*'
|
5
|
+
- !ruby/regexp /old_and_unused\.rb$/
|
6
|
+
Style/Documentation:
|
7
|
+
Exclude:
|
8
|
+
- 'spec/**/*'
|
9
|
+
- 'bin/**/*'
|
10
|
+
Metrics/AbcSize:
|
11
|
+
Max: 36
|
12
|
+
Exclude:
|
13
|
+
- 'spec/**/*'
|
14
|
+
Metrics/CyclomaticComplexity:
|
15
|
+
Max: 5
|
16
|
+
Enabled: false
|
17
|
+
Metrics/LineLength:
|
18
|
+
Max: 125
|
19
|
+
Exclude:
|
20
|
+
- 'spec/**/*'
|
21
|
+
- 'agile-proxy.gemspec'
|
22
|
+
- 'Guardfile'
|
23
|
+
Metrics/MethodLength:
|
24
|
+
Max: 30
|
25
|
+
Exclude:
|
26
|
+
- 'spec/**/*'
|
27
|
+
Metrics/PerceivedComplexity:
|
28
|
+
Max: 7
|
29
|
+
Exclude:
|
30
|
+
- 'spec/**/*'
|
31
|
+
Style/TrivialAccessors:
|
32
|
+
Enabled: false
|
33
|
+
Style/SpecialGlobalVars:
|
34
|
+
Enabled: false
|
35
|
+
Style/RegexpLiteral:
|
36
|
+
Enabled: false
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard 'rspec', version: 2 do
|
5
|
+
watch(%r{^spec/.+_spec\.rb$})
|
6
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
7
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
8
|
+
|
9
|
+
# Rails example
|
10
|
+
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
11
|
+
watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
|
12
|
+
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
|
13
|
+
watch(%r{^spec/support/(.+)\.rb$}) { 'spec' }
|
14
|
+
watch('config/routes.rb') { 'spec/routing' }
|
15
|
+
watch('app/controllers/application_controller.rb') { 'spec/controllers' }
|
16
|
+
|
17
|
+
# Turnip features and steps
|
18
|
+
watch(%r{^spec/acceptance/(.+)\.feature$})
|
19
|
+
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
|
20
|
+
end
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Olly Smith
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
[![Build Status](https://travis-ci.org/garytaylor/agileproxy.svg?branch=master)](https://travis-ci.org/garytaylor/agileproxy)
|
2
|
+
[![Gem Version](https://badge.fury.io/rb/agile-proxy.svg)](http://badge.fury.io/rb/agile-proxy)
|
3
|
+
# agile-proxy
|
4
|
+
|
5
|
+
A proxy server intended for use during development or in integration test environments such as selenium.
|
6
|
+
|
7
|
+
Either the developer or the test suite can constantly change the response from a particular 'route' or URL via
|
8
|
+
either the built in user interface or using REST calls. An adapter is currently written for nodejs to provide easy
|
9
|
+
access to the REST interface - others are to follow.
|
10
|
+
|
11
|
+
So, you may be used to being able to stub methods in your unit tests, you can now stub http requests in your integration
|
12
|
+
tests too. It doesn't matter if you are using ruby, nodejs, java, scala ... the list goes on. As long as your 'HTTP Client'
|
13
|
+
(whether its a browser, or some form of programatic access to HTTP) supports a proxy, then you can use this.
|
14
|
+
|
15
|
+
This has many uses, the main one that I currently use this for is for developing a user interface when the server side
|
16
|
+
code is either a work in progress or not developed yet.
|
17
|
+
Even if you are not into writing integration tests for your UI layer and prefer to just write code and test manually
|
18
|
+
(which of course I do not recommend, but some people like working that way), then you can go to the user interface
|
19
|
+
and simply tell the system what you want your fake server to look like -
|
20
|
+
|
21
|
+
for example :- "When anything requests http://www.bing.com" then return "A fake bing page".
|
22
|
+
|
23
|
+
A particularly poor example, but hopefully demonstrates the idea.
|
24
|
+
|
25
|
+
## Overview
|
26
|
+
|
27
|
+
The proxy sits between the client (maybe a browser) and the server. You can either configure the browser manually to do so
|
28
|
+
or via the selenium API if you are writing an integration test using selenium.
|
29
|
+
Requests can simply pass through, or be intercepted in some way.
|
30
|
+
By default, all requests pass through untouched.
|
31
|
+
The magic then happens when the developer informs the proxy how to respond to various requests. This
|
32
|
+
can either be done using a JSON API or using the Web Based User Interface.
|
33
|
+
|
34
|
+
Requests are matched either exactly (for example 'http://www.google.com'), or using router pattern matching
|
35
|
+
(similar to rails or other MVC frameworks).
|
36
|
+
|
37
|
+
Response bodies can be set along with any header values, status code etc..
|
38
|
+
|
39
|
+
Client drivers are available for the following languages :-
|
40
|
+
|
41
|
+
ruby
|
42
|
+
javascript (node.js)
|
43
|
+
|
44
|
+
And will soon be available for :-
|
45
|
+
|
46
|
+
javascript (browser based)
|
47
|
+
java
|
48
|
+
scala
|
49
|
+
python
|
50
|
+
|
51
|
+
## Example Client Code
|
52
|
+
To any puffing-billy users, this will look familiar as this project is inspired by puffing-billy.
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
it 'should stub google' do
|
56
|
+
proxy.stub('http://www.google.com/').and_return(:text => "I'm not Google!")
|
57
|
+
visit 'http://www.google.com/'
|
58
|
+
page.should have_content("I'm not Google!")
|
59
|
+
end
|
60
|
+
```
|
61
|
+
## Support
|
62
|
+
|
63
|
+
To discuss issues, goto https://groups.google.com/forum/#!forum/agileproxygem
|
64
|
+
|
65
|
+
Or, if you have an issue that you want to report - please use the issues list in this repository
|
66
|
+
|
67
|
+
## Installation
|
68
|
+
|
69
|
+
$ gem install agile-proxy
|
70
|
+
|
71
|
+
Thats it - all done.
|
72
|
+
|
73
|
+
## Starting the server
|
74
|
+
|
75
|
+
agile_proxy start 3100
|
76
|
+
|
77
|
+
This will start the server with default options on port 3100
|
78
|
+
|
79
|
+
## Using The Built In User Interface
|
80
|
+
|
81
|
+
Goto http://localhost:3020 in your browser
|
82
|
+
|
83
|
+
## Configuring a browser to use the proxy
|
84
|
+
|
85
|
+
The proxy url for the default application is
|
86
|
+
|
87
|
+
http://public-app-1:password@localhost:3100
|
88
|
+
|
89
|
+
## Contributing
|
90
|
+
|
91
|
+
1. Fork it
|
92
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
93
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
94
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
95
|
+
5. Create new Pull Request
|
96
|
+
|
97
|
+
## TODO
|
98
|
+
|
99
|
+
1. Asserting requests were made to specific urls and that they contained the correct parameters
|
100
|
+
2. Route matching on URL parameters from the query string
|
101
|
+
3. Multi Application - The current infrastructure supports it, just need UI support - can already be done using REST
|
102
|
+
|
103
|
+
## History
|
104
|
+
v0.1.8 Added support for plain text params parser - As DWR uses this (and maybe others)
|
105
|
+
|
106
|
+
v0.1.9 Plain text params parser bug fixed - now handles params with a key and no value
|
107
|
+
|
108
|
+
v0.1.10 Now using dependent: :destroy to tidy up better when all specs for an application are deleted (common occurence)
|
109
|
+
|
110
|
+
v0.1.11 Further improved database tidy up.
|
111
|
+
AGILE_PROXY_ENV can now set the environment at server startup
|
112
|
+
conditions handling improved in routing
|
113
|
+
|
114
|
+
v0.1.12 Added a 'Direct' server which is a simple HTTP server that response to the stubs - also allows
|
115
|
+
for static dirs to be hosted.
|
116
|
+
|
117
|
+
v0.1.13 Upgraded activerecord and other gems to later versions
|
118
|
+
|
119
|
+
v0.1.14 - Increased pagination size by default to 50 on stubs until I add the client side code
|
120
|
+
v0.1.15 - 0.1.17 - No functionality change, these were just to try and please travis
|
121
|
+
v0.1.18 - Fixed issue with integration test which was showing up now that travis is working again
|
122
|
+
v0.1.19 - Recordings now record the request spec id.
|
123
|
+
Recordings can now be accessed via /request_specs/:request_spec_id/recordings to provide recordings specific to the request spec
|
124
|
+
v0.1.20 - An individual request spec can now be set to 'record_requests' rather than requiring the whole application to be in record mode which slows down every request
|
125
|
+
v0.1.21 - Switched to goliath instead of thin. The gem now installs under jruby as well as other platforms.
|
126
|
+
v0.1.22 - Reverted 0.1.21 - Integration tests worked fine, but failed in real world scenario - never ending responses from stubs
|
127
|
+
v0.1.23 - Switched to goliath instead of thin. The gem now installs under jruby as well as other platforms.
|
128
|
+
v0.1.24 - Added caching
|
129
|
+
v0.1.25 - Caching now disabled by default but enabled in config.
|
130
|
+
Direct server now functional
|
131
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
require 'active_record'
|
4
|
+
require_relative 'db/seed'
|
5
|
+
include ActiveRecord::Tasks
|
6
|
+
DatabaseTasks.database_configuration = YAML.load_file('config.yml')
|
7
|
+
DatabaseTasks.db_dir = 'db'
|
8
|
+
DatabaseTasks.migrations_paths = 'db/migrations'
|
9
|
+
DatabaseTasks.env = ENV['ENV'] || 'development'
|
10
|
+
DatabaseTasks.seed_loader = AgileProxy::Seed
|
11
|
+
ActiveRecord::Base.establish_connection(DatabaseTasks.database_configuration[DatabaseTasks.env])
|
12
|
+
DatabaseTasks.root = File.dirname(__FILE__)
|
13
|
+
Rake::Task.define_task(:environment)
|
14
|
+
# other settings...
|
15
|
+
load 'active_record/railties/databases.rake'
|
data/agile-proxy.gemspec
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/agile_proxy/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ['Gary Taylor']
|
6
|
+
gem.email = ['gary.taylor@hismessages.com']
|
7
|
+
gem.description = 'An agile, programmable, controllable proxy server for use standalone or as part of an integration test suite with clients for many languages'
|
8
|
+
gem.summary = 'An agile, programmable, controllable flexible proxy server for development or test use'
|
9
|
+
gem.homepage = 'https://github.com/garytaylor/agileproxy'
|
10
|
+
|
11
|
+
gem.files = `git ls-files`.split($\).concat(Dir.glob 'assets/ui/bower_components/**/*')
|
12
|
+
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
13
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
+
gem.name = RUBY_PLATFORM =~ /java/ ? 'agile-proxy-jruby' : 'agile-proxy'
|
15
|
+
gem.require_paths = ['lib']
|
16
|
+
gem.version = AgileProxy::VERSION
|
17
|
+
if RUBY_PLATFORM =~ /java/
|
18
|
+
gem.platform = 'jruby'
|
19
|
+
end
|
20
|
+
|
21
|
+
gem.add_development_dependency 'rake', '~> 0'
|
22
|
+
gem.add_development_dependency 'rspec', '~> 3.1', '>= 3.1.0'
|
23
|
+
gem.add_development_dependency 'rspec-mocks', '~> 3.1', '>= 3.1.3'
|
24
|
+
gem.add_development_dependency 'faraday', '~> 0.9', '>= 0.9.0'
|
25
|
+
gem.add_development_dependency 'poltergeist', '~> 1.5', '>= 1.5.1'
|
26
|
+
gem.add_development_dependency 'selenium-webdriver', '~> 2.43', '>= 2.43.0'
|
27
|
+
gem.add_development_dependency 'guard', '~> 2.6', '>= 2.6.1'
|
28
|
+
gem.add_development_dependency 'rb-inotify', '~> 0.9', '>= 0.9.5'
|
29
|
+
gem.add_development_dependency 'cucumber', '~> 1.3', '>= 1.3.17'
|
30
|
+
gem.add_development_dependency 'rest-client', '~> 1.7', '>= 1.7.2'
|
31
|
+
gem.add_development_dependency 'require_all', '~> 1.3', '>= 1.3.2'
|
32
|
+
gem.add_development_dependency 'faker', '~> 1.2', '>= 1.2.0'
|
33
|
+
gem.add_development_dependency 'yard', '~> 0.8', '>= 0.8'
|
34
|
+
gem.add_development_dependency 'simplecov', '~> 0.9', '>= 0.9.1'
|
35
|
+
gem.add_development_dependency 'travis', '~> 1.7', '>= 1.7.5'
|
36
|
+
gem.add_runtime_dependency 'eventmachine', '~> 1.0', '>= 1.0.3'
|
37
|
+
gem.add_runtime_dependency 'em-synchrony', '~> 1.0', '>= 1.0.3'
|
38
|
+
gem.add_runtime_dependency 'em-http-request', '~> 1.1', '>= 1.1.2'
|
39
|
+
gem.add_runtime_dependency 'grape', '~> 0.10', '>= 0.10.1'
|
40
|
+
gem.add_runtime_dependency 'activerecord', '~> 4.2', '>= 4.2.0'
|
41
|
+
if RUBY_PLATFORM =~ /java/
|
42
|
+
#JVM Only
|
43
|
+
gem.add_runtime_dependency 'activerecord-jdbc-adapter'
|
44
|
+
gem.add_runtime_dependency 'activerecord-jdbcsqlite3-adapter'
|
45
|
+
else
|
46
|
+
#Non JVM
|
47
|
+
gem.add_runtime_dependency 'sqlite3', '~> 1.3', '>= 1.3.10'
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
gem.add_runtime_dependency 'grape-kaminari', '~> 0.1', '>= 0.1.7'
|
53
|
+
gem.add_runtime_dependency 'shoulda-matchers', '2.8.0.rc2'
|
54
|
+
gem.add_runtime_dependency 'flavour_saver', '~> 0.3', '>= 0.3.4'
|
55
|
+
gem.add_runtime_dependency 'thor', '~> 0.19', '>= 0.19.1'
|
56
|
+
gem.add_runtime_dependency 'goliath', '~> 1.0', '>= 1.0.4'
|
57
|
+
gem.add_runtime_dependency 'rack-cache', '~> 1.2', '>= 1.2'
|
58
|
+
gem.add_runtime_dependency 'goliath-proxy', '~> 0.0', '>= 0.0.1'
|
59
|
+
|
60
|
+
end
|
data/assets/index.html
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
<!doctype html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<script src="ui/bower_components/jquery/dist/jquery.js"></script>
|
5
|
+
<script src="ui/bower_components/ace-builds/src-min-noconflict/ace.js"></script>
|
6
|
+
<script src="ui/bower_components/angular/angular.js"></script>
|
7
|
+
<script src="ui/bower_components/angular-bootstrap/ui-bootstrap.js"></script>
|
8
|
+
<script src="ui/bower_components/angular-bootstrap/ui-bootstrap-tpls.js"></script>
|
9
|
+
<script src="ui/bower_components/angular-ui-ace/ui-ace.js"></script>
|
10
|
+
<script src="ui/app/app.js"></script>
|
11
|
+
<script src="ui/app/model/RequestSpec.js"></script>
|
12
|
+
<script src="ui/app/controller/main.js"></script>
|
13
|
+
<script src="ui/app/controller/Stubs.js"></script>
|
14
|
+
<script src="ui/app/service/Dialog.js"></script>
|
15
|
+
<script src="ui/app/service/Stub.js"></script>
|
16
|
+
<script src="ui/app/service/DomId.js"></script>
|
17
|
+
<script src="ui/app/service/Error.js"></script>
|
18
|
+
<script src="ui/app/directive/AppEnhancedFormElement.js"></script>
|
19
|
+
<script src="ui/app/directive/AppResponseEditor.js"></script>
|
20
|
+
<script src="ui/app/directive/AppFor.js"></script>
|
21
|
+
<script src="ui/app/routes.js"></script>
|
22
|
+
<script src="ui/bower_components/angular-route/angular-route.js"></script>
|
23
|
+
<script src="ui/bower_components/angular-resource/angular-resource.js"></script>
|
24
|
+
<script src="ui/bower_components/angular-restmod/dist/angular-restmod-bundle.js"></script>
|
25
|
+
<script src="ui/app/AgileProxyApi.js"></script>
|
26
|
+
<link rel="stylesheet" href="ui/bower_components/bootstrap/dist/css/bootstrap.css" />
|
27
|
+
<link rel="stylesheet" href="ui/bower_components/bootstrap/dist/css/bootstrap-theme.css" />
|
28
|
+
<link rel="stylesheet" href="ui/css/main.css" />
|
29
|
+
</head>
|
30
|
+
<body ng-app="AgileProxy" class="container-fluid">
|
31
|
+
<div class="navbar navbar-inverse">
|
32
|
+
<a href="#status" class="navbar-brand">Status</a>
|
33
|
+
<a href="#stubs" class="navbar-brand">Stubs</a>
|
34
|
+
</div>
|
35
|
+
<div>
|
36
|
+
<ng-view></ng-view>
|
37
|
+
</div>
|
38
|
+
</body>
|
39
|
+
</html>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
/**
|
2
|
+
* API Bound Models for AngularJS
|
3
|
+
* @version v1.1.3 - 2014-09-25
|
4
|
+
* @link https://github.com/angular-platanus/restmod
|
5
|
+
* @author Ignacio Baixas <ignacio@platan.us>
|
6
|
+
* @license MIT License, http://www.opensource.org/licenses/MIT
|
7
|
+
*/
|
8
|
+
|
9
|
+
(function(angular, undefined) {
|
10
|
+
'use strict';
|
11
|
+
|
12
|
+
angular.module('restmod').factory('AgileProxyApi', ['restmod', 'inflector', function(restmod, inflector) {
|
13
|
+
|
14
|
+
return restmod.mixin('DefaultPacker', { // include default packer extension
|
15
|
+
$config: {
|
16
|
+
style: 'AMS',
|
17
|
+
primaryKey: 'id',
|
18
|
+
jsonMeta: 'meta',
|
19
|
+
jsonLinks: 'links'
|
20
|
+
},
|
21
|
+
|
22
|
+
$extend: {
|
23
|
+
// special snakecase to camelcase renaming
|
24
|
+
Model: {
|
25
|
+
decodeName: inflector.camelize,
|
26
|
+
encodeName: function(_v) { return inflector.parameterize(_v, '_'); }
|
27
|
+
}
|
28
|
+
}
|
29
|
+
});
|
30
|
+
|
31
|
+
}]);})(angular);
|
@@ -0,0 +1 @@
|
|
1
|
+
angular.module('AgileProxy', ['ui.bootstrap', 'ngRoute', 'ngResource', 'restmod', 'ui.ace']);
|
@@ -0,0 +1,64 @@
|
|
1
|
+
angular.module('AgileProxy').controller('StubsCtrl', function ($resource, $scope, DialogService, StubService, RequestSpecModel, ErrorService) {
|
2
|
+
var selection;
|
3
|
+
$scope.selection = {};
|
4
|
+
$scope.selectionCount = 0;
|
5
|
+
angular.extend($scope, {
|
6
|
+
editStub: function (stub) {
|
7
|
+
StubService.editStub(stub, $scope).then(function (obj) {
|
8
|
+
obj.stub.$save().$then(function (stub) {
|
9
|
+
obj.close();
|
10
|
+
},
|
11
|
+
function (response) {
|
12
|
+
ErrorService.serverError(response);
|
13
|
+
}
|
14
|
+
)
|
15
|
+
});
|
16
|
+
},
|
17
|
+
deleteStub: function (stub) {
|
18
|
+
DialogService.yesNo('Delete this stub ?').then(function (response) {
|
19
|
+
stub.$destroy({id: stub.id});
|
20
|
+
});
|
21
|
+
},
|
22
|
+
addStub: function () {
|
23
|
+
StubService.addStub($scope).then(function(obj) {
|
24
|
+
obj.stub.$save().$then(function (stub) {
|
25
|
+
obj.close();
|
26
|
+
},
|
27
|
+
function (response) {
|
28
|
+
ErrorService.serverError(response);
|
29
|
+
}
|
30
|
+
);
|
31
|
+
});
|
32
|
+
},
|
33
|
+
updateSelection: function (stub) {
|
34
|
+
if (stub.$isSelected) {
|
35
|
+
$scope.addToSelection(stub);
|
36
|
+
} else {
|
37
|
+
$scope.removeFromSelection(stub);
|
38
|
+
}
|
39
|
+
},
|
40
|
+
addToSelection: function (stub) {
|
41
|
+
$scope.selection[stub.id] = true;
|
42
|
+
$scope.onSelectionChange();
|
43
|
+
},
|
44
|
+
removeFromSelection: function (stub) {
|
45
|
+
delete $scope.selection[stub.id];
|
46
|
+
$scope.onSelectionChange();
|
47
|
+
},
|
48
|
+
deleteSelection: function () {
|
49
|
+
var s;
|
50
|
+
s = $scope.selection;
|
51
|
+
debugger;
|
52
|
+
|
53
|
+
},
|
54
|
+
onSelectionChange: function () {
|
55
|
+
$scope.selectionCount = Object.keys($scope.selection).length;
|
56
|
+
},
|
57
|
+
emptySelection: function () {
|
58
|
+
|
59
|
+
}
|
60
|
+
});
|
61
|
+
$scope.requestSpecs = RequestSpecModel.$collection({});
|
62
|
+
$scope.requestSpecs.$refresh()
|
63
|
+
|
64
|
+
});
|