mirage 0.1.2

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.
Files changed (41) hide show
  1. data/.rvmrc +1 -0
  2. data/Gemfile +3 -0
  3. data/Gemfile.lock +50 -0
  4. data/README.md +93 -0
  5. data/bin/mirage +54 -0
  6. data/features/checking_for_requests.feature +74 -0
  7. data/features/clearing_requests_and_responses.feature +81 -0
  8. data/features/client/checking_for_requests.feature +20 -0
  9. data/features/client/clearing_responses.feature +75 -0
  10. data/features/client/getting_responses.feature +30 -0
  11. data/features/client/mirage_client.feature +36 -0
  12. data/features/client/peeking.feature +32 -0
  13. data/features/client/setting_responses.feature +91 -0
  14. data/features/client/snapshotting.feature +34 -0
  15. data/features/command_line_iterface.feature +39 -0
  16. data/features/default_responses.feature +91 -0
  17. data/features/file_hosting.feature +8 -0
  18. data/features/logging.feature +7 -0
  19. data/features/peeking_at_response.feature +24 -0
  20. data/features/resources/test.zip +0 -0
  21. data/features/response_templates.feature +45 -0
  22. data/features/root_responses.feature +47 -0
  23. data/features/setting_responses.feature +40 -0
  24. data/features/setting_responses_with_a_delay.feature +10 -0
  25. data/features/setting_responses_with_pattern_matching.feature +72 -0
  26. data/features/snapshotting.feature +25 -0
  27. data/features/step_definitions/my_steps.rb +127 -0
  28. data/features/support/env.rb +89 -0
  29. data/features/web_user_interface.feature +39 -0
  30. data/full_build.sh +100 -0
  31. data/lib/config.ru +5 -0
  32. data/lib/mirage.rb +14 -0
  33. data/lib/mirage/client.rb +140 -0
  34. data/lib/mirage/core.rb +206 -0
  35. data/lib/mirage/util.rb +40 -0
  36. data/lib/mirage/web.rb +65 -0
  37. data/lib/start_mirage.rb +15 -0
  38. data/lib/view/mirage/index.xhtml +23 -0
  39. data/mirage.gemspec +40 -0
  40. data/rakefile +50 -0
  41. metadata +199 -0
