fish0 0.0.16 → 0.0.17

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