windcharger 0.3.0 → 0.6.0

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