arrest 0.0.25 → 0.0.27

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.
@@ -19,9 +19,26 @@ module Arrest
19
19
  end
20
20
 
21
21
  def self.register_resource(clazz)
22
+ @classes ||= []
23
+ @classes << clazz
22
24
  send :define_method, ClassUtils.simple_name(clazz) do ||
23
25
  proxy = clazz.mk_proxy(self)
24
- proxy
26
+ proxy
27
+ end
28
+ end
29
+
30
+ def self.registered_classes
31
+ @classes ||= []
32
+ @classes
33
+ end
34
+
35
+ def delete_all
36
+ self.class.registered_classes.each do |clazz|
37
+ begin
38
+ clazz.delete_all(@context)
39
+ rescue
40
+ puts "couldnt delete #{clazz.name}s"
41
+ end
25
42
  end
26
43
  end
27
44
 
@@ -36,7 +53,6 @@ module Arrest
36
53
  @context_provider = context_provider
37
54
  end
38
55
 
39
-
40
56
  def method_missing(*args, &block)
41
57
  params = [@context_provider.get_context]
42
58
  params += args.drop(1)
@@ -54,8 +70,9 @@ module Arrest
54
70
  extend ActiveModel::Naming
55
71
  include ActiveModel::Validations
56
72
  include ActiveModel::Conversion
73
+ include ActiveModel::Dirty
57
74
  include HasAttributes
58
- attribute :id, String, {:read_only => true}
75
+ attribute :id, String
59
76
 
60
77
  attr_accessor :context
61
78
 
@@ -86,8 +103,16 @@ module Arrest
86
103
  body
87
104
  end
88
105
 
89
- def build(hash)
90
- resource = self.new(@context, hash, true)
106
+ def build(context, hash)
107
+ resource = self.new(context, hash, true)
108
+
109
+ # traverse fields for subresources and fill them in
110
+ self.all_fields.find_all{|f| f.is_a?(HasManySubResourceAttribute)}.each do |attr|
111
+ ids = AbstractResource::source.get_many_other_ids(context, "#{resource.resource_location}/#{attr.sub_resource_field_name}")
112
+ resource.send("#{attr.name}=", body_root(ids))
113
+ end
114
+ resource.clear_dirtiness()
115
+
91
116
  resource
92
117
  end
93
118
 
@@ -96,11 +121,11 @@ module Arrest
96
121
  end
97
122
 
98
123
  def resource_name
99
- if @custom_resource_name
100
- @custom_resource_name
101
- else
102
- StringUtils.plural(self.name.sub(/.*:/,'').downcase)
103
- end
124
+ if @custom_resource_name
125
+ @custom_resource_name
126
+ else
127
+ StringUtils.plural(self.name.sub(/.*:/,'').downcase)
128
+ end
104
129
  end
105
130
 
106
131
  def has_many(*args)
@@ -140,18 +165,19 @@ module Arrest
140
165
  def create_has_many_attribute(sub_resource, ids_field_name, method_name,
141
166
  clazz_name, url_part, foreign_key, read_only)
142
167
  if sub_resource
143
- HasManySubResourceAttribute.new(ids_field_name,
144
- method_name,
145
- clazz_name,
146
- url_part,
147
- foreign_key)
168
+ define_attribute_methods [ids_field_name]
169
+ return HasManySubResourceAttribute.new(ids_field_name,
170
+ method_name,
171
+ clazz_name,
172
+ url_part,
173
+ foreign_key)
148
174
  else
149
- HasManyAttribute.new(ids_field_name,
150
- method_name,
151
- clazz_name,
152
- url_part,
153
- foreign_key,
154
- read_only)
175
+ return HasManyAttribute.new(ids_field_name,
176
+ method_name,
177
+ clazz_name,
178
+ url_part,
179
+ foreign_key,
180
+ read_only)
155
181
  end
156
182
  end
157
183
 
@@ -196,8 +222,21 @@ module Arrest
196
222
  def read_only_attributes(args)
197
223
  args.each_pair do |name, clazz|
198
224
  self.send :attr_accessor,name
