wardrobe 0.1.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.
Files changed (165) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +10 -0
  3. data/.gitignore +19 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +11 -0
  6. data/CHANGELOG.md +5 -0
  7. data/Gemfile +18 -0
  8. data/Guardfile +42 -0
  9. data/LICENSE +19 -0
  10. data/README.md +227 -0
  11. data/Rakefile +20 -0
  12. data/examples/new_york_times_article.rb +55 -0
  13. data/lib/wardrobe/attribute.rb +76 -0
  14. data/lib/wardrobe/attribute_store.rb +16 -0
  15. data/lib/wardrobe/block_setup.rb +124 -0
  16. data/lib/wardrobe/boolean.rb +6 -0
  17. data/lib/wardrobe/class_methods.rb +127 -0
  18. data/lib/wardrobe/getter_setter.rb +48 -0
  19. data/lib/wardrobe/instance_methods.rb +56 -0
  20. data/lib/wardrobe/module_methods.rb +51 -0
  21. data/lib/wardrobe/option.rb +30 -0
  22. data/lib/wardrobe/option_store.rb +22 -0
  23. data/lib/wardrobe/plugin.rb +39 -0
  24. data/lib/wardrobe/plugin_store.rb +28 -0
  25. data/lib/wardrobe/plugins/alias_setters.rb +35 -0
  26. data/lib/wardrobe/plugins/coercible/refinements/array.rb +63 -0
  27. data/lib/wardrobe/plugins/coercible/refinements/boolean.rb +36 -0
  28. data/lib/wardrobe/plugins/coercible/refinements/date.rb +31 -0
  29. data/lib/wardrobe/plugins/coercible/refinements/date_time.rb +29 -0
  30. data/lib/wardrobe/plugins/coercible/refinements/float.rb +23 -0
  31. data/lib/wardrobe/plugins/coercible/refinements/hash.rb +65 -0
  32. data/lib/wardrobe/plugins/coercible/refinements/integer.rb +23 -0
  33. data/lib/wardrobe/plugins/coercible/refinements/object.rb +15 -0
  34. data/lib/wardrobe/plugins/coercible/refinements/set.rb +33 -0
  35. data/lib/wardrobe/plugins/coercible/refinements/string.rb +21 -0
  36. data/lib/wardrobe/plugins/coercible/refinements/symbol.rb +21 -0
  37. data/lib/wardrobe/plugins/coercible/refinements/time.rb +30 -0
  38. data/lib/wardrobe/plugins/coercible/refinements/unsupported_error.rb +11 -0
  39. data/lib/wardrobe/plugins/coercible.rb +52 -0
  40. data/lib/wardrobe/plugins/configurable/configurable_store.rb +26 -0
  41. data/lib/wardrobe/plugins/configurable.rb +40 -0
  42. data/lib/wardrobe/plugins/default.rb +33 -0
  43. data/lib/wardrobe/plugins/dirty_tracker.rb +66 -0
  44. data/lib/wardrobe/plugins/equality.rb +19 -0
  45. data/lib/wardrobe/plugins/html_initializer.rb +38 -0
  46. data/lib/wardrobe/plugins/immutable.rb +164 -0
  47. data/lib/wardrobe/plugins/ivy_presenter.rb +42 -0
  48. data/lib/wardrobe/plugins/json_initializer.rb +41 -0
  49. data/lib/wardrobe/plugins/nil_if_empty.rb +27 -0
  50. data/lib/wardrobe/plugins/nil_if_zero.rb +19 -0
  51. data/lib/wardrobe/plugins/optional_getter.rb +21 -0
  52. data/lib/wardrobe/plugins/optional_setter.rb +24 -0
  53. data/lib/wardrobe/plugins/presenter/refinements/array.rb +15 -0
  54. data/lib/wardrobe/plugins/presenter/refinements/hash.rb +15 -0
  55. data/lib/wardrobe/plugins/presenter/refinements/object.rb +15 -0
  56. data/lib/wardrobe/plugins/presenter/refinements/time.rb +19 -0
  57. data/lib/wardrobe/plugins/presenter/refinements.rb +6 -0
  58. data/lib/wardrobe/plugins/presenter.rb +25 -0
  59. data/lib/wardrobe/plugins/validation/block_handler.rb +83 -0
  60. data/lib/wardrobe/plugins/validation/class_methods.rb +13 -0
  61. data/lib/wardrobe/plugins/validation/deep_merge.rb +27 -0
  62. data/lib/wardrobe/plugins/validation/error_store.rb +27 -0
  63. data/lib/wardrobe/plugins/validation/instance_methods.rb +39 -0
  64. data/lib/wardrobe/plugins/validation/refinements/_size.rb +30 -0
  65. data/lib/wardrobe/plugins/validation/refinements/array.rb +26 -0
  66. data/lib/wardrobe/plugins/validation/refinements/date.rb +15 -0
  67. data/lib/wardrobe/plugins/validation/refinements/hash.rb +27 -0
  68. data/lib/wardrobe/plugins/validation/refinements/integer.rb +21 -0
  69. data/lib/wardrobe/plugins/validation/refinements/nil_class.rb +19 -0
  70. data/lib/wardrobe/plugins/validation/refinements/numeric.rb +31 -0
  71. data/lib/wardrobe/plugins/validation/refinements/object.rb +35 -0
  72. data/lib/wardrobe/plugins/validation/refinements/set.rb +25 -0
  73. data/lib/wardrobe/plugins/validation/refinements/string.rb +55 -0
  74. data/lib/wardrobe/plugins/validation/refinements/symbol.rb +26 -0
  75. data/lib/wardrobe/plugins/validation/refinements.rb +13 -0
  76. data/lib/wardrobe/plugins/validation/validation.rb +63 -0
  77. data/lib/wardrobe/plugins/validation/validation_error.rb +19 -0
  78. data/lib/wardrobe/plugins/validation/validaton_runner.rb +38 -0
  79. data/lib/wardrobe/plugins/validation/validator.rb +119 -0
  80. data/lib/wardrobe/plugins/validation.rb +28 -0
  81. data/lib/wardrobe/root_config.rb +31 -0
  82. data/lib/wardrobe/store.rb +62 -0
  83. data/lib/wardrobe/stores.rb +106 -0
  84. data/lib/wardrobe/version.rb +5 -0
  85. data/lib/wardrobe.rb +34 -0
  86. data/sandbox/Gemfile +5 -0
  87. data/sandbox/Gemfile.lock +52 -0
  88. data/sandbox/bench_mutable_coercion.rb +91 -0
  89. data/sandbox/bench_test_1.rb +50 -0
  90. data/sandbox/bench_test_2.rb +48 -0
  91. data/sandbox/bench_test_3.rb +92 -0
  92. data/sandbox/cnn_article_find.rb +20 -0
  93. data/sandbox/define_method_procs.rb +139 -0
  94. data/sandbox/hanami_validations.rb +40 -0
  95. data/sandbox/middleware_bench_test.rb +97 -0
  96. data/sandbox/middleware_bench_v2_test.rb +130 -0
  97. data/test/assertions.rb +22 -0
  98. data/test/test_helper.rb +37 -0
  99. data/test/unit/atrs_config_test.rb +33 -0
  100. data/test/unit/atrs_root_module_test.rb +19 -0
  101. data/test/unit/attribute_test.rb +44 -0
  102. data/test/unit/block_runner/array_test.rb +29 -0
  103. data/test/unit/block_setup_test.rb +41 -0
  104. data/test/unit/class_methods_test.rb +92 -0
  105. data/test/unit/create_class_from_hash_test.rb +28 -0
  106. data/test/unit/define_getter_test.rb +94 -0
  107. data/test/unit/define_setter_test.rb +0 -0
  108. data/test/unit/disable_coercion_test.rb +19 -0
  109. data/test/unit/inheritance_composition_test.rb +36 -0
  110. data/test/unit/method_override_test.rb +18 -0
  111. data/test/unit/method_polution_test.rb +48 -0
  112. data/test/unit/option_test.rb +17 -0
  113. data/test/unit/plugin_test.rb +12 -0
  114. data/test/unit/plugins/alias_setters_test.rb +24 -0
  115. data/test/unit/plugins/coercible/array_test.rb +79 -0
  116. data/test/unit/plugins/coercible/boolean_test.rb +68 -0
  117. data/test/unit/plugins/coercible/custom_class_test.rb +61 -0
  118. data/test/unit/plugins/coercible/date_test.rb +38 -0
  119. data/test/unit/plugins/coercible/date_time_test.rb +44 -0
  120. data/test/unit/plugins/coercible/float_test.rb +42 -0
  121. data/test/unit/plugins/coercible/hash_test.rb +62 -0
  122. data/test/unit/plugins/coercible/integer_test.rb +42 -0
  123. data/test/unit/plugins/coercible/nested_wardrobe_test.rb +63 -0
  124. data/test/unit/plugins/coercible/set_test.rb +49 -0
  125. data/test/unit/plugins/coercible/string_test.rb +36 -0
  126. data/test/unit/plugins/coercible/symbol_test.rb +30 -0
  127. data/test/unit/plugins/coercible/time_test.rb +43 -0
  128. data/test/unit/plugins/configurable_test.rb +64 -0
  129. data/test/unit/plugins/default_value_test.rb +78 -0
  130. data/test/unit/plugins/dirty_tracker_test.rb +78 -0
  131. data/test/unit/plugins/equality_test.rb +36 -0
  132. data/test/unit/plugins/html_initializer_test.rb +19 -0
  133. data/test/unit/plugins/immutable_test.rb +149 -0
  134. data/test/unit/plugins/ivy_presenter_test.rb +57 -0
  135. data/test/unit/plugins/json_initializer_test.rb +67 -0
  136. data/test/unit/plugins/nil_if_empty_test.rb +39 -0
  137. data/test/unit/plugins/nil_if_zero_test.rb +26 -0
  138. data/test/unit/plugins/presenter_test.rb +68 -0
  139. data/test/unit/plugins/validate/inheritance_test.rb +36 -0
  140. data/test/unit/plugins/validate/nested_model_test.rb +40 -0
  141. data/test/unit/plugins/validate/predicates/each_key_each_value_test.rb +34 -0
  142. data/test/unit/plugins/validate/predicates/each_test.rb +33 -0
  143. data/test/unit/plugins/validate/predicates/empty_test.rb +37 -0
  144. data/test/unit/plugins/validate/predicates/even_test.rb +33 -0
  145. data/test/unit/plugins/validate/predicates/excluded_from_test.rb +55 -0
  146. data/test/unit/plugins/validate/predicates/filled_test.rb +49 -0
  147. data/test/unit/plugins/validate/predicates/format_test.rb +28 -0
  148. data/test/unit/plugins/validate/predicates/gt_test.rb +36 -0
  149. data/test/unit/plugins/validate/predicates/gteq_test.rb +36 -0
  150. data/test/unit/plugins/validate/predicates/included_in_test.rb +55 -0
  151. data/test/unit/plugins/validate/predicates/lt_test.rb +36 -0
  152. data/test/unit/plugins/validate/predicates/lteq_test.rb +36 -0
  153. data/test/unit/plugins/validate/predicates/max_size_test.rb +43 -0
  154. data/test/unit/plugins/validate/predicates/min_size_test.rb +43 -0
  155. data/test/unit/plugins/validate/predicates/none_test.rb +49 -0
  156. data/test/unit/plugins/validate/predicates/odd_test.rb +33 -0
  157. data/test/unit/plugins/validate/predicates/size_range_test.rb +43 -0
  158. data/test/unit/plugins/validate/predicates/size_test.rb +43 -0
  159. data/test/unit/plugins/validate/predicates/type_test.rb +77 -0
  160. data/test/unit/plugins/validate/predicates_test.rb +73 -0
  161. data/test/unit/plugins/validate/validate_bang_test.rb +30 -0
  162. data/test/unit/store_test.rb +15 -0
  163. data/test/unit/stores_test.rb +18 -0
  164. data/wardrobe.gemspec +26 -0
  165. metadata +344 -0
