smooth-io 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. data/.gitignore +2 -0
  2. data/.rvmrc +1 -0
  3. data/.travis +6 -0
  4. data/CNAME +1 -0
  5. data/Gemfile +13 -0
  6. data/Gemfile.lock +147 -0
  7. data/Guardfile +5 -0
  8. data/LICENSE.md +22 -0
  9. data/README.md +33 -0
  10. data/Rakefile +10 -0
  11. data/bin/smooth +8 -0
  12. data/doc/presenters.md +47 -0
  13. data/lib/smooth.rb +56 -0
  14. data/lib/smooth/adapters/rails_cache.rb +19 -0
  15. data/lib/smooth/adapters/redis_cache.rb +36 -0
  16. data/lib/smooth/backends/active_record.rb +56 -0
  17. data/lib/smooth/backends/base.rb +84 -0
  18. data/lib/smooth/backends/file.rb +80 -0
  19. data/lib/smooth/backends/redis.rb +71 -0
  20. data/lib/smooth/backends/redis_namespace.rb +10 -0
  21. data/lib/smooth/backends/rest_client.rb +29 -0
  22. data/lib/smooth/collection.rb +236 -0
  23. data/lib/smooth/collection/cacheable.rb +12 -0
  24. data/lib/smooth/collection/query.rb +14 -0
  25. data/lib/smooth/endpoint.rb +23 -0
  26. data/lib/smooth/meta_data.rb +33 -0
  27. data/lib/smooth/meta_data/application.rb +29 -0
  28. data/lib/smooth/meta_data/inspector.rb +67 -0
  29. data/lib/smooth/model.rb +93 -0
  30. data/lib/smooth/presentable.rb +76 -0
  31. data/lib/smooth/presentable/api_endpoint.rb +49 -0
  32. data/lib/smooth/presentable/chain.rb +46 -0
  33. data/lib/smooth/presentable/controller.rb +39 -0
  34. data/lib/smooth/queryable.rb +35 -0
  35. data/lib/smooth/queryable/converter.rb +8 -0
  36. data/lib/smooth/queryable/settings.rb +23 -0
  37. data/lib/smooth/resource.rb +10 -0
  38. data/lib/smooth/version.rb +3 -0
  39. data/smooth-io.gemspec +35 -0
  40. data/spec/blueprints/people.rb +4 -0
  41. data/spec/environment.rb +17 -0
  42. data/spec/lib/backends/active_record_spec.rb +17 -0
  43. data/spec/lib/backends/base_spec.rb +77 -0
  44. data/spec/lib/backends/file_spec.rb +46 -0
  45. data/spec/lib/backends/multi_spec.rb +47 -0
  46. data/spec/lib/backends/redis_namespace_spec.rb +41 -0
  47. data/spec/lib/backends/redis_spec.rb +40 -0
  48. data/spec/lib/backends/rest_client_spec.rb +0 -0
  49. data/spec/lib/collection/query_spec.rb +9 -0
  50. data/spec/lib/collection_spec.rb +87 -0
  51. data/spec/lib/examples/cacheable_collection_spec.rb +27 -0
  52. data/spec/lib/examples/smooth_model_spec.rb +13 -0
  53. data/spec/lib/meta_data/application_spec.rb +43 -0
  54. data/spec/lib/meta_data_spec.rb +32 -0
  55. data/spec/lib/model_spec.rb +54 -0
  56. data/spec/lib/presentable/api_endpoint_spec.rb +54 -0
  57. data/spec/lib/presentable_spec.rb +80 -0
  58. data/spec/lib/queryable/converter_spec.rb +104 -0
  59. data/spec/lib/queryable_spec.rb +27 -0
  60. data/spec/lib/resource_spec.rb +17 -0
  61. data/spec/lib/smooth_spec.rb +13 -0
  62. data/spec/spec_helper.rb +23 -0
  63. data/spec/support/models.rb +28 -0
  64. data/spec/support/schema.rb +16 -0
  65. metadata +359 -0
