moonshine 0.0.1.pre → 0.1.0.pre

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: 0c67b01e14a12bfb081d480144382ff66bd92390
4
- data.tar.gz: c80bc255a367700bf3b8882cb6bf27330a70d190
3
+ metadata.gz: 1f5558c94202fe30b961a00b82bd32f526282f02
4
+ data.tar.gz: a514229cee0d1d404dffd55c7a554ffa47d165ff
5
5
  SHA512:
6
- metadata.gz: fab4fd9c04bfc441540a94e006249d45a8d88f4ea92b6b12a5b04536d5f2670a048b0d6f8a0bb6df0ff83217d7102de998a82997cc4d3f74418333cf21646aae
7
- data.tar.gz: 8fabac3d0efeaa17d3b345446a19b27aee434d69b56ab0cd0050ed24cb86c4a02812247acbfd05ce8674875684d0e967ed1b1f56e71ec7674c00fed025e4a56e
6
+ metadata.gz: 31c49e76e3032ef4ab86ccdc5de41dac75ba949679ab88653386b2429263bf6da1c956fc10fdefd459aedd13c35b656684b4123098beb4c1febfd53fd66c017e
7
+ data.tar.gz: b478a9067cbc6bccb3202ea6aabc35561593f3537ede04cf3ec6b8488f5f41341c40869b2ef0892e7489903b33f55db158c94d2f179a9c183a2b6d5ee7f2b279
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Moonshine [![Build Status](https://travis-ci.org/nebulab/moonshine.png?branch=master)](https://travis-ci.org/nebulab/moonshine) [![Coverage Status](https://coveralls.io/repos/nebulab/moonshine/badge.png?branch=master)](https://coveralls.io/r/nebulab/moonshine?branch=master) [![Code Climate](https://codeclimate.com/github/nebulab/moonshine.png)](https://codeclimate.com/github/nebulab/moonshine)
1
+ # Moonshine [![Gem Version](https://badge.fury.io/rb/moonshine.png)](http://badge.fury.io/rb/moonshine) [![Build Status](https://travis-ci.org/nebulab/moonshine.png?branch=master)](https://travis-ci.org/nebulab/moonshine) [![Coverage Status](https://coveralls.io/repos/nebulab/moonshine/badge.png?branch=master)](https://coveralls.io/r/nebulab/moonshine?branch=master) [![Code Climate](https://codeclimate.com/github/nebulab/moonshine.png)](https://codeclimate.com/github/nebulab/moonshine)
2
2
 
3
3
  TODO: Write a gem description
4
4
 
data/Rakefile CHANGED
@@ -4,6 +4,6 @@ require 'rake/testtask'
4
4
  task 'default' => 'test'
5
5
 
6
6
  Rake::TestTask.new do |t|
7
- t.libs << 'spec'
8
- t.pattern = "spec/lib/**/*_spec.rb"
7
+ t.libs << 'test'
8
+ t.pattern = "test/lib/**/*_test.rb"
9
9
  end
@@ -2,22 +2,34 @@ module Moonshine
2
2
  class Base
3
3
 
4
4
  attr_accessor :filters
5
- attr_accessor :subject
5
+ attr_reader :chain, :subject
6
6
 
7
7
  def initialize(filters, subject = nil)
8
8
  @filters = filters
9
- @subject = subject || default_subject.new
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
- def subject(klass)
14
- define_method :default_subject do
15
- klass
16
- end
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 filter name, scope, transform: nil, default: nil
20
- Moonshine::Filter.new(self, name, scope, transform: transform, default: default)
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Moonshine
2
- VERSION = "0.0.1.pre"
2
+ VERSION = "0.1.0.pre"
3
3
  end
@@ -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
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ describe Moonshine::VERSION do
4
+
5
+ it 'is 0.1.0.pre' do
6
+ Moonshine::VERSION.must_equal '0.1.0.pre'
7
+ end
8
+ 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.1.pre
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-20 00:00:00.000000000 Z
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
- - spec/lib/moonshine/base_spec.rb
103
- - spec/lib/moonshine/version_spec.rb
104
- - spec/test_helper.rb
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
- - spec/lib/moonshine/base_spec.rb
131
- - spec/lib/moonshine/version_spec.rb
132
- - spec/test_helper.rb
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
@@ -1,8 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe Moonshine::VERSION do
4
-
5
- it 'is 0.0.1.pre' do
6
- Moonshine::VERSION.must_equal '0.0.1.pre'
7
- end
8
- end