find_as_hashes 0.3.0 → 0.4.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/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- find_as_hashes (0.3.0)
4
+ find_as_hashes (0.4.0)
5
5
  activerecord
6
6
 
7
7
  GEM
@@ -17,27 +17,33 @@ GEM
17
17
  activesupport (= 3.1.0)
18
18
  arel (~> 2.2.1)
19
19
  tzinfo (~> 0.3.29)
20
+ activeresource (3.1.0)
21
+ activemodel (= 3.1.0)
22
+ activesupport (= 3.1.0)
20
23
  activesupport (3.1.0)
21
24
  multi_json (~> 1.0)
22
- ansi (1.3.0)
23
- arel (2.2.1)
25
+ ansi (1.4.3)
26
+ arel (2.2.3)
24
27
  bcrypt-ruby (3.0.1)
25
- builder (3.0.0)
26
- i18n (0.6.0)
28
+ builder (3.0.4)
29
+ fakeweb (1.3.0)
30
+ i18n (0.6.1)
27
31
  multi_json (1.0.3)
28
32
  rake (0.9.2)
29
33
  shoulda (2.11.3)
30
34
  sqlite3 (1.3.4)
31
35
  turn (0.8.2)
32
36
  ansi (>= 1.2.2)
33
- tzinfo (0.3.33)
37
+ tzinfo (0.3.35)
34
38
 
35
39
  PLATFORMS
36
40
  ruby
37
41
 
38
42
  DEPENDENCIES
43
+ activeresource
39
44
  activesupport
40
45
  bundler
46
+ fakeweb
41
47
  find_as_hashes!
42
48
  rake
43
49
  shoulda
