arrest 0.0.11 → 0.0.12

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/lib/arrest.rb CHANGED
@@ -15,10 +15,6 @@ require "arrest/http_source"
15
15
  require "arrest/mem_source"
16
16
  require "arrest/source"
17
17
  require "arrest/nested_resource"
18
- require "arrest/validations/validator"
19
- require "arrest/validations/presence_of"
20
- require "arrest/validations/inclusion_of"
21
- require "arrest/validations/validatable"
22
18
  require "arrest/abstract_resource"
23
19
  require "arrest/root_resource"
24
20
  require "arrest/rest_child"
@@ -8,12 +8,11 @@ Scope = Struct.new(:name, :block)
8
8
  module Arrest
9
9
  class AbstractResource
10
10
  extend ActiveModel::Naming
11
+ include ActiveModel::Validations
12
+ include ActiveModel::Conversion
11
13
  include HasAttributes
12
- include Validatable
13
14
  attribute :id, String
14
15
 
15
- attr_accessor :errors
16
-
17
16
  class << self
18
17
  attr_reader :scopes
19
18
 
@@ -129,8 +128,7 @@ module Arrest
129
128
  end
130
129
 
131
130
  def save
132
- self.errors = self.validate
133
- if self.errors.empty?
131
+ if Source.skip_validations || self.valid?
134
132
  verb = new_record? ? :post : :put
135
133
  !!AbstractResource::source.send(verb, self)
136
134
  else
@@ -1,4 +1,7 @@
1
1
  module Arrest
2
+ unless File::directory?( "log" )
3
+ Dir.mkdir("log")
4
+ end
2
5
  @@logger = Logger.new('log/arrest.log')
3
6
 
4
7
  def self.logger
@@ -34,6 +34,10 @@ module Arrest
34
34
  end
35
35
 
36
36
  def find id
37
+ if id == nil || "" == id
38
+ Arrest::logger.info "DocumentNotFoundError: no id given"
39
+ raise Errors::DocumentNotFoundError.new
40
+ end
37
41
  r = source().get_one "#{self.resource_path}/#{id}"
38
42
  body = body_root(r)
39
43
  if body == nil || body.empty?
data/lib/arrest/source.rb CHANGED
@@ -5,20 +5,21 @@ module Arrest
5
5
  end
6
6
  end
7
7
 
8
- class Source
8
+ class Source
9
9
  class << self
10
10
  attr_accessor :debug
11
11
  attr_reader :source
12
12
  attr_reader :mod
13
13
  attr_reader :header_decorator
14
14
  attr_accessor :json_key_converter
15
+ attr_accessor :skip_validations
15
16
 
16
17
  def source=(host=nil)
17
- if host == nil || host.blank?
18
+ if [nil, ""].include?(host)
18
19
  @source = MemSource.new
19
20
  Arrest::logger.info "Setting Arrest host empty in-memory-store"
20
21
  else
21
- @source = HttpSource.new host
22
+ @source = HttpSource.new host
22
23
  Arrest::logger.info "Setting Arrest host to #{host}"
23
24
  end
24
25
  @source
@@ -63,5 +64,6 @@ module Arrest
63
64
  Source.header_decorator = Source
64
65
  Source.debug = false
65
66
  Source.json_key_converter = Source
67
+ Source.skip_validations = false
66
68
 
67
69
  end
@@ -1,3 +1,3 @@
1
1
  module Arrest
2
- VERSION = "0.0.11"
2
+ VERSION = "0.0.12"
3
3
  end
data/test/unit.rb CHANGED
@@ -54,7 +54,7 @@ class FirstTest < Test::Unit::TestCase
54
54
  new_zoo = Zoo.new(p)
55
55
  assert_equal false, new_zoo.save, "zoo without name shouldnt be persistable"
56
56
  assert_equal zoo_count_before, Zoo.all.length
57
- assert_equal :name, new_zoo.errors.first.attribute
57
+ assert_equal :name, new_zoo.errors.first[0]
58
58
  assert_nil new_zoo.id
59
59
 
60
60
  new_zoo.name = "Foo"
data/test/validations.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  require 'test/unit'
2
2
  require 'arrest'
3
+ require 'active_model'
3
4
 
4
- class PresenceOfClass
5
- include Arrest::Validatable
5
+ class PresenceOfClass < Arrest::RootResource
6
6
  attr_accessor :foo
7
7
 
8
8
  validates_presence_of :foo
@@ -13,7 +13,7 @@ class PresenceOfClass
13
13
  end
14
14
 
15
15
  class PresenceOfTwo