@@ -0,0 +1,77 @@
1
+ require 'test_helper'
2
+
3
+ class ValidationPredicatesTypeTest < MiniTest::Test
4
+ class Foo
5
+ include Wardrobe(coerce: false)
6
+ plugin :validation
7
+ attribute :string, String, validates { str? }
8
+ attribute :symbol, Symbol, validates { sym? }
9
+ attribute :integer, Integer, validates { int? }
10
+ attribute :float, Float, validates { float? }
11
+ attribute :true, Wardrobe::Boolean, validates { bool? }
12
+ attribute :false, Wardrobe::Boolean, validates { bool? }
13
+ attribute :date, Date, validates { date? }
14
+ attribute :time, Time, validates { time? }
15
+ attribute :date_time, DateTime, validates { date_time? }
16
+ attribute :array, Array, validates { array? }
17
+ attribute :hash, Hash, validates { hash? }
18
+ end
19
+
20
+ def test_nil
21
+ errors = Foo.new(
22
+ string: nil, symbol: nil, integer: nil, float: nil, true: nil, false: nil,
23
+ date: nil, time: nil, date_time: nil, array: nil, hash: nil
24
+ )._validation_errors
25
+
26
+ assert_equal 'must be a String', errors[:string][0]
27
+ assert_equal 'must be a Symbol', errors[:symbol][0]
28
+ assert_equal 'must be a Integer', errors[:integer][0]
29
+ assert_equal 'must be a Float', errors[:float][0]
30
+ assert_equal 'must be a TrueClass or FalseClass', errors[:true][0]
31
+ assert_equal 'must be a TrueClass or FalseClass', errors[:false][0]
32
+ assert_equal 'must be a Date', errors[:date][0]
33
+ assert_equal 'must be a Time', errors[:time][0]
34
+ assert_equal 'must be a DateTime', errors[:date_time][0]
35
+ assert_equal 'must be a Array', errors[:array][0]
36
+ assert_equal 'must be a Hash', errors[:hash][0]
37
+ end
38
+
39
+ def test_wrong_type
40
+ errors = Foo.new(
41
+ string: :sym, symbol: '', integer: '', float: '', true: '', false: '',
42
+ date: '', time: '', date_time: '', array: '', hash: ''
43
+ )._validation_errors
44
+
45
+ assert_equal 'must be a String', errors[:string][0]
46
+ assert_equal 'must be a Symbol', errors[:symbol][0]
47
+ assert_equal 'must be a Integer', errors[:integer][0]
48
+ assert_equal 'must be a Float', errors[:float][0]
49
+ assert_equal 'must be a TrueClass or FalseClass', errors[:true][0]
50
+ assert_equal 'must be a TrueClass or FalseClass', errors[:false][0]
51
+ assert_equal 'must be a Date', errors[:date][0]
52
+ assert_equal 'must be a Time', errors[:time][0]
53
+ assert_equal 'must be a DateTime', errors[:date_time][0]
54
+ assert_equal 'must be a Array', errors[:array][0]
55
+ assert_equal 'must be a Hash', errors[:hash][0]
56
+ end
57
+
58
+ def test_correct_types
59
+ errors = Foo.new(
60
+ string: '', symbol: :sym, integer: 1, float: 1.1, true: true,
61
+ false: false, date: Time.now.to_date, time: Time.now,
62
+ date_time: Time.now.to_datetime, array: [], hash: {}
63
+ )._validation_errors
64
+
65
+ refute errors.has_key? :string
66
+ refute errors.has_key? :symbol
67
+ refute errors.has_key? :integer
68
+ refute errors.has_key? :float
69
+ refute errors.has_key? :true
70
+ refute errors.has_key? :false
71
+ refute errors.has_key? :date
72
+ refute errors.has_key? :time
73
+ refute errors.has_key? :date_time
74
+ refute errors.has_key? :array
75
+ refute errors.has_key? :hash
76
+ end
77
+ end
@@ -0,0 +1,73 @@
1
+ require 'test_helper'
2
+
3
+ class ValidationPredicatesTest < TestBase
4
+ class Foo
5
+ include Wardrobe
6
+ plugin :validation
7
+ attribute :or, String, validates { optional { size?(1) | format?(/a/) }}
8
+ attribute :and, String, validates { optional { size?(1) & format?(/and/) }}
9
+ attribute :then, String, validates { optional { min_size?(10) > format?(/Lorem ipsum/) }}
10
+ attribute :or_advanced, String, validates {
11
+ optional {
12
+ (size?(1) | format?(/a/) | size?(1..2)) &
13
+ (format?(/abc/) | format?(/aaa/))
14
+ }
15
+ }
16
+ end
17
+
18
+ def test_or
19
+ errors = Foo.new(
20
+ or: 'Lorem ipsum...'
21
+ )._validation_errors
22
+
23
+ assert_equal 1, errors[:or].length
24
+ assert_equal 'size must be 1 or must match /a/', errors[:or].first
25
+ end
26
+
27
+ def test_and
28
+ errors = Foo.new(
29
+ and: 'Lorem ipsum...'
30
+ )._validation_errors
31
+
32
+ assert_equal 2, errors[:and].length
33
+ assert_equal 'size must be 1', errors[:and].first
34
+ assert_equal 'must match /and/', errors[:and].last
35
+ end
36
+
37
+
38
+ def test_or_advanced
39
+ errors = Foo.new(
40
+ or_advanced: 'Lorem ipsum...',
41
+ )._validation_errors
42
+
43
+ assert_equal 2, errors[:or_advanced].length
44
+ assert_equal 'size must be 1 or must match /a/ or size must be within 1 - 2', errors[:or_advanced].first
45
+ assert_equal 'must match /abc/ or must match /aaa/', errors[:or_advanced].last
46
+ end
47
+
48
+ def test_then_success
49
+ errors = Foo.new(
50
+ then: 'Lorem ipsum...',
51
+ )._validation_errors
52
+
53
+ refute errors.has_key?(:then)
54
+ end
55
+
56
+ def test_then_error_before
57
+ errors = Foo.new(
58
+ then: 'Lorem',
59
+ )._validation_errors
60
+
61
+ assert_equal 1, errors[:then].length
62
+ assert_equal 'size cannot be less than 10', errors[:then].first
63
+ end
64
+
65
+ def test_then_error_after
66
+ errors = Foo.new(
67
+ then: 'Lorem Lorem Lorem',
68
+ )._validation_errors
69
+
70
+ assert_equal 1, errors[:then].length
71
+ assert_equal 'must match /Lorem ipsum/', errors[:then].first
72
+ end
73
+ end
@@ -0,0 +1,30 @@
1
+ require 'test_helper'
2
+
3
+ class ValidationBangTest < TestBase
4
+ class Foo
5
+ include Wardrobe
6
+ plugin :validation
7
+ attribute :name, String, validates { min_size?(10) }
8
+ attribute :gender, String, validates { optional { size?(1) | format?(/^a/) }}
9
+ end
10
+
11
+ def test_error
12
+ assert_raises(Wardrobe::Plugins::Validation::ValidationError) do
13
+ object = Foo.new(name: 'Foo', gender: 'male')
14
+ object._validate!
15
+ end
16
+ end
17
+
18
+ def test_error_string
19
+ begin
20
+ Foo.new(name: 'Foo', gender: 'male')._validate!
21
+ rescue Wardrobe::Plugins::Validation::ValidationError => e
22
+ assert e.to_s.is_a?(String)
23
+ end
24
+ end
25
+
26
+ def test_success
27
+ instance = Foo.new(name: 'Foo Bar Long', gender: 'a')._validate!
28
+ assert instance.is_a?(Foo)
29
+ end
30
+ end
@@ -0,0 +1,15 @@
1
+ require 'test_helper'
2
+
3
+ class StoreTest < TestBase
4
+
5
+ class TestStore < Wardrobe::Store
6
+
7
+ end
8
+
9
+ def test_super_in_method_missing
10
+ store = TestStore.new
11
+ assert_raises(NoMethodError) do
12
+ store.some_missing_method
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ require 'test_helper'
2
+
3
+ class StoresTest < TestBase
4
+
5
+ class TestStore
6
+
7
+ end
8
+
9
+ def test_add_store
10
+ klass = Class.new do
11
+ include Wardrobe
12
+ end
13
+
14
+ wardrobe_store = klass.wardrobe_stores.add_store(:test, TestStore)
15
+
16
+ assert_equal TestStore, wardrobe_store.stores[:test]
17
+ end
18
+ end
data/wardrobe.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'wardrobe/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'wardrobe'
9
+ spec.version = Wardrobe::VERSION
10
+ spec.authors = ['Eigil Sagafos']
11
+ spec.email = ['eigil@agens.no']
12
+ spec.description = 'Plugin based attribute system for ruby objects'
13
+ spec.summary = spec.description
14
+ spec.homepage = 'https://github.com/agensdev/wardrobe'
15
+ spec.license = 'MIT'
16
+
17
+ spec.files = `git ls-files -z`.split("\x0")
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_development_dependency 'bundler', '~> 1.7'
22
+ spec.add_development_dependency 'rake', '~> 11.0'
23
+ spec.add_development_dependency 'minitest', '~> 5.9'
24
+ spec.add_development_dependency 'minitest-utils', '~> 0.3'
25
+ spec.add_development_dependency 'benchmark-ips', '~> 2.7'
26
+ end
metadata ADDED
@@ -0,0 +1,344 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wardrobe
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Eigil Sagafos
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-05-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '11.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '11.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.9'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.9'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest-utils
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.3'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: benchmark-ips
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.7'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.7'
83
+ description: Plugin based attribute system for ruby objects
84
+ email:
85
+ - eigil@agens.no
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".codeclimate.yml"
91
+ - ".gitignore"
92
+ - ".ruby-version"
93
+ - ".travis.yml"
94
+ - CHANGELOG.md
95
+ - Gemfile
96
+ - Guardfile
97
+ - LICENSE
98
+ - README.md
99
+ - Rakefile
100
+ - examples/new_york_times_article.rb
101
+ - lib/wardrobe.rb
102
+ - lib/wardrobe/attribute.rb
103
+ - lib/wardrobe/attribute_store.rb
104
+ - lib/wardrobe/block_setup.rb
105
+ - lib/wardrobe/boolean.rb
106
+ - lib/wardrobe/class_methods.rb
107
+ - lib/wardrobe/getter_setter.rb
108
+ - lib/wardrobe/instance_methods.rb
109
+ - lib/wardrobe/module_methods.rb
110
+ - lib/wardrobe/option.rb
111
+ - lib/wardrobe/option_store.rb
112
+ - lib/wardrobe/plugin.rb
113
+ - lib/wardrobe/plugin_store.rb
114
+ - lib/wardrobe/plugins/alias_setters.rb
115
+ - lib/wardrobe/plugins/coercible.rb
116
+ - lib/wardrobe/plugins/coercible/refinements/array.rb
117
+ - lib/wardrobe/plugins/coercible/refinements/boolean.rb
118
+ - lib/wardrobe/plugins/coercible/refinements/date.rb
119
+ - lib/wardrobe/plugins/coercible/refinements/date_time.rb
120
+ - lib/wardrobe/plugins/coercible/refinements/float.rb
121
+ - lib/wardrobe/plugins/coercible/refinements/hash.rb
122
+ - lib/wardrobe/plugins/coercible/refinements/integer.rb
123
+ - lib/wardrobe/plugins/coercible/refinements/object.rb
124
+ - lib/wardrobe/plugins/coercible/refinements/set.rb
125
+ - lib/wardrobe/plugins/coercible/refinements/string.rb
126
+ - lib/wardrobe/plugins/coercible/refinements/symbol.rb
127
+ - lib/wardrobe/plugins/coercible/refinements/time.rb
128
+ - lib/wardrobe/plugins/coercible/refinements/unsupported_error.rb
129
+ - lib/wardrobe/plugins/configurable.rb
130
+ - lib/wardrobe/plugins/configurable/configurable_store.rb
131
+ - lib/wardrobe/plugins/default.rb
132
+ - lib/wardrobe/plugins/dirty_tracker.rb
133
+ - lib/wardrobe/plugins/equality.rb
134
+ - lib/wardrobe/plugins/html_initializer.rb
135
+ - lib/wardrobe/plugins/immutable.rb
136
+ - lib/wardrobe/plugins/ivy_presenter.rb
137
+ - lib/wardrobe/plugins/json_initializer.rb
138
+ - lib/wardrobe/plugins/nil_if_empty.rb
139
+ - lib/wardrobe/plugins/nil_if_zero.rb
140
+ - lib/wardrobe/plugins/optional_getter.rb
141
+ - lib/wardrobe/plugins/optional_setter.rb
142
+ - lib/wardrobe/plugins/presenter.rb
143
+ - lib/wardrobe/plugins/presenter/refinements.rb
144
+ - lib/wardrobe/plugins/presenter/refinements/array.rb
145
+ - lib/wardrobe/plugins/presenter/refinements/hash.rb
146
+ - lib/wardrobe/plugins/presenter/refinements/object.rb
147
+ - lib/wardrobe/plugins/presenter/refinements/time.rb
148
+ - lib/wardrobe/plugins/validation.rb
149
+ - lib/wardrobe/plugins/validation/block_handler.rb
150
+ - lib/wardrobe/plugins/validation/class_methods.rb
151
+ - lib/wardrobe/plugins/validation/deep_merge.rb
152
+ - lib/wardrobe/plugins/validation/error_store.rb
153
+ - lib/wardrobe/plugins/validation/instance_methods.rb
154
+ - lib/wardrobe/plugins/validation/refinements.rb
155
+ - lib/wardrobe/plugins/validation/refinements/_size.rb
156
+ - lib/wardrobe/plugins/validation/refinements/array.rb
157
+ - lib/wardrobe/plugins/validation/refinements/date.rb
158
+ - lib/wardrobe/plugins/validation/refinements/hash.rb
159
+ - lib/wardrobe/plugins/validation/refinements/integer.rb
160
+ - lib/wardrobe/plugins/validation/refinements/nil_class.rb
161
+ - lib/wardrobe/plugins/validation/refinements/numeric.rb
162
+ - lib/wardrobe/plugins/validation/refinements/object.rb
163
+ - lib/wardrobe/plugins/validation/refinements/set.rb
164
+ - lib/wardrobe/plugins/validation/refinements/string.rb
165
+ - lib/wardrobe/plugins/validation/refinements/symbol.rb
166
+ - lib/wardrobe/plugins/validation/validation.rb
167
+ - lib/wardrobe/plugins/validation/validation_error.rb
168
+ - lib/wardrobe/plugins/validation/validaton_runner.rb
169
+ - lib/wardrobe/plugins/validation/validator.rb
170
+ - lib/wardrobe/root_config.rb
171
+ - lib/wardrobe/store.rb
172
+ - lib/wardrobe/stores.rb
173
+ - lib/wardrobe/version.rb
174
+ - sandbox/Gemfile
175
+ - sandbox/Gemfile.lock
176
+ - sandbox/bench_mutable_coercion.rb
177
+ - sandbox/bench_test_1.rb
178
+ - sandbox/bench_test_2.rb
179
+ - sandbox/bench_test_3.rb
180
+ - sandbox/cnn_article_find.rb
181
+ - sandbox/define_method_procs.rb
182
+ - sandbox/hanami_validations.rb
183
+ - sandbox/middleware_bench_test.rb
184
+ - sandbox/middleware_bench_v2_test.rb
185
+ - test/assertions.rb
186
+ - test/test_helper.rb
187
+ - test/unit/atrs_config_test.rb
188
+ - test/unit/atrs_root_module_test.rb
189
+ - test/unit/attribute_test.rb
190
+ - test/unit/block_runner/array_test.rb
191
+ - test/unit/block_setup_test.rb
192
+ - test/unit/class_methods_test.rb
193
+ - test/unit/create_class_from_hash_test.rb
194
+ - test/unit/define_getter_test.rb
195
+ - test/unit/define_setter_test.rb
196
+ - test/unit/disable_coercion_test.rb
197
+ - test/unit/inheritance_composition_test.rb
198
+ - test/unit/method_override_test.rb
199
+ - test/unit/method_polution_test.rb
200
+ - test/unit/option_test.rb
201
+ - test/unit/plugin_test.rb
202
+ - test/unit/plugins/alias_setters_test.rb
203
+ - test/unit/plugins/coercible/array_test.rb
204
+ - test/unit/plugins/coercible/boolean_test.rb
205
+ - test/unit/plugins/coercible/custom_class_test.rb
206
+ - test/unit/plugins/coercible/date_test.rb
207
+ - test/unit/plugins/coercible/date_time_test.rb
208
+ - test/unit/plugins/coercible/float_test.rb
209
+ - test/unit/plugins/coercible/hash_test.rb
210
+ - test/unit/plugins/coercible/integer_test.rb
211
+ - test/unit/plugins/coercible/nested_wardrobe_test.rb
212
+ - test/unit/plugins/coercible/set_test.rb
213
+ - test/unit/plugins/coercible/string_test.rb
214
+ - test/unit/plugins/coercible/symbol_test.rb
215
+ - test/unit/plugins/coercible/time_test.rb
216
+ - test/unit/plugins/configurable_test.rb
217
+ - test/unit/plugins/default_value_test.rb
218
+ - test/unit/plugins/dirty_tracker_test.rb
219
+ - test/unit/plugins/equality_test.rb
220
+ - test/unit/plugins/html_initializer_test.rb
221
+ - test/unit/plugins/immutable_test.rb
222
+ - test/unit/plugins/ivy_presenter_test.rb
223
+ - test/unit/plugins/json_initializer_test.rb
224
+ - test/unit/plugins/nil_if_empty_test.rb
225
+ - test/unit/plugins/nil_if_zero_test.rb
226
+ - test/unit/plugins/presenter_test.rb
227
+ - test/unit/plugins/validate/inheritance_test.rb
228
+ - test/unit/plugins/validate/nested_model_test.rb
229
+ - test/unit/plugins/validate/predicates/each_key_each_value_test.rb
230
+ - test/unit/plugins/validate/predicates/each_test.rb
231
+ - test/unit/plugins/validate/predicates/empty_test.rb
232
+ - test/unit/plugins/validate/predicates/even_test.rb
233
+ - test/unit/plugins/validate/predicates/excluded_from_test.rb
234
+ - test/unit/plugins/validate/predicates/filled_test.rb
235
+ - test/unit/plugins/validate/predicates/format_test.rb
236
+ - test/unit/plugins/validate/predicates/gt_test.rb
237
+ - test/unit/plugins/validate/predicates/gteq_test.rb
238
+ - test/unit/plugins/validate/predicates/included_in_test.rb
239
+ - test/unit/plugins/validate/predicates/lt_test.rb
240
+ - test/unit/plugins/validate/predicates/lteq_test.rb
241
+ - test/unit/plugins/validate/predicates/max_size_test.rb
242
+ - test/unit/plugins/validate/predicates/min_size_test.rb
243
+ - test/unit/plugins/validate/predicates/none_test.rb
244
+ - test/unit/plugins/validate/predicates/odd_test.rb
245
+ - test/unit/plugins/validate/predicates/size_range_test.rb
246
+ - test/unit/plugins/validate/predicates/size_test.rb
247
+ - test/unit/plugins/validate/predicates/type_test.rb
248
+ - test/unit/plugins/validate/predicates_test.rb
249
+ - test/unit/plugins/validate/validate_bang_test.rb
250
+ - test/unit/store_test.rb
251
+ - test/unit/stores_test.rb
252
+ - wardrobe.gemspec
253
+ homepage: https://github.com/agensdev/wardrobe
254
+ licenses:
255
+ - MIT
256
+ metadata: {}
257
+ post_install_message:
258
+ rdoc_options: []
259
+ require_paths:
260
+ - lib
261
+ required_ruby_version: !ruby/object:Gem::Requirement
262
+ requirements:
263
+ - - ">="
264
+ - !ruby/object:Gem::Version
265
+ version: '0'
266
+ required_rubygems_version: !ruby/object:Gem::Requirement
267
+ requirements:
268
+ - - ">="
269
+ - !ruby/object:Gem::Version
270
+ version: '0'
271
+ requirements: []
272
+ rubyforge_project:
273
+ rubygems_version: 2.6.8
274
+ signing_key:
275
+ specification_version: 4
276
+ summary: Plugin based attribute system for ruby objects
277
+ test_files:
278
+ - test/assertions.rb
279
+ - test/test_helper.rb
280
+ - test/unit/atrs_config_test.rb
281
+ - test/unit/atrs_root_module_test.rb
282
+ - test/unit/attribute_test.rb
283
+ - test/unit/block_runner/array_test.rb
284
+ - test/unit/block_setup_test.rb
285
+ - test/unit/class_methods_test.rb
286
+ - test/unit/create_class_from_hash_test.rb
287
+ - test/unit/define_getter_test.rb
288
+ - test/unit/define_setter_test.rb
289
+ - test/unit/disable_coercion_test.rb
290
+ - test/unit/inheritance_composition_test.rb
291
+ - test/unit/method_override_test.rb
292
+ - test/unit/method_polution_test.rb
293
+ - test/unit/option_test.rb
294
+ - test/unit/plugin_test.rb
295
+ - test/unit/plugins/alias_setters_test.rb
296
+ - test/unit/plugins/coercible/array_test.rb
297
+ - test/unit/plugins/coercible/boolean_test.rb
298
+ - test/unit/plugins/coercible/custom_class_test.rb
299
+ - test/unit/plugins/coercible/date_test.rb
300
+ - test/unit/plugins/coercible/date_time_test.rb
301
+ - test/unit/plugins/coercible/float_test.rb
302
+ - test/unit/plugins/coercible/hash_test.rb
303
+ - test/unit/plugins/coercible/integer_test.rb
304
+ - test/unit/plugins/coercible/nested_wardrobe_test.rb
305
+ - test/unit/plugins/coercible/set_test.rb
306
+ - test/unit/plugins/coercible/string_test.rb
307
+ - test/unit/plugins/coercible/symbol_test.rb
308
+ - test/unit/plugins/coercible/time_test.rb
309
+ - test/unit/plugins/configurable_test.rb
310
+ - test/unit/plugins/default_value_test.rb
311
+ - test/unit/plugins/dirty_tracker_test.rb
312
+ - test/unit/plugins/equality_test.rb
313
+ - test/unit/plugins/html_initializer_test.rb
314
+ - test/unit/plugins/immutable_test.rb
315
+ - test/unit/plugins/ivy_presenter_test.rb
316
+ - test/unit/plugins/json_initializer_test.rb
317
+ - test/unit/plugins/nil_if_empty_test.rb
318
+ - test/unit/plugins/nil_if_zero_test.rb
319
+ - test/unit/plugins/presenter_test.rb
320
+ - test/unit/plugins/validate/inheritance_test.rb
321
+ - test/unit/plugins/validate/nested_model_test.rb
322
+ - test/unit/plugins/validate/predicates/each_key_each_value_test.rb
323
+ - test/unit/plugins/validate/predicates/each_test.rb
324
+ - test/unit/plugins/validate/predicates/empty_test.rb
325
+ - test/unit/plugins/validate/predicates/even_test.rb
326
+ - test/unit/plugins/validate/predicates/excluded_from_test.rb
327
+ - test/unit/plugins/validate/predicates/filled_test.rb
328
+ - test/unit/plugins/validate/predicates/format_test.rb
329
+ - test/unit/plugins/validate/predicates/gt_test.rb
330
+ - test/unit/plugins/validate/predicates/gteq_test.rb
331
+ - test/unit/plugins/validate/predicates/included_in_test.rb
332
+ - test/unit/plugins/validate/predicates/lt_test.rb
333
+ - test/unit/plugins/validate/predicates/lteq_test.rb
334
+ - test/unit/plugins/validate/predicates/max_size_test.rb
335
+ - test/unit/plugins/validate/predicates/min_size_test.rb
336
+ - test/unit/plugins/validate/predicates/none_test.rb
337
+ - test/unit/plugins/validate/predicates/odd_test.rb
338
+ - test/unit/plugins/validate/predicates/size_range_test.rb
339
+ - test/unit/plugins/validate/predicates/size_test.rb
340
+ - test/unit/plugins/validate/predicates/type_test.rb
341
+ - test/unit/plugins/validate/predicates_test.rb
342
+ - test/unit/plugins/validate/validate_bang_test.rb
343
+ - test/unit/store_test.rb
344
+ - test/unit/stores_test.rb