moonshine 0.0.1.pre → 0.1.0.pre
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 +4 -4
- data/README.md +1 -1
- data/Rakefile +2 -2
- data/lib/moonshine/base.rb +20 -8
- data/lib/moonshine/filter.rb +36 -0
- data/lib/moonshine/version.rb +1 -1
- data/test/lib/moonshine/base_test.rb +83 -0
- data/test/lib/moonshine/filter_test.rb +78 -0
- data/test/lib/moonshine/version_test.rb +8 -0
- data/{spec → test}/test_helper.rb +8 -5
- metadata +10 -8
- data/spec/lib/moonshine/base_spec.rb +0 -49
- data/spec/lib/moonshine/version_spec.rb +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f5558c94202fe30b961a00b82bd32f526282f02
|
4
|
+
data.tar.gz: a514229cee0d1d404dffd55c7a554ffa47d165ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31c49e76e3032ef4ab86ccdc5de41dac75ba949679ab88653386b2429263bf6da1c956fc10fdefd459aedd13c35b656684b4123098beb4c1febfd53fd66c017e
|
7
|
+
data.tar.gz: b478a9067cbc6bccb3202ea6aabc35561593f3537ede04cf3ec6b8488f5f41341c40869b2ef0892e7489903b33f55db158c94d2f179a9c183a2b6d5ee7f2b279
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Moonshine [](https://travis-ci.org/nebulab/moonshine) [](https://coveralls.io/r/nebulab/moonshine?branch=master) [](https://codeclimate.com/github/nebulab/moonshine)
|
1
|
+
# Moonshine [](http://badge.fury.io/rb/moonshine) [](https://travis-ci.org/nebulab/moonshine) [](https://coveralls.io/r/nebulab/moonshine?branch=master) [](https://codeclimate.com/github/nebulab/moonshine)
|
2
2
|
|
3
3
|
TODO: Write a gem description
|
4
4
|
|
data/Rakefile
CHANGED
data/lib/moonshine/base.rb
CHANGED
@@ -2,22 +2,34 @@ module Moonshine
|
|
2
2
|
class Base
|
3
3
|
|
4
4
|
attr_accessor :filters
|
5
|
-
|
5
|
+
attr_reader :chain, :subject
|
6
6
|
|
7
7
|
def initialize(filters, subject = nil)
|
8
8
|
@filters = filters
|
9
|
-
@subject = subject || default_subject
|
9
|
+
@subject = subject || self.class.default_subject
|
10
|
+
@chain = self.class.default_chain || []
|
11
|
+
end
|
12
|
+
|
13
|
+
def add(filter)
|
14
|
+
@chain << filter
|
15
|
+
end
|
16
|
+
|
17
|
+
def run
|
18
|
+
chain.each { |filter| @subject = filter.execute(self) }
|
19
|
+
@subject
|
10
20
|
end
|
11
21
|
|
12
22
|
class << self
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
23
|
+
|
24
|
+
attr_accessor :default_subject, :default_chain
|
25
|
+
|
26
|
+
def subject(subject)
|
27
|
+
self.default_subject = subject
|
17
28
|
end
|
18
29
|
|
19
|
-
def
|
20
|
-
|
30
|
+
def param name, call: nil, transform: nil, default: nil, as_boolean: nil
|
31
|
+
self.default_chain ||= []
|
32
|
+
self.default_chain << Moonshine::Filter.new(name, method: call || name, transform: transform, default: default, as_boolean: as_boolean)
|
21
33
|
end
|
22
34
|
end
|
23
35
|
end
|
data/lib/moonshine/filter.rb
CHANGED
@@ -1,4 +1,40 @@
|
|
1
1
|
module Moonshine
|
2
2
|
class Filter
|
3
|
+
|
4
|
+
attr_accessor :name, :method, :transform, :default, :as_boolean
|
5
|
+
|
6
|
+
def initialize(name, method: nil, transform: nil, default: nil, as_boolean: nil)
|
7
|
+
@name = name
|
8
|
+
@method = method
|
9
|
+
@transform = transform
|
10
|
+
@default = default
|
11
|
+
@as_boolean = as_boolean
|
12
|
+
end
|
13
|
+
|
14
|
+
def execute(klass)
|
15
|
+
if klass.filters[name] || default
|
16
|
+
if as_boolean
|
17
|
+
if klass.filters[name]
|
18
|
+
return klass.subject.send(method)
|
19
|
+
else
|
20
|
+
return klass.subject.send(method) if default
|
21
|
+
end
|
22
|
+
else
|
23
|
+
return klass.subject.send(method, set_transform(klass, set_default(klass.filters[name])))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
klass.subject
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def set_default value
|
32
|
+
value || default
|
33
|
+
end
|
34
|
+
|
35
|
+
def set_transform klass, value
|
36
|
+
return klass.send(transform, value) if transform
|
37
|
+
value
|
38
|
+
end
|
3
39
|
end
|
4
40
|
end
|
data/lib/moonshine/version.rb
CHANGED
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe Moonshine::Base do
|
4
|
+
before(:each) do
|
5
|
+
@chain_builder = Class.new(Moonshine::Base)
|
6
|
+
@default_subject = mock('default_subject')
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '.subject' do
|
10
|
+
before do
|
11
|
+
@chain_builder.default_subject = @default_subject
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'sets default subject class attribute' do
|
15
|
+
@chain_builder.default_subject.must_equal @default_subject
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'when it is initialized without a subject' do
|
19
|
+
it 'sets subject as default subject' do
|
20
|
+
@chain_builder.new({}).subject.must_equal @default_subject
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe 'when it is initialized with a subject' do
|
25
|
+
let(:subject){ mock('subject') }
|
26
|
+
|
27
|
+
it 'sets subject as requested' do
|
28
|
+
@chain_builder.new({}, subject).subject.must_equal subject
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '.param' do
|
34
|
+
it 'instantiates a Moonshine::Filter class' do
|
35
|
+
Moonshine::Filter.expects(:new).with(:filter_name, method: :method, transform: nil, default: nil, as_boolean: nil)
|
36
|
+
@chain_builder.param :filter_name, call: :method
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'when :call is not given' do
|
40
|
+
it 'instantiates a Moonshine::Filter class with call same as first param' do
|
41
|
+
Moonshine::Filter.expects(:new).with(:filter_name, method: :filter_name, transform: nil, default: nil, as_boolean: nil)
|
42
|
+
@chain_builder.param :filter_name
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'adds filter to default_chain' do
|
47
|
+
filter = mock('filter')
|
48
|
+
Moonshine::Filter.stubs(:new).returns(filter)
|
49
|
+
@chain_builder.param :filter_name, call: :scope
|
50
|
+
@chain_builder.default_chain.must_equal [filter]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '#add' do
|
55
|
+
it 'adds filter to chain' do
|
56
|
+
filter = mock('filter')
|
57
|
+
chain_builder_instance = @chain_builder.new({})
|
58
|
+
chain_builder_instance.add(filter)
|
59
|
+
chain_builder_instance.chain.must_equal [filter]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe '#run' do
|
64
|
+
|
65
|
+
it 'run execute on each filter' do
|
66
|
+
filter1 = mock('filter1')
|
67
|
+
filter1.stubs(:name).returns(:filter1)
|
68
|
+
filter2 = mock('filter2')
|
69
|
+
filter2.stubs(:name).returns(:filter2)
|
70
|
+
filters = [filter1, filter2]
|
71
|
+
@chain_builder.default_chain = filters
|
72
|
+
chain_builder_instance = @chain_builder.new({ filter1: 1, filter2: 2})
|
73
|
+
filter1.expects(:execute).with(chain_builder_instance)
|
74
|
+
filter2.expects(:execute).with(chain_builder_instance)
|
75
|
+
chain_builder_instance.run
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'returns subject' do
|
79
|
+
chain_builder_instance = @chain_builder.new({})
|
80
|
+
chain_builder_instance.run.must_equal chain_builder_instance.subject
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe Moonshine::Filter do
|
4
|
+
before(:each) do
|
5
|
+
default_subject = mock('default_subject')
|
6
|
+
@chain_builder = Class.new(Moonshine::Base) do
|
7
|
+
subject default_subject
|
8
|
+
param :name, call: :scope
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '#execute' do
|
13
|
+
let(:filter) { Moonshine::Filter.new(:filter, method: :filter) }
|
14
|
+
let(:chain_builder_instance) { @chain_builder.new({ filter: 1 }) }
|
15
|
+
|
16
|
+
it 'sends scope to klass' do
|
17
|
+
chain_builder_instance.subject.expects(:filter).with(1)
|
18
|
+
filter.execute(chain_builder_instance)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'return subject when default and value are nil' do
|
22
|
+
filter.default = nil
|
23
|
+
chain_builder_instance.filters = {}
|
24
|
+
filter.execute(chain_builder_instance).must_equal chain_builder_instance.subject
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'options' do
|
28
|
+
describe 'transform' do
|
29
|
+
it 'changes value with transform method from klass' do
|
30
|
+
filter.transform = :transform_method
|
31
|
+
chain_builder_instance.subject.stubs(:filter)
|
32
|
+
chain_builder_instance.expects(:transform_method).with(1)
|
33
|
+
filter.execute(chain_builder_instance)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe 'default' do
|
38
|
+
it 'uses default value if filter is nil' do
|
39
|
+
filter.default = 2
|
40
|
+
chain_builder_instance.filters = {}
|
41
|
+
chain_builder_instance.subject.expects(:filter).with(2)
|
42
|
+
filter.execute(chain_builder_instance)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'not use default value if filter is not nil' do
|
46
|
+
filter.default = 2
|
47
|
+
chain_builder_instance.filters = { filter: 1 }
|
48
|
+
chain_builder_instance.subject.expects(:filter).with(1)
|
49
|
+
filter.execute(chain_builder_instance)
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'not sends filter if default and value are nil' do
|
53
|
+
filter.default = nil
|
54
|
+
chain_builder_instance.filters = {}
|
55
|
+
chain_builder_instance.subject.expects(:filter).never
|
56
|
+
filter.execute(chain_builder_instance)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe 'as_boolean' do
|
61
|
+
it 'sends method without value when true' do
|
62
|
+
filter.as_boolean = true
|
63
|
+
chain_builder_instance.filters = { filter: true }
|
64
|
+
chain_builder_instance.subject.expects(:filter)
|
65
|
+
filter.execute(chain_builder_instance)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'sends method without value when false' do
|
69
|
+
filter.as_boolean = true
|
70
|
+
chain_builder_instance.filters = { filter: false }
|
71
|
+
chain_builder_instance.subject.expects(:filter).never
|
72
|
+
filter.execute(chain_builder_instance)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
@@ -1,9 +1,12 @@
|
|
1
|
-
require 'moonshine'
|
2
|
-
require 'minitest/unit'
|
3
|
-
require 'mocha/mini_test'
|
4
|
-
require 'minitest/autorun'
|
5
|
-
require 'minitest/pride'
|
6
1
|
require 'coveralls'
|
7
2
|
|
8
3
|
# Code coverage
|
9
4
|
Coveralls.wear!
|
5
|
+
|
6
|
+
require 'moonshine'
|
7
|
+
require 'minitest/autorun'
|
8
|
+
require 'mocha/mini_test'
|
9
|
+
require 'minitest/pride'
|
10
|
+
|
11
|
+
class MiniTest::Spec
|
12
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: moonshine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.1.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alessio Rocco
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01
|
11
|
+
date: 2014-02-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -99,9 +99,10 @@ files:
|
|
99
99
|
- lib/moonshine/filter.rb
|
100
100
|
- lib/moonshine/version.rb
|
101
101
|
- moonshine.gemspec
|
102
|
-
-
|
103
|
-
-
|
104
|
-
-
|
102
|
+
- test/lib/moonshine/base_test.rb
|
103
|
+
- test/lib/moonshine/filter_test.rb
|
104
|
+
- test/lib/moonshine/version_test.rb
|
105
|
+
- test/test_helper.rb
|
105
106
|
homepage: https://github.com/nebulab/moonshine
|
106
107
|
licenses:
|
107
108
|
- MIT
|
@@ -127,6 +128,7 @@ signing_key:
|
|
127
128
|
specification_version: 4
|
128
129
|
summary: Conditional method chaining
|
129
130
|
test_files:
|
130
|
-
-
|
131
|
-
-
|
132
|
-
-
|
131
|
+
- test/lib/moonshine/base_test.rb
|
132
|
+
- test/lib/moonshine/filter_test.rb
|
133
|
+
- test/lib/moonshine/version_test.rb
|
134
|
+
- test/test_helper.rb
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
describe Moonshine::Base do
|
4
|
-
|
5
|
-
describe '.subject' do
|
6
|
-
let(:mock_class){ MockClass.new({}) }
|
7
|
-
|
8
|
-
it 'defines default_subject method on instance' do
|
9
|
-
mock_class.must_respond_to(:default_subject)
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'sets default_subject' do
|
13
|
-
mock_class.default_subject.must_equal DefaultSubject
|
14
|
-
end
|
15
|
-
|
16
|
-
describe 'when it is initialized without a subject' do
|
17
|
-
it 'sets subject as default subject' do
|
18
|
-
mock_class.subject.must_be_instance_of DefaultSubject
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe 'when it is initialized with a subject' do
|
23
|
-
let(:mock_class){ MockClass.new({}, Subject.new) }
|
24
|
-
|
25
|
-
it 'sets subject as requested' do
|
26
|
-
mock_class.subject.must_be_instance_of Subject
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe '.filter' do
|
32
|
-
it 'instantiates a Moonshine::Filter class' do
|
33
|
-
Moonshine::Filter.expects(:new).with(MockClass, :filter_name, :scope, transform: nil, default: nil)
|
34
|
-
MockClass.filter :filter_name, :scope
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
class Subject
|
42
|
-
end
|
43
|
-
|
44
|
-
class DefaultSubject
|
45
|
-
end
|
46
|
-
|
47
|
-
class MockClass < Moonshine::Base
|
48
|
-
subject DefaultSubject
|
49
|
-
end
|