fish0 0.0.16 → 0.0.17

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 99abb63fdfcc94484068ad011600b1226186440b
4
- data.tar.gz: 5a01f9839ebc3bfa6c95bf27186b92eb5df2dc70
3
+ metadata.gz: d69c6b541aef5106bcbde90fe859d69b8de46c47
4
+ data.tar.gz: 65fd640653d559a41446a4e144eb15a60379b773
5
5
  SHA512:
6
- metadata.gz: 941d08911bbf5c6a1f34368f64ce9ffd8b2f08379f4505743f08e1312b3070b807cf8e7e29eb5e2d6bdf37fd163f90e5cfd884682165cbadf537670df397d26d
7
- data.tar.gz: 3c0bbc0860eff0b1ff057c45e0554ca4dbb223f7f23398b736d138e85040cc60cf41413ca8334e57dc748f4e4daba875ad6cf7b9701dbde6e591d4a3b17b3cb6
6
+ metadata.gz: ba6fb5b83e0b5453a80490d94b5dc1d3fece02daec600187cfd03227b4291d6c3c51d1f8b898ccf376cdead9d9e4cfcd04a6c25fc6d6776fc2991d67881aa2cd
7
+ data.tar.gz: 1a3801d5342555f6992d184a94272420bb377741473b8d9c955adf4c4f02b1913214ec437027e4070b62f93fe117dcd4285274163d4c0d66ff30525c9ca78b26
@@ -27,6 +27,11 @@ module Fish0
27
27
  include Virtus.model(coerce: false)
28
28
  end
29
29
 
30
+ def scope(name, body)
31
+ @scopes ||= []
32
+ @scopes << [name, body]
33
+ end
34
+
30
35
  def method_missing(method_name, *arguments, &block)
31
36
  if repository.respond_to?(method_name)
32
37
  repository.send(method_name, *arguments, &block)
@@ -54,10 +59,14 @@ module Fish0
54
59
  end
55
60
 
56
61
  def repository
57
- if "#{entity}Repository".safe_constantize
58
- return "#{entity}Repository".constantize.new(collection, entity)
59
- end
60
- Fish0::Repository.new(collection, entity)
62
+ rep = repository_class.new(collection, entity)
63
+ @scopes.each { |s| rep.scope(*s) }
64
+ rep
65
+ end
66
+
67
+ def repository_class
68
+ return "#{entity}Repository".constantize if "#{entity}Repository".safe_constantize
69
+ Fish0::Repository
61
70
  end
62
71
  end
63
72
  end
@@ -87,6 +87,19 @@ module Fish0
87
87
  self
88
88
  end
89
89
 
90
+ def scope(name, body)
91
+ return if respond_to?(name)
92
+
93
+ unless body.respond_to?(:call)
94
+ raise ArgumentError, 'The scope body needs to be callable.'
95
+ end
96
+
97
+ define_singleton_method(name) do |*args|
98
+ instance_exec(*args, &body)
99
+ self
100
+ end
101
+ end
102
+
90
103
  def fetch
91
104
  scoped = find(conditions, sort: order)
92
105
  scoped = scoped.projection(@projection) if @projection
data/lib/fish0/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Fish0
2
- VERSION = '0.0.16'.freeze
2
+ VERSION = '0.0.17'.freeze
3
3
  end
@@ -13,8 +13,8 @@ Rails.application.configure do
13
13
  config.eager_load = false
14
14
 
15
15
  # Configure static file server for tests with Cache-Control for performance.
16
- config.public_file_server.enabled = true
17
- config.public_file_server.headers = { 'Cache-Control' => 'public, max-age=3600' }
16
+ # config.public_file_server.enabled = true
17
+ # config.public_file_server.headers = { 'Cache-Control' => 'public, max-age=3600' }
18
18
 
19
19
  # Show full error reports and disable caching.
20
20
  config.consider_all_requests_local = true
