api_resource 0.2.11 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -2,7 +2,7 @@ source "http://rubygems.org"
2
2
  # Add dependencies required to use your gem here.
3
3
  # Example:
4
4
  # gem "activesupport", ">= 2.3.5"
5
- gem 'rails', '3.0.9'
5
+ gem 'rails', '~> 3'
6
6
  gem 'hash_dealer'
7
7
  gem 'rest-client'
8
8
  gem 'log4r'
@@ -10,6 +10,12 @@ gem 'differ'
10
10
  gem 'colorize'
11
11
  gem 'json', :require => 'json/ext'
12
12
 
13
+ group :development, :staging do
14
+ gem 'pry'
15
+ gem 'pry-doc'
16
+ gem 'pry-nav'
17
+ end
18
+
13
19
  # Add dependencies to develop your gem here.
14
20
  # Include everything needed to run rake, tests, features, etc.
15
21
  group :development do
@@ -25,6 +31,6 @@ group :development do
25
31
  gem 'mocha'
26
32
  gem "bundler"
27
33
  gem "jeweler", "~> 1.6.4"
28
- gem 'activerecord', '3.0.9'
34
+ gem 'activerecord', '~> 3'
29
35
  gem "sqlite3"
30
36
  end
data/Gemfile.lock CHANGED
@@ -1,50 +1,50 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- abstract (1.0.0)
5
- actionmailer (3.0.9)
6
- actionpack (= 3.0.9)
7
- mail (~> 2.2.19)
8
- actionpack (3.0.9)
9
- activemodel (= 3.0.9)
10
- activesupport (= 3.0.9)
11
- builder (~> 2.1.2)
12
- erubis (~> 2.6.6)
13
- i18n (~> 0.5.0)
14
- rack (~> 1.2.1)
15
- rack-mount (~> 0.6.14)
16
- rack-test (~> 0.5.7)
17
- tzinfo (~> 0.3.23)
18
- activemodel (3.0.9)
19
- activesupport (= 3.0.9)
20
- builder (~> 2.1.2)
21
- i18n (~> 0.5.0)
22
- activerecord (3.0.9)
23
- activemodel (= 3.0.9)
24
- activesupport (= 3.0.9)
25
- arel (~> 2.0.10)
26
- tzinfo (~> 0.3.23)
27
- activeresource (3.0.9)
28
- activemodel (= 3.0.9)
29
- activesupport (= 3.0.9)
30
- activesupport (3.0.9)
4
+ actionmailer (3.2.6)
5
+ actionpack (= 3.2.6)
6
+ mail (~> 2.4.4)
7
+ actionpack (3.2.6)
8
+ activemodel (= 3.2.6)
9
+ activesupport (= 3.2.6)
10
+ builder (~> 3.0.0)
11
+ erubis (~> 2.7.0)
12
+ journey (~> 1.0.1)
13
+ rack (~> 1.4.0)
14
+ rack-cache (~> 1.2)
15
+ rack-test (~> 0.6.1)
16
+ sprockets (~> 2.1.3)
17
+ activemodel (3.2.6)
18
+ activesupport (= 3.2.6)
19
+ builder (~> 3.0.0)
20
+ activerecord (3.2.6)
21
+ activemodel (= 3.2.6)
22
+ activesupport (= 3.2.6)
23
+ arel (~> 3.0.2)
24
+ tzinfo (~> 0.3.29)
25
+ activeresource (3.2.6)
26
+ activemodel (= 3.2.6)
27
+ activesupport (= 3.2.6)
28
+ activesupport (3.2.6)
29
+ i18n (~> 0.6)
30
+ multi_json (~> 1.0)
31
31
  archive-tar-minitar (0.5.2)
32
- arel (2.0.10)
33
- builder (2.1.2)
32
+ arel (3.0.2)
33
+ builder (3.0.0)
34
+ coderay (1.0.6)
34
35
  colorize (0.5.8)
35
36
  columnize (0.3.6)
36
37
  diff-lcs (1.1.3)
37
38
  differ (0.1.2)
38
- erubis (2.6.6)
39
- abstract (>= 1.0.0)
40
- factory_girl (2.3.2)
41
- activesupport
39
+ erubis (2.7.0)
40
+ factory_girl (2.6.1)
41
+ activesupport (>= 2.3.9)
42
42
  faker (1.0.1)
