smog 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,12 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- smog (0.0.1)
5
- thor
4
+ smog (0.0.2)
5
+ main
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
+ arrayfields (4.7.4)
10
11
  aruba (0.2.3)
11
12
  background_process
12
13
  cucumber (~> 0.9.0)
@@ -19,22 +20,25 @@ GEM
19
20
  json (~> 1.4.6)
20
21
  term-ansicolor (~> 1.0.5)
21
22
  diff-lcs (1.1.2)
22
- gherkin (2.2.8)
23
+ fattr (2.1.0)
24
+ gherkin (2.2.9)
23
25
  json (~> 1.4.6)
24
26
  term-ansicolor (~> 1.0.5)
25
27
  json (1.4.6)
26
- rspec (2.0.0)
27
- rspec-core (= 2.0.0)
28
- rspec-expectations (= 2.0.0)
29
- rspec-mocks (= 2.0.0)
30
- rspec-core (2.0.0)
31
- rspec-expectations (2.0.0)
28
+ main (4.2.0)
29
+ arrayfields (>= 4.7.4)
30
+ fattr (>= 2.1.0)
31
+ rspec (2.0.1)
32
+ rspec-core (~> 2.0.1)
33
+ rspec-expectations (~> 2.0.1)
34
+ rspec-mocks (~> 2.0.1)
35
+ rspec-core (2.0.1)
36
+ rspec-expectations (2.0.1)
32
37
  diff-lcs (>= 1.1.2)
33
- rspec-mocks (2.0.0)
34
- rspec-core (= 2.0.0)
35
- rspec-expectations (= 2.0.0)
38
+ rspec-mocks (2.0.1)
39
+ rspec-core (~> 2.0.1)
40
+ rspec-expectations (~> 2.0.1)
36
41
  term-ansicolor (1.0.5)
37
- thor (0.14.3)
38
42
 
39
43
  PLATFORMS
40
44
  ruby
@@ -42,6 +46,6 @@ PLATFORMS
42
46
  DEPENDENCIES
43
47
  aruba
44
48
  cucumber
49
+ main
45
50
  rspec
46
51
  smog!
47
- thor
data/bin/smog CHANGED
@@ -1,4 +1,2 @@
1
1
  #!/usr/bin/env ruby
2
-
3
2
  require 'smog/cli'
4
- Smog::CLI.start
@@ -1,28 +1,32 @@
1
- Feature: Food
2
- In order to see test the CloudApp items API
1
+ Feature: Smog
2
+ In order to test that an API respects 304s
3
3
  As a user
4
- I want to see a lit of items
4
+ I want to query an API
5
5
 
6
6
  Scenario: Get items
7
- When I run "smog curl --user test@example.com:pass"
8
- Then the output should contain exactly:
7
+ When I run the command:
9
8
  """
10
- curl -I --digest -u test@example.com:pass -H "Accept: application/json" "http://my.cloudapp.local/items?page=1&per_page=5"
11
-
9
+ smog auth=test@example.com:pass "http://my.cloudapp.local/items?page=1&per_page=5"
12
10
  """
11
+ #Then the output should be exactly:
12
+ #"""
13
+ #curl -I -s --digest -u test@example.com:pass -H "Accept: application/json" "http://my.cloudapp.local/items?page=1&per_page=5"
14
+ #HTTP/1.1 401 Authorization Required
15
+ #HTTP/1.1 200 OK
13
16
 
14
- Scenario: Get items with etag
15
- When I run "smog curl --etag abc123"
16
- Then the output should contain exactly:
17
+ #curl -I -s --digest -u test@example.com:pass -H "Accept: application/json" -H "If-None-Match: \"c6b5d4a0589c53bf1d8326422fc33f57\"" -H "If-Modified-Since: Fri, 15 Oct 2010 14:46:14 GMT"
18
+ #HTTP/1.1 401 Authorization Required
19
+ #HTTP/1.1 304 Not Modified
20
+ #"""
21
+ Then the output should contain:
17
22
  """
18
- curl -I -H "If-None-Match: \"abc123\"" -H "Accept: application/json" "http://my.cloudapp.local/items?page=1&per_page=5"
19
-
23
+ curl -I -s --digest -u test@example.com:pass -H "Accept: application/json" "http://my.cloudapp.local/items?page=1&per_page=5"
24
+ HTTP/1.1 401 Authorization Required
25
+ HTTP/1.1 200 OK
20
26
  """
21
-
22
- Scenario: Get items with last-modified
23
- When I run "smog curl --last-modified \"Tue, 05 Oct 2010 13:44:39 GMT\""
24
- Then the output should contain exactly:
27
+ And the output should match:
25
28
  """
26
- curl -I -H "If-Modified-Since: Tue, 05 Oct 2010 13:44:39 GMT" -H "Accept: application/json" "http://my.cloudapp.local/items?page=1&per_page=5"
27
-
29
+ curl -I -s --digest -u test@example.com:pass -H "Accept: application/json" -H "If-None-Match: \\"[^"]+\\"" -H "If-Modified-Since: [\w,: ]+" "http://my.cloudapp.local/items\?page=1&per_page=5"
30
+ HTTP/1.1 401 Authorization Required
31
+ HTTP/1.1 304 Not Modified
28
32
  """
