hashie 2.1.2 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +524 -59
- data/CONTRIBUTING.md +24 -7
- data/README.md +781 -90
- data/Rakefile +19 -2
- data/UPGRADING.md +245 -0
- data/hashie.gemspec +21 -13
- data/lib/hashie.rb +60 -21
- data/lib/hashie/array.rb +21 -0
- data/lib/hashie/clash.rb +24 -12
- data/lib/hashie/dash.rb +96 -33
- data/lib/hashie/extensions/active_support/core_ext/hash.rb +14 -0
- data/lib/hashie/extensions/array/pretty_inspect.rb +19 -0
- data/lib/hashie/extensions/coercion.rb +124 -18
- data/lib/hashie/extensions/dash/coercion.rb +25 -0
- data/lib/hashie/extensions/dash/indifferent_access.rb +56 -0
- data/lib/hashie/extensions/dash/property_translation.rb +191 -0
- data/lib/hashie/extensions/deep_fetch.rb +7 -5
- data/lib/hashie/extensions/deep_find.rb +69 -0
- data/lib/hashie/extensions/deep_locate.rb +113 -0
- data/lib/hashie/extensions/deep_merge.rb +35 -12
- data/lib/hashie/extensions/ignore_undeclared.rb +11 -5
- data/lib/hashie/extensions/indifferent_access.rb +28 -16
- data/lib/hashie/extensions/key_conflict_warning.rb +55 -0
- data/lib/hashie/extensions/key_conversion.rb +0 -82
- data/lib/hashie/extensions/mash/define_accessors.rb +90 -0
- data/lib/hashie/extensions/mash/keep_original_keys.rb +53 -0
- data/lib/hashie/extensions/mash/permissive_respond_to.rb +61 -0
- data/lib/hashie/extensions/mash/safe_assignment.rb +18 -0
- data/lib/hashie/extensions/mash/symbolize_keys.rb +38 -0
- data/lib/hashie/extensions/method_access.rb +154 -11
- data/lib/hashie/extensions/parsers/yaml_erb_parser.rb +48 -0
- data/lib/hashie/extensions/pretty_inspect.rb +19 -0
- data/lib/hashie/extensions/ruby_version.rb +60 -0
- data/lib/hashie/extensions/ruby_version_check.rb +21 -0
- data/lib/hashie/extensions/strict_key_access.rb +77 -0
- data/lib/hashie/extensions/stringify_keys.rb +71 -0
- data/lib/hashie/extensions/symbolize_keys.rb +71 -0
- data/lib/hashie/hash.rb +27 -8
- data/lib/hashie/logger.rb +18 -0
- data/lib/hashie/mash.rb +235 -57
- data/lib/hashie/railtie.rb +21 -0
- data/lib/hashie/rash.rb +40 -16
- data/lib/hashie/trash.rb +2 -88
- data/lib/hashie/utils.rb +44 -0
- data/lib/hashie/version.rb +1 -1
- metadata +42 -81
- data/.gitignore +0 -9
- data/.rspec +0 -2
- data/.rubocop.yml +0 -36
- data/.travis.yml +0 -15
- data/Gemfile +0 -11
- data/Guardfile +0 -5
- data/lib/hashie/hash_extensions.rb +0 -47
- data/spec/hashie/clash_spec.rb +0 -48
- data/spec/hashie/dash_spec.rb +0 -338
- data/spec/hashie/extensions/coercion_spec.rb +0 -156
- data/spec/hashie/extensions/deep_fetch_spec.rb +0 -70
- data/spec/hashie/extensions/deep_merge_spec.rb +0 -22
- data/spec/hashie/extensions/ignore_undeclared_spec.rb +0 -23
- data/spec/hashie/extensions/indifferent_access_spec.rb +0 -152
- data/spec/hashie/extensions/key_conversion_spec.rb +0 -103
- data/spec/hashie/extensions/merge_initializer_spec.rb +0 -23
- data/spec/hashie/extensions/method_access_spec.rb +0 -121
- data/spec/hashie/hash_spec.rb +0 -66
- data/spec/hashie/mash_spec.rb +0 -467
- data/spec/hashie/rash_spec.rb +0 -44
- data/spec/hashie/trash_spec.rb +0 -193
- data/spec/hashie/version_spec.rb +0 -7
- data/spec/spec.opts +0 -3
- data/spec/spec_helper.rb +0 -8
@@ -0,0 +1,21 @@
|
|
1
|
+
begin
|
2
|
+
require 'rails/railtie'
|
3
|
+
|
4
|
+
module Hashie
|
5
|
+
class Railtie < Rails::Railtie
|
6
|
+
# Set the Hashie.logger to use Rails.logger when used with rails.
|
7
|
+
initializer 'hashie.configure_logger', after: 'initialize_logger' do
|
8
|
+
Hashie.logger = Rails.logger
|
9
|
+
end
|
10
|
+
|
11
|
+
initializer 'hashie.patch_hash_except', after: 'load_active_support' do
|
12
|
+
if Rails::VERSION::MAJOR >= 6
|
13
|
+
require 'hashie/extensions/active_support/core_ext/hash'
|
14
|
+
Hashie::Mash.send(:include, Hashie::Extensions::ActiveSupport::CoreExt::Hash)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
rescue LoadError => e
|
20
|
+
Hashie.logger.info("Hashie skipping railtie as #{e.message}")
|
21
|
+
end
|
data/lib/hashie/rash.rb
CHANGED
@@ -60,6 +60,28 @@ module Hashie
|
|
60
60
|
all(key).first
|
61
61
|
end
|
62
62
|
|
63
|
+
#
|
64
|
+
# Raise (or yield) unless something matches the key.
|
65
|
+
#
|
66
|
+
def fetch(*args)
|
67
|
+
raise ArgumentError, "Expected 1-2 arguments, got #{args.length}" \
|
68
|
+
unless (1..2).cover?(args.length)
|
69
|
+
|
70
|
+
key, default = args
|
71
|
+
|
72
|
+
all(key) do |value|
|
73
|
+
return value
|
74
|
+
end
|
75
|
+
|
76
|
+
if block_given?
|
77
|
+
yield key
|
78
|
+
elsif default
|
79
|
+
default
|
80
|
+
else
|
81
|
+
raise KeyError, "key not found: #{key.inspect}"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
63
85
|
#
|
64
86
|
# Return everything that matches the query.
|
65
87
|
#
|
@@ -78,25 +100,24 @@ module Hashie
|
|
78
100
|
# see if any of the regexps match the string
|
79
101
|
@regexes.each do |regex|
|
80
102
|
match = regex.match(query)
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
end
|
103
|
+
next unless match
|
104
|
+
@regex_counts[regex] += 1
|
105
|
+
value = @hash[regex]
|
106
|
+
if value.respond_to? :call
|
107
|
+
yield value.call(match)
|
108
|
+
else
|
109
|
+
yield value
|
89
110
|
end
|
90
111
|
end
|
91
112
|
|
92
|
-
when
|
113
|
+
when Numeric
|
93
114
|
# see if any of the ranges match the integer
|
94
115
|
@ranges.each do |range|
|
95
|
-
yield @hash[range] if range.
|
116
|
+
yield @hash[range] if range.cover? query
|
96
117
|
end
|
97
118
|
|
98
119
|
when Regexp
|
99
|
-
# Reverse operation: `rash[/regexp/]` returns all
|
120
|
+
# Reverse operation: `rash[/regexp/]` returns all string keys matching the regexp
|
100
121
|
@hash.each do |key, val|
|
101
122
|
yield val if key.is_a?(String) && query =~ key
|
102
123
|
end
|
@@ -104,16 +125,19 @@ module Hashie
|
|
104
125
|
end
|
105
126
|
|
106
127
|
def method_missing(*args, &block)
|
107
|
-
@hash.send(*args, &block)
|
128
|
+
@hash.send(*args, &block) || super
|
129
|
+
end
|
130
|
+
|
131
|
+
def respond_to_missing?(method_name, _include_private = false)
|
132
|
+
@hash.respond_to?(method_name)
|
108
133
|
end
|
109
134
|
|
110
135
|
private
|
111
136
|
|
112
137
|
def optimize_if_necessary!
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
end
|
138
|
+
return unless (@lookups += 1) >= @optimize_every
|
139
|
+
@regexes = @regexes.sort_by { |regex| -@regex_counts[regex] }
|
140
|
+
@lookups = 0
|
117
141
|
end
|
118
142
|
end
|
119
143
|
end
|
data/lib/hashie/trash.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'hashie/dash'
|
2
|
+
require 'hashie/extensions/dash/property_translation'
|
2
3
|
|
3
4
|
module Hashie
|
4
5
|
# A Trash is a 'translated' Dash where the keys can be remapped from a source
|
@@ -8,93 +9,6 @@ module Hashie
|
|
8
9
|
# such as a Java api, where the keys are named differently from how we would
|
9
10
|
# in Ruby.
|
10
11
|
class Trash < Dash
|
11
|
-
|
12
|
-
#
|
13
|
-
# * <tt>:default</tt> - Specify a default value for this property, to be
|
14
|
-
# returned before a value is set on the property in a new Dash.
|
15
|
-
# * <tt>:from</tt> - Specify the original key name that will be write only.
|
16
|
-
# * <tt>:with</tt> - Specify a lambda to be used to convert value.
|
17
|
-
# * <tt>:transform_with</tt> - Specify a lambda to be used to convert value
|
18
|
-
# without using the :from option. It transform the property itself.
|
19
|
-
def self.property(property_name, options = {})
|
20
|
-
super
|
21
|
-
|
22
|
-
options[:from] = options[:from].to_sym if options[:from]
|
23
|
-
property_name = property_name.to_sym
|
24
|
-
|
25
|
-
if options[:from]
|
26
|
-
if property_name == options[:from]
|
27
|
-
fail ArgumentError, "Property name (#{property_name}) and :from option must not be the same"
|
28
|
-
end
|
29
|
-
|
30
|
-
translations[options[:from].to_sym] = property_name.to_sym
|
31
|
-
|
32
|
-
define_method "#{options[:from]}=" do |val|
|
33
|
-
with = options[:with] || options[:transform_with]
|
34
|
-
self[property_name.to_sym] = with.respond_to?(:call) ? with.call(val) : val
|
35
|
-
end
|
36
|
-
else
|
37
|
-
if options[:transform_with].respond_to? :call
|
38
|
-
transforms[property_name.to_sym] = options[:transform_with]
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
# Set a value on the Dash in a Hash-like way. Only works
|
44
|
-
# on pre-existing properties.
|
45
|
-
def []=(property, value)
|
46
|
-
if self.class.translations.key? property.to_sym
|
47
|
-
send("#{property}=", value)
|
48
|
-
elsif self.class.transforms.key? property.to_sym
|
49
|
-
super property, self.class.transforms[property.to_sym].call(value)
|
50
|
-
elsif property_exists? property
|
51
|
-
super
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def self.permitted_input_keys
|
56
|
-
@permitted_input_keys ||= properties.map { |property| inverse_translations.fetch property, property }
|
57
|
-
end
|
58
|
-
|
59
|
-
private
|
60
|
-
|
61
|
-
def self.properties
|
62
|
-
@properties ||= []
|
63
|
-
end
|
64
|
-
|
65
|
-
def self.translations
|
66
|
-
@translations ||= {}
|
67
|
-
end
|
68
|
-
|
69
|
-
def self.inverse_translations
|
70
|
-
@inverse_translations ||= Hash[translations.map(&:reverse)]
|
71
|
-
end
|
72
|
-
|
73
|
-
def self.transforms
|
74
|
-
@transforms ||= {}
|
75
|
-
end
|
76
|
-
|
77
|
-
# Raises an NoMethodError if the property doesn't exist
|
78
|
-
#
|
79
|
-
def property_exists?(property)
|
80
|
-
unless self.class.property?(property.to_sym)
|
81
|
-
fail NoMethodError, "The property '#{property}' is not defined for this Trash."
|
82
|
-
end
|
83
|
-
true
|
84
|
-
end
|
85
|
-
|
86
|
-
private
|
87
|
-
|
88
|
-
# Deletes any keys that have a translation
|
89
|
-
def initialize_attributes(attributes)
|
90
|
-
return unless attributes
|
91
|
-
attributes_copy = attributes.dup.delete_if do |k, v|
|
92
|
-
if self.class.translations.include?(k.to_sym)
|
93
|
-
self[k] = v
|
94
|
-
true
|
95
|
-
end
|
96
|
-
end
|
97
|
-
super attributes_copy
|
98
|
-
end
|
12
|
+
include Hashie::Extensions::Dash::PropertyTranslation
|
99
13
|
end
|
100
14
|
end
|
data/lib/hashie/utils.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
module Hashie
|
2
|
+
# A collection of helper methods that can be used throughout the gem.
|
3
|
+
module Utils
|
4
|
+
# Describes a method by where it was defined.
|
5
|
+
#
|
6
|
+
# @param bound_method [Method] The method to describe.
|
7
|
+
# @return [String]
|
8
|
+
def self.method_information(bound_method)
|
9
|
+
if bound_method.source_location
|
10
|
+
"defined at #{bound_method.source_location.join(':')}"
|
11
|
+
else
|
12
|
+
"defined in #{bound_method.owner}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# Duplicates a value or returns the value when it is not duplicable
|
17
|
+
#
|
18
|
+
# @api public
|
19
|
+
#
|
20
|
+
# @param value [Object] the value to safely duplicate
|
21
|
+
# @return [Object] the duplicated value
|
22
|
+
def self.safe_dup(value)
|
23
|
+
case value
|
24
|
+
when Complex, FalseClass, NilClass, Rational, Method, Symbol, TrueClass, *integer_classes
|
25
|
+
value
|
26
|
+
else
|
27
|
+
value.dup
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Lists the classes Ruby uses for integers
|
32
|
+
#
|
33
|
+
# @api private
|
34
|
+
# @return [Array<Class>]
|
35
|
+
def self.integer_classes
|
36
|
+
@integer_classes ||=
|
37
|
+
if 0.class == Integer
|
38
|
+
[Integer]
|
39
|
+
else
|
40
|
+
[Fixnum, Bignum] # rubocop:disable Lint/UnifiedInteger
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/hashie/version.rb
CHANGED
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hashie
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 4.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Michael Bleigh
|
@@ -10,38 +9,20 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
12
|
+
date: 2020-02-01 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
15
|
+
name: bundler
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
17
|
requirements:
|
20
|
-
- -
|
18
|
+
- - ">="
|
21
19
|
- !ruby/object:Gem::Version
|
22
20
|
version: '0'
|
23
21
|
type: :development
|
24
22
|
prerelease: false
|
25
23
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
24
|
requirements:
|
28
|
-
- -
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
version: '0'
|
31
|
-
- !ruby/object:Gem::Dependency
|
32
|
-
name: rspec
|
33
|
-
requirement: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
|
-
requirements:
|
36
|
-
- - ! '>='
|
37
|
-
- !ruby/object:Gem::Version
|
38
|
-
version: '0'
|
39
|
-
type: :development
|
40
|
-
prerelease: false
|
41
|
-
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
|
-
requirements:
|
44
|
-
- - ! '>='
|
25
|
+
- - ">="
|
45
26
|
- !ruby/object:Gem::Version
|
46
27
|
version: '0'
|
47
28
|
description: Hashie is a collection of classes and mixins that make hashes more powerful.
|
@@ -52,99 +33,79 @@ executables: []
|
|
52
33
|
extensions: []
|
53
34
|
extra_rdoc_files: []
|
54
35
|
files:
|
55
|
-
- .
|
56
|
-
- .rspec
|
57
|
-
- .rubocop.yml
|
58
|
-
- .travis.yml
|
59
|
-
- .yardopts
|
36
|
+
- ".yardopts"
|
60
37
|
- CHANGELOG.md
|
61
38
|
- CONTRIBUTING.md
|
62
|
-
- Gemfile
|
63
|
-
- Guardfile
|
64
39
|
- LICENSE
|
65
40
|
- README.md
|
66
41
|
- Rakefile
|
42
|
+
- UPGRADING.md
|
67
43
|
- hashie.gemspec
|
68
44
|
- lib/hashie.rb
|
45
|
+
- lib/hashie/array.rb
|
69
46
|
- lib/hashie/clash.rb
|
70
47
|
- lib/hashie/dash.rb
|
48
|
+
- lib/hashie/extensions/active_support/core_ext/hash.rb
|
49
|
+
- lib/hashie/extensions/array/pretty_inspect.rb
|
71
50
|
- lib/hashie/extensions/coercion.rb
|
51
|
+
- lib/hashie/extensions/dash/coercion.rb
|
52
|
+
- lib/hashie/extensions/dash/indifferent_access.rb
|
53
|
+
- lib/hashie/extensions/dash/property_translation.rb
|
72
54
|
- lib/hashie/extensions/deep_fetch.rb
|
55
|
+
- lib/hashie/extensions/deep_find.rb
|
56
|
+
- lib/hashie/extensions/deep_locate.rb
|
73
57
|
- lib/hashie/extensions/deep_merge.rb
|
74
58
|
- lib/hashie/extensions/ignore_undeclared.rb
|
75
59
|
- lib/hashie/extensions/indifferent_access.rb
|
60
|
+
- lib/hashie/extensions/key_conflict_warning.rb
|
76
61
|
- lib/hashie/extensions/key_conversion.rb
|
62
|
+
- lib/hashie/extensions/mash/define_accessors.rb
|
63
|
+
- lib/hashie/extensions/mash/keep_original_keys.rb
|
64
|
+
- lib/hashie/extensions/mash/permissive_respond_to.rb
|
65
|
+
- lib/hashie/extensions/mash/safe_assignment.rb
|
66
|
+
- lib/hashie/extensions/mash/symbolize_keys.rb
|
77
67
|
- lib/hashie/extensions/merge_initializer.rb
|
78
68
|
- lib/hashie/extensions/method_access.rb
|
69
|
+
- lib/hashie/extensions/parsers/yaml_erb_parser.rb
|
70
|
+
- lib/hashie/extensions/pretty_inspect.rb
|
71
|
+
- lib/hashie/extensions/ruby_version.rb
|
72
|
+
- lib/hashie/extensions/ruby_version_check.rb
|
73
|
+
- lib/hashie/extensions/strict_key_access.rb
|
74
|
+
- lib/hashie/extensions/stringify_keys.rb
|
75
|
+
- lib/hashie/extensions/symbolize_keys.rb
|
79
76
|
- lib/hashie/hash.rb
|
80
|
-
- lib/hashie/
|
77
|
+
- lib/hashie/logger.rb
|
81
78
|
- lib/hashie/mash.rb
|
79
|
+
- lib/hashie/railtie.rb
|
82
80
|
- lib/hashie/rash.rb
|
83
81
|
- lib/hashie/trash.rb
|
82
|
+
- lib/hashie/utils.rb
|
84
83
|
- lib/hashie/version.rb
|
85
|
-
|
86
|
-
- spec/hashie/dash_spec.rb
|
87
|
-
- spec/hashie/extensions/coercion_spec.rb
|
88
|
-
- spec/hashie/extensions/deep_fetch_spec.rb
|
89
|
-
- spec/hashie/extensions/deep_merge_spec.rb
|
90
|
-
- spec/hashie/extensions/ignore_undeclared_spec.rb
|
91
|
-
- spec/hashie/extensions/indifferent_access_spec.rb
|
92
|
-
- spec/hashie/extensions/key_conversion_spec.rb
|
93
|
-
- spec/hashie/extensions/merge_initializer_spec.rb
|
94
|
-
- spec/hashie/extensions/method_access_spec.rb
|
95
|
-
- spec/hashie/hash_spec.rb
|
96
|
-
- spec/hashie/mash_spec.rb
|
97
|
-
- spec/hashie/rash_spec.rb
|
98
|
-
- spec/hashie/trash_spec.rb
|
99
|
-
- spec/hashie/version_spec.rb
|
100
|
-
- spec/spec.opts
|
101
|
-
- spec/spec_helper.rb
|
102
|
-
homepage: https://github.com/intridea/hashie
|
84
|
+
homepage: https://github.com/hashie/hashie
|
103
85
|
licenses:
|
104
86
|
- MIT
|
87
|
+
metadata:
|
88
|
+
bug_tracker_uri: https://github.com/hashie/hashie/issues
|
89
|
+
changelog_uri: https://github.com/hashie/hashie/blob/master/CHANGELOG.md
|
90
|
+
documentation_uri: https://www.rubydoc.info/gems/hashie
|
91
|
+
source_code_uri: https://github.com/hashie/hashie
|
105
92
|
post_install_message:
|
106
93
|
rdoc_options: []
|
107
94
|
require_paths:
|
108
95
|
- lib
|
109
96
|
required_ruby_version: !ruby/object:Gem::Requirement
|
110
|
-
none: false
|
111
97
|
requirements:
|
112
|
-
- -
|
98
|
+
- - ">="
|
113
99
|
- !ruby/object:Gem::Version
|
114
100
|
version: '0'
|
115
|
-
segments:
|
116
|
-
- 0
|
117
|
-
hash: 775336832915500848
|
118
101
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
|
-
none: false
|
120
102
|
requirements:
|
121
|
-
- -
|
103
|
+
- - ">="
|
122
104
|
- !ruby/object:Gem::Version
|
123
105
|
version: '0'
|
124
|
-
segments:
|
125
|
-
- 0
|
126
|
-
hash: 775336832915500848
|
127
106
|
requirements: []
|
128
|
-
|
129
|
-
rubygems_version: 1.8.25
|
107
|
+
rubygems_version: 3.0.3
|
130
108
|
signing_key:
|
131
|
-
specification_version:
|
109
|
+
specification_version: 4
|
132
110
|
summary: Your friendly neighborhood hash library.
|
133
|
-
test_files:
|
134
|
-
- spec/hashie/clash_spec.rb
|
135
|
-
- spec/hashie/dash_spec.rb
|
136
|
-
- spec/hashie/extensions/coercion_spec.rb
|
137
|
-
- spec/hashie/extensions/deep_fetch_spec.rb
|
138
|
-
- spec/hashie/extensions/deep_merge_spec.rb
|
139
|
-
- spec/hashie/extensions/ignore_undeclared_spec.rb
|
140
|
-
- spec/hashie/extensions/indifferent_access_spec.rb
|
141
|
-
- spec/hashie/extensions/key_conversion_spec.rb
|
142
|
-
- spec/hashie/extensions/merge_initializer_spec.rb
|
143
|
-
- spec/hashie/extensions/method_access_spec.rb
|
144
|
-
- spec/hashie/hash_spec.rb
|
145
|
-
- spec/hashie/mash_spec.rb
|
146
|
-
- spec/hashie/rash_spec.rb
|
147
|
-
- spec/hashie/trash_spec.rb
|
148
|
-
- spec/hashie/version_spec.rb
|
149
|
-
- spec/spec.opts
|
150
|
-
- spec/spec_helper.rb
|
111
|
+
test_files: []
|