43
43
  i18n (~> 0.4)
44
44
  ffi (1.0.11)
45
45
  git (1.2.5)
46
46
  growl (1.0.3)
47
- guard (0.10.0)
47
+ guard (1.0.1)
48
48
  ffi (>= 0.5.0)
49
49
  thor (~> 0.14.6)
50
50
  guard-rspec (0.6.0)
@@ -53,45 +53,59 @@ GEM
53
53
  activesupport
54
54
  colorize
55
55
  i18n
56
- i18n (0.5.0)
56
+ hike (1.2.1)
57
+ i18n (0.6.0)
57
58
  jeweler (1.6.4)
58
59
  bundler (~> 1.0)
59
60
  git (>= 1.2.5)
60
61
  rake
61
- json (1.6.4)
62
+ journey (1.0.4)
63
+ json (1.7.3)
62
64
  linecache19 (0.5.12)
63
65
  ruby_core_source (>= 0.1.4)
64
66
  log4r (1.1.10)
65
- mail (2.2.19)
66
- activesupport (>= 2.3.6)
67
+ mail (2.4.4)
67
68
  i18n (>= 0.4.0)
68
69
  mime-types (~> 1.16)
69
70
  treetop (~> 1.4.8)
70
71
  metaclass (0.0.1)
71
- mime-types (1.17.2)
72
- mocha (0.10.0)
72
+ method_source (0.7.1)
73
+ mime-types (1.19)
74
+ mocha (0.10.5)
73
75
  metaclass (~> 0.0.1)
74
- multi_json (1.0.4)
76
+ multi_json (1.3.6)
75
77
  polyglot (0.3.3)
76
- rack (1.2.5)
77
- rack-mount (0.6.14)
78
- rack (>= 1.0.0)
79
- rack-test (0.5.7)
78
+ pry (0.9.9.6)
79
+ coderay (~> 1.0.5)
80
+ method_source (~> 0.7.1)
81
+ slop (>= 2.4.4, < 3)
82
+ pry-doc (0.4.2)
83
+ pry (>= 0.9.0)
84
+ yard (~> 0.8.1)
85
+ pry-nav (0.2.1)
86
+ pry (~> 0.9.9)
87
+ rack (1.4.1)
88
+ rack-cache (1.2)
89
+ rack (>= 0.4)
90
+ rack-ssl (1.3.2)
91
+ rack
92
+ rack-test (0.6.1)
80
93
  rack (>= 1.0)
81
- rails (3.0.9)
82
- actionmailer (= 3.0.9)
83
- actionpack (= 3.0.9)
84
- activerecord (= 3.0.9)
85
- activeresource (= 3.0.9)
86
- activesupport (= 3.0.9)
94
+ rails (3.2.6)
95
+ actionmailer (= 3.2.6)
96
+ actionpack (= 3.2.6)
97
+ activerecord (= 3.2.6)
98
+ activeresource (= 3.2.6)
99
+ activesupport (= 3.2.6)
87
100
  bundler (~> 1.0)
88
- railties (= 3.0.9)
89
- railties (3.0.9)
90
- actionpack (= 3.0.9)
91
- activesupport (= 3.0.9)
101
+ railties (= 3.2.6)
102
+ railties (3.2.6)
103
+ actionpack (= 3.2.6)
104
+ activesupport (= 3.2.6)
105
+ rack-ssl (~> 1.3.2)
92
106
  rake (>= 0.8.7)
93
107
  rdoc (~> 3.4)
94
- thor (~> 0.14.4)
108
+ thor (>= 0.14.6, < 2.0)
95
109
  rake (0.9.2.2)
96
110
  rdoc (3.12)
97
111
  json (~> 1.4)
@@ -120,22 +134,29 @@ GEM
120
134
  ruby-debug-base19 (>= 0.11.19)
121
135
  ruby_core_source (0.1.5)
122
136
  archive-tar-minitar (>= 0.5.2)
123
- simplecov (0.5.4)
124
- multi_json (~> 1.0.3)
137
+ simplecov (0.6.1)
138
+ multi_json (~> 1.0)
125
139
  simplecov-html (~> 0.5.3)
126
140
  simplecov-html (0.5.3)
