amfetamine 0.2.12 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ 0.3.0
2
+ - Caching is now turned off by default in Rails development/test modes
3
+ - Add `class_name` and `foreign_key` options to relationships, which allows mapping resources to local Amfetamine classes with different names
4
+
1
5
  0.2.12
2
6
  - Add abillity to deactivate caching, using disable_caching= on either the config or an object.
3
7
  - Starting builds against other ruby versions
@@ -7,7 +11,7 @@
7
11
  - Fixed a lot of specs for travis in general
8
12
 
9
13
  0.2.10
10
- - Removed verbosity from tests
14
+ - Removed verbosity from tests
11
15
  - Dropped support for Ruby 1.8.7
12
16
  - Sourcecode is now available on github
13
17
 
data/README.md CHANGED
@@ -86,8 +86,8 @@ Usage
86
86
  ### Relationships
87
87
 
88
88
  ```ruby
89
- has_many_resources PLURAL_OBJECT_NAME_SYMBOLS
90
- belongs_to_resource SINGULAR_OBJECT_NAME_SYMBOL
89
+ has_many_resources :children # plural object name (Symbol)
90
+ belongs_to_resource :parent # singular object name (Symbol)
91
91
 
92
92
  parent.children.all # => Returns all nested resources, you can enumarate it with each, include? and several other helpers are available
93
93
  parent.children.all(:conditions => SOMETHING) # Works as expected
@@ -96,6 +96,29 @@ parent.children.find(ID) # => Returns the nested child with ID
96
96
  children.parent # => returns a Amfetamine::Relationship with only the parent
97
97
  ```
98
98
 
99
+ You can also override class name and foreign key in a relationship declaration:
100
+
101
+ ```ruby
102
+ class User < Amfetamine::Base
103
+ has_many_resources :owned_companies, class_name: 'Company', foreign_key: 'owner_id'
104
+ ...
105
+ ```
106
+
107
+ which will result in the following query:
108
+
109
+ ```
110
+ /users/:id/owned_companies.json
111
+ ```
112
+
113
+ And the resulting json will be mapped to a local 'Company' class (which is
114
+ also an Amfetamine based class).
115
+
116
+
117
+
118
+ This also works similarly for a `belongs_to_resource` relationship.
119
+
120
+
121
+
99
122
  ### Querying
100
123
 
