value_semantics 1.0.0 → 1.0.1

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 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