amfetamine 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,25 @@
1
+ class Child < Amfetamine::Base
2
+ @@children = [] # unrelated to relationships!
3
+ attr_accessor :title, :description, :dummy_id
4
+
5
+ belongs_to_resource :dummy
6
+
7
+ def initialize(args={})
8
+ @@children << self
9
+ super(args)
10
+ end
11
+
12
+ def self.children
13
+ @@children ||= []
14
+ end
15
+
16
+
17
+ def to_hash
18
+ {
19
+ :title => title,
20
+ :description => description,
21
+ :dummy_id => dummy_id,
22
+ :id => id
23
+ }
24
+ end
25
+ end
@@ -0,0 +1,4 @@
1
+ Amfetamine::Config.configure do |config|
2
+ config.memcached_instance = 'localhost:11211'
3
+ config.rest_client = DummyRestClient
4
+ end
@@ -0,0 +1,48 @@
1
+ class Dummy < Amfetamine::Base
2
+ @@children = [] # unrelated to relationships!
3
+
4
+ amfetamine_attributes :title, :description
5
+ validates_presence_of :title, :description
6
+
7
+ has_many_resources :children
8
+
9
+ before_create :action_before_create
10
+ after_create :action_after_create
11
+
12
+ before_save :action_before_save
13
+ after_save :action_after_save
14
+
15
+ def to_hash
16
+ {
17
+ :title => title,
18
+ :description => description,
19
+ :id => id
20
+ }
21
+ end
22
+
23
+
24
+ # Needed for proper ID tracking
25
+ def initialize(args={})
26
+ @@children << self
27
+ super(args)
28
+ end
29
+
30
+ def self.children
31
+ @@children ||= []
32
+ end
33
+
34
+ def action_before_create
35
+ Amfetamine.logger.warn "Yo, BEFORE CREATE called"
36
+ end
37
+
38
+ def action_after_create
39
+ Amfetamine.logger.warn "Yo, AFTER CREATE called"
40
+ end
41
+
42
+ def action_before_save
43
+ end
44
+
45
+ def action_after_save
46
+ end
47
+
48
+ end
@@ -0,0 +1,6 @@
1
+ require 'httparty'
2
+
3
+ class DummyRestClient
4
+ include HTTParty
5
+ base_uri 'http://test.local'
6
+ end
@@ -0,0 +1,21 @@
1
+ # spec/support/active_model_lint.rb
2
+ # adapted from rspec-rails:
3
+ # http://github.com/rspec/rspec-rails/blob/master/spec/rspec/rails/mocks/mock_model_spec.rb
4
+
5
+ require 'test/unit/assertions'
6
+
7
+ shared_examples_for "ActiveModel" do
8
+ include ActiveModel::Lint::Tests
9
+ include Test::Unit::Assertions
10
+
11
+ # to_s is to support ruby-1.9
12
+ ActiveModel::Lint::Tests.public_instance_methods.map{|m| m.to_s}.grep(/^test/).each do |m|
13
+ example m.gsub('_',' ') do
14
+ send m
15
+ end
16
+ end
17
+
18
+ def model
19
+ subject
20
+ end
21
+ end
@@ -0,0 +1,120 @@
1
+ FakeWeb.allow_net_connect = false # No real connects
2
+
3
+ # I know, duplication, right? just lazy.
4
+
5
+ def stub_single_response(object)
6
+ FakeWeb.register_uri(:get, %r|http://test\.local/dummies/#{object.id}|, :body => { :dummy => object.to_hash }.to_json, :content_type => 'application/json')
7
+ yield
8
+ FakeWeb.clean_registry
9
+ end
10
+
11
+ def stub_all_response(*objects)
12
+ #json = JSON.generate(objects.inject([]) { |acc,o| acc << })
13
+ json = objects.inject([]) { |acc, o| acc << o.as_json(:root => o.class.model_name.element, :methods => [:id]) }.to_json
14
+ FakeWeb.register_uri(:get, "http://test.local/dummies", :body => json, :content_type => 'application/json')
15
+ yield
16
+ FakeWeb.clean_registry
17
+ end
18
+
19
+ def stub_all_nil_response
20
+ FakeWeb.register_uri(:get, 'http://test.local/dummies', :body => [].to_json, :content_type => 'application/json')
21
+ yield
22
+ FakeWeb.clean_registry
23
+ end
24
+
25
+ def stub_nil_response
26
+ FakeWeb.register_uri(:get, %r|http://test\.local/dummies/\d*|, :body => nil, :status => ["404", "Not Found"], :content_type => 'application/json')
27
+ yield
28
+ FakeWeb.clean_registry
29
+ end
30
+
31
+ def stub_post_response(object=nil)
32
+ path = '/dummies'
33
+ if object
34
+ path = object.rest_path
35
+ if object.belongs_to_relationship?
36
+ path = object.belongs_to_relationships.first.rest_path
37
+ end
38
+ end
39
+ FakeWeb.register_uri(:post, "http://test.local#{path}", :body => object ? object.to_json : nil, :status => ["201", "Object created"], :content_type => 'application/json')
40
+ yield
41
+ FakeWeb.clean_registry
42
+ end
43
+
44
+ def stub_post_errornous_response
45
+ FakeWeb.register_uri(:post, "http://test.local/dummies", :body => {:description => 'can\'t be empty'}.to_json, :status => ["422", "Validation Errors"], :content_type => 'application/json')
46
+ yield
47
+ FakeWeb.clean_registry
48
+ end
49
+
50
+ def stub_update_response(object=nil)
51
+ FakeWeb.register_uri(:put, %r|http://test\.local/dummies/\d*|, :body => object ? object.to_json : nil, :status => ["200", "Object updated"], :content_type => 'application/json')
52
+ yield
53
+ FakeWeb.clean_registry
54
+ end
55
+
56
+ def stub_update_errornous_response
57
+ FakeWeb.register_uri(:put, %r|http://test\.local/dummies/\d*|, :body => {:title => 'can\'t be empty'}.to_json, :status => ["422", "Validation Errors"], :content_type => 'application/json')
58
+ yield
59
+ FakeWeb.clean_registry
60
+ end
61
+
62
+ def stub_delete_response(object=nil)
63
+ path = '/dummies'
64
+ if object
65
+ path = object.rest_path
66
+ if object.belongs_to_relationship?
67
+ path = object.belongs_to_relationships.first.rest_path
68
+ end
69
+ end
70
+ FakeWeb.register_uri(:delete, %r|http://test\.local#{path}/\d*|, :body => nil, :status => ["200", "Object deleted"], :content_type => 'application/json')
71
+ yield
72
+ FakeWeb.clean_registry
73
+ end
74
+
75
+ def stub_delete_errornous_response
76
+ FakeWeb.register_uri(:delete, %r|http://test\.local/dummies/\d*|, :body => nil, :status => ["500", "Can't delete it :("], :content_type => 'application/json')
77
+ yield
78
+ FakeWeb.clean_registry
79
+ end
80
+
81
+ def stub_nested_all_response(parent,*children)
82
+ json = children.inject([]) { |acc, o| acc << o.as_json(:root => o.class.model_name.element, :methods => [:id]) }.to_json
83
+ FakeWeb.register_uri(:get, "http://test.local/#{parent.class.name.to_s.downcase.pluralize}/#{parent.id}/#{children.first.class.name.downcase.pluralize}", :body => json, :content_type => 'application/json')
84
+ yield
85
+ FakeWeb.clean_registry
86
+ end
87
+
88
+ def stub_nested_single_response(parent,child)
89
+ FakeWeb.register_uri(:get, %r|http://test\.local/#{parent.class.name.to_s.downcase.pluralize}/#{parent.id}/#{child.class.name.downcase.pluralize}/#{child.id}|, :body => { child.class.name.downcase.to_sym => child.to_hash }.to_json, :content_type => 'application/json')
90
+ yield
91
+ FakeWeb.clean_registry
92
+ end
93
+
94
+ def stub_conditional_all_response(query, *objects)
95
+ #json = JSON.generate(objects.inject([]) { |acc,o| acc << })
96
+ json = objects.inject([]) { |acc, o| acc << o.as_json(:root => o.class.model_name.element, :methods => [:id]) }.to_json
97
+ FakeWeb.register_uri(:get, %r|http://test.local/dummies\?.*|, :body => json, :content_type => 'application/json')
98
+ yield
99
+ FakeWeb.clean_registry
100
+ end
101
+
102
+ def stub_conditional_nested_all_response(parent,query, *children)
103
+ json = children.inject([]) { |acc, o| acc << o.as_json(:root => o.class.model_name.element, :methods => [:id]) }.to_json
104
+ FakeWeb.register_uri(:get, %r|http://test.local/#{parent.class.name.to_s.downcase.pluralize}/#{parent.id}/#{children.first.class.name.downcase.pluralize}\?.*|, :body => json, :content_type => 'application/json')
105
+ yield
106
+ FakeWeb.clean_registry
107
+ end
108
+
109
+ def stub_conditional_single_response(object, query)
110
+ #json = JSON.generate(objects.inject([]) { |acc,o| acc << })
111
+ FakeWeb.register_uri(:get, %r|http://test.local/dummies/\d{1,2}\?.+|, :body => object.to_json, :content_type => 'application/json')
112
+ yield
113
+ FakeWeb.clean_registry
114
+ end
115
+
116
+ def stub_conditional_nested_single_response(parent,child, query)
117
+ FakeWeb.register_uri(:get, %r|http://test.local/#{parent.class.name.to_s.downcase.pluralize}/#{parent.id}/#{child.class.name.downcase.pluralize}/\d{1,2}\?.*|, :body => child.to_json, :content_type => 'application/json')
118
+ yield
119
+ FakeWeb.clean_registry
120
+ end
@@ -0,0 +1,33 @@
1
+ require 'simplecov'
2
+ require 'simplecov-rcov'
3
+ SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
4
+ SimpleCov.start
5
+
6
+ require File.expand_path("../../lib/amfetamine.rb", __FILE__)
7
+ require 'helpers/active_model_lint'
8
+
9
+ require 'dummy/dummy_rest_client'
10
+ require 'dummy/configure'
11
+ require 'dummy/child'
12
+ require 'dummy/dummy'
13
+
14
+ require 'fakeweb'
15
+ require 'helpers/fakeweb_responses'
16
+ require 'json'
17
+
18
+ #Fakeweb to stub server responses, still want to to integration tests on the rest client
19
+ def build(object)
20
+ {
21
+ :dummy => lambda { Dummy.new({:title => 'Dummy', :description => 'Crash me!', :id => Dummy.children.length + 1})},
22
+ :child => lambda { Child.new({:title => 'Child', :description => 'Daddy!', :id => Child.children.length + 1}) }
23
+ }[object].call
24
+ end
25
+
26
+ RSpec.configure do |config|
27
+ config.mock_with :rspec
28
+ config.after(:each) { Amfetamine::Config.memcached_instance.flush }
29
+ config.after(:each) { Dummy.restore_rest_client; Child.restore_rest_client }
30
+ config.before(:each) { Dummy.save_rest_client; Child.save_rest_client }
31
+ config.before(:each) { Dummy.resource_suffix = '' }
32
+ end
33
+
metadata ADDED
@@ -0,0 +1,246 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: amfetamine
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.5
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Timon Vonk
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-10 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &70166285197480 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70166285197480
25
+ - !ruby/object:Gem::Dependency
26
+ name: guard
27
+ requirement: &70166285195480 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70166285195480
36
+ - !ruby/object:Gem::Dependency
37
+ name: guard-rspec
38
+ requirement: &70166285194020 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70166285194020
47
+ - !ruby/object:Gem::Dependency
48
+ name: growl
49
+ requirement: &70166285206500 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70166285206500
58
+ - !ruby/object:Gem::Dependency
59
+ name: httparty
60
+ requirement: &70166285203320 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70166285203320
69
+ - !ruby/object:Gem::Dependency
70
+ name: fakeweb
71
+ requirement: &70166285201500 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70166285201500
80
+ - !ruby/object:Gem::Dependency
81
+ name: simplecov
82
+ requirement: &70166285199980 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70166285199980
91
+ - !ruby/object:Gem::Dependency
92
+ name: simplecov-rcov
93
+ requirement: &70166285214860 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *70166285214860
102
+ - !ruby/object:Gem::Dependency
103
+ name: dalli
104
+ requirement: &70166285213760 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: *70166285213760
113
+ - !ruby/object:Gem::Dependency
114
+ name: activesupport
115
+ requirement: &70166285211920 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :runtime
122
+ prerelease: false
123
+ version_requirements: *70166285211920
124
+ - !ruby/object:Gem::Dependency
125
+ name: activemodel
126
+ requirement: &70166285209060 !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: *70166285209060
135
+ - !ruby/object:Gem::Dependency
136
+ name: json
137
+ requirement: &70166285207060 !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ type: :runtime
144
+ prerelease: false
145
+ version_requirements: *70166285207060
146
+ - !ruby/object:Gem::Dependency
147
+ name: rake
148
+ requirement: &70166285221700 !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ type: :runtime
155
+ prerelease: false
156
+ version_requirements: *70166285221700
157
+ description: Wraps REST to objects, provides caching and makes your app go Bzzz!
158
+ email:
159
+ - timon@exvo.com
160
+ executables: []
161
+ extensions: []
162
+ extra_rdoc_files: []
163
+ files:
164
+ - .gitignore
165
+ - .rvmrc
166
+ - Gemfile
167
+ - README.md
168
+ - Rakefile
169
+ - amfetamine.gemspec
170
+ - lib/amfetamine.rb
171
+ - lib/amfetamine/base.rb
172
+ - lib/amfetamine/cache.rb
173
+ - lib/amfetamine/caching_adapter.rb
174
+ - lib/amfetamine/config.rb
175
+ - lib/amfetamine/exceptions.rb
176
+ - lib/amfetamine/helpers/rspec_matchers.rb
177
+ - lib/amfetamine/helpers/test_helpers.rb
178
+ - lib/amfetamine/logger.rb
179
+ - lib/amfetamine/query_methods.rb
180
+ - lib/amfetamine/relationship.rb
181
+ - lib/amfetamine/relationships.rb
182
+ - lib/amfetamine/rest_helpers.rb
183
+ - lib/amfetamine/version.rb
184
+ - spec/amfetamine/base_spec.rb
185
+ - spec/amfetamine/caching_spec.rb
186
+ - spec/amfetamine/callbacks_spec.rb
187
+ - spec/amfetamine/conditions_spec.rb
188
+ - spec/amfetamine/dummy_spec.rb
189
+ - spec/amfetamine/relationships_spec.rb
190
+ - spec/amfetamine/rest_helpers_spec.rb
191
+ - spec/amfetamine/rspec_matchers_spec.rb
192
+ - spec/amfetamine/testing_helpers_spec.rb
193
+ - spec/dummy/child.rb
194
+ - spec/dummy/configure.rb
195
+ - spec/dummy/dummy.rb
196
+ - spec/dummy/dummy_rest_client.rb
197
+ - spec/helpers/active_model_lint.rb
198
+ - spec/helpers/fakeweb_responses.rb
199
+ - spec/spec_helper.rb
200
+ homepage: http://www.github.com/exvo/amfetamine
201
+ licenses: []
202
+ post_install_message:
203
+ rdoc_options: []
204
+ require_paths:
205
+ - lib
206
+ required_ruby_version: !ruby/object:Gem::Requirement
207
+ none: false
208
+ requirements:
209
+ - - ! '>='
210
+ - !ruby/object:Gem::Version
211
+ version: '0'
212
+ segments:
213
+ - 0
214
+ hash: 2697156957712315571
215
+ required_rubygems_version: !ruby/object:Gem::Requirement
216
+ none: false
217
+ requirements:
218
+ - - ! '>='
219
+ - !ruby/object:Gem::Version
220
+ version: '0'
221
+ segments:
222
+ - 0
223
+ hash: 2697156957712315571
224
+ requirements: []
225
+ rubyforge_project: amfetamine
226
+ rubygems_version: 1.8.10
227
+ signing_key:
228
+ specification_version: 3
229
+ summary: Wraps REST to objects
230
+ test_files:
231
+ - spec/amfetamine/base_spec.rb
232
+ - spec/amfetamine/caching_spec.rb
233
+ - spec/amfetamine/callbacks_spec.rb
234
+ - spec/amfetamine/conditions_spec.rb
235
+ - spec/amfetamine/dummy_spec.rb
236
+ - spec/amfetamine/relationships_spec.rb
237
+ - spec/amfetamine/rest_helpers_spec.rb
238
+ - spec/amfetamine/rspec_matchers_spec.rb
239
+ - spec/amfetamine/testing_helpers_spec.rb
240
+ - spec/dummy/child.rb
241
+ - spec/dummy/configure.rb
242
+ - spec/dummy/dummy.rb
243
+ - spec/dummy/dummy_rest_client.rb
244
+ - spec/helpers/active_model_lint.rb
245
+ - spec/helpers/fakeweb_responses.rb
246
+ - spec/spec_helper.rb