restpack_service 0.0.3 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fccc635463c097450ec18bd8b93f28bd9aa770e7
4
- data.tar.gz: 7603f27dd19425b7407b891223d0d74810a9f0e6
3
+ metadata.gz: accd5beb595134902b3ff0449ae03e09934b444e
4
+ data.tar.gz: 50f99564d3de69c02ba4d09ed10c8cf71e8e6e1b
5
5
  SHA512:
6
- metadata.gz: 4af0651557c054af80f29c0498f9a244f5c934c8891bb1d4daa9c4c17156a5aa0afd5f32261c012101ebd1388094f34371ad63dbb41c1747372e2e41bac0801c
7
- data.tar.gz: 399c04a95dc434872016d2469d943c0eb94d660916638a24a05a8695eb7da958f27c3c69f9ccc3e6e15e6ffd9c69e91dbd48fc99f37ac8d59b90fc309278ebc2
6
+ metadata.gz: aece65215619a601282861a331fbbd3a6cffbebf15d3ef92fd2f31ae56b7c33f6ced6589a00137d8a933a35b2f6471343e54560da045e50a1544744b6824a4ed
7
+ data.tar.gz: c3c81a29c029dab386958edd88752032d19e50660146c84ca0ad3d34d0cfa948b2262862628047079d1523441a20d9b1b006fb1f0e4f2416e3b7572c83d0b737
data/Rakefile CHANGED
@@ -16,10 +16,10 @@ end
16
16
 
17
17
 
18
18
  task :gem do
19
- ["gem:bump", "gem:tag", "gem:build", "gem:push"].each do |task|
20
- Rake::Task[task].reenable
21
- Rake::Task[task].invoke
22
- end
19
+ Rake::Task["gem:bump"].invoke
20
+ Rake::Task["gem:tag"].invoke
21
+ Rake::Task["gem:build"].invoke
22
+ Rake::Task["gem:push"].invoke
23
23
  end
24
24
 
25
25
  namespace :gem do
@@ -1,4 +1,5 @@
1
1
  require "mutations"
2
+ require "yajl"
2
3
 
3
4
  require "restpack_service/version"
4
5
  require "restpack_service/error"
@@ -3,15 +3,62 @@ module RestPack
3
3
  attr_accessor :result, :errors, :status
4
4
 
5
5
  def initialize
6
- @errors = []
6
+ @result = {}
7
+ @errors = {}
7
8
  end
8
9
 
9
10
  def success?
10
- @errors.empty? and @status == :success
11
+ @errors.empty? and @status == :ok
11
12
  end
12
13
 
13
- def field_errors(key)
14
- @errors.select { |error| error.key.to_sym == key.to_sym }
14
+ def code
15
+ Status.from_status(status)
16
+ end
17
+
18
+ def add_error(field, message)
19
+ @errors[field] ||= []
20
+ @errors[field] << message
21
+ end
22
+
23
+ def self.from_rest(rest_response)
24
+ response = new
25
+ response.status = Status.from_code(rest_response.code)
26
+ response.result = Yajl::Parser.parse(rest_response.body, :symbolize_keys => true)
27
+
28
+ if response.result[:errors]
29
+ response.result[:errors].each do |field, errors|
30
+ response.errors[field.to_sym] = errors
31
+ end
32
+
33
+ response.result.delete :errors
34
+ end
35
+
36
+ response
37
+ end
38
+
39
+ class Status
40
+ @@map = {
41
+ 200 => :ok,
42
+ 404 => :not_found,
43
+ 422 => :unprocessable_entity,
44
+ 500 => :internal_service_error
45
+ }
46
+
47
+ def self.from_code(code)
48
+ if @@map.has_key?(code)
49
+ @@map[code]
50
+ else
51
+ raise "Invalid Status Code: #{code}"
52
+ end
53
+ end
54
+
55
+ def self.from_status(status)
56
+ if @@map.has_value?(status)
57
+ @@map.key(status)
58
+ else
59
+ raise "Invalid Status: #{status}"
60
+ end
61
+ end
15
62
  end