141
+ slop (2.4.4)
142
+ sprockets (2.1.3)
143
+ hike (~> 1.2)
144
+ rack (~> 1.0)
145
+ tilt (~> 1.1, != 1.3.0)
127
146
  sqlite3 (1.3.5)
128
147
  thor (0.14.6)
148
+ tilt (1.3.3)
129
149
  treetop (1.4.10)
130
150
  polyglot
131
151
  polyglot (>= 0.3.1)
132
- tzinfo (0.3.31)
152
+ tzinfo (0.3.33)
153
+ yard (0.8.2.1)
133
154
 
134
155
  PLATFORMS
135
156
  ruby
136
157
 
137
158
  DEPENDENCIES
138
- activerecord (= 3.0.9)
159
+ activerecord (~> 3)
139
160
  bundler
140
161
  colorize
141
162
  differ
@@ -149,7 +170,10 @@ DEPENDENCIES
149
170
  json
150
171
  log4r
151
172
  mocha
152
- rails (= 3.0.9)
173
+ pry
174
+ pry-doc
175
+ pry-nav
176
+ rails (~> 3)
153
177
  rest-client
154
178
  rspec
155
179
  rspec-rails
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.11
1
+ 0.3.0
data/api_resource.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "api_resource"
8
- s.version = "0.2.11"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ethan Langevin"]
12
- s.date = "2012-06-21"
12
+ s.date = "2012-06-23"
13
13
  s.description = "A replacement for ActiveResource for RESTful APIs that handles associated object and multiple data sources"
14
14
  s.email = "ejl6266@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -60,6 +60,7 @@ Gem::Specification.new do |s|
60
60
  "lib/api_resource/railtie.rb",
61
61
  "lib/api_resource/scopes.rb",
62
62
  "nohup.out",
63
+ "spec/lib/api_resource_spec.rb",
63
64
  "spec/lib/associations_spec.rb",
64
65
  "spec/lib/attributes_spec.rb",
65
66
  "spec/lib/base_spec.rb",
@@ -80,20 +81,23 @@ Gem::Specification.new do |s|
80
81
  s.homepage = "http://github.com/ejlangev/resource"
81
82
  s.licenses = ["MIT"]
82
83
  s.require_paths = ["lib"]
83
- s.rubygems_version = "1.8.17"
84
+ s.rubygems_version = "1.8.11"
84
85
  s.summary = "A replacement for ActiveResource for RESTful APIs that handles associated object and multiple data sources"
85
86
 
86
87
  if s.respond_to? :specification_version then
87
88
  s.specification_version = 3
88
89
 
89
90
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
90
- s.add_runtime_dependency(%q<rails>, ["= 3.0.9"])
91
+ s.add_runtime_dependency(%q<rails>, ["~> 3"])
91
92
  s.add_runtime_dependency(%q<hash_dealer>, [">= 0"])
92
93
  s.add_runtime_dependency(%q<rest-client>, [">= 0"])
93
94
  s.add_runtime_dependency(%q<log4r>, [">= 0"])
94
95
  s.add_runtime_dependency(%q<differ>, [">= 0"])
95
96
  s.add_runtime_dependency(%q<colorize>, [">= 0"])
96
97
  s.add_runtime_dependency(%q<json>, [">= 0"])
98
+ s.add_development_dependency(%q<pry>, [">= 0"])
99
+ s.add_development_dependency(%q<pry-doc>, [">= 0"])
100
+ s.add_development_dependency(%q<pry-nav>, [">= 0"])
97
101
  s.add_development_dependency(%q<rspec>, [">= 0"])
98
102
  s.add_development_dependency(%q<ruby-debug19>, [">= 0"])
99
103
  s.add_development_dependency(%q<growl>, [">= 0"])
@@ -106,16 +110,19 @@ Gem::Specification.new do |s|
106
110
  s.add_development_dependency(%q<mocha>, [">= 0"])
107
111
  s.add_development_dependency(%q<bundler>, [">= 0"])
108
112
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
109
- s.add_development_dependency(%q<activerecord>, ["= 3.0.9"])
113
+ s.add_development_dependency(%q<activerecord>, ["~> 3"])
110
114
  s.add_development_dependency(%q<sqlite3>, [">= 0"])
111
115
  else
112
- s.add_dependency(%q<rails>, ["= 3.0.9"])
116
+ s.add_dependency(%q<rails>, ["~> 3"])
113
117
  s.add_dependency(%q<hash_dealer>, [">= 0"])