data/README.markdown CHANGED
@@ -1,5 +1,7 @@
1
1
  [![TravisCI](https://secure.travis-ci.org/tstmedia/find_as_hashes.png "TravisCI")](http://travis-ci.org/tstmedia/find_as_hashes "Travis-CI FindAsHashes")
2
2
 
3
+ # ActiveRecord
4
+
3
5
  Adds methods to return attribute hashes rather than instantiated
4
6
  ActiveRecord objects. This is useful when working with large sets of
5
7
  records and you need the performance more than you need the convenience
@@ -42,6 +44,42 @@ In one example, looping through 36,400 User records and accessing an
42
44
  attribute used 32% less memory and performed 17% quicker using
43
45
  `all_as_hashes` over `all`.
44
46
 
47
+ # ActiveResource
48
+
49
+ The equivalent methods are available in ActiveResource as well, providing
50
+ similar benefits.
51
+
52
+ ## Methods
53
+
54
+ The hashes that return are essentially the xml or json data hashified.
55
+
56
+ * `all_as_hashes` works similarly to `all`, but returns the results as
57
+ an array of hashes.
58
+ * `find_as_hashes` works similarly to `find`, but returns the results as
59
+ an array of hashes.
60
+ * `first_as_hash` works similarly to `first`, but returns a hash of the
61
+ first matching record.
62
+ * `last_as_hash` works similarly to `last`, but returns a hash of the
63
+ last matching record.
64
+
65
+ ## Usage
66
+
67
+ To enable the use of these methods, simply add this line to the top of your
68
+ ActiveResource class.
69
+
70
+ `require 'active_resource/find_as_hashes'`
71
+
72
+ ## Examples
73
+
74
+ > User.all_as_hashes(:active => 1)
75
+ => [
76
+ {:id => 123, :name => "Joe User", :active => 1,},
77
+ {:id => 456, :name => "Jane User", :active => 1}
78
+ ]
79
+
80
+ > User.first_as_hash(:active => 1)
81
+ => {:id => 123, :name => "Joe User", :active => 1}
82
+
45
83
  ## Tests
46
84
 
47
85
  Run tests with `bundle exec rake test` (or just `rake test` if you're
@@ -22,6 +22,8 @@ Gem::Specification.new do |s|
22
22
  s.add_development_dependency "rake"
23
23
  s.add_development_dependency "turn"
24
24
  s.add_development_dependency "shoulda"
25
+ s.add_development_dependency "fakeweb"
25
26
  s.add_development_dependency "activesupport"
26
27
  s.add_development_dependency "sqlite3"
28
+ s.add_development_dependency "activeresource"
27
29
  end
@@ -0,0 +1,37 @@
1
+ require "find_as_hashes/version"
2
+ require 'active_resource'
3
+
4
+ module ActiveResource
5
+ class Base
6
+ class << self
7
+ def find_as_hashes(*args)
8
+ @skip_instantiate = true
9
+ find(*args)
10
+ end
11
+
12
+ def all_as_hashes(*args)
13
+ find_as_hashes(:all, *args)
14
+ end
15
+
16
+ def first_as_hash(*args)
17
+ find_as_hashes(:first, *args)
18
+ end
19
+
20
+ def last_as_hash(*args)
21
+ find_as_hashes(:last, *args)
22
+ end
23
+
24
+ def instantiate_collection_with_check(collection, prefix_options = {})
25
+ if @skip_instantiate
26
+ @skip_instantiate = nil
27
+ collection
28
+ else
29
+ instantiate_collection_without_check(collection, prefix_options)
30
+ end
31
+ end
32
+
33
+ alias_method :instantiate_collection_without_check, :instantiate_collection
34
+ alias_method :instantiate_collection, :instantiate_collection_with_check
35
+ end
36
+ end
37
+ end
@@ -1,3 +1,3 @@
1
1
  module FindAsHashes
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -0,0 +1,61 @@
1
+ require File.dirname(__FILE__) + "/test_helper"
2
+ require 'fakeweb'
3
+ require 'active_resource/find_as_hashes'
4
+
5
+ module Resource
6
+ class User < ActiveResource::Base
7
+ self.site = 'http://api.test.com/'
8
+ self.format = :json
9
+ end
10
+ end
11
+
12
+ class ActiveResourceTest < ActiveSupport::TestCase
13
+ def setup
14
+ FakeWeb.allow_net_connect = false
15
+ FakeWeb.register_uri(:get, "http://api.test.com/users.json", :body => User.all.to_json, :status => ["200", "OK"])
16
+ end
17
+
18
+ def teardown
19
+ FakeWeb.allow_net_connect = true
20
+ FakeWeb.clean_registry
21
+ end
22
+
23
+ context "#all_as_hashes" do
24
+ setup do
25
+ @records = Resource::User.all
26
+ @hashes = Resource::User.all_as_hashes
27
+ end
28
+
29
+ should "return an array of attribute hashes" do
30
+ assert_equal Array, @hashes.class
31
+ assert @hashes.all? { |hash| hash.class == Hash }
32
+ assert @records.all? { |record| record.class != Hash }
33
+ end
34
+ end
35
+
36
+ context "#first_as_hash" do
37
+ setup do
38
+ @record = Resource::User.first
39
+ @hash = Resource::User.first_as_hash
40
+ end
41
+
42
+ should "return a single hash" do
43
+ assert_equal Hash, @hash.class
44
+ assert_equal Resource::User, @record.class
45
+ assert_equal @hash["user"]["name"], User.first.name
46
+ end
47
+ end
48
+
49
+ context "#last_as_hash" do
50
+ setup do
51
+ @record = Resource::User.last
52
+ @hash = Resource::User.last_as_hash
53
+ end
54
+
55
+ should "return a single hash" do
56
+ assert_equal Hash, @hash.class
57
+ assert_equal Resource::User, @record.class
58
+ assert_equal @hash["user"]["name"], User.last.name
59
+ end
60
+ end
61
+ end
metadata CHANGED
@@ -1,128 +1,160 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: find_as_hashes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
5
4
  prerelease:
5
+ version: 0.4.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Patrick Byrne
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-10 00:00:00.000000000 Z
12
+ date: 2013-01-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
+ version_requirements: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ none: false
21
+ prerelease: false
15
22
  name: activerecord
16
23
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
24
  requirements:
19
25
  - - ! '>='
20
26
  - !ruby/object:Gem::Version
21
27
  version: '0'
28
+ none: false
22
29
  type: :runtime
23
- prerelease: false
30
+ - !ruby/object:Gem::Dependency
24
31
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
32
  requirements:
27
33
  - - ! '>='
28
34
  - !ruby/object:Gem::Version
29
35
  version: '0'
30
- - !ruby/object:Gem::Dependency
36
+ none: false
37
+ prerelease: false
31
38
  name: bundler
32
39
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
40
  requirements:
35
41
  - - ! '>='
36
42
  - !ruby/object:Gem::Version
37
43
  version: '0'
44
+ none: false
38
45
  type: :development
39
- prerelease: false
46
+ - !ruby/object:Gem::Dependency
40
47
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
48
  requirements:
43
49
  - - ! '>='
44
50
  - !ruby/object:Gem::Version
45
51
  version: '0'
46
- - !ruby/object:Gem::Dependency
52
+ none: false
53
+ prerelease: false
47
54
  name: rake
48
55
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
56
  requirements:
51
57
  - - ! '>='
52
58
  - !ruby/object:Gem::Version
53
59
  version: '0'
60
+ none: false
54
61
  type: :development
55
- prerelease: false
62
+ - !ruby/object:Gem::Dependency
56
63
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
64
  requirements:
59
65
  - - ! '>='
60
66
  - !ruby/object:Gem::Version
61
67
  version: '0'
62
- - !ruby/object:Gem::Dependency
68
+ none: false
69
+ prerelease: false
63
70
  name: turn
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
73
  - - ! '>='
68
74
  - !ruby/object:Gem::Version
69
75
  version: '0'
76
+ none: false
70
77
  type: :development
71
- prerelease: false
78
+ - !ruby/object:Gem::Dependency
72
79
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
80
  requirements:
75
81
  - - ! '>='
76
82
  - !ruby/object:Gem::Version
77
83
  version: '0'
78
- - !ruby/object:Gem::Dependency
84
+ none: false
85
+ prerelease: false
79
86
  name: shoulda
80
87
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
88
  requirements:
83
89
  - - ! '>='
84
90
  - !ruby/object:Gem::Version
85
91
  version: '0'
92
+ none: false
86
93
  type: :development
87
- prerelease: false
94
+ - !ruby/object:Gem::Dependency
88
95
  version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ! '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
89
100
  none: false
101
+ prerelease: false
102
+ name: fakeweb
103
+ requirement: !ruby/object:Gem::Requirement
90
104
  requirements:
91
105
  - - ! '>='
92
106
  - !ruby/object:Gem::Version
93
107
  version: '0'
108
+ none: false
109
+ type: :development
94
110
  - !ruby/object:Gem::Dependency
111
+ version_requirements: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ! '>='
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ none: false
117
+ prerelease: false
95
118
  name: activesupport
96
119
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
120
  requirements:
99
121
  - - ! '>='
100
122
  - !ruby/object:Gem::Version
101
123
  version: '0'
124
+ none: false
102
125
  type: :development
103
- prerelease: false
126
+ - !ruby/object:Gem::Dependency
104
127
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
128
  requirements:
107
129
  - - ! '>='
108
130
  - !ruby/object:Gem::Version
109
131
  version: '0'
110
- - !ruby/object:Gem::Dependency
132
+ none: false
133
+ prerelease: false
111
134
  name: sqlite3
112
135
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
136
  requirements:
115
137
  - - ! '>='
116
138
  - !ruby/object:Gem::Version
117
139
  version: '0'
140
+ none: false
118
141
  type: :development
119
- prerelease: false
142
+ - !ruby/object:Gem::Dependency
120
143
  version_requirements: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ! '>='
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
121
148
  none: false
149
+ prerelease: false
150
+ name: activeresource
151
+ requirement: !ruby/object:Gem::Requirement
122
152
  requirements:
123
153
  - - ! '>='
124
154
  - !ruby/object:Gem::Version
125
155
  version: '0'
156
+ none: false
157
+ type: :development
126
158
  description: Provides ActiveRecord methods to return results as attribute hashes rather
127
159
  than instantiated ActiveRecord objects. Useful when working with very large sets
128
160
  of results to improve performance.
@@ -139,8 +171,10 @@ files:
139
171
  - README.markdown
140
172
  - Rakefile
141
173
  - find_as_hashes.gemspec
174
+ - lib/active_resource/find_as_hashes.rb
142
175
  - lib/find_as_hashes.rb
143
176
  - lib/find_as_hashes/version.rb
177
+ - test/active_resource_test.rb
144
178
  - test/find_as_hashes_test.rb
145
179
  - test/fixtures/roles.yml
146
180
  - test/fixtures/users.yml
@@ -152,23 +186,23 @@ rdoc_options: []
152
186
  require_paths:
153
187
  - lib
154
188
  required_ruby_version: !ruby/object:Gem::Requirement
155
- none: false
156
189
  requirements:
157
190
  - - ! '>='
158
191
  - !ruby/object:Gem::Version
159
192
  version: '0'
160
193
  segments:
161
194
  - 0
162
- hash: -4084673358938077351
163
- required_rubygems_version: !ruby/object:Gem::Requirement
195
+ hash: -2382583336894726517
164
196
  none: false
197
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
198
  requirements:
166
199
  - - ! '>='
167
200
  - !ruby/object:Gem::Version
168
201
  version: '0'
169
202
  segments:
170
203
  - 0
171
- hash: -4084673358938077351
204
+ hash: -2382583336894726517
205
+ none: false
172
206
  requirements: []
173
207
  rubyforge_project:
174
208
  rubygems_version: 1.8.24
@@ -177,6 +211,7 @@ specification_version: 3
177
211
  summary: Provides ActiveRecord methods to return results as attribute hashes rather
178
212
  than instantiated ActiveRecord objects.
179
213
  test_files:
214
+ - test/active_resource_test.rb
180
215
  - test/find_as_hashes_test.rb
181
216
  - test/fixtures/roles.yml
182
217
  - test/fixtures/users.yml