query_builder 0.0.3 → 0.0.4
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/CHANGELOG.md +19 -0
- data/lib/query_builder.rb +1 -0
- data/lib/query_builder/core.rb +0 -2
- data/lib/query_builder/core/base.rb +3 -67
- data/lib/query_builder/cql/modifiers/order.rb +1 -1
- data/lib/query_builder/version.rb +1 -1
- data/query_builder.gemspec +2 -1
- data/spec/integration/select_spec.rb +1 -1
- data/spec/unit/core/base_spec.rb +16 -85
- data/spec/unit/core/statement_spec.rb +8 -0
- metadata +20 -12
- data/lib/query_builder/core/attribute.rb +0 -54
- data/lib/query_builder/core/attribute_error.rb +0 -25
- data/spec/unit/core/attribute_error_spec.rb +0 -38
- data/spec/unit/core/attribute_spec.rb +0 -70
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 314269feed5dfd5be5f4c86914dd836015931c76
|
4
|
+
data.tar.gz: 67ce13340d22a8693caa83693f1f4d5d1ca9cfdd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04410e1ec4f1792a257d776f3951820a035b039725bc7d2e33a0610845c6da895bbbea779465015ad3eb364729fb8ca277c40a67cb04abe0db7a2bb434c0d486
|
7
|
+
data.tar.gz: 7d4efce23694c878841a2fefe248a8d2ea11e38a8528e96b6eb11b300cc84e5ed978bde02033681507fb0d37138f1f56a3884a547c395685320b9b27b157e430
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
## v0.0.4 2015-09-18
|
2
|
+
|
3
|
+
The (backward-compatible) patch fixes a bug in 'SELECT' statement.
|
4
|
+
|
5
|
+
### Bugs Fixed
|
6
|
+
|
7
|
+
* Fixed 'ORDER BY' condition in 'SELECT' statement (nepalez) with reference to bug report #1 (aq1018)
|
8
|
+
|
9
|
+
### Internal
|
10
|
+
|
11
|
+
* Extracted `Core::Attributes` to the external gem 'attributes_dsl' (nepalez)
|
12
|
+
|
13
|
+
### Deleted
|
14
|
+
|
15
|
+
* `Core::Attributes` (nepalez)
|
16
|
+
* `Core::AttributesDSL` (nepalez)
|
17
|
+
|
18
|
+
[Compare v0.0.3...v0.0.4](https://github.com/nepalez/query_builder/compare/v0.0.3...v0.0.4)
|
19
|
+
|
1
20
|
## v0.0.3 2015-08-21
|
2
21
|
|
3
22
|
### Added
|
data/lib/query_builder.rb
CHANGED
data/lib/query_builder/core.rb
CHANGED
@@ -10,55 +10,15 @@ module QueryBuilder::Core
|
|
10
10
|
#
|
11
11
|
class Base
|
12
12
|
|
13
|
-
|
14
|
-
# The hash of default attributes of class' instances
|
15
|
-
#
|
16
|
-
# @return [Hash]
|
17
|
-
#
|
18
|
-
def self.attributes
|
19
|
-
@attributes ||= Set.new
|
20
|
-
end
|
21
|
-
|
22
|
-
# @!method attribute(name, options)
|
23
|
-
# Declares the attribute with optional default value
|
24
|
-
#
|
25
|
-
# @param [Symbol] name The name of the attribute
|
26
|
-
# @param [Hash] options
|
27
|
-
# @option options [Object] :default
|
28
|
-
#
|
29
|
-
# @return [undefined]
|
30
|
-
#
|
31
|
-
def self.attribute(name, options = {})
|
32
|
-
attributes << Attribute.new(name, options)
|
33
|
-
define_method(name) { attributes.fetch(name) }
|
34
|
-
end
|
35
|
-
|
36
|
-
# Makes default attributes inheritable
|
37
|
-
#
|
38
|
-
# @private
|
39
|
-
#
|
40
|
-
def self.inherited(subclass)
|
41
|
-
attributes.each do |item|
|
42
|
-
subclass.public_send(:attribute, *item.arguments)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
# @!attribute [r] attributes
|
47
|
-
#
|
48
|
-
# @return [Hash] The hash of the initialized attributes
|
49
|
-
#
|
50
|
-
attr_reader :attributes
|
13
|
+
extend AttributesDSL
|
51
14
|
|
52
15
|
# @!method initialize(attributes = {})
|
53
16
|
# Initializes the instance
|
54
17
|
#
|
55
18
|
# @param [Hash] attributes The custom attributes of the instance
|
56
19
|
#
|
57
|
-
def initialize(
|
58
|
-
|
59
|
-
validate_missing attributes
|
60
|
-
|
61
|
-
@attributes = default_attributes.merge(attributes)
|
20
|
+
def initialize(_attributes = {})
|
21
|
+
super
|
62
22
|
IceNine.deep_freeze(self)
|
63
23
|
end
|
64
24
|
|
@@ -73,30 +33,6 @@ module QueryBuilder::Core
|
|
73
33
|
""
|
74
34
|
end
|
75
35
|
|
76
|
-
private
|
77
|
-
|
78
|
-
def known_attributes
|
79
|
-
self.class.attributes
|
80
|
-
end
|
81
|
-
|
82
|
-
def required_attributes
|
83
|
-
known_attributes.select(&:required)
|
84
|
-
end
|
85
|
-
|
86
|
-
def default_attributes
|
87
|
-
known_attributes.each_with_object({}) { |e, a| a[e.name] = e.default }
|
88
|
-
end
|
89
|
-
|
90
|
-
def validate_unknown(hash)
|
91
|
-
unknown = hash.keys - known_attributes.map(&:name)
|
92
|
-
fail AttributeError.new(:unknown, unknown) if unknown.any?
|
93
|
-
end
|
94
|
-
|
95
|
-
def validate_missing(hash)
|
96
|
-
missed = required_attributes.map(&:name) - hash.keys
|
97
|
-
fail AttributeError.new(:missed, missed) if missed.any?
|
98
|
-
end
|
99
|
-
|
100
36
|
end # class Base
|
101
37
|
|
102
38
|
end # module CQLBuiler::Core
|
data/query_builder.gemspec
CHANGED
@@ -22,9 +22,10 @@ Gem::Specification.new do |gem|
|
|
22
22
|
|
23
23
|
gem.required_ruby_version = ">= 1.9.3"
|
24
24
|
|
25
|
-
gem.add_runtime_dependency "
|
25
|
+
gem.add_runtime_dependency "attributes_dsl", "~> 0.0"
|
26
26
|
gem.add_runtime_dependency "equalizer", "~> 0.0.11"
|
27
27
|
gem.add_runtime_dependency "ice_nine", "~> 0.11"
|
28
|
+
gem.add_runtime_dependency "transproc", "~> 0.3"
|
28
29
|
|
29
30
|
gem.add_development_dependency "hexx-rspec", "~> 0.5"
|
30
31
|
|
@@ -40,7 +40,7 @@ describe "SELECT" do
|
|
40
40
|
.allow_filtering
|
41
41
|
end
|
42
42
|
|
43
|
-
let(:cql) { "SELECT DISTINCT uuid AS id, name FROM wildlife.species WHERE id >= 3 AND id < 10 AND area IN ('park', 'garden') AND names[1] = 'cat' ORDER BY
|
43
|
+
let(:cql) { "SELECT DISTINCT uuid AS id, name FROM wildlife.species WHERE id >= 3 AND id < 10 AND area IN ('park', 'garden') AND names[1] = 'cat' ORDER BY name DESC LIMIT 10 ALLOW FILTERING;" }
|
44
44
|
end
|
45
45
|
|
46
46
|
end # describe SELECT
|
data/spec/unit/core/base_spec.rb
CHANGED
@@ -2,105 +2,36 @@
|
|
2
2
|
|
3
3
|
describe QueryBuilder::Core::Base do
|
4
4
|
|
5
|
-
let(:
|
6
|
-
let(:klass) { Class.new(described_class) }
|
7
|
-
let(:instance) { klass.new(attributes) }
|
8
|
-
let(:attributes) { { foo: :FOO } }
|
5
|
+
let(:klass) { Class.new(described_class) { attribute :foo } }
|
9
6
|
|
10
|
-
describe ".
|
11
|
-
shared_examples :
|
12
|
-
it "
|
13
|
-
expect
|
14
|
-
.to change { klass.attributes.map(&:name) }
|
15
|
-
.from([])
|
16
|
-
.to([:foo])
|
17
|
-
end
|
18
|
-
|
19
|
-
it "adds key to the #attributes" do
|
20
|
-
expect { subject }
|
21
|
-
.to change { klass.new.attributes }
|
22
|
-
.from({})
|
23
|
-
.to(foo: default)
|
7
|
+
describe ".new" do
|
8
|
+
shared_examples :object_constructor do
|
9
|
+
it "[is immutable]" do
|
10
|
+
expect(subject).to be_frozen
|
24
11
|
end
|
25
12
|
|
26
|
-
it "
|
27
|
-
expect { subject }
|
28
|
-
.to change { klass.instance_methods }
|
29
|
-
.by [:foo]
|
13
|
+
it "[doesn't freeze attributes]" do
|
14
|
+
expect { subject }.not_to change { attributes.frozen? }
|
30
15
|
end
|
31
16
|
|
32
|
-
it "
|
33
|
-
subject
|
34
|
-
expect(klass.new.foo).to eql(default)
|
35
|
-
expect(klass.new(foo: :FOO).foo).to eql(:FOO)
|
17
|
+
it "[initializes #attributes]" do
|
18
|
+
expect(subject.attributes).to eql attributes
|
36
19
|
end
|
37
|
-
end # shared examples
|
38
|
-
|
39
|
-
it_behaves_like :adding_attribute do
|
40
|
-
subject { klass.attribute :foo }
|
41
|
-
let(:default) { nil }
|
42
|
-
end
|
43
|
-
|
44
|
-
it_behaves_like :adding_attribute do
|
45
|
-
subject { klass.attribute :foo, default: default }
|
46
|
-
let(:default) { :Foo }
|
47
20
|
end
|
48
|
-
end # describe .attributes
|
49
21
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
let(:klass) do
|
54
|
-
Class.new(described_class) { attribute :foo, default: :FOO }
|
55
|
-
end
|
56
|
-
|
57
|
-
it "inherits the default attibutes of parent class" do
|
58
|
-
expect(subject).to eql [:foo]
|
22
|
+
it_behaves_like :object_constructor do
|
23
|
+
subject { klass.new(attributes) }
|
24
|
+
let(:attributes) { { foo: :FOO } }
|
59
25
|
end
|
60
|
-
end # describe .inherited
|
61
|
-
|
62
|
-
describe ".new" do
|
63
|
-
subject { instance }
|
64
|
-
|
65
|
-
before { klass.attribute :foo, required: true }
|
66
26
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
it "doesn't freeze attributes" do
|
72
|
-
expect { subject }.not_to change { attributes.frozen? }
|
73
|
-
end
|
74
|
-
|
75
|
-
context "with unknown attribute" do
|
76
|
-
let(:attributes) { { foo: :FOO, bar: :BAR } }
|
77
|
-
|
78
|
-
it "raises AttributeError" do
|
79
|
-
expect { subject }.to raise_error do |error|
|
80
|
-
expect(error).to be_kind_of exception
|
81
|
-
expect(error.message).to include "unknown "
|
82
|
-
expect(error.message).to include "bar"
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
context "with missed attribute" do
|
88
|
-
before { klass.attribute :bar, required: true }
|
89
|
-
|
90
|
-
it "raises AttributeError" do
|
91
|
-
expect { subject }.to raise_error do |error|
|
92
|
-
expect(error).to be_kind_of exception
|
93
|
-
expect(error.message).to include "missed "
|
94
|
-
expect(error.message).to include "bar"
|
95
|
-
end
|
96
|
-
end
|
27
|
+
it_behaves_like :object_constructor do
|
28
|
+
subject { klass.new }
|
29
|
+
let(:attributes) { { foo: nil } }
|
97
30
|
end
|
98
31
|
end # describe .new
|
99
32
|
|
100
33
|
describe "#to_s" do
|
101
|
-
subject {
|
102
|
-
|
103
|
-
let(:klass) { Class.new(described_class) { attribute :foo } }
|
34
|
+
subject { klass.new.to_s }
|
104
35
|
|
105
36
|
it "returns empty string" do
|
106
37
|
expect(subject).to eql("")
|
@@ -71,6 +71,10 @@ describe QueryBuilder::Core::Statement do
|
|
71
71
|
context "new clause" do
|
72
72
|
subject { statement << qux }
|
73
73
|
|
74
|
+
it "preserves attributes" do
|
75
|
+
expect(subject.attributes).to eql(statement.attributes)
|
76
|
+
end
|
77
|
+
|
74
78
|
it "adds the clause" do
|
75
79
|
expect(subject.clauses).to eql %w(bar baz qux)
|
76
80
|
end
|
@@ -79,6 +83,10 @@ describe QueryBuilder::Core::Statement do
|
|
79
83
|
context "existing clause" do
|
80
84
|
subject { statement << bar }
|
81
85
|
|
86
|
+
it "preserves attributes" do
|
87
|
+
expect(subject.attributes).to eql(statement.attributes)
|
88
|
+
end
|
89
|
+
|
82
90
|
it "rewrites the clause" do
|
83
91
|
expect(subject.clauses).to eql %w(baz bar)
|
84
92
|
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: query_builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kozin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: attributes_dsl
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
19
|
+
version: '0.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0.
|
26
|
+
version: '0.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: equalizer
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0.11'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: transproc
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.3'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.3'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: hexx-rspec
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -101,8 +115,6 @@ files:
|
|
101
115
|
- config/metrics/yardstick.yml
|
102
116
|
- lib/query_builder.rb
|
103
117
|
- lib/query_builder/core.rb
|
104
|
-
- lib/query_builder/core/attribute.rb
|
105
|
-
- lib/query_builder/core/attribute_error.rb
|
106
118
|
- lib/query_builder/core/base.rb
|
107
119
|
- lib/query_builder/core/clause.rb
|
108
120
|
- lib/query_builder/core/statement.rb
|
@@ -272,8 +284,6 @@ files:
|
|
272
284
|
- spec/integration/update_spec.rb
|
273
285
|
- spec/integration/use_spec.rb
|
274
286
|
- spec/spec_helper.rb
|
275
|
-
- spec/unit/core/attribute_error_spec.rb
|
276
|
-
- spec/unit/core/attribute_spec.rb
|
277
287
|
- spec/unit/core/base_spec.rb
|
278
288
|
- spec/unit/core/clause_spec.rb
|
279
289
|
- spec/unit/core/statement_spec.rb
|
@@ -322,7 +332,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
322
332
|
version: '0'
|
323
333
|
requirements: []
|
324
334
|
rubyforge_project:
|
325
|
-
rubygems_version: 2.4.
|
335
|
+
rubygems_version: 2.4.8
|
326
336
|
signing_key:
|
327
337
|
specification_version: 4
|
328
338
|
summary: Builder of the CQL statements.
|
@@ -369,8 +379,6 @@ test_files:
|
|
369
379
|
- spec/integration/update_spec.rb
|
370
380
|
- spec/integration/use_spec.rb
|
371
381
|
- spec/spec_helper.rb
|
372
|
-
- spec/unit/core/attribute_error_spec.rb
|
373
|
-
- spec/unit/core/attribute_spec.rb
|
374
382
|
- spec/unit/core/base_spec.rb
|
375
383
|
- spec/unit/core/clause_spec.rb
|
376
384
|
- spec/unit/core/statement_spec.rb
|
@@ -1,54 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module QueryBuilder::Core
|
4
|
-
|
5
|
-
# Describes the attribute of AST node
|
6
|
-
#
|
7
|
-
class Attribute
|
8
|
-
|
9
|
-
include Equalizer.new(:name)
|
10
|
-
|
11
|
-
# @!attribute [r] name
|
12
|
-
#
|
13
|
-
# @return [Symbol] The name of the attribute
|
14
|
-
#
|
15
|
-
attr_reader :name
|
16
|
-
|
17
|
-
# @!attribute [r] default
|
18
|
-
#
|
19
|
-
# @return [Object] The default value for the attribute
|
20
|
-
#
|
21
|
-
attr_reader :default
|
22
|
-
|
23
|
-
# @!attribute [r] required
|
24
|
-
#
|
25
|
-
# @return [Boolean] Whether the attribute is required or not
|
26
|
-
#
|
27
|
-
attr_reader :required
|
28
|
-
|
29
|
-
# Initializes the attribute with name and options
|
30
|
-
#
|
31
|
-
# @param [Symbol] name
|
32
|
-
# @param [Hash] options
|
33
|
-
# @option options [Object] :default The default value for the attribute
|
34
|
-
# @option options [Boolean] :required Whether the attribute is required
|
35
|
-
#
|
36
|
-
def initialize(name, options = {})
|
37
|
-
@name = name
|
38
|
-
@default = options[:default]
|
39
|
-
@required = options.fetch(:required) { false }
|
40
|
-
|
41
|
-
IceNine.deep_freeze(self)
|
42
|
-
end
|
43
|
-
|
44
|
-
# Returns arguments of the attribute initializer
|
45
|
-
#
|
46
|
-
# @return [Array]
|
47
|
-
#
|
48
|
-
def arguments
|
49
|
-
[name, default: default, required: required]
|
50
|
-
end
|
51
|
-
|
52
|
-
end # class Attribute
|
53
|
-
|
54
|
-
end # module QueryBuilder::Core
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module QueryBuilder::Core
|
4
|
-
|
5
|
-
# The exception to be raised by AST nodes' initializers
|
6
|
-
#
|
7
|
-
class AttributeError < KeyError
|
8
|
-
|
9
|
-
# Initializes the error with problem definition and the list of attributes
|
10
|
-
#
|
11
|
-
# @param [#to_s] problem
|
12
|
-
# @param [Array<#to_s>] list
|
13
|
-
#
|
14
|
-
def initialize(problem, list)
|
15
|
-
super [
|
16
|
-
"#{problem} attribute",
|
17
|
-
(list.one? ? ": " : "s: "),
|
18
|
-
list.map { |item| ":#{item}" }.join(", ")
|
19
|
-
].join
|
20
|
-
IceNine.deep_freeze(self)
|
21
|
-
end
|
22
|
-
|
23
|
-
end # class UndefinedAttributeError
|
24
|
-
|
25
|
-
end # module QueryBuilder::Core
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
describe QueryBuilder::Core::AttributeError do
|
4
|
-
|
5
|
-
let(:error) { described_class.new(:missed, attributes) }
|
6
|
-
let(:attributes) { [:foo] }
|
7
|
-
|
8
|
-
describe ".new" do
|
9
|
-
subject { error }
|
10
|
-
|
11
|
-
it "is a KeyError" do
|
12
|
-
expect(error).to be_kind_of KeyError
|
13
|
-
end
|
14
|
-
|
15
|
-
it "is immutable" do
|
16
|
-
expect(error).to be_frozen
|
17
|
-
end
|
18
|
-
end # describe .new
|
19
|
-
|
20
|
-
describe "#message" do
|
21
|
-
subject { error.message }
|
22
|
-
|
23
|
-
context "with one attribute" do
|
24
|
-
it "returns proper text" do
|
25
|
-
expect(subject).to eql "missed attribute: :foo"
|
26
|
-
end
|
27
|
-
end # context
|
28
|
-
|
29
|
-
context "with many attributes" do
|
30
|
-
let(:attributes) { [:foo, :bar] }
|
31
|
-
|
32
|
-
it "returns proper text" do
|
33
|
-
expect(subject).to eql "missed attributes: :foo, :bar"
|
34
|
-
end
|
35
|
-
end # context
|
36
|
-
end # describe #message
|
37
|
-
|
38
|
-
end # describe QueryBuilder::Core::AttributeError
|
@@ -1,70 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
describe QueryBuilder::Core::Attribute do
|
4
|
-
|
5
|
-
let(:attribute) { described_class.new :foo }
|
6
|
-
|
7
|
-
describe ".new" do
|
8
|
-
subject { attribute }
|
9
|
-
|
10
|
-
it "is immutable" do
|
11
|
-
expect(subject).to be_frozen
|
12
|
-
end
|
13
|
-
end # describe .new
|
14
|
-
|
15
|
-
describe "#arguments" do
|
16
|
-
subject { attribute.arguments }
|
17
|
-
|
18
|
-
let(:arguments) { [:foo, default: :FOO, required: true] }
|
19
|
-
let(:attribute) { described_class.new(*arguments) }
|
20
|
-
|
21
|
-
it "returns argumens of the initializer" do
|
22
|
-
expect(subject).to eql(arguments)
|
23
|
-
end
|
24
|
-
end # describe #arguments
|
25
|
-
|
26
|
-
describe "#name" do
|
27
|
-
subject { attribute.name }
|
28
|
-
|
29
|
-
it "is initialized" do
|
30
|
-
expect(subject).to eql(:foo)
|
31
|
-
end
|
32
|
-
end # describe #name
|
33
|
-
|
34
|
-
describe "#default" do
|
35
|
-
subject { attribute.default }
|
36
|
-
|
37
|
-
context "by default" do
|
38
|
-
it "returns nil" do
|
39
|
-
expect(subject).to be_nil
|
40
|
-
end
|
41
|
-
end # context
|
42
|
-
|
43
|
-
context "when value is set" do
|
44
|
-
let(:attribute) { described_class.new :foo, default: :FOO }
|
45
|
-
|
46
|
-
it "is initialized" do
|
47
|
-
expect(subject).to eql(:FOO)
|
48
|
-
end
|
49
|
-
end # context
|
50
|
-
end # describe #default
|
51
|
-
|
52
|
-
describe "#required" do
|
53
|
-
subject { attribute.required }
|
54
|
-
|
55
|
-
context "by default" do
|
56
|
-
it "returns false" do
|
57
|
-
expect(subject).to eql(false)
|
58
|
-
end
|
59
|
-
end # context
|
60
|
-
|
61
|
-
context "when value is set" do
|
62
|
-
let(:attribute) { described_class.new :foo, required: true }
|
63
|
-
|
64
|
-
it "is initialized" do
|
65
|
-
expect(subject).to eql(true)
|
66
|
-
end
|
67
|
-
end # context
|
68
|
-
end # describe #required
|
69
|
-
|
70
|
-
end # describe QueryBuilder::Core::Attribute
|