restpack_service 0.0.3 → 0.0.5

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 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