amfetamine 0.1.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.
@@ -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