windcharger 0.3.0 → 0.6.0
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 +5 -5
- data/.github/workflows/ci.yml +26 -0
- data/Gemfile +2 -0
- data/LICENSE.txt +1 -1
- data/README.md +3 -4
- data/Rakefile +2 -0
- data/lib/windcharger/attributes.rb +6 -3
- data/lib/windcharger/hash_transformer.rb +8 -3
- data/lib/windcharger/version.rb +3 -1
- data/lib/windcharger.rb +2 -0
- data/spec/readme_spec.rb +2 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/windcharger/attributes_spec.rb +44 -0
- data/spec/windcharger/hash_transformer_spec.rb +28 -0
- data/windcharger.gemspec +3 -2
- metadata +15 -13
- data/.travis.yml +0 -7
- data/spec/windcharger_spec.rb +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e8e26b7926c106cea632124f5d031f2ae434e3641f13f6ca4d721284437e5505
|
4
|
+
data.tar.gz: 64bd2a8c7196e7469ebd575cf2cb1734a7d2734bb36382537d179a8d5f5c9cff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00a7a5a53d468f825de59165b294a08c13f1cf03634dfff0a3b566180628dddbdd877e931560fdf3e3341ff7093be215d03bf4a562c521d263e218b21227cb35
|
7
|
+
data.tar.gz: bf3d5b88e5b9fe7552b0f1b846e371648e38c1e5e623012757190b882f51b951b97350281f36a47f10046c316d995e1f8972e556c3836ae093f8f942d1befbf4
|
@@ -0,0 +1,26 @@
|
|
1
|
+
---
|
2
|
+
name: CI
|
3
|
+
|
4
|
+
'on':
|
5
|
+
pull_request:
|
6
|
+
push:
|
7
|
+
|
8
|
+
jobs:
|
9
|
+
test:
|
10
|
+
runs-on: ubuntu-latest
|
11
|
+
strategy:
|
12
|
+
matrix:
|
13
|
+
ruby-version:
|
14
|
+
- '2.6'
|
15
|
+
- '2.7'
|
16
|
+
- '3.0'
|
17
|
+
|
18
|
+
steps:
|
19
|
+
- uses: actions/checkout@v2
|
20
|
+
- name: Setup
|
21
|
+
uses: ruby/setup-ruby@v1
|
22
|
+
with:
|
23
|
+
ruby-version: ${{ matrix.ruby-version }}
|
24
|
+
bundler-cache: true
|
25
|
+
- name: Run tests
|
26
|
+
run: bundle exec rake
|
data/Gemfile
CHANGED
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
# Windcharger
|
2
2
|
|
3
|
-
[](https://rubygems.org/gems/windcharger)
|
3
|
+
[](https://rubygems.org/gems/windcharger)
|
4
|
+
[](https://travis-ci.org/amarshall/windcharger)
|
6
5
|
|
7
6
|

|
8
7
|
|
@@ -90,4 +89,4 @@ Add an `initialize` that takes some input and then transform it to each attribut
|
|
90
89
|
|
91
90
|
## Credits & License
|
92
91
|
|
93
|
-
Copyright © 2013 J. Andrew Marshall. License is available in the LICENSE file.
|
92
|
+
Copyright © 2013–Present J. Andrew Marshall. License is available in the LICENSE file.
|
data/Rakefile
CHANGED
@@ -1,13 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Windcharger
|
2
4
|
module Attributes
|
3
5
|
def attributes
|
4
|
-
@
|
6
|
+
(@__windcharger_attributes ||= []).dup.freeze
|
5
7
|
end
|
6
8
|
|
7
9
|
private
|
8
10
|
|
9
11
|
def __windcharger_add_attribute name
|
10
|
-
(@
|
12
|
+
(@__windcharger_attributes ||= []) << name.to_sym
|
11
13
|
end
|
12
14
|
|
13
15
|
def attribute *attributes
|
@@ -19,7 +21,8 @@ module Windcharger
|
|
19
21
|
end
|
20
22
|
|
21
23
|
def method_added name
|
22
|
-
|
24
|
+
super
|
25
|
+
return unless defined?(@__windcharger_next_is_attribute) && @__windcharger_next_is_attribute
|
23
26
|
__windcharger_add_attribute name
|
24
27
|
@__windcharger_next_is_attribute = false
|
25
28
|
end
|
@@ -1,10 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Windcharger
|
2
4
|
module HashTransformer
|
3
5
|
def transform
|
4
6
|
self.class.attributes.each_with_object({}) do |attribute, hash|
|
5
|
-
hash[attribute] =
|
6
|
-
end
|
7
|
+
hash[attribute] = public_send(attribute)
|
8
|
+
end.freeze
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_h(*args, &block)
|
12
|
+
transform(*args, &block)
|
7
13
|
end
|
8
|
-
alias_method :to_h, :transform
|
9
14
|
end
|
10
15
|
end
|
data/lib/windcharger/version.rb
CHANGED
data/lib/windcharger.rb
CHANGED
data/spec/readme_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'windcharger/attributes'
|
3
5
|
|
@@ -61,4 +63,46 @@ describe Windcharger::Attributes do
|
|
61
63
|
|
62
64
|
expect(transformer_class.attributes).to eq [:foo, :qux, :foobar]
|
63
65
|
end
|
66
|
+
|
67
|
+
it "does not permit mutating attributes indirectly" do
|
68
|
+
transformer_class = Class.new do
|
69
|
+
extend Windcharger::Attributes
|
70
|
+
|
71
|
+
attribute
|
72
|
+
def foo; end
|
73
|
+
end
|
74
|
+
expect { transformer_class.attributes << :bar }.to raise_error FrozenError
|
75
|
+
expect(transformer_class.attributes).to eq [:foo]
|
76
|
+
end
|
77
|
+
|
78
|
+
it "does not break other method_added hooks" do
|
79
|
+
calls_before = []
|
80
|
+
calls_after = []
|
81
|
+
other_hooker_before = Module.new do
|
82
|
+
define_method :method_added do |name|
|
83
|
+
super name
|
84
|
+
calls_before << name
|
85
|
+
end
|
86
|
+
end
|
87
|
+
other_hooker_after = Module.new do
|
88
|
+
define_method :method_added do |name|
|
89
|
+
super name
|
90
|
+
calls_after << name
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
Class.new do
|
95
|
+
extend other_hooker_before
|
96
|
+
extend Windcharger::Attributes
|
97
|
+
extend other_hooker_after
|
98
|
+
|
99
|
+
attribute
|
100
|
+
def foo; end
|
101
|
+
|
102
|
+
def bar; end
|
103
|
+
end
|
104
|
+
|
105
|
+
expect(calls_before).to eq %i[foo bar]
|
106
|
+
expect(calls_after).to eq %i[foo bar]
|
107
|
+
end
|
64
108
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'windcharger/hash_transformer'
|
3
5
|
|
@@ -21,5 +23,31 @@ describe Windcharger::HashTransformer do
|
|
21
23
|
bar: 'colorless green ideas',
|
22
24
|
})
|
23
25
|
end
|
26
|
+
|
27
|
+
it "does not call private methods" do
|
28
|
+
transformer_class = Class.new do
|
29
|
+
extend Windcharger::Attributes
|
30
|
+
include Windcharger::HashTransformer
|
31
|
+
|
32
|
+
private
|
33
|
+
attribute
|
34
|
+
def foo; 42; end
|
35
|
+
end
|
36
|
+
transformer = transformer_class.new
|
37
|
+
|
38
|
+
expect { transformer.transform }.to raise_error NoMethodError, /private/
|
39
|
+
end
|
40
|
+
|
41
|
+
it "calls overridden transform via to_h" do
|
42
|
+
transformer_class = Class.new do
|
43
|
+
extend Windcharger::Attributes
|
44
|
+
include Windcharger::HashTransformer
|
45
|
+
|
46
|
+
def transform; :foo; end
|
47
|
+
end
|
48
|
+
transformer = transformer_class.new
|
49
|
+
|
50
|
+
expect(transformer.to_h).to eq :foo
|
51
|
+
end
|
24
52
|
end
|
25
53
|
end
|
data/windcharger.gemspec
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
lib = File.expand_path('../lib', __FILE__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
require 'windcharger/version'
|
@@ -18,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
18
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
20
|
spec.require_paths = ['lib']
|
20
21
|
|
21
|
-
spec.add_development_dependency 'bundler', '
|
22
|
+
spec.add_development_dependency 'bundler', '>= 1.3', '< 3.0'
|
22
23
|
spec.add_development_dependency 'rake'
|
23
24
|
spec.add_development_dependency 'rspec'
|
24
25
|
end
|
metadata
CHANGED
@@ -1,29 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: windcharger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Marshall
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 1980-01-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '3.0'
|
20
23
|
type: :development
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '1.3'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '3.0'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: rake
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,8 +65,8 @@ executables: []
|
|
59
65
|
extensions: []
|
60
66
|
extra_rdoc_files: []
|
61
67
|
files:
|
68
|
+
- ".github/workflows/ci.yml"
|
62
69
|
- ".gitignore"
|
63
|
-
- ".travis.yml"
|
64
70
|
- Gemfile
|
65
71
|
- LICENSE.txt
|
66
72
|
- README.md
|
@@ -73,13 +79,12 @@ files:
|
|
73
79
|
- spec/spec_helper.rb
|
74
80
|
- spec/windcharger/attributes_spec.rb
|
75
81
|
- spec/windcharger/hash_transformer_spec.rb
|
76
|
-
- spec/windcharger_spec.rb
|
77
82
|
- windcharger.gemspec
|
78
83
|
homepage: http://johnandrewmarshall.com/projects/windcharger
|
79
84
|
licenses:
|
80
85
|
- MIT
|
81
86
|
metadata: {}
|
82
|
-
post_install_message:
|
87
|
+
post_install_message:
|
83
88
|
rdoc_options: []
|
84
89
|
require_paths:
|
85
90
|
- lib
|
@@ -94,9 +99,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
94
99
|
- !ruby/object:Gem::Version
|
95
100
|
version: '0'
|
96
101
|
requirements: []
|
97
|
-
|
98
|
-
|
99
|
-
signing_key:
|
102
|
+
rubygems_version: 3.2.26
|
103
|
+
signing_key:
|
100
104
|
specification_version: 4
|
101
105
|
summary: Small library to easily make objects that transform input via many methods.
|
102
106
|
test_files:
|
@@ -104,5 +108,3 @@ test_files:
|
|
104
108
|
- spec/spec_helper.rb
|
105
109
|
- spec/windcharger/attributes_spec.rb
|
106
110
|
- spec/windcharger/hash_transformer_spec.rb
|
107
|
-
- spec/windcharger_spec.rb
|
108
|
-
has_rdoc:
|
data/.travis.yml
DELETED
data/spec/windcharger_spec.rb
DELETED
File without changes
|