16
63
  end
17
64
  end
@@ -11,19 +11,21 @@ module RestPack
11
11
 
12
12
  if mutation.errors
13
13
  mutation.errors.message.each do |error|
14
- @response.errors << Error.new(error[0], error[1].gsub(error[0].capitalize, ''))
14
+ @response.add_error(error[0], error[1].gsub(error[0].capitalize, ''))
15
15
  end
16
16
 
17
17
  @response.status ||= :unprocessable_entity
18
18
  else
19
- @response.status ||= :success
19
+ @response.status ||= :ok
20
20
  end
21
21
 
22
- if @response.status == :success
23
- @response.result = mutation.result
22
+ if @response.status == :ok
23
+ @response.result = mutation.result if mutation.result
24
24
  end
25
- rescue
26
- @response.errors << Error.new(:base, 'Service Error')
25
+ rescue Exception => e
26
+ p e.message #TODO: GJ: logging
27
+
28
+ @response.add_error(:base, 'Service Error')
27
29
  @response.status = :internal_service_error
28
30
  end
29
31
 
@@ -1,3 +1,3 @@
1
1
  module RestpackService
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -19,9 +19,10 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_dependency "mutations", "~> 0.6.0"
22
+ spec.add_dependency "yajl-ruby", "~> 1.1.0"
22
23
 
23
24
  spec.add_development_dependency "bundler", "~> 1.3"
24
25
  spec.add_development_dependency "rake"
25
26
  spec.add_development_dependency "rspec"
26
- spec.add_development_dependency "bump", "~> 0.4"
27
+ spec.add_development_dependency "bump"
27
28
  end
@@ -2,4 +2,48 @@ require 'spec_helper'
2
2
 
3
3
  describe RestPack::Response do
4
4
  pending "Write some specs"
5
+
6
+ describe "#from_rest" do
7
+ it "parses a successful response" do
8
+ response = RestPack::Response.from_rest(
9
+ double(code: 200, body: '{ "key": "value" }')
10
+ )
11
+
12
+ response.status.should == :ok
13
+ response.code.should == 200
14
+ response.success?.should == true
15
+ response.result.should == { key: "value" }
16
+ end
17
+
18
+ it "extracts errors from response body" do
19
+ response = RestPack::Response.from_rest(
20
+ double(code: 200, body: '{ "key": "value", "errors": {
21
+ "name": ["error 1", "error 2"]
22
+ } }')
23
+ )
24
+
25
+ response.success?.should == false
26
+ response.result.should == { key: "value" }
27
+ response.errors.should == { name: ["error 1", "error 2"] }
28
+ end
29
+
30
+ end
31
+
32
+ describe RestPack::Response::Status do
33
+ describe "#from_code" do
34
+ context "valid status" do
35
+ it "maps a code to a status" do
36
+ RestPack::Response::Status.from_code(200).should == :ok
37
+ end
38
+ end
39
+
40
+ context "invalid status" do
41
+ it "raises an exception" do
42
+ expect {
43
+ RestPack::Response::Status.from_code(999)
44
+ }.to raise_exception("Invalid Status Code: 999")
45
+ end
46
+ end
47
+ end
48
+ end
5
49
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: restpack_service
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gavin Joyce
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-31 00:00:00.000000000 Z
11
+ date: 2013-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mutations
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.6.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: yajl-ruby
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.1.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 1.1.0
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -70,16 +84,16 @@ dependencies:
70
84
  name: bump
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - ~>
87
+ - - '>='
74
88
  - !ruby/object:Gem::Version
75
- version: '0.4'
89
+ version: '0'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - ~>
94
+ - - '>='
81
95
  - !ruby/object:Gem::Version
82
- version: '0.4'
96
+ version: '0'
83
97
  description: RestPack service base
84
98
  email:
85
99
  - gavinjoyce@gmail.com