value_semantics 1.0.0 → 1.0.1

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
  SHA256:
3
- metadata.gz: 36400a694002cc8c879dfbad099d365e2674edf63ad258794094e2bb41f894da
4
- data.tar.gz: f8f67ee234971124bcb65e487d59ed3126c8f51406b1bc4cc9d93eb1d70a5262
3
+ metadata.gz: 0d5af9c70cace0213a309865f7fb2eaf09759d3f654d530d577d9067ee8e025d
4
+ data.tar.gz: 31ef2d58e797173040691bc6ac57703751102c40519c8bcd4913f6fa24e97481
5
5
  SHA512:
6
- metadata.gz: 9d8becb2999466ceb24b0c9e6139ab089a64f019304c8803e6412e6a4818965dac59c601fc65f950c7e29cd5f4e27895a37e677baac6054e554e4fe749f2b5a6
7
- data.tar.gz: 67d37d2f3fe4f07a6c54fdec2546e3a2b2e12ee92b1aa69a914382fee08ad9b0a2bfc00948e38f1b17b1608a6247763e507e255640add73c0ea0a3c5d6bac9b0
6
+ metadata.gz: 051b338a932d31e4e74a2699bd45a9a740e7fe8673f8833e566254c4be8262f90947160784db895d1706c40a8f910db21ea0999a90a3df6d65481dd60932a626
7
+ data.tar.gz: 8860483b155c84402fc6964967b29ba1cef4f6a1b46409752b714d139c78625b02d0bcf184a4eb671bb2b94c4b4442938fcacec32e07f854f934e2defb87e811
data/.travis.yml CHANGED
@@ -3,7 +3,7 @@ rvm:
3
3
  - 2.3.7
4
4
  - 2.4.4
5
5
  - 2.5.1
6
- script: bundle exec rspec
6
+ script: bin/mutation_test.sh
7
7
  deploy:
8
8
  provider: rubygems
9
9
  on:
data/README.md CHANGED
@@ -1,4 +1,6 @@
1
+ [![Gem Version](https://badge.fury.io/rb/value_semantics.svg)](https://badge.fury.io/rb/value_semantics)
1
2
  [![Build Status](https://travis-ci.org/tomdalling/value_semantics.svg?branch=master)](https://travis-ci.org/tomdalling/value_semantics)
3
+ ![Mutation Coverage](https://img.shields.io/badge/mutation%20coverage-100%25-brightgreen.svg)
2
4
 
3
5
  ValueSemantics
4
6
  ==============
@@ -0,0 +1,6 @@
1
+ #!/bin/sh
2
+ set -ue
3
+
4
+ PATTERN=${1:-ValueSemantics*}
5
+
6
+ bundle exec mutant --include lib --require value_semantics --use rspec "$PATTERN"
@@ -1,23 +1,23 @@
1
1
  module ValueSemantics
2
2
  def self.for_attributes(&block)
3
3
  attributes = DSL.run(&block)
4
- generate_module(attributes)
4
+ generate_module(attributes.freeze)
5
5
  end
6
6
 
7
7
  def self.generate_module(attributes)
8
- Module.new.tap do |m|
8
+ Module.new do
9
9
  # include all the instance methods
10
- m.include(Semantics)
10
+ include(Semantics)
11
11
 
12
12
  # define the attr readers
13
13
  attributes.each do |attr|
14
- m.module_eval("def #{attr.name}; #{attr.instance_variable}; end")
14
+ module_eval("def #{attr.name}; #{attr.instance_variable}; end")
15
15
  end
16
16
 
17
17
  # define BaseClass.attributes class method
18
- m.const_set(:ATTRIBUTES__, attributes)
19
- m.define_singleton_method(:included) do |base|
20
- base.const_set(:ValueSemantics_Generated, m)
18
+ const_set(:ATTRIBUTES__, attributes)
19
+ def self.included(base)
20
+ base.const_set(:ValueSemantics_Generated, self)
21
21
  class << base
22
22
  def attributes
23
23
  self::ATTRIBUTES__
@@ -54,7 +54,7 @@ module ValueSemantics
54
54
  end
55
55
 
56
56
  def ==(other)
57
- (other.is_a?(self.class) || is_a?(other.class)) && other.to_h == to_h
57
+ (other.is_a?(self.class) || is_a?(other.class)) && other.to_h.eql?(to_h)
58
58
  end
59
59
 
60
60
  def eql?(other)
@@ -75,7 +75,7 @@ module ValueSemantics
75
75
  end
76
76
 
77
77
  class Attribute
78
- attr_reader :name, :has_default, :default_value
78
+ attr_reader :name, :has_default, :default_value, :validator
79
79
 
80
80
  def initialize(name:, has_default:, default_value:, validator:)
81
81
  @name = name.to_sym
@@ -120,7 +120,7 @@ module ValueSemantics
120
120
  end
121
121
 
122
122
  def validate?(value)
123
- !!(@validator === value)
123
+ validator === value
124
124
  end
125
125
 
126
126
  def instance_variable
@@ -163,26 +163,26 @@ module ValueSemantics
163
163
  ArrayOf.new(element_validator)
164
164
  end
165
165
 
166
- def declare_attribute(attr_name, validator=Anything, default: NOT_SPECIFIED)
166
+ def def_attr(attr_name, validator=Anything, default: NOT_SPECIFIED)
167
167
  __attributes << Attribute.new(
168
168
  name: attr_name,
169
- has_default: default != NOT_SPECIFIED,
169
+ has_default: !(NOT_SPECIFIED.equal?(default)),
170
170
  default_value: default,
171
171
  validator: validator,
172
172
  )
173
173
  end
174
174
 
175
- def method_missing(name, *args, &block)
175
+ def method_missing(name, *args)
176
176
  if respond_to_missing?(name)
177
- declare_attribute(name, *args, &block)
177
+ def_attr(name, *args)
178
178
  else
179
179
  super
180
180
  end
181
181
  end
182
182
 
183
- def respond_to_missing?(method_name, include_private = false)
184
- first_letter = method_name.to_s[0]
185
- (first_letter == first_letter.downcase) || super
183
+ def respond_to_missing?(method_name, _include_private=nil)
184
+ first_letter = method_name[0]
185
+ first_letter.eql?(first_letter.downcase)
186
186
  end
187
187
  end
188
188
 
@@ -190,12 +190,12 @@ module ValueSemantics
190
190
  extend self
191
191
 
192
192
  def ===(value)
193
- true.eql?(value) || false.eql?(value)
193
+ true.equal?(value) || false.equal?(value)
194
194
  end
195
195
  end
196
196
 
197
197
  module Anything
198
- def self.===(value)
198
+ def self.===(_)
199
199
  true
200
200
  end
201
201
  end
@@ -1,3 +1,3 @@
1
1
  module ValueSemantics
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
29
29
 
30
30
  spec.add_development_dependency "bundler", "~> 1.15"
31
31
  spec.add_development_dependency "rspec", "~> 3.7.0"
32
- #spec.add_development_dependency "mutant-rspec"
32
+ spec.add_development_dependency "mutant-rspec"
33
33
  spec.add_development_dependency "byebug"
34
34
  spec.add_development_dependency "gem-release"
35
35
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: value_semantics
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Dalling
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-04 00:00:00.000000000 Z
11
+ date: 2018-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 3.7.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: mutant-rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: byebug
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -83,6 +97,7 @@ files:
83
97
  - LICENSE.txt
84
98
  - README.md
85
99
  - bin/console
100
+ - bin/mutation_test.sh
86
101
  - bin/setup
87
102
  - lib/value_semantics.rb
88
103
  - lib/value_semantics/version.rb