114
118
  s.add_dependency(%q<rest-client>, [">= 0"])
115
119
  s.add_dependency(%q<log4r>, [">= 0"])
116
120
  s.add_dependency(%q<differ>, [">= 0"])
117
121
  s.add_dependency(%q<colorize>, [">= 0"])
118
122
  s.add_dependency(%q<json>, [">= 0"])
123
+ s.add_dependency(%q<pry>, [">= 0"])
124
+ s.add_dependency(%q<pry-doc>, [">= 0"])
125
+ s.add_dependency(%q<pry-nav>, [">= 0"])
119
126
  s.add_dependency(%q<rspec>, [">= 0"])
120
127
  s.add_dependency(%q<ruby-debug19>, [">= 0"])
121
128
  s.add_dependency(%q<growl>, [">= 0"])
@@ -128,17 +135,20 @@ Gem::Specification.new do |s|
128
135
  s.add_dependency(%q<mocha>, [">= 0"])
129
136
  s.add_dependency(%q<bundler>, [">= 0"])
130
137
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
131
- s.add_dependency(%q<activerecord>, ["= 3.0.9"])
138
+ s.add_dependency(%q<activerecord>, ["~> 3"])
132
139
  s.add_dependency(%q<sqlite3>, [">= 0"])
133
140
  end
134
141
  else
135
- s.add_dependency(%q<rails>, ["= 3.0.9"])
142
+ s.add_dependency(%q<rails>, ["~> 3"])
136
143
  s.add_dependency(%q<hash_dealer>, [">= 0"])
137
144
  s.add_dependency(%q<rest-client>, [">= 0"])
138
145
  s.add_dependency(%q<log4r>, [">= 0"])
139
146
  s.add_dependency(%q<differ>, [">= 0"])
140
147
  s.add_dependency(%q<colorize>, [">= 0"])
141
148
  s.add_dependency(%q<json>, [">= 0"])
149
+ s.add_dependency(%q<pry>, [">= 0"])
150
+ s.add_dependency(%q<pry-doc>, [">= 0"])
151
+ s.add_dependency(%q<pry-nav>, [">= 0"])
142
152
  s.add_dependency(%q<rspec>, [">= 0"])
143
153
  s.add_dependency(%q<ruby-debug19>, [">= 0"])
144
154
  s.add_dependency(%q<growl>, [">= 0"])
@@ -151,7 +161,7 @@ Gem::Specification.new do |s|
151
161
  s.add_dependency(%q<mocha>, [">= 0"])
152
162
  s.add_dependency(%q<bundler>, [">= 0"])
153
163
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
154
- s.add_dependency(%q<activerecord>, ["= 3.0.9"])
164
+ s.add_dependency(%q<activerecord>, ["~> 3"])
155
165
  s.add_dependency(%q<sqlite3>, [">= 0"])
156
166
  end
157
167
  end
data/lib/api_resource.rb CHANGED
@@ -1,9 +1,10 @@
1
1
  require 'active_support'
2
2
  require 'active_support/inflector'
3
- require 'active_support/core_ext/hash'
4
- require 'active_support/core_ext/object'
5
- require 'active_support/core_ext/class/attribute_accessors'
6
- require 'active_support/core_ext/class/inheritable_attributes'
3
+ require 'active_support/core_ext'
4
+ #require 'active_support/core_ext/hash'
5
+ #require 'active_support/core_ext/object'
6
+ #require 'active_support/core_ext/class/attribute_accessors'
7
+ #require 'active_support/core_ext/class/inheritable_attributes'
7
8
  require 'api_resource/core_extensions'
8
9
 
9
10
  require 'active_model'
@@ -52,30 +53,31 @@ module ApiResource
52
53
  Mocks.clear_endpoints
53
54
  Mocks.init
54
55
 
55
- Dir["#{File.dirname(__FILE__)}/../spec/support/requests/*.rb"].each {|f| require f}
56
- Dir["#{File.dirname(__FILE__)}/../spec/support/**/*.rb"].each {|f| require f}
56
+ Dir["#{File.dirname(__FILE__)}/../spec/support/requests/*.rb"].each {|f|
57
+ require f
58
+ }
59
+ Dir["#{File.dirname(__FILE__)}/../spec/support/**/*.rb"].each {|f|
60
+ require f
61
+ }
57
62
  end
