simple-immutable 1.0.2 → 1.0.3

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: 64a3fdc5e88962936613bf54a490e1b04342d083a5be7818045036c607fbb5fd
4
- data.tar.gz: 6bb051df21c2809e9ee3596d5f9cb571111032876c3480e07691a0fb44ad610c
3
+ metadata.gz: d55dfd0cc8370b9bb68d8c1923770bc248d2eb4a2a71fe89717585366e17da78
4
+ data.tar.gz: 50baec5315bdd9a6b6b9cfa389fa8cda388047b38f517f6ca7571d5a96de8926
5
5
  SHA512:
6
- metadata.gz: 4dc8c01c9763ddb8ed545cb3a45357c2de743f83e9cc002e5cc52329bf2909e8de4ee38255bebd6a87e09f811d20244c16fff49d63b2e40f53b9ef73faf33639
7
- data.tar.gz: fc24b0ce11427a6fece8911e9fa1021ab5bfb5b1edd63b1ac699cd1866c3919903d97f04652bbd432b8b645e08a3cc674fddf1c3e02fc55263ac0761b2a5ccbd
6
+ metadata.gz: 59c0ce8e1ae74f98e4c8b13cf6d1642182f83440a2eb111b1df853748adc4a21635900011da503f00d02990b2a5895a54fcde1fc66001b2679ed3169a719db47
7
+ data.tar.gz: beb2b47f7096c2e3bf98a1b7bbf4c4a50360a992a4ae96a213512ce31ff1e00cf7106351fedc118846d0f9463c5f82ed04d8bad85bc79200106d1d32ea92965f
@@ -0,0 +1,32 @@
1
+ AllCops:
2
+ Exclude:
3
+ - bin/**/*
4
+ - test/**/*
5
+ - scripts/**/*
6
+ - ./*.gemspec
7
+ - Gemfile
8
+ NewCops: enable
9
+
10
+ Style/StringLiterals:
11
+ EnforcedStyle: double_quotes
12
+
13
+ Style/Documentation:
14
+ Enabled: false
15
+
16
+ Style/FrozenStringLiteralComment:
17
+ Enabled: false
18
+
19
+ Lint/MissingCopEnableDirective:
20
+ Enabled: false
21
+
22
+ Layout/EmptyLinesAroundAttributeAccessor:
23
+ Enabled: false
24
+
25
+ Style/ClassAndModuleChildren:
26
+ Enabled: false
27
+
28
+ Style/NumericPredicate:
29
+ Enabled: false
30
+
31
+ Metrics/MethodLength:
32
+ Max: 20
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in {gemname}.gemspec
4
4
  gemspec
5
+
6
+ gem "rubocop", "~> 0.87.1"
data/Makefile CHANGED
@@ -1,7 +1,10 @@
1
1
  default: test
2
2
 
3
+ .PHONY: test
4
+
3
5
  test:
4
- ruby lib/simple/immutable.rb
6
+ ruby test/immutable_test.rb
7
+ bin/rubocop
5
8
 
6
9
  release:
7
10
  scripts/release.rb
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.2
1
+ 1.0.3
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'rubocop' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path("../bundle", __FILE__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
28
+
29
+ load Gem.bin_path("rubocop", "rubocop")
@@ -1 +1,3 @@
1
- require "simple/immutable"
1
+ # rubocop:disable Naming/FileName
2
+
3
+ require_relative "simple/immutable"
@@ -6,7 +6,7 @@ class Simple::Immutable
6
6
 
7
7
  # turns an object, which can be a hash or array of hashes, arrays, and scalars
8
8
  # into an object which you can use to access with dot methods.
9
- def self.create(object, max_depth = 5)
9
+ def self.create(object, max_depth = 8)
10
10
  case object
11
11
  when Array
12
12
  raise ArgumentError, "Object nested too deep (or inner loop?)" if max_depth < 0
@@ -19,6 +19,17 @@ class Simple::Immutable
19
19
  end
20
20
  end
21
21
 
22
+ def self.raw_data(immutable)
23
+ case immutable
24
+ when SELF
25
+ immutable.instance_variable_get :@hsh
26
+ when Array
27
+ immutable.map { |e| raw_data(e) }
28
+ else
29
+ immutable
30
+ end
31
+ end
32
+
22
33
  private
23
34
 
24
35
  def initialize(hsh)
@@ -59,90 +70,3 @@ class Simple::Immutable
59
70
  @hsh == other
60
71
  end
61
72
  end
62
-
63
- if $PROGRAM_NAME == __FILE__
64
-
65
- # rubocop:disable Metrics/AbcSize
66
-
67
- require "test-unit"
68
-
69
- class Simple::Immutable::TestCase < Test::Unit::TestCase
70
- Immutable = ::Simple::Immutable
71
-
72
- def hsh
73
- {
74
- a: "a-value",
75
- "b": "b-value",
76
- "child": {
77
- name: "childname",
78
- grandchild: {
79
- name: "grandchildname"
80
- }
81
- },
82
- "children": [
83
- "anna",
84
- "arthur",
85
- {
86
- action: {
87
- keep_your_mouth_shut: true
88
- }
89
- }
90
- ]
91
- }
92
- end
93
-
94
- def immutable
95
- Immutable.create hsh
96
- end
97
-
98
- def test_hash_access
99
- assert_equal "a-value", immutable.a
100
- assert_equal "b-value", immutable.b
101
- end
102
-
103
- def test_comparison
104
- immutable = Immutable.create hsh
105
-
106
- assert_equal immutable, hsh
107
- assert_not_equal({}, immutable)
108
- end
109
-
110
- def test_child_access
111
- child = immutable.child
112
- assert_kind_of(Immutable, child)
113
- assert_equal "childname", immutable.child.name
114
- assert_equal "grandchildname", immutable.child.grandchild.name
115
- end
116
-
117
- def test_array_access
118
- assert_kind_of(Array, immutable.children)
119
- assert_equal 3, immutable.children.length
120
- assert_equal "anna", immutable.children[0]
121
-
122
- assert_kind_of(Immutable, immutable.children[2])
123
- assert_equal true, immutable.children[2].action.keep_your_mouth_shut
124
- end
125
-
126
- def test_base_class
127
- assert_nothing_raised do
128
- immutable.object_id
129
- end
130
- end
131
-
132
- def test_missing_keys
133
- assert_raise(NoMethodError) do
134
- immutable.foo
135
- end
136
- end
137
-
138
- def test_skip_when_args_or_block
139
- assert_raise(NoMethodError) do
140
- immutable.a(1, 2, 3)
141
- end
142
- assert_raise(NoMethodError) do
143
- immutable.a { :dummy }
144
- end
145
- end
146
- end
147
-
148
- end
@@ -0,0 +1,94 @@
1
+ # rubocop:disable Metrics/AbcSize
2
+
3
+ require "test-unit"
4
+ require_relative "../lib/simple-immutable"
5
+
6
+ class Simple::Immutable::TestCase < Test::Unit::TestCase
7
+ Immutable = ::Simple::Immutable
8
+
9
+ def hsh
10
+ {
11
+ a: "a-value",
12
+ "b": "b-value",
13
+ "child": {
14
+ name: "childname",
15
+ grandchild: {
16
+ name: "grandchildname"
17
+ }
18
+ },
19
+ "children": [
20
+ "anna",
21
+ "arthur",
22
+ {
23
+ action: {
24
+ keep_your_mouth_shut: true
25
+ }
26
+ }
27
+ ]
28
+ }
29
+ end
30
+
31
+ def immutable
32
+ Immutable.create hsh
33
+ end
34
+
35
+ def test_hash_access
36
+ assert_equal "a-value", immutable.a
37
+ assert_equal "b-value", immutable.b
38
+ end
39
+
40
+ def test_comparison
41
+ immutable = Immutable.create hsh
42
+
43
+ assert_equal immutable, hsh
44
+ assert_not_equal({}, immutable)
45
+ end
46
+
47
+ def test_child_access
48
+ child = immutable.child
49
+ assert_kind_of(Immutable, child)
50
+ assert_equal "childname", immutable.child.name
51
+ assert_equal "grandchildname", immutable.child.grandchild.name
52
+ end
53
+
54
+ def test_array_access
55
+ assert_kind_of(Array, immutable.children)
56
+ assert_equal 3, immutable.children.length
57
+ assert_equal "anna", immutable.children[0]
58
+
59
+ assert_kind_of(Immutable, immutable.children[2])
60
+ assert_equal true, immutable.children[2].action.keep_your_mouth_shut
61
+ end
62
+
63
+ def test_base_class
64
+ assert_nothing_raised do
65
+ immutable.object_id
66
+ end
67
+ end
68
+
69
+ def test_missing_keys
70
+ assert_raise(NoMethodError) do
71
+ immutable.foo
72
+ end
73
+ end
74
+
75
+ def test_skip_when_args_or_block
76
+ # raise NoMethodError when called with arguments
77
+ assert_raise(NoMethodError) do
78
+ immutable.a(1, 2, 3)
79
+ end
80
+
81
+ # raise NoMethodError when called with a block argument
82
+ assert_raise(NoMethodError) do
83
+ immutable.a { :dummy }
84
+ end
85
+ end
86
+
87
+ def test_raw_data
88
+ immutable = Immutable.create(hsh)
89
+ expected = hsh
90
+
91
+ assert_equal(expected, Immutable.raw_data(immutable))
92
+ assert_equal(expected[:children], Immutable.raw_data(immutable.children))
93
+ end
94
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple-immutable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - radiospiel
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-03-03 00:00:00.000000000 Z
12
+ date: 2020-07-08 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Immutable ruby objects implementing dot and [] accessors.
15
15
  email: eno@radiospiel.org
@@ -18,6 +18,7 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - ".gitignore"
21
+ - ".rubocop.yml"
21
22
  - ".tm_properties"
22
23
  - Gemfile
23
24
  - Makefile
@@ -25,11 +26,13 @@ files:
25
26
  - VERSION
26
27
  - bin/bundle
27
28
  - bin/console
29
+ - bin/rubocop
28
30
  - lib/simple-immutable.rb
29
31
  - lib/simple/immutable.rb
30
32
  - scripts/release
31
33
  - scripts/release.rb
32
34
  - simple-immutable.gemspec
35
+ - test/immutable_test.rb
33
36
  homepage: http://github.com/radiospiel/simple-immutable
34
37
  licenses: []
35
38
  metadata: {}
@@ -52,4 +55,5 @@ rubygems_version: 3.0.6
52
55
  signing_key:
53
56
  specification_version: 4
54
57
  summary: Immutable ruby objects
55
- test_files: []
58
+ test_files:
59
+ - test/immutable_test.rb