101
124
  ```ruby
data/amfetamine.gemspec CHANGED
@@ -5,8 +5,8 @@ require "amfetamine/version"
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "amfetamine"
7
7
  s.version = Amfetamine::VERSION
8
- s.authors = ["Timon Vonk"]
9
- s.email = ["timon@exvo.com"]
8
+ s.authors = ["Timon Vonk", "Paweł Gościcki"]
9
+ s.email = ["timon@exvo.com", "pawel.goscicki@gmail.com"]
10
10
  s.homepage = "http://www.github.com/exvo/amfetamine"
11
11
  s.summary = %q{REST object abstraction on steroids the makes shit go boom!}
12
12
  s.description = %q{Provides an interface to REST apis with objects and a cache. Zero effort!}
@@ -21,15 +21,16 @@ Gem::Specification.new do |s|
21
21
  # Development dependencies
22
22
  s.add_development_dependency "rspec"
23
23
  s.add_development_dependency "guard"
24
+ s.add_development_dependency "guard-bundler"
24
25
  s.add_development_dependency "guard-rspec"
25
- s.add_development_dependency "ruby_gntp"
26
+ s.add_development_dependency "rb-fsevent"
27
+ s.add_development_dependency "rb-inotify"
26
28
  s.add_development_dependency "httparty"
27
29
  s.add_development_dependency "fakeweb"
28
30
  s.add_development_dependency "simplecov"
29
31
  s.add_development_dependency "simplecov-rcov"
30
32
  s.add_development_dependency "pry"
31
33
 
32
-
33
34
  # Runtime dependencies
34
35
  s.add_runtime_dependency "dalli"
35
36
  s.add_runtime_dependency "activesupport" # For helper methods
data/lib/amfetamine.rb CHANGED
@@ -12,8 +12,12 @@ require "amfetamine/base" # Basics
12
12
  require "amfetamine/config" # Configuration class
13
13
 
14
14
  module Amfetamine
15
-
16
15
  def self.logger
17
16
  Amfetamine::Logger.instance
18
17
  end
18
+
19
+ # If included in Rails, disable caching in dev/test modes
20
+ if defined?(Rails) && (Rails.env.development? || Rails.env.test?)
21
+ Amfetamine::Config.disable_caching = true
22
+ end
19
23
  end
@@ -2,35 +2,37 @@ module Amfetamine
2
2
  class Relationship
3
3
  include Enumerable
4
4
 
5
- attr_reader :on, :type, :from
5
+ attr_reader :on_resource_name, :on_class_name, :type, :from
6
6
 
7
7
  def initialize(opts)
8
- @type = opts[:type]
9
- @on = opts[:on] # Target class
10
- @from = opts[:from] # receiving object
8
+ @type = opts[:type]
9
+ @on_resource_name = opts[:on_resource_name] # Target resource name
10
+ @on_class_name = opts.fetch(:on_class_name) { @on_resource_name } # Target class name
11
+ @from = opts[:from] # Receiving object
12
+ @foreign_key = opts.fetch(:foreign_key) { build_foreign_key } # Foreign key
11
13
  end
12
14
 
13
15
  def << (other)
14
- other.send("#{from_singular_name}_id=", @from.id)
15
- other.instance_variable_set("@#{from_singular_name}", Amfetamine::Relationship.new(:on => @from, :from => other, :type => :belongs_to))
16
+ other.send("#{@foreign_key}=", @from.id)
17
+ other.instance_variable_set("@#{from_singular_name}", Amfetamine::Relationship.new(on_resource_name: @from, on_class_name: @from, foreign_key: @foreign_key, from: other, type: :belongs_to))
16
18
  @children ||= [] # No need to do a request here, but it needs to be an array if it isn't yet.
17
19
  @children << other
18
20
  end
19
21
 
20
22
  def on_class
21
- if @on.is_a?(Symbol)
22
- Amfetamine.parent.const_get(@on.to_s.gsub('/', '::').singularize.gsub('_','').capitalize)
23
+ if @on_class_name.is_a?(Symbol) or @on_class_name.is_a?(String)
24
+ Amfetamine.parent.const_get(@on_class_name.to_s.singularize.split('/').map { |s| s.split('_').map(&:capitalize).join }.join('::'))
23
25
  else
24
- @on.class
26
+ @on_class_name.class
25
27
  end
26
28
  end
27
29
 
28
30
  # Id of object this relationship references
29
31
  def parent_id
30
- if @on.is_a?(Symbol)
31
- @from.send(@on.to_s.downcase + "_id") if @type == :belongs_to
32
+ if @on_class_name.is_a?(Symbol) or @on_class_name.is_a?(String)
33
+ @from.send(@foreign_key) if @type == :belongs_to
32
34
  else
33
- @on.id
35
+ @on_class_name.id
34
36
  end
35
37
  end
36
38
 
@@ -48,10 +50,10 @@ module Amfetamine
48
50
  end
49
51
 
50
52
  def on_plural_name
51
- if @on.is_a?(Symbol)
52
- @on.to_s.pluralize
53
+ if @on_resource_name.is_a?(Symbol) or @on_resource_name.is_a?(String)
54
+ @on_resource_name.to_s.pluralize
53
55
  else
54
- @on.class.name.to_s.pluralize.downcase
56
+ @on_resource_name.class.name.to_s.pluralize.downcase
55
57
  end
56
58
  end
57
59
 
@@ -91,11 +93,19 @@ module Amfetamine
91
93
  on_class.find(id, {:nested_path => find_path(id)}.merge(opts))
92
94
  end
93
95
 
94
-
95
96
  def include?(other)
96
97
  self.all
97
98
  @children.include?(other)
98
99
  end
99
100
 
101
+ private
102
+
103
+ def build_foreign_key
104
+ if @type == :has_many
105
+ "#{from_singular_name}_id"
106
+ elsif @type == :belongs_to
107
+ @on_class_name.to_s.downcase.gsub('/', '_') + "_id"
108
+ end
109
+ end
100
110
  end
101
111
  end
@@ -7,14 +7,20 @@ module Amfetamine
7
7
  def initialize(args={})
8
8
  #super(args)
9
9
  if self.class._relationship_children
10
- self.class._relationship_children.each do |klass|
11
- instance_variable_set("@#{klass}", Amfetamine::Relationship.new(:on => klass, :from => self, :type => :has_many))
10
+ self.class._relationship_children.each do |rel|
11
+ resource_name = rel[:resource_name]
12
+ class_name = rel[:class_name]
13
+ foreign_key = rel[:foreign_key]
14
+ instance_variable_set("@#{resource_name}", Amfetamine::Relationship.new(on_resource_name: resource_name, on_class_name: class_name, foreign_key: foreign_key, from: self, type: :has_many))
12
15
  end
13
16
  end
14
17
 
15
18
  if self.class._relationship_parents
16
- self.class._relationship_parents.each do |klass|
17
- instance_variable_set("@#{klass}", Amfetamine::Relationship.new(:on => klass, :from => self, :type => :belongs_to))
19
+ self.class._relationship_parents.each do |rel|
20
+ resource_name = rel[:resource_name]
21
+ class_name = rel[:class_name]
22
+ foreign_key = rel[:foreign_key]
23
+ instance_variable_set("@#{resource_name}", Amfetamine::Relationship.new(on_resource_name: resource_name, on_class_name: class_name, foreign_key: foreign_key, from: self, type: :belongs_to))
18
24
  end
19
25
  end
20
26
  end
@@ -25,31 +31,34 @@ module Amfetamine
25
31
 
26
32
  def belongs_to_relationships
27
33
  if self.class._relationship_parents
28
- self.class._relationship_parents.collect { |e| self.send(e) }
34
+ self.class._relationship_parents.collect { |rel| self.send(rel[:class_name]) }
29
35
  else
30
36
  []
31
37
  end
32
38
  end
33
39
 
34
40
  module ClassMethods
35
- def has_many_resources(*klasses)
41
+ # has_many_resources :pupils, class_name: 'Child', foreign_key: 'dummy_id'
42
+ def has_many_resources(resource_name, opts = {})
36
43
  self.class_eval do
37
- @_relationship_children = []
38
- klasses.each do |klass|
39
- attr_reader klass
40
- @_relationship_children << klass
44
+ class_name = opts.delete(:class_name) { resource_name }
45
+ foreign_key = opts.delete(:foreign_key) { self.name.to_s.downcase.gsub('/', '_').singularize + "_id" }
41
46
 
42
- parent_id_field = self.name.to_s.downcase.singularize + "_id"
47
+ attr_reader resource_name
48
+ attr_reader class_name
43
49
 
44
- define_method("build_#{klass.to_s.singularize}") do |*args|
45
- args = args.shift || {}
46
- Amfetamine.parent.const_get(klass.to_s.gsub('/', '::').singularize.gsub('_','').capitalize).new(args.merge(parent_id_field => self.id))
47
- end
50
+ @_relationship_children ||= []
51
+ @_relationship_children << { resource_name: resource_name, class_name: class_name, foreign_key: foreign_key }
48
52
 
49
- define_method("create_#{klass.to_s.singularize}") do |*args|
50
- args = args.shift || {}
51
- Amfetamine.parent.const_get(klass.to_s.gsub('/', '::').singularize.gsub('_','').capitalize).create(args.merge(parent_id_field => self.id))
52
- end
53
+ define_method("build_#{resource_name.to_s.downcase.gsub('/', '_').singularize}") do |*args|
54
+ args = args.shift || {}
55
+ # "my_module/my_companies" => "MyModule::MyCompany"
56
+ Amfetamine.parent.const_get(class_name.to_s.singularize.split('/').map { |s| s.split('_').map(&:capitalize).join }.join('::')).new(args.merge(foreign_key => self.id))
57
+ end
58
+
59
+ define_method("create_#{resource_name.to_s.downcase.gsub('/', '_').singularize}") do |*args|
60
+ args = args.shift || {}
61
+ Amfetamine.parent.const_get(class_name.to_s.singularize.split('/').map { |s| s.split('_').map(&:capitalize).join }.join('::')).create(args.merge(foreign_key => self.id))
53
62
  end
54
63
  end
55
64
  end
@@ -58,14 +67,16 @@ module Amfetamine
58
67
  @_relationship_children
59
68
  end
60
69
 
61
- def belongs_to_resource(*klasses)
70
+ def belongs_to_resource(resource_name, opts = {})
62
71
  self.class_eval do
63
- @_relationship_parents = []
64
- klasses.each do |klass|
65
- attr_reader klass
72
+ class_name = opts.delete(:class_name) { resource_name }
73
+ foreign_key = opts.delete(:foreign_key) { resource_name.to_s.downcase.gsub('/', '_') + "_id" }
66
74
 
67
- @_relationship_parents << klass
68
- end
75
+ attr_reader resource_name
76
+ attr_reader class_name
77
+
78
+ @_relationship_parents ||= []
79
+ @_relationship_parents << { resource_name: resource_name, class_name: class_name, foreign_key: foreign_key }
69
80
  end
70
81
  end
71
82
 
@@ -1,3 +1,3 @@
1
1
  module Amfetamine
2
- VERSION = "0.2.12"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -2,14 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  # Let's create a new class for our experiments
4
4
  class Dummy2 < Amfetamine::Base
5
- def initialize(args={})
6
- @@children << self
7
- super(args)
8
- end
9
-
10
- def self.children
11
- @@children ||= []
12
- end
13
5
  end
14
6
 
15
7
  describe "Dynamic Attributes" do
@@ -25,4 +17,3 @@ describe "Dynamic Attributes" do
25
17
  end
26
18
  end
27
19
  end
28
-
@@ -1,9 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Amfetamine::Relationships do
4
- let(:dummy) {build :dummy}
5
- let(:child) {build :child}
6
-
4
+
5
+ let(:child) { build :child }
6
+ let(:dummy) { build :dummy }
7
+ let(:infant) { build :infant }
8
+ let(:student) { build :student }
9
+ let(:teacher) { build :teacher }
10
+
7
11
  context "Routing" do
8
12
  it "should generate correct paths" do
9
13
  dummy.children << child
@@ -25,13 +29,12 @@ describe Amfetamine::Relationships do
25
29
 
26
30
  it "should raise error if nested path lacks parent id" do
27
31
  child = Child.new({:title => 'test', :dummy_id => nil})
28
-
29
32
  lambda { child.belongs_to_relationships.first.rest_path }.should raise_exception(Amfetamine::InvalidPath)
30
33
  end
31
34
  end
32
35
 
33
36
  context "Adding and modifying children" do
34
- before(:each) do
37
+ before do
35
38
  dummy.children << child
36
39
  child.instance_variable_set(:@notsaved, false)
37
40
 
@@ -62,7 +65,7 @@ describe Amfetamine::Relationships do
62
65
  r.get { dummy }
63
66
  new_dummy = Dummy.find(dummy.id)
64
67
  end
65
-
68
+
66
69
  children = nil
67
70
  Dummy.prevent_external_connections! do |r|
68
71
  r.get { [child] }
@@ -74,16 +77,13 @@ describe Amfetamine::Relationships do
74
77
  it "should be possible to get a single child if not in memory" do
75
78
  new_dummy = Dummy.find(dummy.id)
76
79
  new_child = new_dummy.children.find(child.id)
77
-
78
80
  new_child.should == child
79
81
  end
80
82
 
81
-
82
83
  it "should build new child if asked" do
83
84
  new_child = dummy.build_child
84
85
  new_child.should be_new
85
86
  new_child.should be_a(Child)
86
- dummy.children
87
87
  end
88
88
 
89
89
  it "should create a new child if asked" do
@@ -101,6 +101,81 @@ describe Amfetamine::Relationships do
101
101
  end
102
102
  end
103
103
  end
104
- end
105
104
 
105
+ context "has_many_resources relationship using `class_name` option" do
106
+
107
+ specify { teacher.pupils.should be_a(Amfetamine::Relationship) }
108
+
109
+ context "generates correct paths for fetching pupils" do
110
+ specify { teacher.pupils.full_path.should eql("teachers/#{ teacher.id }/pupils") }
111
+ specify { teacher.pupils.rest_path.should eql("/teachers/#{ teacher.id }/pupils") }
112
+ specify { teacher.pupils.find_path(1).should eql("/teachers/#{ teacher.id }/pupils/1") }
113
+ end
114
+
115
+ it "builds new pupils" do
116
+ new_pupil = teacher.build_pupil
117
+ new_pupil.should be_new
118
+ new_pupil.should be_a(Child)
119
+ end
120
+
121
+ it "creates new pupils" do
122
+ attrs = { id: 1, title: 'Pupil' }
123
+ pupil = teacher.build_pupil(attrs)
124
+
125
+ Child.prevent_external_connections! do |allow|
126
+ allow.post(:code => 201) { pupil }
127
+ allow.get { [pupil] }
128
+
129
+ new_pupil = teacher.create_pupil(attrs)
130
+ new_pupil.should_not be_new
131
+ new_pupil.should be_cached
132
+ new_pupil.should be_a(Child)
133
+ end
134
+ end
135
+
136
+ end
137
+
138
+ context "belongs_to_resource relationship using `class_name` option" do
106
139
 
140
+ specify { infant.parent.should be_a(Amfetamine::Relationship) }
141
+
142
+ context "generates correct paths for fetching parent" do
143
+ before do
144
+ dummy.children << infant
145
+ end
146
+
147
+ specify { infant.parent.full_path.should eql("parents/#{ dummy.id }/infants") }
148
+ specify { infant.parent.rest_path.should eql("/parents/#{ dummy.id }/infants") }
149
+ specify { infant.parent.find_path(1).should eql("/parents/#{ dummy.id }/infants/1") }
150
+ end
151
+
152
+ end
153
+
154
+ context "multiple has_many_resources relationships" do
155
+
156
+ let(:pupil) { teacher.build_pupil }
157
+
158
+ specify { pupil.should be_a(Child) }
159
+ specify { student.should be_a(Student) }
160
+
161
+ specify { teacher.pupils.rest_path.should eql("/teachers/#{ teacher.id }/pupils") }
162
+ specify { teacher.students.rest_path.should eql("/teachers/#{ teacher.id }/students") }
163
+
164
+ end
165
+
166
+ context "multiple belongs_to_resource relationships" do
167
+
168
+ before do
169
+ teacher.students << student
170
+ dummy.students << student
171
+ end
172
+
173
+ specify { teacher.students.should be_a(Amfetamine::Relationship) }
174
+ specify { dummy.students.should be_a(Amfetamine::Relationship) }
175
+
176
+ specify { teacher.students.rest_path.should eql("/teachers/#{ teacher.id }/students") }
177
+ specify { dummy.students.rest_path.should eql("/dummies/#{ dummy.id }/students") }
178
+
179
+ end
180
+
181
+ end
data/spec/dummy/child.rb CHANGED
@@ -1,16 +1,5 @@
1
1
  class Child < Amfetamine::Base
2
- @@children = [] # unrelated to relationships!
3
2
  attr_accessor :title, :description, :dummy_id
4
3
 
5
4
  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
5
  end
data/spec/dummy/dummy.rb CHANGED
@@ -1,10 +1,9 @@
1
1
  class Dummy < Amfetamine::Base
2
- @@children = [] # unrelated to relationships!
3
-
4
2
  amfetamine_attributes :title, :description
5
3
  validates_presence_of :title, :description
6
4
 
7
5
  has_many_resources :children
6
+ has_many_resources :students, foreign_key: 'parent_id'
8
7
 
9
8
  before_create :action_before_create
10
9
  after_create :action_after_create
@@ -14,17 +13,6 @@ class Dummy < Amfetamine::Base
14
13
 
15
14
  before_validation :action_before_validate
16
15
 
17
-
18
- # Needed for proper ID tracking
19
- def initialize(args={})
20
- @@children << self
21
- super(args)
22
- end
23
-
24
- def self.children
25
- @@children ||= []
26
- end
27
-
28
16
  def action_before_create
29
17
  Amfetamine.logger.warn "Yo, BEFORE CREATE called"
30
18
  end
@@ -41,5 +29,4 @@ class Dummy < Amfetamine::Base
41
29
 
42
30
  def action_before_validate
43
31
  end
44
-
45
32
  end
@@ -0,0 +1,5 @@
1
+ class Infant < Amfetamine::Base
2
+ attr_accessor :name, :dummy_id
3
+
4
+ belongs_to_resource :parent, class_name: "Dummy", foreign_key: "dummy_id"
5
+ end
@@ -0,0 +1,6 @@
1
+ class Student < Amfetamine::Base
2
+ amfetamine_attributes :name, :teacher_id, :parent_id
3
+
4
+ belongs_to_resource :teacher
5
+ belongs_to_resource :parent, class_name: 'Dummy', foreign_key: 'parent_id'
6
+ end
@@ -0,0 +1,6 @@
1
+ class Teacher < Amfetamine::Base
2
+ amfetamine_attributes :name
3
+
4
+ has_many_resources :pupils, class_name: 'Child', foreign_key: 'dummy_id'
5
+ has_many_resources :students
6
+ end
@@ -0,0 +1,12 @@
1
+ # class providing safe mechanism for unique IDs for amfetamine objects
2
+ class IdPool
3
+ @id = 0
4
+
5
+ def self.next
6
+ @id += 1
7
+ end
8
+
9
+ def self.last
10
+ @id
11
+ end
12
+ end
data/spec/spec_helper.rb CHANGED
@@ -8,24 +8,31 @@ if ENV['COVERAGE'] && (RUBY_ENGINE == "ruby")
8
8
  end
9
9
 
10
10
  require File.expand_path("../../lib/amfetamine.rb", __FILE__)
11
- require 'helpers/active_model_lint'
12
11
 
13
- require 'dummy/dummy_rest_client'
14
- require 'dummy/configure'
15
- require 'dummy/child'
16
- require 'dummy/dummy'
12
+ # spec helpers
13
+ Dir[File.dirname(__FILE__) + '/helpers/*.rb'].each { |file| require file }
14
+
15
+ # Dummies (factories)
16
+ Dir[File.dirname(__FILE__) + '/dummy/*.rb'].each { |file| require file }
17
+
18
+ Amfetamine::Config.configure do |config|
19
+ config.memcached_instance = 'localhost:11211'
20
+ config.rest_client = DummyRestClient
21
+ end
17
22
 
18
23
  require 'fakeweb'
19
24
  require 'json'
20
25
 
21
- #Fakeweb to stub server responses, still want to to integration tests on the rest client
26
+ # Fakeweb to stub server responses, still want to do integration tests on the rest client
22
27
  FakeWeb.allow_net_connect = false
23
28
  def build(object)
24
29
  {
25
- :dummy => lambda { Dummy.new({:title => 'Dummy', :description => 'Crash me!', :id => Dummy.children.length + 1})},
26
- :child => lambda { Child.new({:title => 'Child', :description => 'Daddy!', :id => Child.children.length + 1}) },
27
- :dummy2 => lambda { Dummy2.new({:title => 'Dummy2', :description => 'Daddy!', :id => Dummy2.children.length + 1}) }
28
-
30
+ :dummy => lambda { Dummy.new({ :title => 'Dummy', :description => 'Crash me!', :id => IdPool.next }) },
31
+ :child => lambda { Child.new({ :title => 'Child', :description => 'Daddy!', :id => IdPool.next }) },
32
+ :dummy2 => lambda { Dummy2.new({ :title => 'Dummy2', :description => 'Daddy!', :id => IdPool.next }) },
33
+ :teacher => lambda { Teacher.new({ :name => 'Teacher', :id => IdPool.next }) },
34
+ :infant => lambda { Infant.new({ :name => 'Infant', :id => IdPool.next }) },
35
+ :student => lambda { Student.new({ :name => 'Student', :id => IdPool.next }) }
29
36
  }[object].call
30
37
  end
31
38
 
@@ -37,4 +44,3 @@ RSpec.configure do |config|
37
44
  config.before(:each) { Dummy.resource_suffix = '' }
38
45
  config.order = "random"
39
46
  end
40
-
metadata CHANGED
@@ -1,19 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amfetamine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.12
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Timon Vonk
9
+ - Paweł Gościcki
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2012-08-28 00:00:00.000000000 Z
13
+ date: 2012-09-12 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: rspec
16
- requirement: &70269583927400 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
17
18
  none: false
18
19
  requirements:
19
20
  - - ! '>='
@@ -21,10 +22,31 @@ dependencies:
21
22
  version: '0'
22
23
  type: :development
23
24
  prerelease: false
24
- version_requirements: *70269583927400
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
25
31
  - !ruby/object:Gem::Dependency
26
32
  name: guard
27
- requirement: &70269583926960 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ type: :development
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: guard-bundler
49
+ requirement: !ruby/object:Gem::Requirement
28
50
  none: false
29
51
  requirements:
30
52
  - - ! '>='
@@ -32,10 +54,31 @@ dependencies:
32
54
  version: '0'
33
55
  type: :development
34
56
  prerelease: false
35
- version_requirements: *70269583926960
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
36
63
  - !ruby/object:Gem::Dependency
37
64
  name: guard-rspec
38
- requirement: &70269583926480 !ruby/object:Gem::Requirement
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ type: :development
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ - !ruby/object:Gem::Dependency
80
+ name: rb-fsevent
81
+ requirement: !ruby/object:Gem::Requirement
39
82
  none: false
40
83
  requirements:
41
84
  - - ! '>='
@@ -43,10 +86,15 @@ dependencies:
43
86
  version: '0'
44
87
  type: :development
45
88
  prerelease: false
46
- version_requirements: *70269583926480
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
47
95
  - !ruby/object:Gem::Dependency
48
- name: ruby_gntp
49
- requirement: &70269583925820 !ruby/object:Gem::Requirement
96
+ name: rb-inotify
97
+ requirement: !ruby/object:Gem::Requirement
50
98
  none: false
51
99
  requirements:
52
100
  - - ! '>='
@@ -54,10 +102,15 @@ dependencies:
54
102
  version: '0'
55
103
  type: :development
56
104
  prerelease: false
57
- version_requirements: *70269583925820
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
58
111
  - !ruby/object:Gem::Dependency
59
112
  name: httparty
60
- requirement: &70269583925220 !ruby/object:Gem::Requirement
113
+ requirement: !ruby/object:Gem::Requirement
61
114
  none: false
62
115
  requirements:
63
116
  - - ! '>='
@@ -65,10 +118,15 @@ dependencies:
65
118
  version: '0'
66
119
  type: :development
67
120
  prerelease: false
68
- version_requirements: *70269583925220
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
69
127
  - !ruby/object:Gem::Dependency
70
128
  name: fakeweb
71
- requirement: &70269583924640 !ruby/object:Gem::Requirement
129
+ requirement: !ruby/object:Gem::Requirement
72
130
  none: false
73
131
  requirements:
74
132
  - - ! '>='
@@ -76,10 +134,15 @@ dependencies:
76
134
  version: '0'
77
135
  type: :development
78
136
  prerelease: false
79
- version_requirements: *70269583924640
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
80
143
  - !ruby/object:Gem::Dependency
81
144
  name: simplecov
82
- requirement: &70269583924180 !ruby/object:Gem::Requirement
145
+ requirement: !ruby/object:Gem::Requirement
83
146
  none: false
84
147
  requirements:
85
148
  - - ! '>='
@@ -87,10 +150,15 @@ dependencies:
87
150
  version: '0'
88
151
  type: :development
89
152
  prerelease: false
90
- version_requirements: *70269583924180
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
91
159
  - !ruby/object:Gem::Dependency
92
160
  name: simplecov-rcov
93
- requirement: &70269583923640 !ruby/object:Gem::Requirement
161
+ requirement: !ruby/object:Gem::Requirement
94
162
  none: false
95
163
  requirements:
96
164
  - - ! '>='
@@ -98,10 +166,15 @@ dependencies:
98
166
  version: '0'
99
167
  type: :development
100
168
  prerelease: false
101
- version_requirements: *70269583923640
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ! '>='
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
102
175
  - !ruby/object:Gem::Dependency
103
176
  name: pry
104
- requirement: &70269583923020 !ruby/object:Gem::Requirement
177
+ requirement: !ruby/object:Gem::Requirement
105
178
  none: false
106
179
  requirements:
107
180
  - - ! '>='
@@ -109,10 +182,15 @@ dependencies:
109
182
  version: '0'
110
183
  type: :development
111
184
  prerelease: false
112
- version_requirements: *70269583923020
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ! '>='
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
113
191
  - !ruby/object:Gem::Dependency
114
192
  name: dalli
115
- requirement: &70269583922400 !ruby/object:Gem::Requirement
193
+ requirement: !ruby/object:Gem::Requirement
116
194
  none: false
117
195
  requirements:
118
196
  - - ! '>='
@@ -120,10 +198,15 @@ dependencies:
120
198
  version: '0'
121
199
  type: :runtime
122
200
  prerelease: false
123
- version_requirements: *70269583922400
201
+ version_requirements: !ruby/object:Gem::Requirement
202
+ none: false
203
+ requirements:
204
+ - - ! '>='
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
124
207
  - !ruby/object:Gem::Dependency
125
208
  name: activesupport
126
- requirement: &70269583921500 !ruby/object:Gem::Requirement
209
+ requirement: !ruby/object:Gem::Requirement
127
210
  none: false
128
211
  requirements:
129
212
  - - ! '>='
@@ -131,10 +214,15 @@ dependencies:
131
214
  version: '0'
132
215
  type: :runtime
133
216
  prerelease: false
134
- version_requirements: *70269583921500
217
+ version_requirements: !ruby/object:Gem::Requirement
218
+ none: false
219
+ requirements:
220
+ - - ! '>='
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
135
223
  - !ruby/object:Gem::Dependency
136
224
  name: activemodel
137
- requirement: &70269583920740 !ruby/object:Gem::Requirement
225
+ requirement: !ruby/object:Gem::Requirement
138
226
  none: false
139
227
  requirements:
140
228
  - - ! '>='
@@ -142,10 +230,15 @@ dependencies:
142
230
  version: '0'
143
231
  type: :runtime
144
232
  prerelease: false
145
- version_requirements: *70269583920740
233
+ version_requirements: !ruby/object:Gem::Requirement
234
+ none: false
235
+ requirements:
236
+ - - ! '>='
237
+ - !ruby/object:Gem::Version
238
+ version: '0'
146
239
  - !ruby/object:Gem::Dependency
147
240
  name: json
148
- requirement: &70269583919560 !ruby/object:Gem::Requirement
241
+ requirement: !ruby/object:Gem::Requirement
149
242
  none: false
150
243
  requirements:
151
244
  - - ! '>='
@@ -153,10 +246,15 @@ dependencies:
153
246
  version: '0'
154
247
  type: :runtime
155
248
  prerelease: false
156
- version_requirements: *70269583919560
249
+ version_requirements: !ruby/object:Gem::Requirement
250
+ none: false
251
+ requirements:
252
+ - - ! '>='
253
+ - !ruby/object:Gem::Version
254
+ version: '0'
157
255
  - !ruby/object:Gem::Dependency
158
256
  name: rake
159
- requirement: &70269583918780 !ruby/object:Gem::Requirement
257
+ requirement: !ruby/object:Gem::Requirement
160
258
  none: false
161
259
  requirements:
162
260
  - - ! '>='
@@ -164,10 +262,16 @@ dependencies:
164
262
  version: '0'
165
263
  type: :runtime
166
264
  prerelease: false
167
- version_requirements: *70269583918780
265
+ version_requirements: !ruby/object:Gem::Requirement
266
+ none: false
267
+ requirements:
268
+ - - ! '>='
269
+ - !ruby/object:Gem::Version
270
+ version: '0'
168
271
  description: Provides an interface to REST apis with objects and a cache. Zero effort!
169
272
  email:
170
273
  - timon@exvo.com
274
+ - pawel.goscicki@gmail.com
171
275
  executables: []
172
276
  extensions: []
173
277
  extra_rdoc_files: []
@@ -207,10 +311,13 @@ files:
207
311
  - spec/amfetamine/rspec_matchers_spec.rb
208
312
  - spec/amfetamine/testing_helpers_spec.rb
209
313
  - spec/dummy/child.rb
210
- - spec/dummy/configure.rb
211
314
  - spec/dummy/dummy.rb
212
315
  - spec/dummy/dummy_rest_client.rb
316
+ - spec/dummy/infant.rb
317
+ - spec/dummy/student.rb
318
+ - spec/dummy/teacher.rb
213
319
  - spec/helpers/active_model_lint.rb
320
+ - spec/helpers/id_pool.rb
214
321
  - spec/spec_helper.rb
215
322
  homepage: http://www.github.com/exvo/amfetamine
216
323
  licenses: []
@@ -226,7 +333,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
226
333
  version: '0'
227
334
  segments:
228
335
  - 0
229
- hash: 3715502227106984049
336
+ hash: 4163932578961634705
230
337
  required_rubygems_version: !ruby/object:Gem::Requirement
231
338
  none: false
232
339
  requirements:
@@ -235,10 +342,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
235
342
  version: '0'
236
343
  segments:
237
344
  - 0
238
- hash: 3715502227106984049
345
+ hash: 4163932578961634705
239
346
  requirements: []
240
347
  rubyforge_project: amfetamine
241
- rubygems_version: 1.8.16
348
+ rubygems_version: 1.8.24
242
349
  signing_key:
243
350
  specification_version: 3
244
351
  summary: REST object abstraction on steroids the makes shit go boom!
@@ -254,8 +361,11 @@ test_files:
254
361
  - spec/amfetamine/rspec_matchers_spec.rb
255
362
  - spec/amfetamine/testing_helpers_spec.rb
256
363
  - spec/dummy/child.rb
257
- - spec/dummy/configure.rb
258
364
  - spec/dummy/dummy.rb
259
365
  - spec/dummy/dummy_rest_client.rb
366
+ - spec/dummy/infant.rb
367
+ - spec/dummy/student.rb
368
+ - spec/dummy/teacher.rb
260
369
  - spec/helpers/active_model_lint.rb
370
+ - spec/helpers/id_pool.rb
261
371
  - spec/spec_helper.rb
@@ -1,4 +0,0 @@
1
- Amfetamine::Config.configure do |config|
2
- config.memcached_instance = 'localhost:11211'
3
- config.rest_client = DummyRestClient
4
- end