@@ -0,0 +1,40 @@
1
+ require 'optparse'
2
+ module Mirage
3
+ module Util
4
+
5
+ def wait_until time=30
6
+ start_time = Time.now
7
+ until Time.now >= start_time + time
8
+ sleep 0.1
9
+ return if yield
10
+ end
11
+ raise 'timeout waiting'
12
+ end
13
+
14
+ def parse_options args
15
+ options = {:port => 7001, :defaults_directory => 'defaults', :root_directory => '.'}
16
+
17
+ opt_parser = OptionParser.new do |opts|
18
+ opts.banner = "Usage: mirage start|stop [options]"
19
+ opts.on("-p", "--port PORT", "the port to start Mirage on") do |port|
20
+ options[:port] = port.to_i
21
+ end
22
+
23
+ opts.on("-d", "--defaults DIR", "location to load default responses from") do |directory|
24
+ options[:defaults_directory] = directory
25
+ end
26
+ end
27
+
28
+ begin
29
+ opt_parser.parse args
30
+ rescue
31
+ puts "mirage start|stop [OPTIONS]"
32
+ puts opt_parser
33
+ exit 1
34
+ end
35
+
36
+ options
37
+ end
38
+ end
39
+
40
+ end
@@ -0,0 +1,65 @@
1
+ module Mirage
2
+ module Web
3
+ class FileResponse
4
+ def initialize response
5
+ @response = response
6
+ end
7
+
8
+ def save_as path
9
+ @response.save_as(path)
10
+ end
11
+ end
12
+
13
+ def http_get url, params={}
14
+ uri = URI.parse(url)
15
+ if params[:body]
16
+ response = Net::HTTP.start(uri.host, uri.port) do |http|
17
+ request = Net::HTTP::Get.new(uri.path)
18
+ request.body=params[:body]
19
+ http.request(request)
20
+ end
21
+
22
+ def response.code
23
+ @code.to_i
24
+ end
25
+
26
+ else
27
+ response = using_mechanize do |browser|
28
+ browser.get(url, params)
29
+ end
30
+ end
31
+
32
+ response
33
+ end
34
+
35
+ def http_post url, params={}
36
+ using_mechanize do |browser|
37
+ browser.post(url, params)
38
+ end
39
+ end
40
+
41
+ private
42
+ def using_mechanize
43
+ begin
44
+ browser = Mechanize.new
45
+ browser.keep_alive = false
46
+ response = yield browser
47
+
48
+ def response.code
49
+ @code.to_i
50
+ end
51
+ rescue Exception => e
52
+ response = e
53
+
54
+ def response.code
55
+ self.response_code.to_i
56
+ end
57
+
58
+ def response.body
59
+ ""
60
+ end
61
+ end
62
+ response
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,15 @@
1
+ require 'rubygems'
2
+ $0='Mirage Server'
3
+ $LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib")
4
+ require 'mirage'
5
+ include Mirage::Util
6
+
7
+ options = parse_options(ARGV)
8
+
9
+ DEFAULT_RESPONSES_DIR = "#{options[:defaults_directory]}"
10
+ Mirage.client = Mirage::Client.new
11
+ Ramaze::Log.loggers = [Logger.new('mirage.log')]
12
+ Ramaze::Log.level= Logger::WARN
13
+ Ramaze.start :port => options[:port]
14
+
15
+
@@ -0,0 +1,23 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
+ <head>
7
+ <title>Mirage</title>
8
+ </head>
9
+ <body>
10
+ <h1>Welcome to Mirage</h1>
11
+
12
+ <p>Below are any responses you are currently hosting. Click the response itself to peek at it and click check to view the last request that triggered it. <br/>
13
+ Note: if requests or responses contain xml, you will need to view page source to see it properly.</p>
14
+
15
+ <?r unless @responses.empty? ?>
16
+ <table border="1" width='100%'>
17
+ <?r @responses.each do |key, response| ?>
18
+ <tr><td><a id='peek_response_#{response.response_id}' href="/mirage/peek/#{response.response_id}">#{key}</a></td><td><a id='check_response_#{response.response_id}' href="/mirage/check/#{response.response_id}">check</a></td></tr>
19
+ <?r end ?>
20
+ </table>
21
+ <?r end ?>
22
+ </body>
23
+ </html>
@@ -0,0 +1,40 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'mirage'
3
+ s.version = '0.1.2'
4
+ s.authors = ["Leon Davis"]
5
+ s.homepage = 'https://github.com/lashd/Mirage'
6
+ s.description = 'Mirage is an application for hosting responses to fool your applications into thinking that they are talking to real endpoints whilst you are developing them. Its accessible via HTTP has a RESful interface so is easy to interact with.'
7
+ s.summary = "mirage-#{s.version}"
8
+
9
+ s.platform = Gem::Platform::RUBY
10
+ s.default_executable = "mirage"
11
+ s.post_install_message = %{
12
+ ===============================================================================
13
+ Thanks you for installing mirage-#{s.version}.
14
+
15
+ Run Mirage with:
16
+
17
+ mirage start
18
+ ===============================================================================
19
+ }
20
+
21
+ s.has_rdoc = 'true'
22
+
23
+ s.add_dependency 'rack', "~> 1.1.0"
24
+ s.add_dependency 'ramaze', ">= 2011.01.30"
25
+ s.add_dependency "mechanize", ">= 1.0.0"
26
+
27
+ s.add_development_dependency 'rake'
28
+ s.add_development_dependency 'cucumber'
29
+ s.add_development_dependency 'rspec'
30
+ s.add_development_dependency 'bundler'
31
+
32
+ s.rubygems_version = "1.3.7"
33
+ s.files = `git ls-files`.split("\n")
34
+ s.test_files = `git ls-files -- features/*`.split("\n")
35
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
36
+ s.require_path = "lib"
37
+
38
+
39
+
40
+ end
@@ -0,0 +1,50 @@
1
+ $LOAD_PATH.unshift('lib')
2
+ require 'rubygems'
3
+ require 'bundler/setup'
4
+
5
+ require 'mirage/client'
6
+ require 'rake'
7
+ require 'open-uri'
8
+ require 'cucumber'
9
+ require 'cucumber/rake/task'
10
+ require 'mechanize'
11
+
12
+ def run_command command
13
+ system "export RUBYOPT='' && #{command}"
14
+ end
15
+
16
+ task :gem => :clean do
17
+ run_command 'gem build mirage.gemspec'
18
+ end
19
+
20
+ task :install => :gem do
21
+ run_command "gem install mirage"
22
+ end
23
+
24
+ Cucumber::Rake::Task.new(:features) do |t|
25
+ t.cucumber_opts = "mode=regression features --format pretty"
26
+ end
27
+
28
+ task :start_mirage => :stop_mirage do
29
+ run_command "mirage start"
30
+ task.reenable
31
+ end
32
+
33
+ task :stop_mirage do |task|
34
+ run_command "mirage stop"
35
+ task.reenable
36
+ end
37
+
38
+
39
+ task :clean do |task|
40
+
41
+ if run_command "gem list -i mirage"
42
+ puts "cleaning"
43
+ run_command "gem uninstall -x mirage"
44
+ end
45
+ Dir['*.gem'].each{|gem| FileUtils.rm_f(gem)}
46
+ task.reenable
47
+ end
48
+
49
+
50
+ task :default => [:install, :start_mirage, :features, :stop_mirage, :clean]
metadata ADDED
@@ -0,0 +1,199 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mirage
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.2
6
+ platform: ruby
7
+ authors:
8
+ - Leon Davis
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-03-22 00:00:00 +00:00
14
+ default_executable: mirage
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rack
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: 1.1.0
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: ramaze
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 2011.01.30
36
+ type: :runtime
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: mechanize
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 1.0.0
47
+ type: :runtime
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: rake
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ type: :development
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: cucumber
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
69
+ type: :development
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: rspec
73
+ prerelease: false
74
+ requirement: &id006 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: "0"
80
+ type: :development
81
+ version_requirements: *id006
82
+ - !ruby/object:Gem::Dependency
83
+ name: bundler
84
+ prerelease: false
85
+ requirement: &id007 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: "0"
91
+ type: :development
92
+ version_requirements: *id007
93
+ description: Mirage is an application for hosting responses to fool your applications into thinking that they are talking to real endpoints whilst you are developing them. Its accessible via HTTP has a RESful interface so is easy to interact with.
94
+ email:
95
+ executables:
96
+ - mirage
97
+ extensions: []
98
+
99
+ extra_rdoc_files: []
100
+
101
+ files:
102
+ - .rvmrc
103
+ - Gemfile
104
+ - Gemfile.lock
105
+ - README.md
106
+ - bin/mirage
107
+ - features/checking_for_requests.feature
108
+ - features/clearing_requests_and_responses.feature
109
+ - features/client/checking_for_requests.feature
110
+ - features/client/clearing_responses.feature
111
+ - features/client/getting_responses.feature
112
+ - features/client/mirage_client.feature
113
+ - features/client/peeking.feature
114
+ - features/client/setting_responses.feature
115
+ - features/client/snapshotting.feature
116
+ - features/command_line_iterface.feature
117
+ - features/default_responses.feature
118
+ - features/file_hosting.feature
119
+ - features/logging.feature
120
+ - features/peeking_at_response.feature
121
+ - features/resources/test.zip
122
+ - features/response_templates.feature
123
+ - features/root_responses.feature
124
+ - features/setting_responses.feature
125
+ - features/setting_responses_with_a_delay.feature
126
+ - features/setting_responses_with_pattern_matching.feature
127
+ - features/snapshotting.feature
128
+ - features/step_definitions/my_steps.rb
129
+ - features/support/env.rb
130
+ - features/web_user_interface.feature
131
+ - full_build.sh
132
+ - lib/config.ru
133
+ - lib/mirage.rb
134
+ - lib/mirage/client.rb
135
+ - lib/mirage/core.rb
136
+ - lib/mirage/util.rb
137
+ - lib/mirage/web.rb
138
+ - lib/start_mirage.rb
139
+ - lib/view/mirage/index.xhtml
140
+ - mirage.gemspec
141
+ - rakefile
142
+ has_rdoc: true
143
+ homepage: https://github.com/lashd/Mirage
144
+ licenses: []
145
+
146
+ post_install_message: "\n\
147
+ ===============================================================================\n\
148
+ Thanks you for installing mirage-0.1.2. \n\n\
149
+ Run Mirage with:\n\n\
150
+ mirage start\n\
151
+ ===============================================================================\n"
152
+ rdoc_options: []
153
+
154
+ require_paths:
155
+ - lib
156
+ required_ruby_version: !ruby/object:Gem::Requirement
157
+ none: false
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ version: "0"
162
+ required_rubygems_version: !ruby/object:Gem::Requirement
163
+ none: false
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: "0"
168
+ requirements: []
169
+
170
+ rubyforge_project:
171
+ rubygems_version: 1.6.1
172
+ signing_key:
173
+ specification_version: 3
174
+ summary: mirage-0.1.2
175
+ test_files:
176
+ - features/checking_for_requests.feature
177
+ - features/clearing_requests_and_responses.feature
178
+ - features/client/checking_for_requests.feature
179
+ - features/client/clearing_responses.feature
180
+ - features/client/getting_responses.feature
181
+ - features/client/mirage_client.feature
182
+ - features/client/peeking.feature
183
+ - features/client/setting_responses.feature
184
+ - features/client/snapshotting.feature
185
+ - features/command_line_iterface.feature
186
+ - features/default_responses.feature
187
+ - features/file_hosting.feature
188
+ - features/logging.feature
189
+ - features/peeking_at_response.feature
190
+ - features/resources/test.zip
191
+ - features/response_templates.feature
192
+ - features/root_responses.feature
193
+ - features/setting_responses.feature
194
+ - features/setting_responses_with_a_delay.feature
195
+ - features/setting_responses_with_pattern_matching.feature
196
+ - features/snapshotting.feature
197
+ - features/step_definitions/my_steps.rb
198
+ - features/support/env.rb
199
+ - features/web_user_interface.feature