arrest 0.0.12 → 0.0.13
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.
- data/.gitignore +4 -3
- data/lib/arrest.rb +1 -0
- data/lib/arrest/attributes/converter.rb +14 -1
- data/lib/arrest/handler.rb +45 -0
- data/lib/arrest/http_source.rb +4 -0
- data/lib/arrest/source.rb +6 -16
- data/lib/arrest/version.rb +1 -1
- data/test/models.rb +4 -0
- data/test/unit.rb +8 -0
- metadata +23 -22
data/.gitignore
CHANGED
data/lib/arrest.rb
CHANGED
@@ -6,6 +6,7 @@ require 'arrest/helper/logger'
|
|
6
6
|
require "arrest/attributes/belongs_to"
|
7
7
|
require "arrest/attributes/has_attributes"
|
8
8
|
require "arrest/attributes/converter"
|
9
|
+
require "arrest/handler"
|
9
10
|
require "arrest/source"
|
10
11
|
require "arrest/helper/filter"
|
11
12
|
require "arrest/helper/child_collection"
|
@@ -25,7 +25,12 @@ module Arrest
|
|
25
25
|
|
26
26
|
def to_hash value
|
27
27
|
return nil unless value != nil
|
28
|
-
|
28
|
+
converter = CONVERTER[@clazz]
|
29
|
+
if converter == nil
|
30
|
+
puts "No converter for: #{@clazz.name}"
|
31
|
+
converter = IdentConv
|
32
|
+
end
|
33
|
+
converter.mk_json value
|
29
34
|
end
|
30
35
|
end
|
31
36
|
|
@@ -84,6 +89,10 @@ module Arrest
|
|
84
89
|
end
|
85
90
|
end
|
86
91
|
|
92
|
+
def mk_json obj
|
93
|
+
obj
|
94
|
+
end
|
95
|
+
|
87
96
|
def target clazz
|
88
97
|
@clazz = clazz
|
89
98
|
CONVERTER[clazz] = self
|
@@ -119,5 +128,9 @@ module Arrest
|
|
119
128
|
def self.parse value
|
120
129
|
Time.parse(value)
|
121
130
|
end
|
131
|
+
|
132
|
+
def self.mk_json time
|
133
|
+
time.strftime "%FT%T%z"
|
134
|
+
end
|
122
135
|
end
|
123
136
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Arrest
|
2
|
+
|
3
|
+
# The classes in this module supply default behaviour
|
4
|
+
# for certain processing steps in the consumttion ot the
|
5
|
+
# rest api
|
6
|
+
module Handlers
|
7
|
+
|
8
|
+
class HeaderDecorator
|
9
|
+
# must return a hash from header name to value
|
10
|
+
def self.headers
|
11
|
+
{}
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
# a converter to transform between the name of the field in
|
17
|
+
# the json object and the name of the field in ruby code.
|
18
|
+
# Default behaviour is that for an underscored name in ruby
|
19
|
+
# a camel cased version in json expected:
|
20
|
+
# ruby -> json
|
21
|
+
# started_at startedAt
|
22
|
+
class KeyConverter
|
23
|
+
class << self
|
24
|
+
def key_from_json name
|
25
|
+
StringUtils.underscore(name.to_s)
|
26
|
+
end
|
27
|
+
|
28
|
+
def key_to_json name
|
29
|
+
StringUtils.classify(name.to_s,false)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class ErrorHandler
|
35
|
+
# a function to convert the body of an http response
|
36
|
+
# to a meaningful error message
|
37
|
+
def self.convert body, statuscode
|
38
|
+
body
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
data/lib/arrest/http_source.rb
CHANGED
@@ -80,6 +80,10 @@ module Arrest
|
|
80
80
|
rest_resource.id= id
|
81
81
|
true
|
82
82
|
else
|
83
|
+
if response.env[:status] != 201
|
84
|
+
err = Arrest::Source.error_handler.convert(response.body, response.env[:status])
|
85
|
+
rest_resource.errors.add(:base, err)
|
86
|
+
end
|
83
87
|
puts "unable to create: #{response.env[:response_headers]} body: #{response.body} "
|
84
88
|
false
|
85
89
|
end
|
data/lib/arrest/source.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require "arrest/handler"
|
1
2
|
module Arrest
|
2
3
|
def self.debug s
|
3
4
|
if Arrest::Source.debug
|
@@ -13,6 +14,7 @@ module Arrest
|
|
13
14
|
attr_reader :header_decorator
|
14
15
|
attr_accessor :json_key_converter
|
15
16
|
attr_accessor :skip_validations
|
17
|
+
attr_accessor :error_handler
|
16
18
|
|
17
19
|
def source=(host=nil)
|
18
20
|
if [nil, ""].include?(host)
|
@@ -38,32 +40,20 @@ module Arrest
|
|
38
40
|
def header_decorator=(hd=nil)
|
39
41
|
Arrest::debug "Setting headerd to #{hd}"
|
40
42
|
if hd == nil
|
41
|
-
@header_decorator =
|
43
|
+
@header_decorator = Handlers::Header_decorator
|
42
44
|
elsif hd.respond_to?(:headers)
|
43
45
|
@header_decorator = hd
|
44
46
|
else
|
45
47
|
raise "Header_decorator must be an object that returns an hash for the method headers"
|
46
48
|
end
|
47
49
|
end
|
48
|
-
|
49
|
-
def headers
|
50
|
-
{}
|
51
|
-
end
|
52
|
-
|
53
|
-
def key_from_json name
|
54
|
-
StringUtils.underscore(name.to_s)
|
55
|
-
end
|
56
|
-
|
57
|
-
def key_to_json name
|
58
|
-
StringUtils.classify(name.to_s,false)
|
59
|
-
end
|
60
|
-
|
61
50
|
end
|
62
51
|
end
|
63
52
|
Source.mod = nil
|
64
|
-
Source.header_decorator =
|
53
|
+
Source.header_decorator = Handlers::HeaderDecorator
|
65
54
|
Source.debug = false
|
66
|
-
Source.json_key_converter =
|
55
|
+
Source.json_key_converter = Handlers::KeyConverter
|
56
|
+
Source.error_handler = Handlers::ErrorHandler
|
67
57
|
Source.skip_validations = false
|
68
58
|
|
69
59
|
end
|
data/lib/arrest/version.rb
CHANGED
data/test/models.rb
CHANGED
data/test/unit.rb
CHANGED
@@ -391,5 +391,13 @@ class FirstTest < Test::Unit::TestCase
|
|
391
391
|
assert_equal "Foo1", v1_reloaded.zoos.open_filter.first.name
|
392
392
|
assert_equal 3, Zoo.all.length
|
393
393
|
end
|
394
|
+
|
395
|
+
def test_time
|
396
|
+
now = Time.now
|
397
|
+
expected = now.strftime "%FT%T%z"
|
398
|
+
t = TimeClass.new(:time => now)
|
399
|
+
assert_equal expected, t.to_jhash[:time], "This is the expected default format"
|
400
|
+
|
401
|
+
end
|
394
402
|
end
|
395
403
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arrest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.13
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-11 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
16
|
-
requirement: &
|
16
|
+
requirement: &13647940 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *13647940
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: faraday
|
27
|
-
requirement: &
|
27
|
+
requirement: &13647020 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - =
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.7.5
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *13647020
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: activemodel
|
38
|
-
requirement: &
|
38
|
+
requirement: &13646240 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '3'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *13646240
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
|
-
requirement: &
|
49
|
+
requirement: &13645500 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.0.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *13645500
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rake
|
60
|
-
requirement: &
|
60
|
+
requirement: &13645080 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *13645080
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rdoc
|
71
|
-
requirement: &
|
71
|
+
requirement: &13644600 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *13644600
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rspec
|
82
|
-
requirement: &
|
82
|
+
requirement: &13644080 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '2'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *13644080
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: rr
|
93
|
-
requirement: &
|
93
|
+
requirement: &13643640 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *13643640
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: simplecov
|
104
|
-
requirement: &
|
104
|
+
requirement: &13643160 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *13643160
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: rack
|
115
|
-
requirement: &
|
115
|
+
requirement: &13642740 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,7 +120,7 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *13642740
|
124
124
|
description: Consume a rest API in a AR like fashion
|
125
125
|
email:
|
126
126
|
- axel.tetzlaff@fortytools.com
|
@@ -140,6 +140,7 @@ files:
|
|
140
140
|
- lib/arrest/attributes/converter.rb
|
141
141
|
- lib/arrest/attributes/has_attributes.rb
|
142
142
|
- lib/arrest/exceptions.rb
|
143
|
+
- lib/arrest/handler.rb
|
143
144
|
- lib/arrest/helper/child_collection.rb
|
144
145
|
- lib/arrest/helper/filter.rb
|
145
146
|
- lib/arrest/helper/has_many_collection.rb
|