58
-
63
+
59
64
  class << self
60
- [:site, :site=, :format, :format=, :token, :token=, :timeout, :open_timeout, :reset_connection].each do |m|
61
- define_method(m) do |*args|
62
- ApiResource::Base.send(m, *args)
63
- end
64
- end
65
+
66
+ delegate :site, :site=, :format, :format=,
67
+ :token, :token=, :timeout,
68
+ :open_timeout,
69
+ :reset_connection, :ttl, :ttl=,
70
+ :to => ApiResource::Base
71
+
65
72
  end
66
-
67
- # Run a block with a given token - useful for AroundFilters
68
- def self.with_token(new_token, &block)
69
- old_token = self.token
70
- begin
71
- self.token = new_token
72
- yield
73
- ensure
74
- self.token = old_token
73
+
74
+ def self.cache(reset = false)
75
+ @cache = nil if reset
76
+ @cache ||= begin
77
+ defined?(Rails) ? Rails.cache : ActiveSupport::Cache::MemoryStore.new
75
78
  end
76
79
  end
77
80
 
78
-
79
81
  # set the timeout val and reset the connection
80
82
  def self.timeout=(val)
81
83
  ApiResource::Base.timeout = val
@@ -89,8 +91,28 @@ module ApiResource
89
91
  self.reset_connection
90
92
  val
91
93
  end
92
-
93
94
  self.timeout = self.open_timeout = DEFAULT_TIMEOUT
95
+
96
+ # Run a block with a given token - useful for AroundFilters
97
+ def self.with_token(new_token, &block)
98
+ old_token = self.token
99
+ begin
100
+ self.token = new_token
101
+ yield
102
+ ensure
103
+ self.token = old_token
104
+ end
105
+ end
106
+
107
+ def with_ttl(new_ttl, &block)
108
+ old_ttl = self.ttl
109
+ begin
110
+ self.ttl = new_ttl
111
+ yield
112
+ ensure
113
+ self.ttl = old_ttl
114
+ end
115
+ end
94
116
 
95
117
  # logger
96
118
  def self.logger
@@ -107,4 +129,4 @@ module ApiResource
107
129
  # return @@logging = val
108
130
  # end
109
131
 
110
- end
132
+ end
@@ -20,8 +20,8 @@ module ApiResource
20
20
  included do
21
21
 
22
22
  raise "Cannot include Associations without first including AssociationActivation" unless self.ancestors.include?(ApiResource::AssociationActivation)
23
- class_inheritable_accessor :related_objects
24
-
23
+ class_attribute :related_objects
24
+
25
25
  # Hash to hold onto the definitions of the related objects
26
26
  self.related_objects = RelatedObjectHash.new
27
27
  self.association_types.keys.each do |type|
@@ -57,7 +57,8 @@ module ApiResource
57
57
  klass_name = (options[:class_name] ? options[:class_name].to_s.classify : arg.to_s.classify)
58
58
  # add this to any descendants - the other methods etc are handled by inheritance
59
59
  ([self] + self.descendants).each do |klass|
60
- klass.related_objects[:#{assoc}][arg.to_sym] = klass_name
60
+ #We need to merge upon itself to generate a new object since the children all share their related objects with each other
61
+ klass.related_objects = klass.related_objects.merge(:#{assoc} => klass.related_objects[:#{assoc}].merge(arg.to_sym => klass_name))
61
62
  end
62
63
  # We need to define reader and writer methods here
63
64
  define_association_as_attribute(:#{assoc}, arg)
@@ -154,19 +155,17 @@ module ApiResource
154
155
 
155
156
  end
156
157
 
157
- module InstanceMethods
158
- def association?(assoc)
159
- self.class.association?(assoc)
160
- end
161
-
162
- def association_class_name(assoc)
163
- self.class.association_class_name(assoc)
164
- end
165
-
166
- # list of all association names
167
- def association_names
168
- self.class.association_names
169
- end
158
+ def association?(assoc)
159
+ self.class.association?(assoc)
160
+ end
161
+
162
+ def association_class_name(assoc)
163
+ self.class.association_class_name(assoc)
164
+ end
165
+
166
+ # list of all association names
167
+ def association_names
168
+ self.class.association_names
170
169
  end
171
170
 
172
171
  end