16
- include Arrest::Validatable
16
+ include ActiveModel::Validations
17
17
  attr_accessor :foo, :bar
18
18
 
19
19
  validates_presence_of :foo
@@ -37,10 +37,10 @@ class InheritedPresence < PresenceOfClass
37
37
  end
38
38
 
39
39
  class CustomVal
40
- include Arrest::Validatable
40
+ include ActiveModel::Validations
41
41
  attr_accessor :foo
42
42
 
43
- validates :is_foo
43
+ validate :is_foo
44
44
 
45
45
  def initialize foo=nil
46
46
  @foo = foo
@@ -48,19 +48,30 @@ class CustomVal
48
48
 
49
49
  def is_foo
50
50
  if self.foo != "Foo"
51
- [Arrest::Validations::ValidationError.new(:foo, "is no foo")]
52
- else
53
- []
51
+ errors.add(:foo, "is not foo")
54
52
  end
55
53
  end
56
54
  end
57
55
 
56
+ class InclusionOfClass
57
+ include ActiveModel::Validations
58
+
59
+ attr_accessor :foo
60
+
61
+ validates :foo, :inclusion => { :in => ["Foo", "Bar"] }
62
+
63
+ def initialize foo
64
+ @foo = foo
65
+ end
66
+ end
67
+
58
68
  class ValidationsTest < Test::Unit::TestCase
59
69
 
60
70
 
61
71
  def setup
62
72
  Arrest::Source.source = nil
63
73
  #Arrest::Source.debug = true
74
+ Arrest::Source.skip_validations = false
64
75
  end
65
76
 
66
77
  def test_prsnc
@@ -71,6 +82,15 @@ class ValidationsTest < Test::Unit::TestCase
71
82
  assert o1.valid?, "Foo is present and valid!"
72
83
  end
73
84
 
85
+ def test_skip_validations
86
+ Arrest::Source.skip_validations = true
87
+ o0 = PresenceOfClass.new nil
88
+ assert o0.valid? == false, "Foo is '#{o0.foo}' -> not present and thus not valid!"
89
+ assert o0.save, "When skipping validations, in-mem-storage should work"
90
+
91
+ Arrest::Source.skip_validations = false
92
+ end
93
+
74
94
  def test_presence_of_two
75
95
  o = PresenceOfTwo.new
76
96
  assert o.valid? == false, "Both missing, must not be valid"
@@ -122,17 +142,6 @@ class ValidationsTest < Test::Unit::TestCase
122
142
 
123
143
  # ================ inclusion_of ======
124
144
 
125
- class InclusionOfClass
126
- include Arrest::Validatable
127
-
128
- attr_accessor :foo
129
-
130
- validates_inclusion_of :foo, :in => ["Foo", "Bar"]
131
-
132
- def initialize foo
133
- @foo = foo
134
- end
135
- end
136
145
 
137
146
  def test_inclusion_of
138
147
  invalids = [nil, '', "Baz", "foo", 3, true]
@@ -142,7 +151,6 @@ class ValidationsTest < Test::Unit::TestCase
142
151
  invalids.each do |iv|
143
152
  o = InclusionOfClass.new(iv)
144
153
  assert o.valid? == false, "#{iv} is not valid"
145
- assert o.validate.map(&:attribute).include?(:foo), ":foo should be in list of invalid attributes when created with #{iv}"
146
154
  end
147
155
 
148
156
  valids.each do |v|
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.11
4
+ version: 0.0.12
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-09 00:00:00.000000000Z
12
+ date: 2012-01-10 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
- requirement: &24668020 !ruby/object:Gem::Requirement
16
+ requirement: &15777380 !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: *24668020
24
+ version_requirements: *15777380
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: faraday
27
- requirement: &24666840 !ruby/object:Gem::Requirement
27
+ requirement: &15776240 !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: *24666840
35
+ version_requirements: *15776240
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: activemodel
38
- requirement: &24666120 !ruby/object:Gem::Requirement
38
+ requirement: &15775480 !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: *24666120
46
+ version_requirements: *15775480
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
- requirement: &24640360 !ruby/object:Gem::Requirement
49
+ requirement: &15749340 !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: *24640360
57
+ version_requirements: *15749340
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &24639500 !ruby/object:Gem::Requirement
60
+ requirement: &15748420 !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: *24639500
68
+ version_requirements: *15748420
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rdoc
71
- requirement: &24639020 !ruby/object:Gem::Requirement
71
+ requirement: &15747940 !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: *24639020
79
+ version_requirements: *15747940
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rspec
82
- requirement: &24638440 !ruby/object:Gem::Requirement
82
+ requirement: &15747400 !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: *24638440
90
+ version_requirements: *15747400
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rr
93
- requirement: &24637760 !ruby/object:Gem::Requirement
93
+ requirement: &15746680 !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: *24637760
101
+ version_requirements: *15746680
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: simplecov
104
- requirement: &24637300 !ruby/object:Gem::Requirement
104
+ requirement: &15746220 !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: *24637300
112
+ version_requirements: *15746220
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: rack
115
- requirement: &24636880 !ruby/object:Gem::Requirement
115
+ requirement: &15745800 !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: *24636880
123
+ version_requirements: *15745800
124
124
  description: Consume a rest API in a AR like fashion