199
- add_attribute Attribute.new(name, true, clazz)
225
+ add_attribute(Attribute.new(name, true, clazz))
226
+ end
227
+ end
228
+
229
+ def filters
230
+ @filters
231
+ end
232
+
233
+ def all_filters
234
+ all_filters = @filters
235
+ all_filters ||= []
236
+ if superclass.respond_to?('filters') && superclass.filters
237
+ all_fields += superclass.filters
200
238
  end
239
+ all_filters
201
240
  end
202
241
  end
203
242
 
@@ -210,20 +249,26 @@ module Arrest
210
249
  initialize_has_attributes(hash, from_json)
211
250
  end
212
251
 
252
+ def clear_dirtiness
253
+ @changed_attributes.clear if @changed_attributes
254
+ end
255
+
213
256
  def save
214
257
  if Source.skip_validations || self.valid?
215
258
  req_type = new_record? ? :post : :put
216
-
217
259
  success = !!AbstractResource::source.send(req_type, @context, self)
218
260
 
219
261
  if success
220
262
  # check for sub resources in case of n:m relationships
221
263
  self.class.all_fields.find_all{|f| f.is_a?(HasManySubResourceAttribute)}.each do |attr|
222
- ids = self.send(attr.name) # get ids_field e.g. for team has_many :users get 'self.user_ids'
223
- srifn = attr.sub_resource_field_name
224
- result = !!AbstractResource::source.put_sub_resource(self, srifn, ids)
225
- return false if !result
264
+ if self.send("#{attr.name}_changed?") # check whether this 'subresource' attribute has been touched
265
+ ids = self.send(attr.name) # get ids_field e.g. for team has_many :users get 'self.user_ids'
266
+ srifn = attr.sub_resource_field_name
267
+ result = !!AbstractResource::source.put_sub_resource(self, srifn, ids)
268
+ return false if !result
269
+ end
226
270
  end
271
+ clear_dirtiness() # unset the dirtiness after saving (only used for HasManySubResourceAttributes), see ActiveModel::Dirty
227
272
  return true
228
273
  end
229
274
  end
@@ -1,4 +1,6 @@
1
1
  require "arrest/source"
2
+ require 'active_model'
3
+
2
4
  module Arrest
3
5
 
4
6
 
@@ -15,6 +17,7 @@ module Arrest
15
17
  end
16
18
 
17
19
  module HasAttributes
20
+
18
21
  attr_accessor :attribute_values
19
22
 
20
23
  def initialize_has_attributes(hash, from_json = false, &blk)
@@ -38,8 +41,10 @@ module Arrest
38
41
  end
39
42
  end
40
43
 
44
+ # enables the implicit inclusion of these methods as class methods in the including class
45
+ # (AbstractResource)
41
46
  def self.included(base) # :nodoc:
42
- base.extend HasAttributesMethods
47
+ base.extend HasAttributesClassMethods
43
48
  end
44
49
 
45
50
  def init_from_hash(as_i={}, from_json = false)
@@ -61,6 +66,10 @@ module Arrest
61
66
  end
62
67
  end
63
68
 
69
+ def attributes
70
+ self.attribute_values
71
+ end
72
+
64
73
  def attributes=(attribute_hash = {})
65
74
  fields = self.class.all_fields
66
75
  field_names = fields.map(&:name)
@@ -111,8 +120,7 @@ module Arrest
111
120
  result
112
121
  end
113
122
 
114
- module HasAttributesMethods
115
-
123
+ module HasAttributesClassMethods
116
124
  attr_accessor :fields
117
125
 
118
126
  def initialize
@@ -132,10 +140,15 @@ module Arrest
132
140
 
133
141
  def add_attribute(attribute)
134
142
  @fields ||= []
143
+ # define setter for attribute value
135
144
  if (attribute.is_a?(HasManySubResourceAttribute))
136
145
  send :define_method, "#{attribute.name}=" do |v|
137
146
  raise ArgumentError, 'Argument is not of Array type' unless v.is_a?(Array)
138
147
  Arrest::debug "setter #{self.class.name} #{attribute.name} = #{v}"
