Easy-HTTP-Mock 0.1.0

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 241a0e308933927c6a7d41d8efa7b9ed7fbd8f0e
4
+ data.tar.gz: 6ac203cc8965a6a62f6072a63cea1d793ad616e5
5
+ SHA512:
6
+ metadata.gz: fa3d16c97374902a17250e9edfc33aa206d4f4eeb85e763f97d68d2033ae7bbf705a4dca5d2f7bfe7be66bbf4f0f2eba4795e5e2c3f4c4ba25864128081db42e
7
+ data.tar.gz: c4aed46a9123e30df78c31dff7839087256fd7bf0cccb02e19b34f0bc1cb4790a050a0475a58000b8b55f0067868e0d3238afa91fba495fdffb25ccfb0277a8e
data/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'sinatra'
4
+ #gem 'hash_validator'
5
+
6
+ group :test do
7
+ gem 'rspec'
8
+ gem 'rspec-html-matchers'
9
+ gem 'rack-test'
10
+ end
11
+
12
+ group :development do
13
+ gem 'rerun'
14
+ gem 'shotgun'
15
+ end
@@ -0,0 +1,53 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.2.5)
5
+ ffi (1.9.3)
6
+ listen (1.0.3)
7
+ rb-fsevent (>= 0.9.3)
8
+ rb-inotify (>= 0.9)
9
+ rb-kqueue (>= 0.2)
10
+ mini_portile (0.5.2)
11
+ nokogiri (1.6.0)
12
+ mini_portile (~> 0.5.0)
13
+ rack (1.5.2)
14
+ rack-protection (1.5.1)
15
+ rack
16
+ rack-test (0.6.2)
17
+ rack (>= 1.0)
18
+ rb-fsevent (0.9.3)
19
+ rb-inotify (0.9.2)
20
+ ffi (>= 0.5.0)
21
+ rb-kqueue (0.2.0)
22
+ ffi (>= 0.5.0)
23
+ rerun (0.8.2)
24
+ listen (~> 1.0.3)
25
+ rspec (2.14.1)
26
+ rspec-core (~> 2.14.0)
27
+ rspec-expectations (~> 2.14.0)
28
+ rspec-mocks (~> 2.14.0)
29
+ rspec-core (2.14.7)
30
+ rspec-expectations (2.14.4)
31
+ diff-lcs (>= 1.1.3, < 2.0)
32
+ rspec-html-matchers (0.4.3)
33
+ nokogiri (>= 1.4.4)
34
+ rspec (>= 2.0.0)
35
+ rspec-mocks (2.14.4)
36
+ shotgun (0.9)
37
+ rack (>= 1.0)
38
+ sinatra (1.4.4)
39
+ rack (~> 1.4)
40
+ rack-protection (~> 1.4)
41
+ tilt (~> 1.3, >= 1.3.4)
42
+ tilt (1.4.1)
43
+
44
+ PLATFORMS
45
+ ruby
46
+
47
+ DEPENDENCIES
48
+ rack-test
49
+ rerun
50
+ rspec
51
+ rspec-html-matchers
52
+ shotgun
53
+ sinatra
@@ -0,0 +1,4 @@
1
+ Easy Http mock
2
+ ================
3
+
4
+ The goal of this project is to give a simple way to mock http request and response for specific condition.
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ require 'optparse'
3
+ require 'easy-http-mock'
4
+ options = {}
5
+
6
+ OptionParser.new { |op|
7
+ op.banner = "Usage: #{File.basename $0} [options] config_file"
8
+ op.on('-p', '--port [PORT]', Integer, 'set the port') { |port| options[:port] = port }
9
+ op.on('-o', '--addr [ADDR]', 'set the host') { |val| options[:addr] = val }
10
+ op.on('-h', '--help', 'show this usage') { puts op; exit }
11
+ }.parse!(ARGV)
12
+
13
+ config = ARGV[0]
14
+ abort "configuration #{config} not found" unless File.exist? config
15
+
16
+ EasyHTTPMock.start(config, options)
data/bin/ehm ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ require 'optparse'
3
+ require 'easy-http-mock'
4
+ options = {}
5
+
6
+ OptionParser.new { |op|
7
+ op.banner = "Usage: #{File.basename $0} [options] config_file"
8
+ op.on('-p', '--port [PORT]', Integer, 'set the port') { |port| options[:port] = port }
9
+ op.on('-o', '--addr [ADDR]', 'set the host') { |val| options[:addr] = val }
10
+ op.on('-h', '--help', 'show this usage') { puts op; exit }
11
+ }.parse!(ARGV)
12
+
13
+ config = ARGV[0]
14
+ abort "configuration #{config} not found" unless File.exist? config
15
+
16
+ EasyHTTPMock.start(config, options)
@@ -0,0 +1,15 @@
1
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
2
+ require 'easy-http-mock/version'
3
+
4
+ Gem::Specification.new 'Easy-HTTP-Mock', EasyHTTPMock::VERSION do |s|
5
+ s.description = 'Easy HTTP Mock is a tool aim at quickly mock http service'
6
+ s.summary = 'Mock HTTP service at minutes'
7
+ s.authors = ['Wang Chao']
8
+ s.email = 'cwang8023@gmail.com'
9
+ s.homepage = 'https://github.com/charleyw/Easy-HTTP-Mock'
10
+ s.license = 'MIT'
11
+ s.files = `git ls-files`.split("\n") - %w[.gitignore .travis.yml .ruby-version .ruby-gemset test.yml]
12
+ s.test_files = s.files.select { |p| p =~ /^spec\/.*_spec.rb/ }
13
+ s.executables = ['ehm', 'easyhttpmock']
14
+ s.add_dependency 'sinatra', '~> 1.4.4'
15
+ end
@@ -0,0 +1,3 @@
1
+ {
2
+ "result": "This is origin bar"
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "result": "This is origin bar with parameter one and two! haha!"
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "result": "This is origin bar with parameter three! hehe!"
3
+ }
@@ -0,0 +1,19 @@
1
+ ---
2
+ - &bar
3
+ request: &bar_request
4
+ path: /bar
5
+ response: bar.json
6
+ -
7
+ request:
8
+ <<: *bar_request
9
+ query:
10
+ param_one: haha
11
+ param_two: blabla
12
+ response: bar_haha.json
13
+ -
14
+ request:
15
+ <<: *bar_request
16
+ query:
17
+ param_three: hehe
18
+ response: bar_hehe.json
19
+ ...
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'yaml'
4
+ require 'sinatra'
5
+
6
+ class EasyHTTPMock < Sinatra::Base
7
+ set(:query) do |query_params|
8
+ condition do
9
+ query_params.detect do |key, value|
10
+ (!params.has_key? key) || params[key] != value
11
+ end.nil? ? true : false
12
+ end
13
+ end
14
+
15
+ class << self
16
+ def start(config, options)
17
+ @mocking_config_file = config
18
+ config_sinatra(options)
19
+ begin
20
+ define_mock(parsing_configuration(config))
21
+ rescue Exception => e
22
+ abort "Got exception when define mocked http service:\n#{e}"
23
+ end
24
+ run!
25
+ end
26
+
27
+ def config_sinatra(options)
28
+ [:port, :addr].each { |key| set key, options[key] if options.key? key }
29
+ end
30
+
31
+ def parsing_configuration(config_file)
32
+ settings = YAML.load_file config_file
33
+ settings.sort do |x, y|
34
+ x['request'].size < y['request'].size ? 1 : -1
35
+ end
36
+
37
+ end
38
+
39
+ def define_mock(conf)
40
+ conf.each do |service|
41
+ requestConf, responseConf = service['request'], service['response']
42
+ base_path = File.dirname(@mocking_config_file)
43
+ get requestConf.delete('path'), requestConf.inject({}) { |h, (k, v)| h[k] = [v]; h} do
44
+ File.read(base_path + '/' + responseConf)
45
+ end
46
+ end
47
+ end
48
+
49
+ end
50
+ end
@@ -0,0 +1,3 @@
1
+ module EasyHTTPMock
2
+ VERSION = '0.1.0'
3
+ end
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: Easy-HTTP-Mock
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Wang Chao
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-01-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sinatra
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 1.4.4
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 1.4.4
27
+ description: Easy HTTP Mock is a tool aim at quickly mock http service
28
+ email: cwang8023@gmail.com
29
+ executables:
30
+ - ehm
31
+ - easyhttpmock
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - Gemfile
36
+ - Gemfile.lock
37
+ - README.md
38
+ - bin/easyhttpmock
39
+ - bin/ehm
40
+ - easy-http-mock.gemspec
41
+ - example/bar.json
42
+ - example/bar_haha.json
43
+ - example/bar_hehe.json
44
+ - example/test.yml
45
+ - lib/easy-http-mock.rb
46
+ - lib/easy-http-mock/version.rb
47
+ homepage: https://github.com/charleyw/Easy-HTTP-Mock
48
+ licenses:
49
+ - MIT
50
+ metadata: {}
51
+ post_install_message:
52
+ rdoc_options: []
53
+ require_paths:
54
+ - lib
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - '>='
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ requirements: []
66
+ rubyforge_project:
67
+ rubygems_version: 2.0.6
68
+ signing_key:
69
+ specification_version: 4
70
+ summary: Mock HTTP service at minutes
71
+ test_files: []