amfetamine 0.2.12 → 0.3.0

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/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