@@ -0,0 +1,27 @@
1
+ require "spec_helper"
2
+
3
+ describe Smooth::Queryable do
4
+ class QueryableHelper < ActiveRecord::Base
5
+ self.table_name = "people"
6
+
7
+ include Smooth::Queryable
8
+
9
+ can_be_queried_by :name
10
+ end
11
+
12
+ let(:q) { QueryableHelper }
13
+
14
+ it "should register the resource with the smooth metadata registry" do
15
+ Smooth::MetaData.available_resources.should include("QueryableHelper")
16
+ end
17
+
18
+ describe "Query Interface Metadata" do
19
+ it "should store some settings" do
20
+ q.smooth_queryable_settings.should be_a(Smooth::Queryable::Settings)
21
+ end
22
+
23
+ it "should expose the available query parameters " do
24
+ q.queryable_keys.should include(:name)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,17 @@
1
+ require "spec_helper"
2
+
3
+ describe Smooth::Resource do
4
+ class ResourceHelper < ActiveRecord::Base
5
+ self.table_name = :people
6
+ include Smooth::Resource
7
+ end
8
+
9
+ it "should be presentable" do
10
+ ResourceHelper.should respond_to(:present)
11
+ ResourceHelper.new.should respond_to(:present_as)
12
+ end
13
+
14
+ it "should be queryable" do
15
+ ResourceHelper.should respond_to(:query)
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ describe Smooth do
4
+ it "should have a setting for its data directory" do
5
+ Smooth.data_directory.should_not be_nil
6
+ end
7
+
8
+ it "should allow me to set the data directory" do
9
+ Smooth.data_directory = File.join(ENV['HOME'],'.smooth-test')
10
+ Smooth.data_directory.should match(/smooth-test/)
11
+ end
12
+ end
13
+
@@ -0,0 +1,23 @@
1
+ require 'machinist/active_record'
2
+ require 'sham'
3
+ require 'faker'
4
+ require 'rack/test'
5
+
6
+ require File.expand_path('../support/schema.rb', __FILE__)
7
+ require File.expand_path('../support/models.rb', __FILE__)
8
+
9
+ Sham.define do
10
+ name { Faker::Name.name }
11
+ salary {|index| 30000 + (index * 1000)}
12
+ end
13
+
14
+ RSpec.configure do |config|
15
+ config.before(:suite) do
16
+ Models.make
17
+ end
18
+
19
+ config.before(:all) { Sham.reset(:before_all) }
20
+ config.before(:each) { Sham.reset(:before_each) }
21
+ end
22
+
23
+ require 'smooth'
@@ -0,0 +1,28 @@
1
+ class Person < ActiveRecord::Base
2
+ belongs_to :parent, :class_name => "Person", :foreign_key => :parent_id
3
+
4
+ before_save :defaults
5
+
6
+ class << self
7
+ attr_accessor :legit_tracker
8
+ end
9
+
10
+ self.legit_tracker = 0
11
+
12
+ def defaults
13
+ self.legit = (self.class.legit_tracker % 2 == 0)
14
+ self.class.legit_tracker += 1
15
+ end
16
+ end
17
+
18
+ Dir[File.expand_path('../../blueprints/*.rb', __FILE__)].each do |f|
19
+ require f
20
+ end
21
+
22
+ class Models
23
+ def self.make
24
+ 10.times do
25
+ Person.make
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,16 @@
1
+ require 'active_record'
2
+
3
+ ActiveRecord::Base.establish_connection(adapter:"sqlite3",database:":memory:")
4
+
5
+ ActiveRecord::Base.silence do
6
+ ActiveRecord::Migration.verbose = false
7
+
8
+ ActiveRecord::Schema.define do
9
+ create_table :people, :force => true do |t|
10
+ t.string :name
11
+ t.boolean :legit, :default => false
12
+ t.integer :salary
13
+ t.integer :parent_id
14
+ end
15
+ end
16
+ end
metadata ADDED
@@ -0,0 +1,359 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: smooth-io
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jonathan Soeder
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-10-22 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activerecord
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.12
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.12
30
+ - !ruby/object:Gem::Dependency
31
+ name: activesupport
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 3.2.12
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 3.2.12
46
+ - !ruby/object:Gem::Dependency
47
+ name: redis
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: redis-namespace
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: typhoeus
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: virtus
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - '='
100
+ - !ruby/object:Gem::Version
101
+ version: 0.5.5
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - '='
108
+ - !ruby/object:Gem::Version
109
+ version: 0.5.5
110
+ - !ruby/object:Gem::Dependency
111
+ name: faye
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: sinatra
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: squeel
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ - !ruby/object:Gem::Dependency
159
+ name: rspec
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ~>
164
+ - !ruby/object:Gem::Version
165
+ version: 2.6.0
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ~>
172
+ - !ruby/object:Gem::Version
173
+ version: 2.6.0
174
+ - !ruby/object:Gem::Dependency
175
+ name: machinist
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ~>
180
+ - !ruby/object:Gem::Version
181
+ version: 1.0.6
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ~>
188
+ - !ruby/object:Gem::Version
189
+ version: 1.0.6
190
+ - !ruby/object:Gem::Dependency
191
+ name: faker
192
+ requirement: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ~>
196
+ - !ruby/object:Gem::Version
197
+ version: 0.9.5
198
+ type: :development
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ~>
204
+ - !ruby/object:Gem::Version
205
+ version: 0.9.5
206
+ - !ruby/object:Gem::Dependency
207
+ name: sqlite3
208
+ requirement: !ruby/object:Gem::Requirement
209
+ none: false
210
+ requirements:
211
+ - - ~>
212
+ - !ruby/object:Gem::Version
213
+ version: 1.3.3
214
+ type: :development
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - ~>
220
+ - !ruby/object:Gem::Version
221
+ version: 1.3.3
222
+ - !ruby/object:Gem::Dependency
223
+ name: rack-test
224
+ requirement: !ruby/object:Gem::Requirement
225
+ none: false
226
+ requirements:
227
+ - - ! '>='
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - ! '>='
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
238
+ description: Cross platform, syncable persistence
239
+ email:
240
+ - jonathan.soeder@gmail.com
241
+ executables:
242
+ - smooth
243
+ extensions: []
244
+ extra_rdoc_files: []
245
+ files:
246
+ - .gitignore
247
+ - .rvmrc
248
+ - .travis
249
+ - CNAME
250
+ - Gemfile
251
+ - Gemfile.lock
252
+ - Guardfile
253
+ - LICENSE.md
254
+ - README.md
255
+ - Rakefile
256
+ - bin/smooth
257
+ - doc/presenters.md
258
+ - lib/smooth.rb
259
+ - lib/smooth/adapters/rails_cache.rb
260
+ - lib/smooth/adapters/redis_cache.rb
261
+ - lib/smooth/backends/active_record.rb
262
+ - lib/smooth/backends/base.rb
263
+ - lib/smooth/backends/file.rb
264
+ - lib/smooth/backends/redis.rb
265
+ - lib/smooth/backends/redis_namespace.rb
266
+ - lib/smooth/backends/rest_client.rb
267
+ - lib/smooth/collection.rb
268
+ - lib/smooth/collection/cacheable.rb
269
+ - lib/smooth/collection/query.rb
270
+ - lib/smooth/endpoint.rb
271
+ - lib/smooth/meta_data.rb
272
+ - lib/smooth/meta_data/application.rb
273
+ - lib/smooth/meta_data/inspector.rb
274
+ - lib/smooth/model.rb
275
+ - lib/smooth/presentable.rb
276
+ - lib/smooth/presentable/api_endpoint.rb
277
+ - lib/smooth/presentable/chain.rb
278
+ - lib/smooth/presentable/controller.rb
279
+ - lib/smooth/queryable.rb
280
+ - lib/smooth/queryable/converter.rb
281
+ - lib/smooth/queryable/settings.rb
282
+ - lib/smooth/resource.rb
283
+ - lib/smooth/version.rb
284
+ - smooth-io.gemspec
285
+ - spec/blueprints/people.rb
286
+ - spec/environment.rb
287
+ - spec/lib/backends/active_record_spec.rb
288
+ - spec/lib/backends/base_spec.rb
289
+ - spec/lib/backends/file_spec.rb
290
+ - spec/lib/backends/multi_spec.rb
291
+ - spec/lib/backends/redis_namespace_spec.rb
292
+ - spec/lib/backends/redis_spec.rb
293
+ - spec/lib/backends/rest_client_spec.rb
294
+ - spec/lib/collection/query_spec.rb
295
+ - spec/lib/collection_spec.rb
296
+ - spec/lib/examples/cacheable_collection_spec.rb
297
+ - spec/lib/examples/smooth_model_spec.rb
298
+ - spec/lib/meta_data/application_spec.rb
299
+ - spec/lib/meta_data_spec.rb
300
+ - spec/lib/model_spec.rb
301
+ - spec/lib/presentable/api_endpoint_spec.rb
302
+ - spec/lib/presentable_spec.rb
303
+ - spec/lib/queryable/converter_spec.rb
304
+ - spec/lib/queryable_spec.rb
305
+ - spec/lib/resource_spec.rb
306
+ - spec/lib/smooth_spec.rb
307
+ - spec/spec_helper.rb
308
+ - spec/support/models.rb
309
+ - spec/support/schema.rb
310
+ homepage: http://smooth.io
311
+ licenses: []
312
+ post_install_message:
313
+ rdoc_options: []
314
+ require_paths:
315
+ - lib
316
+ required_ruby_version: !ruby/object:Gem::Requirement
317
+ none: false
318
+ requirements:
319
+ - - ! '>='
320
+ - !ruby/object:Gem::Version
321
+ version: '0'
322
+ required_rubygems_version: !ruby/object:Gem::Requirement
323
+ none: false
324
+ requirements:
325
+ - - ! '>='
326
+ - !ruby/object:Gem::Version
327
+ version: '0'
328
+ requirements: []
329
+ rubyforge_project:
330
+ rubygems_version: 1.8.25
331
+ signing_key:
332
+ specification_version: 3
333
+ summary: Smooth persistence
334
+ test_files:
335
+ - spec/blueprints/people.rb
336
+ - spec/environment.rb
337
+ - spec/lib/backends/active_record_spec.rb
338
+ - spec/lib/backends/base_spec.rb
339
+ - spec/lib/backends/file_spec.rb
340
+ - spec/lib/backends/multi_spec.rb
341
+ - spec/lib/backends/redis_namespace_spec.rb
342
+ - spec/lib/backends/redis_spec.rb
343
+ - spec/lib/backends/rest_client_spec.rb
344
+ - spec/lib/collection/query_spec.rb
345
+ - spec/lib/collection_spec.rb
346
+ - spec/lib/examples/cacheable_collection_spec.rb
347
+ - spec/lib/examples/smooth_model_spec.rb
348
+ - spec/lib/meta_data/application_spec.rb
349
+ - spec/lib/meta_data_spec.rb
350
+ - spec/lib/model_spec.rb
351
+ - spec/lib/presentable/api_endpoint_spec.rb
352
+ - spec/lib/presentable_spec.rb
353
+ - spec/lib/queryable/converter_spec.rb
354
+ - spec/lib/queryable_spec.rb
355
+ - spec/lib/resource_spec.rb
356
+ - spec/lib/smooth_spec.rb
357
+ - spec/spec_helper.rb
358
+ - spec/support/models.rb
359
+ - spec/support/schema.rb