skn_utils 2.0.6 → 3.0.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.
@@ -0,0 +1,268 @@
1
+ ##
2
+ # spec/lib/skn_utils/nested_bean_spec.rb
3
+ #
4
+
5
+ class MyObject
6
+
7
+ attr_accessor :some_instance_value
8
+
9
+ def initialize(parms)
10
+ @some_instance_value = parms[:value]
11
+ end
12
+
13
+ def say(str)
14
+ "saying #{str}!"
15
+ end
16
+
17
+ def to_h
18
+ hsh = {msg: "You called #{__method__} on me!"}
19
+ puts hsh
20
+ hsh
21
+ end
22
+
23
+ end
24
+
25
+ RSpec.shared_examples 'plain old ruby object' do
26
+
27
+ context "Core Operations " do
28
+ it 'creates NestedResults all the way down' do
29
+ expect(object.three.six).to be_a(SknUtils::NestedResult)
30
+ expect(object.six.last).to be_a(MyObject)
31
+ end
32
+
33
+ it 'provides getters' do
34
+ expect(bean.one).to eql('one')
35
+ expect(bean[:one]).to eql('one')
36
+ expect(bean['one']).to eql('one')
37
+ expect(bean.two).to eql('two')
38
+ expect(bean[:two]).to eql('two')
39
+ expect(bean['two']).to eql('two')
40
+ end
41
+
42
+ it 'provides setters' do
43
+ bean.one = '1'
44
+ bean.two = '2'
45
+ expect(bean.two).to eql('2')
46
+ expect(bean.one).to eql('1')
47
+ end
48
+
49
+ it 'can access deeply nested attributes' do
50
+ expect(bean.six.first.six.eight).to eql('eight')
51
+ expect(bean.eight.first.first.one).to eql('one')
52
+ end
53
+
54
+ it 'does not affect custom objects being passed in' do
55
+ expect(bean.four.any_key.some_instance_value).to eql(['MyObject Testing', 'Looking for Modifications'])
56
+ end
57
+
58
+ it 'allows setting of new attributes' do
59
+ bean.foo = 'bar'
60
+ expect(bean.foo).to eql('bar')
61
+ end
62
+
63
+ it '#attribute? returns true or false based on true presence and non-blank contents of attribute.' do
64
+ expect(bean.one?).to be_truthy
65
+ expect(bean.three.seven?).to be_truthy
66
+ expect(bean.three.seven).to be false
67
+ end
68
+
69
+ it 'can delete attributes' do
70
+ bean.delete_field(:two)
71
+ expect(bean.two?).to be_falsey
72
+ bean.delete_field(:two)
73
+ expect(bean.two?).to be_falsey
74
+ end
75
+
76
+ it 'can be accessed just like a hash with indifferent access' do
77
+ bean.one = '1'
78
+ expect(bean[:one]).to eql('1')
79
+ expect(bean['one']).to eql('1')
80
+ end
81
+
82
+ it '#respond_to? replies as expected' do
83
+ expect(bean.respond_to?(:one)).to be true
84
+ expect(object2.respond_to?(:eleven)).to be true
85
+ end
86
+
87
+ it 'supports Fixnum keys ' do
88
+ expect(bean[4201]).to eq 'Account Code'
89
+ expect(bean[4201] = 'account code').to eq 'account code'
90
+ expect(bean[4202]).to be_falsey
91
+ expect(bean[4202] = 'account code').to eq 'account code'
92
+ end
93
+
94
+ it "protected #hash_from returns remaining hash from any root key as the starting point" do
95
+ expect(bean.send(:hash_from, :one)).to eql({one: 'one'})
96
+ expect(bean.send(:hash_from, :three)).to eql({three: { four: 4, five: 5, six: { seven: 7, eight: 'eight' }, seven: false }})
97
+ expect(bean.send(:hash_from, :eight)).to eql({eight: [[{one: 'one', two: 'two'}],[{three: 'three', four: 'four'}]]})
98
+ end
99
+
100
+ it 'Raises NoMethodError in response to invalid key access' do
101
+ expect{object.sixty_two}.to raise_exception(NoMethodError)
102
+ end
103
+
104
+ context '#attribute? present? like feature operates as expected' do
105
+ let(:base) do
106
+ SknUtils::NestedResult.new({
107
+ empty_string: "", blank_string: " ", null: nil,
108
+ empty_array: [], blank_arrays: [[]], empty_hash: {}
109
+ })
110
+ end
111
+
112
+ it '#attribute? returns false when attribute is not defined or unknown' do
113
+ [:empty_string, :blank_string, :null_string,
114
+ :empty_hash, :empty_array, :blank_arrays, :twelve].each do |key|
115
+ expect(base.send(:attribute?, key)).to be false
116
+ end
117
+ end
118
+ end
119
+
120
+ end
121
+
122
+ context '#to_h' do
123
+ let(:hash) { bean.to_h }
124
+
125
+ it 'returns a hash of all attributes and their values.' do
126
+ expect(hash).to be_a(Hash)
127
+ end
128
+
129
+ it 'translates nested objects back to hashes when calling to_h' do
130
+ expect(hash[:three][:six]).to be_a(Hash)
131
+ end
132
+
133
+ it 'translates elements with Fixnum as key back to hashes when calling to_h' do
134
+ expect(hash[4201]).to eq('Account Code')
135
+ end
136
+
137
+ it 'handles array types when calling to_h' do
138
+ expect(hash[:six]).to be_a(Array)
139
+ expect(hash[:six][2]).to be_a(MyObject)
140
+ expect(hash[:six][0]).to be_a(Hash)
141
+ expect(hash[:six].size).to eql(3)
142
+ end
143
+
144
+ it 'handles hashes nested in arrays when calling to_h' do
145
+ expect(hash[:six][0]).to be_a(Hash)
146
+ end
147
+
148
+ it 'handles hashes nested in arrays of arrays-of-hashes when calling to_h' do
149
+ expect(hash[:eight][0][0]).to be_a(Hash)
150
+ expect(hash[:eight][1][0]).to be_a(Hash)
151
+ expect(hash[:eight].first.first[:one]).to eql('one')
152
+ expect(hash[:eight].last.first[:four]).to eql('four')
153
+ end
154
+
155
+ it 'handles non-hash attributes properly' do
156
+ expect(hash[:one]).to eql('one')
157
+ end
158
+
159
+ it 'does not change custom objects nested in beanure' do
160
+ expect(hash[:four][:any_key]).to be_a(MyObject)
161
+ expect(hash[:four][:any_key].some_instance_value).to eql(['MyObject Testing', 'Looking for Modifications'])
162
+ end
163
+ end
164
+ end
165
+
166
+
167
+ RSpec.describe SknUtils::NestedResult, 'NestedResult class - Basic usage.' do
168
+ let(:object) do
169
+ SknUtils::NestedResult.new(one: 'one', 4201 => 'Account Code',
170
+ two: 'two',
171
+ three: { four: 4, five: 5, six: { seven: 7, eight: 'eight' }, seven: false },
172
+ four: { any_key: MyObject.new(value: ['MyObject Testing', 'Looking for Modifications']) },
173
+ five: [4, 5, 6],
174
+ six: [{ four: 4, five: 5, six: { seven: 7, eight: 'eight' } },
175
+ { four: 4, five: 5, six: { nine: 9, ten: 'ten' } },
176
+ MyObject.new(value: ['MyObject Testing', 'Looking for Modifications'])],
177
+ seven: MyObject.new(value: ['MyObject Testing', 'Looking for Modifications']),
178
+ eight: [[{one: 'one', two: 'two'}],[{three: 'three', four: 'four'}]])
179
+ end
180
+
181
+ let(:object2) do
182
+ SknUtils::NestedResult.new({ten: 10,
183
+ eleven: 11,
184
+ twelve: [[{five: 5, six: 6}],[{three: 3, '04' => 'four'}]]})
185
+ end
186
+
187
+ let(:json_bean) { object.to_json }
188
+
189
+ context 'Initializers' do
190
+ it 'Creates an empty bean if no params are passed' do
191
+ is_expected.to be
192
+ end
193
+
194
+ it 'Initializes from a hash' do
195
+ expect(SknUtils::NestedResult.new(one: 'one', two: 'two')).to be
196
+ end
197
+
198
+ it 'Initializes with attr methods intact after YAML.load' do
199
+ yamled = Psych.load( Psych.dump(object) )
200
+ [:one, :two, :three, :four, :five, :six, :seven, :eight].each do |key|
201
+ expect(yamled.respond_to?(key)).to be true
202
+ end
203
+ end
204
+
205
+ it '#respond_to? verifies attr methods are created on the singleton class and not base class. ' do
206
+ [:one, :two, :three, :four, :five, :six, :seven, :eight].each do |key|
207
+ expect(object.respond_to?(key)).to be true
208
+ end
209
+ [:one, :two, :three, :four, :five, :six, :seven, :eight].each do |key|
210
+ expect(object2.respond_to?(key)).to be false
211
+ end
212
+ [:ten, :eleven, :twelve].each do |key|
213
+ expect(object2.respond_to?(key)).to be true
214
+ end
215
+ [:ten, :eleven, :twelve].each do |key|
216
+ expect(object.respond_to?(key)).to be false
217
+ end
218
+ end
219
+
220
+ it '#keys returns array of input hash keys' do
221
+ expect(object.keys).to eq([:one, 4201, :two, :three, :four, :five, :six, :seven, :eight])
222
+ end
223
+
224
+ end
225
+
226
+ context 'Basic Operations without marshaling' do
227
+ it_behaves_like 'plain old ruby object' do
228
+ let(:bean) { object }
229
+ end
230
+ end
231
+
232
+ context 'Marshalling to JSON' do
233
+ it 'maintains structure when marshalling to JSON' do
234
+ expect(JSON.parse(json_bean)['five']).to eql([4, 5, 6])
235
+ end
236
+ end
237
+
238
+ context 'Basic Operations after Yaml marshaling' do
239
+ let(:dumped_object) { Psych.dump(object) }
240
+
241
+ it "#encode_with exports the original hash when YAML'ed" do
242
+ expect(dumped_object[42..-1]).to_not include('ruby/object:SknUtils::NestedResult')
243
+ end
244
+
245
+ it_behaves_like 'plain old ruby object' do
246
+ let(:bean) { Psych.load(dumped_object) }
247
+ end
248
+ end
249
+
250
+ context 'NestedResults stripped of their internal singleton accessors can be Marshaled!' do
251
+ let(:dumped_object) { Psych.dump(object) }
252
+ let(:loaded_object) { Psych.load(dumped_object) }
253
+ let(:marshaled_object) { Marshal.dump(loaded_object) }
254
+
255
+ it_behaves_like 'plain old ruby object' do
256
+ let(:bean) { Marshal.load(marshaled_object) }
257
+ end
258
+ end
259
+
260
+ context 'NestedResults Survive direct Marshall' do
261
+ let(:marshaled_object) { Marshal.dump(object) }
262
+
263
+ it_behaves_like 'plain old ruby object' do
264
+ let(:bean) { Marshal.load(marshaled_object) }
265
+ end
266
+ end
267
+
268
+ end
data/spec/spec_helper.rb CHANGED
@@ -6,7 +6,8 @@ require 'skn_utils/exploring/action_service'
6
6
  require 'skn_utils/exploring/configuration'
