assertion 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- Mzk3MGE0ZjJjODM1Y2YxNzAyOGQzZjY0Yzk2N2YwZTVjZDI2NWI2OA==
5
- data.tar.gz: !binary |-
6
- NzUwZjQ2NDA5MzM5NDU5MmJiMWU3NGQ3ZThlM2Q3MjM2MDM2OTM5MQ==
2
+ SHA1:
3
+ metadata.gz: 65ecfa1663da2ccf5c270513980850376ab8b4f4
4
+ data.tar.gz: f30f44133b412b3d8162f335c3662ff1abab40a5
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- NDRhZjI5ZmY3MWMwNzQ3NTRhOWVhOTczYjE0OTliNGI2NDZjYjg3MWI1Nzgx
10
- ZjE5OWUyODAzMDFmMDYxOTcwMDc1M2MxZjMwOThiODhjYjI0ZDBiZmQ4ODcy
11
- MjdkNmFkMmQxMDhiMjJjOTUyMmM0MTQ1ZTdkODg2ODFhZmE3ZGM=
12
- data.tar.gz: !binary |-
13
- ZDkyMjZkNDk3NzhhYjExYTBmNzlkY2U1YjkxMzg1ZTQwYjMwMTRjMzZkN2Rj
14
- MDBlMTFjMzBjNGU5MmY3ZTI4OWMwOGQ1MTE1ZDM1MzY0MTg5ZDdjMzNmMjAx
15
- NjM3YWRhNGVmYjE2NzZhNmRlMzFlZTU2YTQ1YzE5NzFiYmEwNmM=
6
+ metadata.gz: 561a3f4d22029666cfe4bec2d720792a562c4ca11f7de8ec088dc54eba998c243fea503d6a5ef98aa0272e34c6e376a7b9e7a994a1dbb4ee2444f45788f6e28a
7
+ data.tar.gz: 3e46a54c25ebc71033efad3fdf676436cd8f64534206a2e4bbb849ca8c47e5ef465ee7dd6c60add7052d4c806d80766f17570d6260dc4bc7738de33268c1edcd
data/CHANGELOG.md CHANGED
@@ -1,3 +1,16 @@
1
+ ## v0.2.4 2015-07-31
2
+
3
+ ### Added
4
+
5
+ * Support for inline messages definition via `#falsey` and `#truthy` methods (nepalez)
6
+ * Alias method `!` for assertion `not` inverter (nepalez)
7
+
8
+ ### Internal
9
+
10
+ * Moved names `:falsey` and `:truthy` from `Translator` to `Base` (nepalez)
11
+
12
+ [Compare v0.2.3...v0.2.4](https://github.com/nepalez/assertion/compare/v0.2.3...v0.2.4)
13
+
1
14
  ## v0.2.3 2015-07-12
2
15
 
3
16
  The version is bumped to fix bugs that proved to be hidden because of bugs in hexx-rspec and hexx-suit gems.
data/README.md CHANGED
@@ -17,16 +17,16 @@ Assertion
17
17
 
18
18
  Standalone PORO assertions and validations.
19
19
 
20
- Synopsis
21
- --------
22
-
23
20
  The primary goal of the gem is to make standalone assertions about objects and validate them.
24
21
 
25
22
  No monkey patching, no dependency from ActiveSupport, no mutable instances of any class.
26
23
 
27
24
  [About](https://github.com/mbj/mutant/issues/356) 100% [mutant]-covered.
28
25
 
29
- ### Basic Usage
26
+ Synopsis
27
+ --------
28
+
29
+ ### Make an Assertion
30
30
 
31
31
  Define an assertion by inheriting it from the `Assertion::Base` class with attributes to which it should be applied.
32
32
  Then implement the method `check` to describe if the assertion is truthy or falsey.
@@ -43,7 +43,7 @@ class IsAdult < Assertion::Base
43
43
  end
44
44
  ```
45
45
 
46
- or with more verbose builder:
46
+ or with more expressive builder:
47
47
 
48
48
  ```ruby
49
49
  IsAdult = Assertion.about :age, :name do
@@ -51,6 +51,8 @@ IsAdult = Assertion.about :age, :name do
51
51
  end
52
52
  ```
53
53
 
54
+ ### Add Messages
55
+
54
56
  Define translations to describe both the *truthy* and *falsey* states of the assertion.
55
57
 
56
58
  All the attributes are available in translations (that's why we declared the `name` as an attribute):
@@ -65,6 +67,28 @@ en:
65
67
  falsey: "%{name} is a child yet (age %{age})"
66
68
  ```
67
69
 
70
+ If you don't need to translate messages, define them for `truthy` and `falsey` states as methods:
71
+
72
+ ```ruby
73
+ class IsAdult < Assertion::Base
74
+ attribute :age, :name
75
+
76
+ def check
77
+ age.to_i >= 18
78
+ end
79
+
80
+ def truthy
81
+ "#{name} is already an adult (age #{age})"
82
+ end
83
+
84
+ def falsey
85
+ "#{name} is a child yet (age #{age})"
86
+ end
87
+ end
88
+ ```
89
+
90
+ ### Check a State
91
+
68
92
  Check a state of an assertion for some argument(s), using class method `[]`:
69
93
 
70
94
  ```ruby
@@ -86,7 +110,7 @@ state.validate! # => #<Assertion::InvalidError @messages=["John is a child yet (
86
110
  Inversion
87
111
  ---------
88
112
 
89
- Use the `.not` *class* method to negate the assertion:
113
+ Use the `.not` *class* method to invert the assertion:
90
114
 
91
115
  ```ruby
92
116
  jack = { name: 'Jack', age: 21, gender: :male }
@@ -95,6 +119,16 @@ IsAdult.not[jack]
95
119
  # => #<Assertion::State @state=false, @messages=["Jack is already an adult (age 21)"]>
96
120
  ```
97
121
 
122
+ You can also use `!` alias to provide the inversion:
123
+
124
+ ```ruby
125
+ IsChild = !IsAdult
126
+ IsChild[jack]
127
+ # => #<Assertion::State @state=false, @messages=["Jack is already an adult (age 21)"]>
128
+ ```
129
+
130
+ Notice that `!IsAdult[jack]` wouldn't work. Use either `IsAdult.not[jack]`, or `(!IsAdult)[jack]`.
131
+
98
132
  Composition
99
133
  -----------
100
134
 
@@ -116,7 +150,7 @@ en:
116
150
  falsey: "%{name} is a female"
117
151
  ```
118
152
 
119
- Use method `&` (or its aliases `+` or `>>`) to compose assertion states:
153
+ Use method `&` (or its alias `+`) to compose assertion states:
120
154
 
121
155
  ```ruby
122
156
  jane = { name: 'Jane', age: 16, gender: :female }
@@ -142,7 +176,7 @@ class VoterOnly < Assertion::Guard
142
176
  end
143
177
  ```
144
178
 
145
- Or using the verbose builder `Assertion.guards`:
179
+ Or using the builder `Assertion.guards`:
146
180
 
147
181
  ```ruby
148
182
  VoterOnly = Assertion.guards :user do
data/Rakefile CHANGED
@@ -21,5 +21,5 @@ end
21
21
 
22
22
  desc "Runs mutation metric for testing"
23
23
  task :mutant do
24
- system "mutant -r ./spec/spec_helper --use rspec 'Assertion*'"
24
+ system "bundle exec mutant -r ./spec/spec_helper --use rspec 'Assertion*'"
25
25
  end
@@ -89,7 +89,9 @@ module Assertion
89
89
  # @return [String]
90
90
  #
91
91
  def message(state = nil)
92
- self.class.translate(state, attributes)
92
+ msg = state ? :truthy : :falsey
93
+ return public_send(msg) if respond_to? msg
94
+ self.class.translate(msg, attributes)
93
95
  end
94
96
 
95
97
  # Calls the assertion checkup and returns the resulting state
@@ -25,13 +25,26 @@ module Assertion
25
25
  alias_method name, :object
26
26
  end
27
27
 
28
- # @private
28
+ private
29
+
30
+ # Ensures the `#object` is defined
31
+ #
32
+ # @param [Class] klass
33
+ #
34
+ # @return [undefined]
35
+ #
29
36
  def self.extended(klass)
30
37
  klass.__send__ :attr_reader, :object
31
38
  end
32
39
 
33
- private
34
-
40
+ # Checks if alias name for `#object` is free
41
+ #
42
+ # @param [#to_sym] key
43
+ #
44
+ # @return [undefined]
45
+ #
46
+ # @raise [NameError] if the key is already in use
47
+ #
35
48
  def __check_attribute__(key)
36
49
  return unless (instance_methods << :state).include? key.to_sym
37
50
  fail NameError.new "#{self}##{key} is already defined"
@@ -39,8 +39,8 @@ module Assertion
39
39
 
40
40
  def __add_attribute__(name)
41
41
  __check_attribute__(name)
42
- define_method(name) { attributes[name] }
43
- attributes << name.to_sym
42
+ define_method(name) { attributes.fetch(name) }
43
+ attributes << name
44
44
  end
45
45
 
46
46
  def __check_attribute__(name)
@@ -28,6 +28,7 @@ module Assertion
28
28
  def not
29
29
  Inverter.new(self)
30
30
  end
31
+ alias_method :!, :not
31
32
 
32
33
  end # module Inversion
33
34
 
@@ -35,6 +35,12 @@ module Assertion
35
35
  extend DSL::Attribute
36
36
  extend DSL::Caller
37
37
 
38
+ # @!attribute [r] object
39
+ #
40
+ # @return [Object] The object to be guarded
41
+ #
42
+ attr_reader :object
43
+
38
44
  # @!scope class
39
45
  # @!method new(object)
40
46
  # Creates the guard instance for the provided object
@@ -6,17 +6,17 @@
6
6
 
7
7
  shared_context :assertion_translations do
8
8
 
9
- def lang
9
+ def __locale__
10
10
  defined?(locale) ? locale : :en
11
11
  end
12
12
 
13
13
  # allows to skip check for error messages
14
- def errors
14
+ def __messages__
15
15
  defined?(messages) ? Array[*messages] : nil
16
16
  end
17
17
 
18
18
  around do |example|
19
- old, I18n.locale = I18n.locale, lang
19
+ old, I18n.locale = I18n.locale, __locale__
20
20
  example.run
21
21
  I18n.locale = old
22
22
  end
@@ -48,38 +48,38 @@ end # shared context
48
48
  shared_examples :validating_attributes do
49
49
 
50
50
  # allows to skip `assertion` definition when described_class is defined
51
- def klass
51
+ def __assertion__
52
52
  defined?(assertion) ? assertion : described_class
53
53
  end
54
54
 
55
55
  # allows to skip `valid` definition to test messages only
56
- def result
56
+ def __valid__
57
57
  defined?(valid) ? valid : false
58
58
  end
59
59
 
60
- subject(:state) { klass[attributes] }
60
+ subject(:state) { __assertion__[attributes] }
61
61
 
62
62
  include_context :assertion_translations
63
63
 
64
64
  it "[validates]" do
65
- expect(state.valid?).to eql(result), <<-REPORT.gsub(/.+\|/, "")
65
+ expect(state.valid?).to eql(__valid__), <<-REPORT.gsub(/.+\|/, "")
66
66
  |
67
- |#{klass}[#{attributes.to_s[1..-2]}]
67
+ |#{__assertion__}[#{attributes.to_s[1..-2]}]
68
68
  |
69
- | expected: to be #{result ? "valid" : "invalid"}
69
+ | expected: to be #{__valid__ ? "valid" : "invalid"}
70
70
  | got: #{state.valid? ? "valid" : "invalid"}
71
71
  REPORT
72
72
  end
73
73
 
74
74
  it "[raises expected message]" do
75
- if !result && state.invalid? && errors
75
+ if !__valid__ && state.invalid? && __messages__
76
76
  expect(state.messages)
77
- .to match_array(errors), <<-REPORT.gsub(/.+\|/, "")
77
+ .to match_array(__messages__), <<-REPORT.gsub(/.+\|/, "")
78
78
  |
79
- |Language: #{locale.to_s.upcase}
80
- |Error messages from #{klass}[#{attributes.to_s[1..-2]}]
79
+ |Language: #{__locale__.to_s.upcase}
80
+ |Error messages from #{__assertion__}[#{attributes.to_s[1..-2]}]
81
81
  |
82
- | expected: #{errors.inspect}
82
+ | expected: #{__messages__.inspect}
83
83
  | got: #{state.messages.inspect}
84
84
  REPORT
85
85
  end
@@ -102,12 +102,12 @@ end # shared examples
102
102
  shared_examples :accepting_object do
103
103
 
104
104
  # allows to skip `guard` definition when described_class is defined
105
- def klass
105
+ def __guard__
106
106
  defined?(guard) ? guard : described_class
107
107
  end
108
108
 
109
109
  # allows to skip `valid` definition to test messages only
110
- def result
110
+ def __accepted__
111
111
  defined?(accepted) ? accepted : false
112
112
  end
113
113
 
@@ -116,11 +116,11 @@ shared_examples :accepting_object do
116
116
  include_context :assertion_translations
117
117
 
118
118
  it "[guards]" do
119
- if result
119
+ if __accepted__
120
120
  expect { checkup }
121
121
  .not_to raise_error, <<-REPORT.gsub(/.+\|/, "")
122
122
  |
123
- |#{klass}[#{object.inspect}]
123
+ |#{__guard__}[#{object.inspect}]
124
124
  |
125
125
  | expected: #{object.inspect}
126
126
  | got: #{begin; checkup; rescue => err; err.inspect; end}
@@ -129,7 +129,7 @@ shared_examples :accepting_object do
129
129
  expect { checkup }
130
130
  .to raise_error(Assertion::InvalidError), <<-REPORT.gsub(/.+\|/, "")
131
131
  |
132
- |#{klass}[#{object.inspect}]
132
+ |#{__guard__}[#{object.inspect}]
133
133
  |
134
134
  | expected: #<Assertion::InvalidError>
135
135
  | got: #{object.inspect}
@@ -139,15 +139,15 @@ shared_examples :accepting_object do
139
139
 
140
140
  it "[raises expected message]" do
141
141
  begin
142
- checkup if !result && errors
142
+ checkup if !__accepted__ && __messages__
143
143
  rescue => err
144
144
  expect(err.messages)
145
- .to match_array(errors), <<-REPORT.gsub(/.+\|/, "")
145
+ .to match_array(__messages__), <<-REPORT.gsub(/.+\|/, "")
146
146
  |
147
- |Language: #{locale.to_s.upcase}
148
- |Error messages from #{klass}[#{object.inspect}]
147
+ |Language: #{__locale__.to_s.upcase}
148
+ |Error messages from #{__guard__}[#{object.inspect}]
149
149
  |
150
- | expected: #{errors.inspect}
150
+ | expected: #{__messages__.inspect}
151
151
  | got: #{err.messages.inspect}
152
152
  REPORT
153
153
  end
@@ -2,8 +2,7 @@
2
2
 
3
3
  module Assertion
4
4
 
5
- # Describes the state of the assertion applied to given arguments
6
- # (the result of the checkup)
5
+ # Describes the composable state of the assertion
7
6
  #
8
7
  # @api public
9
8
  #
@@ -33,22 +33,6 @@ module Assertion
33
33
  #
34
34
  ROOT = :assertion
35
35
 
36
- # The states to be translated with their dictionary names
37
- #
38
- # @return [Hash<Object => Symbol>]
39
- #
40
- DICTIONARY = { true => :truthy, false => :falsey }
41
-
42
- # Provides a scope for the class
43
- #
44
- # @param [Class] klass
45
- #
46
- # @return [Array<Symbol>]
47
- #
48
- def self.scope(klass)
49
- [ROOT, Inflecto.underscore(klass).to_sym]
50
- end
51
-
52
36
  # @!attribute [r] scope
53
37
  #
54
38
  # @return [Array<Symbol>] the scope for translations
@@ -72,7 +56,7 @@ module Assertion
72
56
  # @private
73
57
  def initialize(assertion)
74
58
  @assertion = assertion
75
- @scope = self.class.scope(assertion)
59
+ @scope = "#{ROOT}.#{Inflecto.underscore assertion}"
76
60
  IceNine.deep_freeze(self)
77
61
  end
78
62
 
@@ -86,7 +70,7 @@ module Assertion
86
70
  # @return [String] The translation
87
71
  #
88
72
  def call(state, args = {})
89
- I18n.translate DICTIONARY[state ? true : false], args.merge(scope: scope)
73
+ I18n.translate state, args.merge(scope: scope)
90
74
  end
91
75
 
92
76
  end # class Translator
@@ -4,6 +4,6 @@ module Assertion
4
4
 
5
5
  # The semantic version of the module.
6
6
  # @see http://semver.org/ Semantic versioning 2.0
7
- VERSION = "0.2.3".freeze
7
+ VERSION = "0.2.4".freeze
8
8
 
9
9
  end # module Assertion
@@ -15,22 +15,44 @@ describe Assertion do
15
15
  age.to_i >= 18
16
16
  end
17
17
 
18
- jane = { name: "Jane", gender: :female, age: 19 }
18
+ class IsCat < Assertion::Base
19
+ attribute :species, :name
20
+
21
+ def check
22
+ species == :cat
23
+ end
24
+
25
+ def truthy
26
+ "#{name} is a cat"
27
+ end
28
+
29
+ def falsey
30
+ "#{name} is not a cat"
31
+ end
32
+ end
33
+
34
+ jane = { name: "Jane", gender: :female, age: 19, species: :human }
35
+ john = { name: "John", gender: :male, age: 9, species: :cat }
19
36
 
20
- jane_is_a_male = IsMale[jane]
21
37
  jane_is_a_female = IsMale.not[jane]
22
38
  jane_is_an_adult = IsAdult[jane]
23
- jane_is_a_child = IsAdult.not[jane]
24
-
25
39
  jane_is_a_women = jane_is_a_female & jane_is_an_adult
26
40
  expect(jane_is_a_women).to be_valid
27
41
  expect { jane_is_a_women.validate! }.not_to raise_error
28
42
 
43
+ jane_is_a_male = IsMale[jane]
44
+ jane_is_a_child = IsAdult.not[jane]
29
45
  jane_is_a_boy = jane_is_a_male & jane_is_a_child
30
46
  expect(jane_is_a_boy).not_to be_valid
31
47
  expect(jane_is_a_boy.messages)
32
48
  .to eql ["Jane is a female", "Jane is an adult (age 19)"]
33
49
  expect { jane_is_a_boy.validate! }.to raise_error Assertion::InvalidError
50
+
51
+ jane_is_a_cat = IsCat[jane]
52
+ expect(jane_is_a_cat.messages).to eql ["Jane is not a cat"]
53
+
54
+ john_is_not_a_cat = IsCat.not[john]
55
+ expect(john_is_not_a_cat.messages).to eql ["John is a cat"]
34
56
  end
35
57
 
36
58
  after do
@@ -19,7 +19,7 @@ describe Assertion::Base do
19
19
 
20
20
  describe ".new" do
21
21
 
22
- let(:klass) { Class.new(described_class) { attribute :foo, :bar } }
22
+ let(:klass) { Class.new(described_class) { attribute :foo, "bar" } }
23
23
 
24
24
  context "with attributes" do
25
25
 
@@ -67,7 +67,8 @@ describe Assertion::Base do
67
67
  end
68
68
 
69
69
  it "returns a translation" do
70
- expect(subject).to eql translator.call(options[:as], attributes)
70
+ msg = options[:as] ? :truthy : :falsey
71
+ expect(subject).to eql translator.call(msg, attributes)
71
72
  end
72
73
 
73
74
  end # shared examples
@@ -84,6 +85,18 @@ describe Assertion::Base do
84
85
  subject { assertion.message }
85
86
  end
86
87
 
88
+ context "when #truthy and #falsey defined" do
89
+
90
+ before { klass.send(:define_method, :truthy) { "foo" } }
91
+ before { klass.send(:define_method, :falsey) { "bar" } }
92
+
93
+ it "uses defined method" do
94
+ expect(assertion.message(true)).to eql "foo"
95
+ expect(assertion.message(false)).to eql "bar"
96
+ end
97
+
98
+ end # context
99
+
87
100
  end # describe #message
88
101
 
89
102
  describe "#call" do
@@ -13,6 +13,17 @@ describe Assertion::DSL::Inversion do
13
13
  expect(subject.source).to eql klass
14
14
  end
15
15
 
16
- end # describe .not
16
+ end # describe #not
17
+
18
+ describe "#!" do
19
+
20
+ subject { !klass }
21
+
22
+ it "creates the iverter for the current class" do
23
+ expect(subject).to be_kind_of Assertion::Inverter
24
+ expect(subject.source).to eql klass
25
+ end
26
+
27
+ end # describe #!
17
28
 
18
29
  end # describe Assertion::DSL::Inversion
@@ -20,13 +20,6 @@ describe Assertion::Translator do
20
20
 
21
21
  end # describe #assertion
22
22
 
23
- describe "#scope" do
24
-
25
- subject { translator.scope }
26
- it { is_expected.to eql [:assertion, :is_foo] }
27
-
28
- end # describe #scope
29
-
30
23
  describe "#call" do
31
24
 
32
25
  shared_examples "translating" do |input, opts|
@@ -49,10 +42,8 @@ describe Assertion::Translator do
49
42
 
50
43
  end # shared examples
51
44
 
52
- it_behaves_like "translating", true, to: "truthy"
53
- it_behaves_like "translating", "ok", to: "truthy"
54
- it_behaves_like "translating", false, to: "falsey"
55
- it_behaves_like "translating", nil, to: "falsey"
45
+ it_behaves_like "translating", :truthy, to: "truthy"
46
+ it_behaves_like "translating", :falsey, to: "falsey"
56
47
 
57
48
  end # describe #call
58
49
 
metadata CHANGED
@@ -1,83 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: assertion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.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-07-12 00:00:00.000000000 Z
11
+ date: 2015-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: i18n
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0.7'
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
26
  version: '0.7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: ice_nine
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0.11'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.11'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: inflecto
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: hexx-rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0.5'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0.5'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: equalizer
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.0'
83
83
  description:
@@ -88,13 +88,13 @@ extra_rdoc_files:
88
88
  - README.md
89
89
  - LICENSE
90
90
  files:
91
- - .coveralls.yml
92
- - .gitignore
93
- - .metrics
94
- - .rspec
95
- - .rubocop.yml
96
- - .travis.yml
97
- - .yardopts
91
+ - ".coveralls.yml"
92
+ - ".gitignore"
93
+ - ".metrics"
94
+ - ".rspec"
95
+ - ".rubocop.yml"
96
+ - ".travis.yml"
97
+ - ".yardopts"
98
98
  - CHANGELOG.md
99
99
  - Gemfile
100
100
  - Guardfile
@@ -158,12 +158,12 @@ require_paths:
158
158
  - lib
159
159
  required_ruby_version: !ruby/object:Gem::Requirement
160
160
  requirements:
161
- - - ~>
161
+ - - "~>"
162
162
  - !ruby/object:Gem::Version
163
163
  version: '1.9'
164
164
  required_rubygems_version: !ruby/object:Gem::Requirement
165
165
  requirements:
166
- - - ! '>='
166
+ - - ">="
167
167
  - !ruby/object:Gem::Version
168
168
  version: '0'
169
169
  requirements: []