148
+
149
+ # inform ActiveModel::Dirty about dirtiness of this attribute
150
+ self.send("#{attribute.name}_will_change!") unless v == self.attribute_values[attribute.name]
151
+
139
152
  self.attribute_values[attribute.name] = v
140
153
  end
141
154
  else
@@ -144,6 +157,8 @@ module Arrest
144
157
  self.attribute_values[attribute.name] = v
145
158
  end
146
159
  end
160
+
161
+ # define getter for attribute value
147
162
  send :define_method, "#{attribute.name}" do
148
163
  Arrest::debug "getter #{self.class.name} #{attribute.name}"
149
164
  self.load_from_stub if @stubbed
@@ -1,4 +1,5 @@
1
1
  module Arrest
2
+
2
3
  class HasManyAttribute < Attribute
3
4
  attr_reader :method_name, :clazz_name, :url_part, :foreign_key
4
5
  def initialize(ids_field_name,
@@ -7,7 +7,7 @@ module Arrest
7
7
  end
8
8
 
9
9
  def build attributes = {}
10
- resolved_class.new @parent, attributes
10
+ resolved_class.new(@parent.context, @parent, attributes)
11
11
  end
12
12
 
13
13
  def method_missing(*args, &block)
@@ -29,7 +29,7 @@ module Arrest
29
29
 
30
30
  def children
31
31
  if @children == nil
32
- @children = resolved_class.all_for @parent
32
+ @children = resolved_class.all_for(@parent)
33
33
  end
34
34
  @children
35
35
  end
@@ -6,7 +6,7 @@ module Arrest
6
6
  class HttpSource
7
7
 
8
8
  attr_reader :base
9
-
9
+
10
10
  def initialize base
11
11
  @base = base
12
12
  end
@@ -93,9 +93,9 @@ module Arrest
93
93
  def put(context, rest_resource)
94
94
  raise "To change an object it must have an id" unless rest_resource.respond_to?(:id) && rest_resource.id != nil
95
95
  hash = rest_resource.to_jhash
96
+ insert_nulls!(rest_resource,hash)
96
97
  hash.delete(:id)
97
98
  hash.delete("id")
98
- insert_nulls!(rest_resource,hash)
99
99
  body = JSON.generate(hash)
100
100
 
101
101
  internal_put(rest_resource, rest_resource.resource_location, body)
@@ -16,10 +16,18 @@ module Arrest
16
16
  end
17
17
  body ||= []
18
18
  body.map do |h|
19
- self.build h
19
+ self.build(context, h)
20
20
  end
21
21
  end
22
22
 
23
+ def first(context, filter={})
24
+ all(context,filter).first
25
+ end
26
+
27
+ def end(context, filter={})
28
+ all(context,filter).last
29
+ end
30
+
23
31
  def all(context, filter={})
24
32
  begin
25
33
  body = body_root(source().get_many(context, self.resource_path, filter))
@@ -29,9 +37,7 @@ module Arrest
29
37
  end
30
38
  body ||= []
31
39
  body.map do |h|
32
- obj = self.build h
33
- obj.context = context
34
- obj
40
+ self.build(context, h)
35
41
  end
36
42
  end
37
43
 
@@ -42,9 +48,7 @@ module Arrest
42
48
  Arrest::logger.info "DocumentNotFoundError for #{self.resource_path}"
43
49
  raise Errors::DocumentNotFoundError.new
44
50
  end
45
- res = self.build(body)
46
- res.context = context
47
- res
51
+ self.build(context, body)
48
52
  end
49
53
 
50
54
  def find(context, id)
@@ -58,12 +62,7 @@ module Arrest
58
62
  Arrest::logger.info "DocumentNotFoundError for #{self.resource_path}/#{id}"
59
63
  raise Errors::DocumentNotFoundError.new
60
64
  end
61
- resource = self.build body.merge({:id => id})
62
- # traverse fields for subresources and fill them in
63
- self.all_fields.find_all{|f| f.is_a?(HasManySubResourceAttribute)}.each do |attr|
64
- ids = AbstractResource::source.get_many_other_ids(context, "#{resource.resource_location}/#{attr.sub_resource_field_name}")
65
- resource.send("#{attr.name}=", body_root(ids))
66
- end
65
+ resource = self.build(context, body.merge({:id => id}))
67
66
  resource
68
67
  end
69
68
 
@@ -90,18 +89,6 @@ module Arrest
90
89
  end
91
90
  end
92
91
 
93
- def filters
94
- @filters
95
- end
96
-
97
- def all_filters
98
- all_filters = @filters
99
- all_filters ||= []
100
- if superclass.respond_to?('filters') && superclass.filters
101
- all_fields += superclass.filters
102
- end
103
- all_filters
104
- end
105
92
 
106
93
  def scope name, &block
107
94
  super(name)
@@ -112,7 +99,7 @@ module Arrest
112
99
  else
113
100
  send :define_singleton_method, name do |context|
114
101
  body_root(source().get_many(context, self.scoped_path(name))).map do |h|
115
- self.build(h)
102
+ self.build(context, h)
116
103
  end
117
104
  end
118
105
  end
@@ -1,3 +1,3 @@
1
1
  module Arrest
2
- VERSION = "0.0.25"
2
+ VERSION = "0.0.27"
3
3
  end
@@ -64,5 +64,47 @@ class HasAttributesTest < Test::Unit::TestCase
64
64
  assert_equal 'foo42', h[:id]
65
65
  end
66
66
 
67
+ class GotMe < Arrest::RootResource
68
+ end
69
+ # for dirty tracking of attributes we need class to be a resource (which includes ActiveModel::Dirty)
70
+ class ItHasResource < Arrest::RootResource
71
+ attribute :name, String
72
+ has_many :got_mes, :sub_resource => true
73
+ end
74
+
75
+ def test_dirty_attribute
76
+ Arrest::Source.source = nil
77
+ Arrest::Source.skip_validations = false
78
+
79
+ ih = ItHasResource.new({:name => "Bla"})
80
+ ih.save
81
+ assert !ih.got_me_ids_changed?
82
+ assert !ih.changed?
83
+
84
+ ih.got_me_ids = ["huhu"]
85
+ assert ih.got_me_ids_changed?
86
+ assert ih.changed?
87
+ ih.save
88
+
89
+ assert !ih.got_me_ids_changed?
90
+ assert !ih.changed?
91
+
92
+ ih.got_me_ids = ["huhu"]
93
+ assert !ih.got_me_ids_changed?
94
+ assert !ih.changed?
95
+ end
96
+
97
+ def test_dirty_with_reload
98
+ Arrest::Source.source = nil
99
+ Arrest::Source.skip_validations = false
100
+ @scope = Arrest::ScopedRoot.new
101
+
102
+ ih = @scope.ItHasResource.new({:name => "Bla", :got_me_ids => ["BistDuEinRuede?"]})
103
+ ih.save
104
+
105
+ ih.reload
106
+ assert_equal "Bla", ih.name
107
+ assert_equal ["BistDuEinRuede?"], ih.got_me_ids
108
+ end
67
109
  end
68
110
 
data/test/unit.rb CHANGED
@@ -27,7 +27,7 @@ class FirstTest < Test::Unit::TestCase
27
27
  def test_create
28
28
  zoo_count_before = @scope.Zoo.all.length
29
29
  new_zoo = @scope.Zoo.new({:name => "Foo"})
30
- assert_equal "Foo", new_zoo.name
30
+ assert_equal "Foo", new_zoo.name
31
31
  assert new_zoo.save, new_zoo.errors.full_messages.to_s
32
32
  zoo_count_after = @scope.Zoo.all.length
33
33
  assert_not_nil new_zoo.id
@@ -636,7 +636,7 @@ class FirstTest < Test::Unit::TestCase
636
636
  assert_equal zoo1.name, zoo2.name
637
637
  end
638
638
 
639
- def test_unset_porperty
639
+ def test_unset_property
640
640
  # just taking a class that has a not mandatory attribute
641
641
  zo = @scope.ZooOwner.new({ :name => 'meeeee' })
642
642
  assert zo.save
@@ -647,4 +647,3 @@ class FirstTest < Test::Unit::TestCase
647
647
  assert_nil zo.name, "Name should be unset"
648
648
  end
649
649
  end
650
-
metadata CHANGED
@@ -1,133 +1,176 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: arrest
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.25
3
+ version: !ruby/object:Gem::Version
4
+ hash: 41
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 27
10
+ version: 0.0.27
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Axel Tetzlaff
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2012-02-14 00:00:00.000000000Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2012-02-16 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: json
16
- requirement: &2165743640 !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
17
24
  none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
22
32
  type: :runtime
23
- prerelease: false
24
- version_requirements: *2165743640
25
- - !ruby/object:Gem::Dependency
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
26
35
  name: faraday
27
- requirement: &2165742880 !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
28
38
  none: false
29
- requirements:
30
- - - =
31
- - !ruby/object:Gem::Version
39
+ requirements:
40
+ - - "="
41
+ - !ruby/object:Gem::Version
42
+ hash: 9
43
+ segments:
44
+ - 0
45
+ - 7
46
+ - 5
32
47
  version: 0.7.5
33
48
  type: :runtime
34
- prerelease: false
35
- version_requirements: *2165742880
36
- - !ruby/object:Gem::Dependency
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
37
51
  name: activemodel
38
- requirement: &2165742160 !ruby/object:Gem::Requirement
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
39
54
  none: false
40
- requirements:
55
+ requirements:
41
56
  - - ~>
42
- - !ruby/object:Gem::Version
43
- version: '3'
57
+ - !ruby/object:Gem::Version
58
+ hash: 5
59
+ segments:
60
+ - 3
61
+ version: "3"
44
62
  type: :runtime
45
- prerelease: false
46
- version_requirements: *2165742160
47
- - !ruby/object:Gem::Dependency
63
+ version_requirements: *id003
64
+ - !ruby/object:Gem::Dependency
48
65
  name: bundler
49
- requirement: &2165741420 !ruby/object:Gem::Requirement
66
+ prerelease: false
67
+ requirement: &id004 !ruby/object:Gem::Requirement
50
68
  none: false
51
- requirements:
52
- - - ! '>='
53
- - !ruby/object:Gem::Version
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: 23
73
+ segments:
74
+ - 1
75
+ - 0
76
+ - 0
54
77
  version: 1.0.0
55
78
  type: :development
56
- prerelease: false
57
- version_requirements: *2165741420
58
- - !ruby/object:Gem::Dependency
79
+ version_requirements: *id004
80
+ - !ruby/object:Gem::Dependency
59
81
  name: rake
60
- requirement: &2165740740 !ruby/object:Gem::Requirement
82
+ prerelease: false
83
+ requirement: &id005 !ruby/object:Gem::Requirement
61
84
  none: false
62
- requirements:
63
- - - ! '>='
64
- - !ruby/object:Gem::Version
65
- version: '0'
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ hash: 3
89
+ segments:
90
+ - 0
91
+ version: "0"
66
92
  type: :development
67
- prerelease: false
68
- version_requirements: *2165740740
69
- - !ruby/object:Gem::Dependency
93
+ version_requirements: *id005
94
+ - !ruby/object:Gem::Dependency
70
95
  name: rdoc
71
- requirement: &2165739820 !ruby/object:Gem::Requirement
96
+ prerelease: false
97
+ requirement: &id006 !ruby/object:Gem::Requirement
72
98
  none: false
73
- requirements:
74
- - - ! '>='
75
- - !ruby/object:Gem::Version
76
- version: '0'
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ hash: 3
103
+ segments:
104
+ - 0
105
+ version: "0"
77
106
  type: :development
78
- prerelease: false
79
- version_requirements: *2165739820
80
- - !ruby/object:Gem::Dependency
107
+ version_requirements: *id006
108
+ - !ruby/object:Gem::Dependency
81
109
  name: rspec
82
- requirement: &2165737740 !ruby/object:Gem::Requirement
110
+ prerelease: false
111
+ requirement: &id007 !ruby/object:Gem::Requirement
83
112
  none: false
84
- requirements:
113
+ requirements:
85
114
  - - ~>
86
- - !ruby/object:Gem::Version
87
- version: '2'
115
+ - !ruby/object:Gem::Version
116
+ hash: 7
117
+ segments:
118
+ - 2
119
+ version: "2"
88
120
  type: :development
89
- prerelease: false
90
- version_requirements: *2165737740
91
- - !ruby/object:Gem::Dependency
121
+ version_requirements: *id007
122
+ - !ruby/object:Gem::Dependency
92
123
  name: rr
93
- requirement: &2165725320 !ruby/object:Gem::Requirement
124
+ prerelease: false
125
+ requirement: &id008 !ruby/object:Gem::Requirement
94
126
  none: false
95
- requirements:
96
- - - ! '>='
97
- - !ruby/object:Gem::Version
98
- version: '0'
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ hash: 3
131
+ segments:
132
+ - 0
133
+ version: "0"
99
134
  type: :development
100
- prerelease: false
101
- version_requirements: *2165725320
102
- - !ruby/object:Gem::Dependency
135
+ version_requirements: *id008
136
+ - !ruby/object:Gem::Dependency
103
137
  name: simplecov
104
- requirement: &2165723960 !ruby/object:Gem::Requirement
138
+ prerelease: false
139
+ requirement: &id009 !ruby/object:Gem::Requirement
105
140
  none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ hash: 3
145
+ segments:
146
+ - 0
147
+ version: "0"
110
148
  type: :development
111
- prerelease: false
112
- version_requirements: *2165723960
113
- - !ruby/object:Gem::Dependency
149
+ version_requirements: *id009
150
+ - !ruby/object:Gem::Dependency
114
151
  name: rack
115
- requirement: &2165723360 !ruby/object:Gem::Requirement
152
+ prerelease: false
153
+ requirement: &id010 !ruby/object:Gem::Requirement
116
154
  none: false
117
- requirements:
118
- - - ! '>='
119
- - !ruby/object:Gem::Version
120
- version: '0'
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ hash: 3
159
+ segments:
160
+ - 0
161
+ version: "0"
121
162
  type: :development
122
- prerelease: false
123
- version_requirements: *2165723360
163
+ version_requirements: *id010
124
164
  description: Consume a rest API in a AR like fashion
125
- email:
165
+ email:
126
166
  - axel.tetzlaff@fortytools.com
127
167
  executables: []
168
+
128
169
  extensions: []
170
+
129
171
  extra_rdoc_files: []
130
- files:
172
+
173
+ files:
131
174
  - .gitignore
132
175
  - .rspec
133
176
  - Gemfile
@@ -169,31 +212,40 @@ files:
169
212
  - test/nested_resource.rb
170
213
  - test/unit.rb
171
214
  - test/validations.rb
172
- homepage: ''
215
+ homepage: ""
173
216
  licenses: []
217
+
174
218
  post_install_message:
175
219
  rdoc_options: []
176
- require_paths:
220
+
221
+ require_paths:
177
222
  - lib
178
- required_ruby_version: !ruby/object:Gem::Requirement
223
+ required_ruby_version: !ruby/object:Gem::Requirement
179
224
  none: false
180
- requirements:
181
- - - ! '>='
182
- - !ruby/object:Gem::Version
183
- version: '0'
184
- required_rubygems_version: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - ">="
227
+ - !ruby/object:Gem::Version
228
+ hash: 3
229
+ segments:
230
+ - 0
231
+ version: "0"
232
+ required_rubygems_version: !ruby/object:Gem::Requirement
185
233
  none: false
186
- requirements:
187
- - - ! '>='
188
- - !ruby/object:Gem::Version
189
- version: '0'
234
+ requirements:
235
+ - - ">="
236
+ - !ruby/object:Gem::Version
237
+ hash: 3
238
+ segments:
239
+ - 0
240
+ version: "0"
190
241
  requirements: []
242
+
191
243
  rubyforge_project: arrest
192
244
  rubygems_version: 1.8.10
193
245
  signing_key:
194
246
  specification_version: 3
195
247
  summary: Another ruby rest client
196
- test_files:
248
+ test_files:
197
249
  - spec/arrest_spec.rb
198
250
  - spec/spec_helper.rb
199
251
  - spec/support/models/user.rb