@@ -0,0 +1,82 @@
1
+ MONGODB | Adding localhost:27017 to the cluster.
2
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
3
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000544s
4
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
5
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000201s
6
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
7
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.00021700000000000002s
8
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
9
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000167s
10
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
11
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000174s
12
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
13
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000152s
14
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
15
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000172s
16
+ MONGODB | Adding localhost:27017 to the cluster.
17
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
18
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.00061s
19
+ MONGODB | Adding localhost:27017 to the cluster.
20
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
21
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.0005390000000000001s
22
+ MONGODB | Adding localhost:27017 to the cluster.
23
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
24
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.0005549999999999999s
25
+ MONGODB | Adding localhost:27017 to the cluster.
26
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
27
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000577s
28
+ MONGODB | Adding localhost:27017 to the cluster.
29
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
30
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000513s
31
+ MONGODB | Adding localhost:27017 to the cluster.
32
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
33
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.00053s
34
+ MONGODB | Adding localhost:27017 to the cluster.
35
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
36
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000583s
37
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
38
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000264s
39
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
40
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000195s
41
+ MONGODB | Adding localhost:27017 to the cluster.
42
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
43
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.00065s
44
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
45
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000228s
46
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
47
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000262s
48
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
49
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.00039799999999999997s
50
+ MONGODB | Adding localhost:27017 to the cluster.
51
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
52
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000533s
53
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
54
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000216s
55
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
56
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000209s
57
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
58
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000212s
59
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
60
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000246s
61
+ MONGODB | Adding localhost:27017 to the cluster.
62
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
63
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.00062s
64
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
65
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000192s
66
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
67
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000209s
68
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
69
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000219s
70
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
71
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.00023600000000000002s
72
+ MONGODB | Adding localhost:27017 to the cluster.
73
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
74
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000676s
75
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
76
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000238s
77
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
78
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.000201s
79
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
80
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.00019600000000000002s
81
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | STARTED | {"dropDatabase"=>1}
82
+ MONGODB | localhost:27017 | fish0_development.dropDatabase | SUCCEEDED | 0.00021700000000000002s
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Fish0::Repository do
4
+ let(:repository) { Fish0::Repository.new('articles') }
5
+ let(:scoped_repository) { Fish0::Repository.new('articles') }
6
+
7
+ describe '#scope' do
8
+ before do
9
+ scoped_repository.scope :by_slug, -> (slug) { where(slug: slug) }
10
+ end
11
+
12
+ it 'has no scoped method :by_slug for new repository' do
13
+ expect(repository).not_to respond_to(:by_slug)
14
+ end
15
+
16
+ it 'has scoped method :by_slug for scoped repository' do
17
+ expect(scoped_repository).to respond_to(:by_slug)
18
+ end
19
+
20
+ it 'returns self and therefore supports chaining' do
21
+ expect(scoped_repository.by_slug('news')).to be_an(Fish0::Repository)
22
+ end
23
+ end
24
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fish0
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.16
4
+ version: 0.0.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Zuev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-05 00:00:00.000000000 Z
11
+ date: 2016-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -176,7 +176,6 @@ files:
176
176
  - lib/fish0/paginator.rb
177
177
  - lib/fish0/repository.rb
178
178
  - lib/fish0/version.rb
179
- - spec/base_spec.rb
180
179
  - spec/dummy/README.rdoc
181
180
  - spec/dummy/Rakefile
182
181
  - spec/dummy/app/assets/javascripts/application.js
@@ -209,11 +208,13 @@ files:
209
208
  - spec/dummy/config/routes.rb
210
209
  - spec/dummy/config/secrets.yml
211
210
  - spec/dummy/log/development.log
211
+ - spec/dummy/log/test.log
212
212
  - spec/dummy/public/404.html
213
213
  - spec/dummy/public/422.html
214
214
  - spec/dummy/public/500.html
215
215
  - spec/dummy/public/favicon.ico
216
216
  - spec/factories/article.rb
217
+ - spec/lib/repository_spec.rb
217
218
  - spec/models/model_spec.rb
218
219
  - spec/spec_helper.rb
219
220
  - spec/support/factory_girl.rb
@@ -246,7 +247,6 @@ signing_key:
246
247
  specification_version: 4
247
248
  summary: Plugin for read-only content websites
248
249
  test_files:
249
- - spec/base_spec.rb
250
250
  - spec/dummy/app/assets/javascripts/application.js
251
251
  - spec/dummy/app/assets/stylesheets/application.css
252
252
  - spec/dummy/app/controllers/application_controller.rb
@@ -277,6 +277,7 @@ test_files:
277
277
  - spec/dummy/config/secrets.yml
278
278
  - spec/dummy/config.ru
279
279
  - spec/dummy/log/development.log
280
+ - spec/dummy/log/test.log
280
281
  - spec/dummy/public/404.html
281
282
  - spec/dummy/public/422.html
282
283
  - spec/dummy/public/500.html
@@ -284,9 +285,9 @@ test_files:
284
285
  - spec/dummy/Rakefile
285
286
  - spec/dummy/README.rdoc
286
287
  - spec/factories/article.rb
288
+ - spec/lib/repository_spec.rb
287
289
  - spec/models/model_spec.rb
288
290
  - spec/spec_helper.rb
289
291
  - spec/support/factory_girl.rb
290
292
  - spec/support/mongo_cleaner.rb
291
293
  - spec/support/update_behaviour.rb
292
- has_rdoc:
data/spec/base_spec.rb DELETED
@@ -1,37 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe 'Fish0::Base' do
4
- let!(:headline) { FFaker::Lorem.sentence }
5
- let!(:article) { create(:article, headline: headline) }
6
- let!(:other_article) { create(:article) }
7
-
8
- describe '.find_one' do
9
- subject { Article.find_one(query) }
10
-
11
- context 'when article with such headline exists in the database' do
12
- let(:query) { { headline: headline } }
13
- it { is_expected.to eq(article) }
14
- end
15
-
16
- context 'when there is no such article in database' do
17
- let(:query) { { headline: 'кирриллица' } }
18
- it { is_expected.to be_nil }
19
- end
20
- end
21
-
22
- describe '.find_one!' do
23
- subject { Article.find_one!(query) }
24
-
25
- context 'when article with such headline exists in the database' do
26
- let(:query) { { headline: headline } }
27
- it { is_expected.to eq(article) }
28
- end
29
-
30
- context 'when there is no such article in database' do
31
- let(:query) { { headline: 'кирриллица' } }
32
- it 'raises exception' do
33
- expect { subject }.to raise_error(Fish0::RecordNotFound)
34
- end
35
- end
36
- end
37
- end