7
7
 
8
8
  require 'rspec'
9
- require 'yaml'
9
+ require 'psych'
10
+ require 'json'
10
11
 
11
12
  # Shared Examples and Support Routines
12
13
  Dir["./spec/support/**/*.rb"].sort.each { |f| require f}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: skn_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.6
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Scott Jr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-27 00:00:00.000000000 Z
11
+ date: 2017-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,16 +66,23 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- description: "Creates an PORO Object with instance variables and associated getters
70
- and setters for each input key, during runtime.\n If a key's value is also a hash,
71
- it too can optionally become an Object.\n If a key's value is a Array of Hashes,
72
- each element of the Array can optionally become an Object.\n\n \nThis nesting action
73
- is controlled by the value of the options key ':depth'. Options key :depth defaults
74
- \nto :multi, and has options of :single, :multi, or :multi_with_arrays\n\n \nThe
75
- ability of the resulting Object to be Marshalled(dump/load) can be preserved by
76
- merging configuration options\ninto the input params. Key ':enable_serialization'
77
- set to true. It defaults to false for speed purposes.\n\n\nReview the RSpec tests,
78
- and or review the README for more details.\n"
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: |
84
+ The intent of NestedResult class is to be a container of data results or key/value pairs, with easy access to its contents, and on-demand transformation back to the hash (#to_hash).
85
+ Review the RSpec tests, and or review the README for more details.
79
86
  email: skoona@gmail.com
80
87
  executables: []
81
88
  extensions: []
@@ -90,30 +97,22 @@ files:
90
97
  - README.md
91
98
  - README.rdoc
92
99
  - Rakefile
100
+ - bin/console
93
101
  - lib/skn_utils.rb
94
- - lib/skn_utils/attribute_helpers.rb
95
102
  - lib/skn_utils/exploring/action_service.rb
96
103
  - lib/skn_utils/exploring/commander.rb
97
104
  - lib/skn_utils/exploring/configuration.rb
98
- - lib/skn_utils/generic_bean.rb
99
- - lib/skn_utils/nested_result_base.rb
105
+ - lib/skn_utils/nested_result.rb
106
+ - lib/skn_utils/notifier_base.rb
100
107
  - lib/skn_utils/null_object.rb
101
- - lib/skn_utils/page_controls.rb
102
- - lib/skn_utils/result_bean.rb
103
- - lib/skn_utils/value_bean.rb
104
108
  - lib/skn_utils/version.rb
105
109
  - skn_utils.gemspec
106
110
  - spec/lib/skn_utils/exploring/action_service_spec.rb
107
111
  - spec/lib/skn_utils/exploring/commander_spec.rb
108
112
  - spec/lib/skn_utils/exploring/configuration_spec.rb
109
- - spec/lib/skn_utils/generic_bean_spec.rb
113
+ - spec/lib/skn_utils/nested_result_spec.rb
110
114
  - spec/lib/skn_utils/null_object_spec.rb
111
- - spec/lib/skn_utils/page_controls_spec.rb
112
- - spec/lib/skn_utils/result_bean_spec.rb
113
- - spec/lib/skn_utils/value_bean_spec.rb
114
115
  - spec/spec_helper.rb
115
- - spec/support/shared_example_marshalable_ruby_pojo.rb
116
- - spec/support/shared_example_ruby_pojo.rb
117
116
  homepage: https://github.com/skoona/skn_utils
118
117
  licenses:
119
118
  - MIT
@@ -134,23 +133,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
133
  version: '0'
135
134
  requirements: []
136
135
  rubyforge_project:
137
- rubygems_version: 2.4.5.1
136
+ rubygems_version: 2.6.11
138
137
  signing_key:
139
138
  specification_version: 3
140
- summary: Ruby convenience utilities, the first being a ResultBean. ResultBean is
141
- a PORO (Plain Old Ruby Object) which inherits from NestedResultBean class (inlcuded).
142
- This class is instantiated via a hash at Ruby Runtime, allowing access to vars
143
- via dot or hash notation, and is serializable (<obj>.to_hash) using standard Hash
144
- serialization methods.
139
+ summary: SknUtils contains a small collection of Ruby utilities, the first being a
140
+ NestedResult a key/value container.
145
141
  test_files:
146
142
  - spec/lib/skn_utils/exploring/action_service_spec.rb
147
143
  - spec/lib/skn_utils/exploring/commander_spec.rb
148
144
  - spec/lib/skn_utils/exploring/configuration_spec.rb
149
- - spec/lib/skn_utils/generic_bean_spec.rb
145
+ - spec/lib/skn_utils/nested_result_spec.rb
150
146
  - spec/lib/skn_utils/null_object_spec.rb
151
- - spec/lib/skn_utils/page_controls_spec.rb
152
- - spec/lib/skn_utils/result_bean_spec.rb
153
- - spec/lib/skn_utils/value_bean_spec.rb
154
147
  - spec/spec_helper.rb
155
- - spec/support/shared_example_marshalable_ruby_pojo.rb
156
- - spec/support/shared_example_ruby_pojo.rb
@@ -1,188 +0,0 @@
1
- ##
2
- # <project.root>/lib/skn_utils/attribute_helpers.rb
3
- #
4
- # *** See SknUtils::NestedResultBase for details ***
5
- #
6
- ##
7
- # This module provides
8
- #
9
- # to_hash Serializer:
10
- # person.to_hash
11
- # => {"name"=>"Bob"}
12
- #
13
- # Support <attr>? and clear_<attr>? method patterns
14
- # example:
15
- # person.name?
16
- # => true true or false, like obj.name.present?
17
- # person.clear_name
18
- # => nil sets :name to nil
19
- #
20
- # attr_accessor like feature for all instance variables
21
- # person.name
22
- # => "Bob"
23
- # person.name = "James"
24
- # => "James"
25
- ##
26
-
27
-
28
-
29
- module SknUtils
30
- module AttributeHelpers
31
-
32
- # These methods normally come from ActiveSupport in Rails
33
- # If your not using this gem with Rails, then the :included method
34
- # will add these routines to the Object class
35
- def self.included(mod)
36
- unless Object.respond_to? :instance_variable_names
37
- Object.class_exec {
38
- def instance_variable_names
39
- instance_variables.map { |var| var.to_s }
40
- end
41
- def instance_values
42
- Hash[instance_variables.map { |name| [name[1..-1], instance_variable_get(name)] }]
43
- end
44
- }
45
- end
46
- end
47
-
48
- # return a hash of all attributes and their current values
49
- # including nested arrays of hashes/objects
50
- def attributes(filter_internal=true)
51
- instance_variable_names.each_with_object({}) do |attr,collector|
52
- next if ['skn_enable_serialization', 'skn_enabled_depth'].include?(attr.to_s[1..-1]) and filter_internal # skip control keys
53
- value = instance_variable_get(attr)
54
-
55
- if value.kind_of?(Array) and value.first.respond_to?(:attribute_helper_object)
56
- value = value.map {|ov| ov.respond_to?(:attribute_helper_object) ? ov.attributes : ov }
57
- elsif value.respond_to?(:attribute_helper_object)
58
- value = value.attributes
59
- end
60
- collector[attr.to_s[1..-1].to_sym] = value
61
- end
62
- end
63
-
64
- def to_hash(exclude_internal_vars=false)
65
- attributes(!exclude_internal_vars)
66
- end
67
- alias_method :to_h, :to_hash
68
-
69
- # An alternative mechanism for property access.
70
- # Hash notation
71
- def [](attr)
72
- send("#{attr}")
73
- end
74
-
75
- # Hash notation
76
- def []=(attr, value)
77
- send("#{attr}=", value)
78
- end
79
-
80
- ##
81
- # DO NOT ADD METHODS BELOW THIS LINE, unless you want them to be private
82
- ##
83
-
84
- # Support the regular respond_to? method by
85
- # answering for any attr that method missing actually handle
86
- #:nodoc:
87
- def respond_to_missing?(method, incl_private=false)
88
- instance_variable_names.include?("@#{method.to_s}") || super(method,incl_private)
89
- end
90
-
91
- private
92
-
93
- # Deals with the true existance of an attribute and then its non-blank or empty value
94
- # - attribute must exist and have a non-blank value to cause this method to return true
95
- #:nodoc:
96
- def attribute?(attr)
97
- return false unless instance_variable_names.include?("@#{attr.to_s}")
98
- if attr.is_a? Symbol
99
- ![ "", " ", nil, [],[""], [" "], {} ].include?( send(attr) )
100
- else
101
- ![ "", " ", nil, [],[""], [" "], {} ].include?( send(attr.to_sym) )
102
- end
103
- end
104
-
105
- #:nodoc:
106
- def clear_attribute(attr)
107
- if attr.is_a? Symbol
108
- instance_variable_set("@#{attr.to_s}", nil)
109
- else
110
- instance_variable_set("@#{attr}", nil)
111
- end
112
- end
113
-
114
- # Determines operable Options in effect for this instance
115
- # see NestedResultBase
116
- #:nodoc:
117
- def serial_required?
118
- respond_to? :serialization_required? and serialization_required?
119
- end
120
- # see NestedResultBase
121
- #:nodoc:
122
- def multi_required?
123
- respond_to? :depth_level and depth_level != :single
124
- end
125
- # see NestedResultBase
126
- #:nodoc:
127
- def multi_with_arrays_required?
128
- respond_to? :depth_level and depth_level == :multi_with_arrays
129
- end
130
-
131
- ##
132
- # Adds the attr?() method pattern. all attributes will respond to attr?: example - obj.name? with true or false
133
- # Adds the clear_attr() method pattern. all attributes will respond to clear_attr(): example - obj.clear_name sets :name to nil
134
- # Handles getter for any instance_variable currently defined
135
- # Handles setter for any instance_variable currently defined
136
- # Sets new instance_variable for any undefined variable with non-hash value
137
- # Sets instance_variable value to Bean object for any undefined variable with hash value param
138
- #
139
- # Using any form of singleton_class() will break the generic bean, which requires Serialization.
140
- # However not adding attr_accessors may impact performance, as method_missing must fill-in for read/writes
141
- ##
142
- #:nodoc:
143
- def method_missing(method, *args, &block)
144
- # puts("method_missing/method/class/*args=#{method}/#{method.class.name}/#{args}")
145
- if method.to_s.start_with?('clear_') and instance_variable_defined?("@#{method.to_s[6..-1]}")
146
- clear_attribute(method.to_s[6..-1].to_sym)
147
- elsif method.to_s.end_with?('?')
148
- if instance_variable_defined?("@#{method.to_s[0..-2]}")
149
- attribute?(method.to_s[0..-2].to_sym)
150
- else
151
- false
152
- end
153
- elsif method.to_s.end_with?("=") # add new attribute or whole object
154
- if args.first.is_a?(Hash)
155
- singleton_class.send(:attr_accessor, method.to_s[0..-2]) unless serial_required?
156
- if multi_required?
157
- instance_variable_set "@#{method.to_s[0..-2]}", self.class.new(*args)
158
- else
159
- instance_variable_set "@#{method.to_s[0..-2]}", *args
160
- end
161
- elsif args.first.is_a?(Array) and args.flatten.first.kind_of?(Hash)
162
- singleton_class.send(:attr_accessor, method.to_s[0..-2]) unless serial_required?
163
- if multi_with_arrays_required?
164
- instance_variable_set("@#{method.to_s[0..-2]}",
165
- (args.first.map {|nobj| nobj.kind_of?(Hash) ? self.class.new(nobj) : nobj })
166
- )
167
- else
168
- instance_variable_set "@#{method.to_s[0..-2]}", *args
169
- end
170
- elsif !args.empty?
171
- singleton_class.send(:attr_accessor, method.to_s[0..-2]) unless serial_required?
172
- instance_variable_set "@#{method.to_s[0..-2]}", *args
173
- else
174
- super(method, *args, &block) # throw excpt for not found or could return false
175
- end
176
- elsif instance_variable_defined? "@#{method.to_s}"
177
- instance_variable_get "@#{method.to_s}"
178
- else
179
- super(method, *args, &block)
180
- end
181
- rescue
182
- # puts $!.message + $!.backtrace.join("\n")
183
- super(method, *args, &block)
184
- end
185
- # end of private section
186
-
187
- end # end module
188
- end # end module
@@ -1,20 +0,0 @@
1
- ##
2
- # <project.root>/lib/skn_utils/generic_bean.rb
3
- #
4
- # *** See SknUtils::NestedResultBase for details ***
5
- #
6
- ##
7
- # (Defaults)
8
- # :enable_serialization = true
9
- # :depth = :multi
10
-
11
- module SknUtils
12
-
13
- class GenericBean < NestedResultBase
14
- #:nodoc:
15
- def initialize(params={})
16
- super( params.merge({enable_serialization: true}) )
17
- end
18
- end # end class
19
-
20
- end # end module