125
125
  email:
126
126
  - axel.tetzlaff@fortytools.com
@@ -151,10 +151,6 @@ files:
151
151
  - lib/arrest/root_resource.rb
152
152
  - lib/arrest/source.rb
153
153
  - lib/arrest/string_utils.rb
154
- - lib/arrest/validations/inclusion_of.rb
155
- - lib/arrest/validations/presence_of.rb
156
- - lib/arrest/validations/validatable.rb
157
- - lib/arrest/validations/validator.rb
158
154
  - lib/arrest/version.rb
159
155
  - spec/arrest_spec.rb
160
156
  - spec/spec_helper.rb
@@ -1,25 +0,0 @@
1
- module Arrest
2
- module Validations
3
- class InclusionOf < Validator
4
-
5
- def initialize attribute, hash
6
- super attribute
7
- @hash = hash
8
- end
9
-
10
- def validate input
11
- errors = []
12
- if !input.respond_to?(@attribute)
13
- errors << ValidationError.new(@attribute, "not_responding")
14
- else
15
- val = input.send(@attribute)
16
- unless @hash[:in] != nil && @hash[:in].include?(val)
17
- errors << ValidationError.new(@attribute,"not_included")
18
- end
19
- end
20
- return errors
21
- end
22
- end
23
- end
24
- end
25
-
@@ -1,18 +0,0 @@
1
- module Arrest
2
- module Validations
3
- class PresenceOf < Validator
4
- def validate input
5
- errors = []
6
- if !input.respond_to?(@attribute)
7
- errors << ValidationError.new(@attribute, "not_responding")
8
- else
9
- val = input.send(@attribute)
10
- if val == nil || val == ''
11
- errors << ValidationError.new(@attribute,"not_present")
12
- end
13
- end
14
- return errors
15
- end
16
- end
17
- end
18
- end
@@ -1,69 +0,0 @@
1
- module Arrest
2
- module Validations
3
- class MethodValidator
4
- def initialize method = nil, &blk
5
- @method = method
6
- end
7
-
8
- def validate input
9
- input.send(@method)
10
- end
11
- end
12
- end
13
-
14
- module Validatable
15
- def self.included(base) # :nodoc:
16
- base.extend ValidatableMethods
17
- end
18
-
19
- module ValidatableMethods
20
- def validates_presence_of attribute
21
- add_validator Validations::PresenceOf.new attribute
22
- end
23
-
24
- def validates method_name
25
- add_validator Validations::MethodValidator.new method_name
26
- end
27
-
28
- def validates_inclusion_of attribute, hash = {}
29
- add_validator Validations::InclusionOf.new attribute, hash
30
- end
31
-
32
- def add_validator v
33
- if @validations == nil
34
- @validations = []
35
- end
36
- @validations << v
37
- end
38
-
39
- def validations
40
- if self.superclass.respond_to? :validations
41
- super_v = self.superclass.validations
42
- else
43
- super_v = []
44
- end
45
- if @validations == nil
46
- @validations = []
47
- end
48
-
49
- @validations + super_v
50
- end
51
- end
52
-
53
- # --------- instance methods ---------
54
- def valid?
55
- validate.empty?
56
- end
57
-
58
-
59
- def validate
60
- vs = self.class.validations
61
- return [] if vs == nil
62
- errors = []
63
- vs.each do |v|
64
- errors += v.validate self
65
- end
66
- errors
67
- end
68
- end
69
- end
@@ -1,27 +0,0 @@
1
- module Arrest
2
- module Validations
3
- class ValidationError
4
- attr_accessor :attribute, :message
5
-
6
- def initialize attribute, message
7
- @attribute = attribute
8
- @message = message
9
- end
10
-
11
- def translate
12
- "#{self.attribute} - #{self.message}"
13
- end
14
- end
15
-
16
- class Validator
17
- def initialize attribute
18
- @attribute = attribute
19
- end
20
-
21
- def validate input
22
- return []
23
- end
24
-
25
- end
26
- end
27
- end