agile-proxy-jruby 0.1.25-jruby
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
[](https://travis-ci.org/garytaylor/agileproxy)
|
2
|
+
[](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
|
+
});
|