@@ -0,0 +1,3 @@
1
+ When /^I run the command:$/ do |command|
2
+ When "I run #{ command.inspect }"
3
+ end
@@ -1 +1,2 @@
1
- require 'aruba'
1
+ require 'bundler'
2
+ Bundler.require(:default, :development)
data/lib/smog/cli.rb CHANGED
@@ -1,8 +1,28 @@
1
- require 'thor'
2
- require 'smog'
1
+ require 'main'
2
+
3
+ Main do
4
+ version Smog::VERSION
5
+
6
+ argument 'url' do
7
+ description 'url to query'
8
+ end
9
+
10
+ keyword 'auth' do
11
+ required
12
+ description 'digest auth credentials'
13
+ end
14
+
15
+ def run
16
+ 2.times do
17
+ command = build_curl
18
+
19
+ @last_response = %x(#{ command })
20
+ puts_response command, @last_response
21
+ end
22
+ end
23
+
24
+ private
3
25
 
4
- module Smog
5
- class CLI < Thor
6
26
  # Basic curl command:
7
27
  # curl
8
28
  # --digest -u "test@example.com:pass"
@@ -10,41 +30,50 @@ module Smog
10
30
  # -H "If-None-Match: \"05122c59185e3bcf8b9a1976d46c2040\""
11
31
  # -H "If-Modified-Since: Tue, 05 Oct 2010 13:44:39 GMT"
12
32
  # "http://my.cloudapp.local/items?page=1&per_page=5"
33
+ def build_curl
34
+ [ 'curl -I -s',
35
+ "--digest -u #{ params[:auth].value }",
36
+ header('Accept', 'application/json')
37
+ ].tap do |command|
38
+ if etag
39
+ command << header('If-None-Match', %{\\"#{ etag }\\"})
40
+ end
13
41
 
14
- desc 'curl', 'Prints the curl command to fetch items'
15
- method_option :user, :aliases => '-u'
16
- method_option :etag, :aliases => '-e'
17
- method_option :last_modified, :aliases => '-l'
18
- def curl
19
- print build_command(options)
42
+ if last_modified
43
+ command << header('If-Modified-Since', last_modified)
44
+ end
45
+
46
+ command << params[:url].value.inspect
47
+ end.join ' '
20
48
  end
21
49
 
22
- private
50
+ def header(name, value)
51
+ %{-H "#{ name }: #{ value }"}
52
+ end
23
53
 
24
- def build_command(options)
25
- [ 'curl -I' ].tap do |command|
26
- command << "--digest -u #{ options[:user] }" if options[:user]
54
+ def etag
55
+ response_header /ETag: "(.*)"/
56
+ end
27
57
 
28
- if options[:etag]
29
- command << header('If-None-Match', %{\\"#{ options[:etag] }\\"})
30
- end
58
+ def last_modified
59
+ response_header /Last-Modified: (.*)/
60
+ end
31
61
 
32
- if options[:last_modified]
33
- command << header('If-Modified-Since', options[:last_modified])
34
- end
62
+ def response_header(match_header)
63
+ return unless @last_response
35
64
 
36
- command << header('Accept', 'application/json')
37
- command << "#{ url }\n"
38
- end.join ' '
39
- end
65
+ @last_response.match(match_header)[1].chomp
66
+ end
40
67
 
41
- def header(name, value)
42
- %{-H "#{ name }: #{ value }"}
43
- end
68
+ def puts_response(command, full_response)
69
+ puts command
44
70
 
45
- def url
46
- '"http://my.cloudapp.local/items?page=1&per_page=5"'
71
+ full_response.split("\r\n\r\n").each do |response|
72
+ status = response.split("\r\n").first
73
+ puts " #{ status }"
47
74
  end
48
75
 
49
- end
76
+ puts
77
+ end
78
+
50
79
  end
data/lib/smog/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Smog
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/smog.gemspec CHANGED
@@ -12,17 +12,14 @@ Gem::Specification.new do |s|
12
12
  s.summary = %q{Test the CloudApp API from the command line}
13
13
  s.description = %q{Smog simply outputs a curl command to use to test the CloudApp API}
14
14
 
15
- s.required_rubygems_version = ">= 1.3.6"
16
-
17
- s.add_dependency "thor"
15
+ s.add_dependency "main"
18
16
 
19
17
  s.add_development_dependency "rspec"
20
18
  s.add_development_dependency "cucumber"
21
19
  s.add_development_dependency "aruba"
22
20
 
23
- s.files = `git ls-files`.split("\n")
24
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
25
- s.executables = %w(smog)
26
- s.default_executable = "smog"
27
- s.require_paths = ["lib"]
21
+ s.files = `git ls-files`.split("\n")
22
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
24
+ s.require_paths = ["lib"]
28
25
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smog
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Larry Marburger
@@ -15,11 +15,11 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-11 00:00:00 -04:00
19
- default_executable: smog
18
+ date: 2010-10-21 00:00:00 -04:00
19
+ default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: thor
22
+ name: main
23
23
  prerelease: false
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
25
  none: false
@@ -90,6 +90,7 @@ files:
90
90
  - Rakefile
91
91
  - bin/smog
92
92
  - features/smog.feature
93
+ - features/step_definitions/command_steps.rb
93
94
  - features/support/setup.rb
94
95
  - lib/smog.rb
95
96
  - lib/smog/cli.rb
@@ -118,12 +119,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
119
  requirements:
119
120
  - - ">="
120
121
  - !ruby/object:Gem::Version
121
- hash: 23
122
+ hash: 3
122
123
  segments:
123
- - 1
124
- - 3
125
- - 6
126
- version: 1.3.6
124
+ - 0
125
+ version: "0"
127
126
  requirements: []
128
127
 
129
128
  rubyforge_project:
@@ -133,4 +132,5 @@ specification_version: 3
133
132
  summary: Test the CloudApp API from the command line
134
133
  test_files:
135
134
  - features/smog.feature
135
+ - features/step_definitions/command_steps.rb
136
136
  - features/support/setup.rb