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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: a25e071066657d28c05aee00abbf363591adc933
4
- data.tar.gz: 85e0f55db7a73ddb864c0ad12ddd15afa1b7f26b
2
+ SHA256:
3
+ metadata.gz: e8e26b7926c106cea632124f5d031f2ae434e3641f13f6ca4d721284437e5505
4
+ data.tar.gz: 64bd2a8c7196e7469ebd575cf2cb1734a7d2734bb36382537d179a8d5f5c9cff
5
5
  SHA512:
6
- metadata.gz: 6dc1f09246efc3c02b452294a508645bee4d4ed82c5c95b29e8b445b3ff1cb6aeda7d08664373f3f1b5e9fd56fcc3abf76dd3ed0a558651defe7faae499d951a
7
- data.tar.gz: 80e3fb2d2adcfe3f22500a550842d2be1dd1bf8a5522275374121960ed3b82503e21a90ce9c75f2e2ce7d66eacddf05ecf5137225cd7edb026f6b2397be0496f
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in windcharger.gemspec
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013 J. Andrew Marshall <http://johnandrewmarshall.com>
1
+ Copyright (c) 2013-Present J. Andrew Marshall <http://johnandrewmarshall.com>
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -1,8 +1,7 @@
1
1
  # Windcharger
2
2
 
3
- [![Build Status](https://secure.travis-ci.org/amarshall/windcharger.png?branch=master)](https://travis-ci.org/amarshall/windcharger)
4
- [![Code Climate rating](https://codeclimate.com/github/amarshall/windcharger.png)](https://codeclimate.com/github/amarshall/windcharger)
5
- [![Gem Version](https://badge.fury.io/rb/windcharger.png)](https://rubygems.org/gems/windcharger)
3
+ [![Gem Version](https://badge.fury.io/rb/windcharger.svg)](https://rubygems.org/gems/windcharger)
4
+ [![Build Status](https://secure.travis-ci.org/amarshall/windcharger.svg?branch=master)](https://travis-ci.org/amarshall/windcharger)
6
5
 
7
6
  ![Windcharger mascot. He carries powerful magnets in his arms that he can use to manipulate large objects.](https://i.imgur.com/lApzHFP.jpg "He carries powerful magnets in his arms that he can use to manipulate large objects.")
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,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
3
5
 
@@ -1,13 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Windcharger
2
4
  module Attributes
3
5
  def attributes
4
- @__attributes || []
6
+ (@__windcharger_attributes ||= []).dup.freeze
5
7
  end
6
8
 
7
9
  private
8
10
 
9
11
  def __windcharger_add_attribute name
10
- (@__attributes ||= []) << name.to_sym
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
- return unless @__windcharger_next_is_attribute
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] = send 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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Windcharger
2
- VERSION = '0.3.0'
4
+ VERSION = '0.6.0'
3
5
  end
data/lib/windcharger.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'windcharger/version'
2
4
 
3
5
  require 'windcharger/attributes'
data/spec/readme_spec.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'windcharger'
3
5
 
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.configure do |config|
2
4
  config.expect_with :rspec do |c|
3
5
  c.syntax = :expect
@@ -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
- # coding: utf-8
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', '~> 1.3'
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.3.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: 2014-02-18 00:00:00.000000000 Z
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
- rubyforge_project:
98
- rubygems_version: 2.2.0
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
@@ -1,7 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 1.9.2
4
- - 1.9.3
5
- - 2.0.0
6
- - jruby-19mode
7
- - rbx-19mode
File without changes