skn_utils 3.5.2 → 3.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
2
  SHA1:
3
- metadata.gz: 73d8697130898df753ade88968278e491e01a28a
4
- data.tar.gz: b1551f7b2d4a5946b28d3488b8f018c3fcfe0faa
3
+ metadata.gz: f318459d97979405431fd4e09eb85d8688707636
4
+ data.tar.gz: 350ee31b2176feae8d567d02e649eb220b2c8a0d
5
5
  SHA512:
6
- metadata.gz: ce7897288886f88f3986a2845c56aa3084c5e44685bded81634290fa5848adb21901f316d0f516ba7eb4c72f4ca35f51f1e67a1eefe8a769774479a6935c2eb5
7
- data.tar.gz: 39eff7ea42c3adfe86a636eeb793e028cc966252a9b8121f92cd589f980cb2fd502bf8687f9e536fa015df9b1bbfb9c9baf5b043ccf89c1d9bfa8bc210fe769e
6
+ metadata.gz: c10cff645d8c75d49abe41ef1b438ba0e3e057f509bd9454133cb9e0bdf32840c82b7a5c861f7ec3787d8565b5f10617cb0dc2cfca9439cd27a28cbdcf31f07e
7
+ data.tar.gz: 904d521b3bc3849a8bc6e71e7f0376668ed378e7fdd887e83279486a016b8710c068ebd3c8dbe59250224de26d78a11267c19263b71816f503406975d0b00ec5
data/README.md CHANGED
@@ -16,6 +16,10 @@ Ruby Gem containing a Ruby PORO (Plain Old Ruby Object) that can be instantiated
16
16
 
17
17
 
18
18
  ## New Features
19
+ 01/2018 V3.6.0
20
+ Moved Linked List to my Minimum_Heaps gem. This repo has a tag of 'lists' documententing the removal
21
+ Removed classes and utils not directly related to NestedResult
22
+
19
23
  12/2017 V3.5.0
20
24
  Made Nokogiri's gem install/load Optional for HashToXml class
21
25
  Added SknContainer as a globally namespaced sub-class of NestedResult. SknContainer is a NestedResult which is functional wrapper over a Concurrent::Hash. Hashes can use anyObject or anyValue as their key:value pairs. This makes them perfect for use as a DI Container.
@@ -63,96 +67,19 @@ Ruby Gem containing a Ruby PORO (Plain Old Ruby Object) that can be instantiated
63
67
 
64
68
  ## Public Components
65
69
  SknUtils::NestedResult # >= V 3.0.0 Primary Key/Value Container with Dot/Hash notiation support.
66
- SknSettings # Multi-level application Configuration class, Key/Value Container with Dot/Hash notiation support.
67
70
  SknHash # Wrapper for name only, WITHOUT SknUtils namespace, inherits from SknUtils::NestedResult
68
71
  SknUtils::ResultBean # Wrapper for name only, inherits from SknUtils::NestedResult
69
72
  SknUtils::PageControls # Wrapper for name only, inherits from SknUtils::NestedResult
70
73
 
71
- SknUtils::Configurable # Basic one-level configuration settings module for Applications and or Gems
72
- SknUtils::Converters::HashToXml # #call(hash) to convert Ruby complex hashes into XML
73
-
74
-
75
- SknUtils::List::LinkedList # List with forward (#next) navigation, and tail/open
76
- SknUtils::List::DoublyLinkedList # List with forward (#next) and backward (#prev) navigation, and head/tail open
77
- SknUtils::List::CircularLinkedList # List with forward (#next) and backward (#prev) navigation, and head/tail wrapping
74
+ SknSettings # Multi-level application Configuration class, Key/Value Container with Dot/Hash notiation support.
78
75
 
76
+ SknUtils::Configurable # Basic one-level configuration settings module for Applications and or Gems
79
77
 
80
78
 
81
79
  ## Configuration Options
82
80
  None required other than initialization hash
83
81
 
84
82
 
85
- ## Public Methods: SknUtils::Lists::LinkedList, SknUtils::Lists::DoublyLinkedList, and SknUtils::Lists::CircularLinkedList
86
- #### Each concrete Class supports the following methods: Value based interface
87
- Value based interface presumes a direct reference to the object is maintained and the following methods will be called on that
88
- object instance as needed. Each method will generally return the value contained in the node, Nil, or the int number of nodes
89
- remaining.
90
-
91
- Navigation: return related value from relative positon in list, stops on first/last node for Single/Double, wraps for Circular.
92
-
93
- #first -- returns first value in list
94
- #next -- returns next value from current position
95
- #current -- returns current value
96
- #prev -- returns previous value from current position (*not supported in Single)
97
- #last -- returns last value from list
98
- #nth(i) -- returns value of node at +|- positon relative to current position, (*negative not supported in Singular)
99
- #at_index(i) -- returns value of i node relative to list's head
100
-
101
- Enumeration
102
- #each -- yields each value in list when block given, on Enumerator object
103
- #to_a -- returns Array of each value in the list
104
-
105
- State
106
- #node -- returns the current node (LinkedNode class)
107
- #clear -- removes all elements and return number of elements removed
108
- #empty? -- returns true if list has no elements, otherwise false
109
- #size -- returns total count of elements in the list
110
- #sort!(:direction, &block) -- Sort existing list in place using :direction (:asc,:desc, :default) symbol
111
- if block is given, overrides :direction and uses custom proc to compare values
112
- block format is: {|a,b| a >= b }; example: 'll.sort(:default) {|a,b| a <= b}'
113
-
114
- Modification: returns number of elements in the list after the operation
115
-
116
- #insert(value) -- inserts value after node at current positon, or appends
117
- #append(value) -- inserts value after node at current positon
118
- #prepend(value) -- inserts value before node at current positon
119
- #insert_before(position_value, value) -- finds node matching position_value, then prepends new node
120
- #insert_after(position_value, value) -- finds node matching position_value, then appends new node
121
- #remove(value) -- finds first node matching value, then destroys it
122
-
123
- Initialization: optional &block to identify data key
124
-
125
- #new(*vargs, &block) -- Instansiates new list and optionally creates nodes from each comma-seperated value;
126
- also, assigns &block as default value identifier for find and sort operations
127
- returns a class instance.
128
- compare_key_block example: instance = LinkedList.new({:key=>"Z"},{:key=>"S"},{:key=>"N"}) {|a| a[:key]}
129
-
130
- #### Each concrete Class supports the following methods: Node based interface
131
- Node based interface presumes a node is retrieved from the LinkedList, then using that/any available node all other methods
132
- may be used. Methods in play will include the LinkedNode (#next, #value, and #prev), along with all public methods from
133
- the main class.
134
-
135
- Navigation: return related Node from relative positon in list, stops on first/last node for Single/Double, wraps for Circular.
136
-
137
- #first_node -- returns first node
138
- #next_node -- returns next node from current position
139
- #current_node -- returns current or last accessed node
140
- #prev_node -- returns previous node from current position (*not supported in Single)
141
- #last_node -- returns last node in list
142
- #node_value -- returns value of the current/receiver node: $ receiver.node_value
143
- #node_request(method_sym, *vargs, &block)
144
- -- executes any method on the Value based Interface, returning a node
145
- #node_value_request(method_sym, *vargs, &block)
146
- -- executes any method on the Value based Interface, returning result value
147
-
148
- Initialization: optional &block to identify data key
149
-
150
- #call(*vargs, &block) -- Instansiates new list and creates nodes from each comma-seperated value;
151
- also, assigns &block as default value identifier for find and sort operations
152
- returns the first node -- else class instance
153
- compare_key_block example: node = LinkedList.call({:key=>"Z"},{:key=>"S"},{:key=>"N"}) {|a| a[:key]}
154
-
155
-
156
83
  ## Public Methods: SknSettings ONLY
157
84
  SknSettings is global constant containing an initialized Object of SknUtils::SknConfiguration using defaults
158
85
  To change the 'development'.yml default please use the following method early or in the case of Rails in 'application.rb
@@ -283,10 +210,10 @@ Ruby Gem containing a Ruby PORO (Plain Old Ruby Object) that can be instantiated
283
210
 
284
211
  ## Installation
285
212
 
286
- runtime prereqs:
287
- V3+ None
288
- V2+ None
289
- V1+ gem 'active_model', '~> 3.0'
213
+ runtime prereqs:
214
+ V3+ None
215
+ V2+ None
216
+ V1+ gem 'active_model', '~> 3.0'
290
217
 
291
218
 
292
219
  Add this line to your application's Gemfile:
data/_config.yml CHANGED
@@ -1 +1,24 @@
1
- theme: jekyll-theme-cayman
1
+ title: SknUtils
2
+ email: skoona@gmail.com
3
+ description: > # this means to ignore newlines until "baseurl:"
4
+ Ruby GEM containing utilitarian classes to help build Ruby applications. SknUtils::NestedResult is the primary class. It is
5
+ a threadsafe wrapper over Ruby's Hash with dot.notation, ?.presence, and nested deep-merge features added. I use it for application
6
+ settings via YAML files, and as a container for persistent objects.
7
+ baseurl: ""
8
+ url: https://skoona.github.io/SknServices
9
+
10
+ twitter_username: JamesScottiii
11
+ twitter:
12
+ username: jamesscottiii
13
+
14
+ theme: jekyll-theme-cayman
15
+
16
+ github_username: skoona
17
+ github:
18
+ username: skoona
19
+
20
+ # paginate: 1
21
+ author:
22
+ name: "James Scott, Jr. (a.k.a Skoona)"
23
+ url: https://keybase.io/skoona
24
+
data/bin/console CHANGED
@@ -2,10 +2,6 @@
2
2
 
3
3
  require 'bundler/setup'
4
4
  require 'skn_utils'
5
- require 'skn_utils/business_services/year_month'
6
- require 'skn_utils/exploring/commander'
7
- require 'skn_utils/exploring/action_service'
8
- require 'skn_utils/exploring/configuration'
9
5
 
10
6
  require 'pry'
11
7
  Pry.start
@@ -93,8 +93,8 @@
93
93
  module SknUtils
94
94
  class NestedResult
95
95
 
96
- def initialize(params={})
97
- reset_from_empty!(params)
96
+ def initialize(params={}, mod=true)
97
+ reset_from_empty!(params, mod)
98
98
  end
99
99
 
100
100
  def [](attr)
@@ -220,7 +220,7 @@ module SknUtils
220
220
  # Feature: attribute must exist and have a non-blank value to cause this method to return true
221
221
  def attribute?(attr)
222
222
  return false unless container.key?(key_as_sym(attr))
223
- ![ "", " ", nil, [],[""], [" "], NestedResult.new({}), [[]]].any? {|a| a == container[key_as_sym(attr)] }
223
+ ![ "", " ", nil, [],[""], [" "], self.class.new({}), [[]]].any? {|a| a == container[key_as_sym(attr)] }
224
224
  end
225
225
 
226
226
  # Feature: returns a hash of all attributes and their current values
@@ -282,7 +282,7 @@ module SknUtils
282
282
  # Feature: unwrap array of array-of-hashes/object
283
283
  def array_to_hash(array)
284
284
  case array
285
- when NestedResult
285
+ when self.class
286
286
  array.to_hash
287
287
  when Array
288
288
  array.map { |element| array_to_hash(element) }
@@ -295,7 +295,7 @@ module SknUtils
295
295
  def translate_value(value)
296
296
  case value
297
297
  when Hash
298
- NestedResult.new(value)
298
+ self.class.new(value)
299
299
  when Array
300
300
  value.map { |element| translate_value(element) }
301
301
  else
@@ -2,8 +2,8 @@
2
2
  module SknUtils
3
3
  class Version
4
4
  MAJOR = 3
5
- MINOR = 5
6
- PATCH = 2
5
+ MINOR = 6
6
+ PATCH = 0
7
7
 
8
8
  def self.to_s
9
9
  [MAJOR, MINOR, PATCH].join('.')
data/lib/skn_utils.rb CHANGED
@@ -1,3 +1,4 @@
1
+
1
2
  require "skn_utils/version"
2
3
  require 'psych'
3
4
  require 'json'
@@ -8,7 +9,6 @@ require 'concurrent'
8
9
  unless defined?(Rails)
9
10
  begin
10
11
  require 'deep_merge'
11
- require 'nokogiri'
12
12
  rescue LoadError => e
13
13
  puts e.message
14
14
  end
@@ -21,25 +21,9 @@ require 'skn_utils/null_object'
21
21
  require 'skn_utils/notifier_base'
22
22
  require 'skn_utils/skn_configuration'
23
23
  require 'skn_utils/configurable'
24
- require 'skn_utils/lists/linked_commons'
25
- require 'skn_utils/lists/link_node'
26
- require 'skn_utils/lists/linked_list'
27
- require 'skn_utils/lists/doubly_linked_list'
28
- require 'skn_utils/lists/circular_linked_list'
29
- # require 'skn_utils/business_services/year_month'
30
- # require 'skn_utils/exploring/commander'
31
- # require 'skn_utils/exploring/action_service'
32
- # require 'skn_utils/exploring/configuration'
33
-
34
- if defined?(::Nokogiri)
35
- begin
36
- require 'skn_utils/converters/hash_to_xml'
37
- rescue LoadError, StandardError
38
- puts 'NotFound -> Converters::HashToXml class depends on Gem:NokoGiri which is not installed at this time.'
39
- end
40
- end
41
24
 
42
25
  require 'skn_hash'
26
+ require 'skn_container'
43
27
  require 'skn_settings'
44
28
 
45
29
  module SknUtils
data/skn_utils.gemspec CHANGED
@@ -21,11 +21,6 @@ EOF
21
21
  spec.post_install_message = <<-EOF
22
22
  This version includes modified versions of SknUtils::ResultBean, SknUtils::PageControls classes, which inherit from
23
23
  SknUtils::NestedResult class. SknUtils::NestedResult replaces those original classes and consolidates their function.
24
-
25
- Please update your existing code in consideration of the above change, or use the prior version 2.0.6.
26
-
27
- Additionally, The gem nokogiri may be manually installed, for non-Rails applications, to enable SknUtils::HashToXml feature.
28
-
29
24
  EOF
30
25
  spec.homepage = "https://github.com/skoona/skn_utils"
31
26
  spec.license = "MIT"
@@ -44,6 +39,5 @@ EOF
44
39
  spec.add_development_dependency "pry", "~> 0"
45
40
  spec.add_development_dependency "simplecov", "~> 0"
46
41
  spec.add_development_dependency 'benchmark-ips', '~> 2'
47
- spec.add_development_dependency 'nokogiri', '~> 1.8'
48
42
 
49
43
  end
data/spec/spec_helper.rb CHANGED
@@ -12,10 +12,6 @@ SimpleCov.start do
12
12
  end
13
13
 
14
14
  require 'skn_utils'
15
- require 'skn_utils/exploring/commander'
16
- require 'skn_utils/exploring/action_service'
17
- require 'skn_utils/exploring/configuration'
18
- require 'skn_utils/business_services/year_month'
19
15
  require 'rspec'
20
16
 
21
17
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
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: 3.5.2
4
+ version: 3.6.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: 2017-12-29 00:00:00.000000000 Z
11
+ date: 2018-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: deep_merge
@@ -122,20 +122,6 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '2'
125
- - !ruby/object:Gem::Dependency
126
- name: nokogiri
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '1.8'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: '1.8'
139
125
  description: "The intent of the NestedResult class is to be a container for data values
140
126
  composed of key/value pairs, \nwith easy access to its contents, and on-demand transformation
141
127
  back to the hash (#to_hash).\n\nReview the RSpec tests, and or review the README
@@ -163,18 +149,8 @@ files:
163
149
  - lib/skn_hash.rb
164
150
  - lib/skn_settings.rb
165
151
  - lib/skn_utils.rb
166
- - lib/skn_utils/business_services/year_month.rb
167
152
  - lib/skn_utils/configurable.rb
168
- - lib/skn_utils/converters/hash_to_xml.rb
169
153
  - lib/skn_utils/env_string_handler.rb
170
- - lib/skn_utils/exploring/action_service.rb
171
- - lib/skn_utils/exploring/commander.rb
172
- - lib/skn_utils/exploring/configuration.rb
173
- - lib/skn_utils/lists/circular_linked_list.rb
174
- - lib/skn_utils/lists/doubly_linked_list.rb
175
- - lib/skn_utils/lists/link_node.rb
176
- - lib/skn_utils/lists/linked_commons.rb
177
- - lib/skn_utils/lists/linked_list.rb
178
154
  - lib/skn_utils/nested_result.rb
179
155
  - lib/skn_utils/notifier_base.rb
180
156
  - lib/skn_utils/null_object.rb
@@ -187,21 +163,11 @@ files:
187
163
  - spec/factories/settings/test.local.yml
188
164
  - spec/factories/settings/test.yml
189
165
  - spec/lib/skn_settings_spec.rb
190
- - spec/lib/skn_utils/business_services/year_month_spec.rb
191
166
  - spec/lib/skn_utils/configurable_spec.rb
192
- - spec/lib/skn_utils/converters/hash_to_xml_spec.rb
193
- - spec/lib/skn_utils/exploring/action_service_spec.rb
194
- - spec/lib/skn_utils/exploring/commander_spec.rb
195
- - spec/lib/skn_utils/exploring/configuration_spec.rb
196
- - spec/lib/skn_utils/lists/Circular_linked_list_spec.rb
197
- - spec/lib/skn_utils/lists/doubly_linked_list_spec.rb
198
- - spec/lib/skn_utils/lists/linked_list_spec.rb
199
- - spec/lib/skn_utils/lists/node_based_linked_list_spec.rb
200
167
  - spec/lib/skn_utils/nested_result_spec.rb
201
168
  - spec/lib/skn_utils/notifier_base_spec.rb
202
169
  - spec/lib/skn_utils/null_object_spec.rb
203
170
  - spec/spec_helper.rb
204
- - spec/support/shared_examples_for_linked_list.rb
205
171
  homepage: https://github.com/skoona/skn_utils
206
172
  licenses:
207
173
  - MIT
@@ -209,9 +175,7 @@ metadata: {}
209
175
  post_install_message: "This version includes modified versions of SknUtils::ResultBean,
210
176
  SknUtils::PageControls classes, which inherit from \nSknUtils::NestedResult class.
211
177
  \ SknUtils::NestedResult replaces those original classes and consolidates their
212
- function. \n\nPlease update your existing code in consideration of the above change,
213
- or use the prior version 2.0.6.\n\nAdditionally, The gem nokogiri may be manually
214
- installed, for non-Rails applications, to enable SknUtils::HashToXml feature.\n\n"
178
+ function. \n"
215
179
  rdoc_options: []
216
180
  require_paths:
217
181
  - lib
@@ -237,18 +201,8 @@ test_files:
237
201
  - spec/factories/settings/test.local.yml
238
202
  - spec/factories/settings/test.yml
239
203
  - spec/lib/skn_settings_spec.rb
240
- - spec/lib/skn_utils/business_services/year_month_spec.rb
241
204
  - spec/lib/skn_utils/configurable_spec.rb
242
- - spec/lib/skn_utils/converters/hash_to_xml_spec.rb
243
- - spec/lib/skn_utils/exploring/action_service_spec.rb
244
- - spec/lib/skn_utils/exploring/commander_spec.rb
245
- - spec/lib/skn_utils/exploring/configuration_spec.rb
246
- - spec/lib/skn_utils/lists/Circular_linked_list_spec.rb
247
- - spec/lib/skn_utils/lists/doubly_linked_list_spec.rb
248
- - spec/lib/skn_utils/lists/linked_list_spec.rb
249
- - spec/lib/skn_utils/lists/node_based_linked_list_spec.rb
250
205
  - spec/lib/skn_utils/nested_result_spec.rb
251
206
  - spec/lib/skn_utils/notifier_base_spec.rb
252
207
  - spec/lib/skn_utils/null_object_spec.rb
253
208
  - spec/spec_helper.rb
254
- - spec/support/shared_examples_for_linked_list.rb
@@ -1,58 +0,0 @@
1
- ##
2
- # File: <gem-root>/lib/skn_utils/business_services/year_month.rb
3
- # Ref: http://blog.arkency.com/2014/08/using-ruby-range-with-custom-classes/
4
- #
5
- ## Calculates YearMonth
6
- #
7
- # YearMonth.new(2014, 3) > YearMonth.new(2014, 1)
8
- # => true
9
-
10
- # YearMonth.new(2014, 1) >= YearMonth.new(2014, 1)
11
- # => true
12
-
13
- # YearMonth.new(2015, 1) < YearMonth.new(2014, 3)
14
- # => false
15
- #
16
- module SknUtils
17
- module BusinessServices
18
-
19
- class YearMonth < Struct.new(:year, :month)
20
- include Comparable
21
-
22
- def initialize(iyear, imonth)
23
- cleaned_year = iyear.to_i
24
- cleaned_month = imonth.to_i
25
-
26
- raise ArgumentError unless cleaned_year > 0
27
- raise ArgumentError unless cleaned_month >= 1 && cleaned_month <= 12
28
-
29
- super(cleaned_year, cleaned_month)
30
- end
31
-
32
- def next
33
- if month == 12
34
- self.class.new(year+1, 1)
35
- else
36
- self.class.new(year, month+1)
37
- end
38
- end
39
- alias_method :succ, :next
40
-
41
- def <=>(other)
42
- (year <=> other.year).nonzero? || month <=> other.month
43
- end
44
-
45
- # need to do some time calcs
46
-
47
- def beginning_of
48
- Time.parse("12:00",Date.new(year, month, 1).to_time) # strftime('%Y-%m-%d')
49
- end
50
-
51
- def end_of
52
- Time.parse("12:00",Date.new(year, month, -1).to_time) # strftime('%Y-%m-%d')
53
- end
54
-
55
- private :year=, :month=
56
- end
57
- end
58
- end
@@ -1,98 +0,0 @@
1
- ## lib/skn_utils/converters/hash_to_xml.rb
2
- #
3
- # Converts Simple Hash to XML, or a Complex nested hash to XML
4
- # Ref: https://stackoverflow.com/questions/11933451/converting-nested-hash-into-xml-using-nokogiri
5
- #
6
- # Input Format:
7
- # {
8
- # someKey: someValue,
9
- # list: {item: [1,2,3]},
10
- # listings: {
11
- # uri: 'topic/content/topic_value',
12
- # '@attributes' => {secured: true}
13
- # }
14
- # }
15
- #
16
- # - produces:
17
- # <?xml version="1.0"?>
18
- # <root>
19
- # <one>1</one>
20
- # <two>2</two>
21
- # <list>
22
- # <item>1</item>
23
- # <item>2</item>
24
- # <item>3</item>
25
- # </list>
26
- # <listings secured="true">
27
- # <uri>topic/content/topic_value</uri>
28
- # </listings>
29
- # </basic>
30
- ##
31
- # xml_string = SknUtils::Converters::HashToXml.call(hash)
32
- ##
33
- module SknUtils
34
- module Converters
35
-
36
- class HashToXml
37
-
38
- def initialize(*args)
39
- end
40
-
41
- def self.call(*vargs_with_at_least_one_hash, &block)
42
- new().call(*vargs_with_at_least_one_hash, &block)
43
- end
44
-
45
- def call(*vargs, &block)
46
- return nil if vargs.size == 0
47
- hash = generate_xml(*vargs )
48
- yield hash if block_given?
49
- hash
50
- end
51
-
52
- protected
53
-
54
- ##
55
- # generate xml from a hash of hashes or array of hashes
56
- def generate_xml(data, parent = false, opt = {})
57
- return if data.to_s.empty?
58
- return unless data.is_a?(Hash)
59
-
60
- unless parent
61
- # assume that if the hash has a single key that it should be the root
62
- root, data = (data.length == 1) ? [data.keys.first.to_s , data] : ["root", data]
63
- builder = ::Nokogiri::XML::Builder.new(opt.merge(:encoding => 'UTF-8')) do |xml|
64
- xml.send(root) {
65
- generate_xml(data, xml)
66
- }
67
- end
68
-
69
- return builder.to_xml
70
- end
71
-
72
- data.each do |label, value|
73
- if value.is_a?(Hash)
74
- attrs = value.fetch('@attributes', {})
75
- # also passing 'text' as a key makes nokogiri do the same thing
76
- text = value.fetch('@text', '')
77
- parent.send(label, attrs, text) {
78
- value.delete('@attributes')
79
- value.delete('@text')
80
- generate_xml(value, parent)
81
- }
82
-
83
- elsif value.is_a?(Array)
84
- value.each do |el|
85
- # lets trick the above into firing so we do not need to rewrite the checks
86
- el = {label => el}
87
- generate_xml(el, parent)
88
- end
89
-
90
- else
91
- parent.send(label, value)
92
- end
93
- end
94
- end # end method
95
-
96
- end # end class
97
- end
98
- end
@@ -1,90 +0,0 @@
1
- ## lib/skn_utils/action_service.rb
2
- #
3
- # Exploratory Action/Service Class
4
- # Ref: https://blog.lelonek.me/what-service-objects-are-not-7abef8aa2f99#.p64vudxq4
5
- # http://sporto.github.io/blog/2012/11/15/a-pattern-for-service-objects-in-rails/
6
- #
7
- # Not a template or abstract class, Just an Example of an Action class
8
- #
9
-
10
- module SknUtils
11
- module Exploring
12
- class ActionService
13
-
14
- def initialize(dependency_injection_arguments)
15
- @thingy = dependency_injection_arguments
16
- end
17
-
18
- def call(*command_and_params)
19
- puts "Called with: #{command_and_params}"
20
- if command_and_params.first.is_a?(Symbol)
21
- (command_and_params.size == 1 ? self.send(command_and_params.first) : self.send(command_and_params.first, command_and_params[1..-1]))
22
- else
23
- puts('No Action Taken')
24
- end
25
-
26
- self
27
- end
28
-
29
- private
30
- # a bunch of private methods
31
- def action_one
32
- puts "#{__method__}() #{@thingy}"
33
- true
34
- end
35
-
36
- def action_two(parm)
37
- puts "#{__method__} => #{parm} #{@thingy}"
38
- true
39
- end
40
-
41
- end # end class
42
- end # end module
43
- end # end module
44
-
45
-
46
- # - regular execution
47
- # action = DoSomeAction.new.(arg1, arg2)
48
- #
49
- # action.('Mine')
50
- # => Called with: ["Mine"]
51
- # => "No Action Taken"
52
- # => #<SknUtils::ActionService:0x007ffa62079c20 @thingy="Things">
53
- #
54
- # action.()
55
- # =>Called with: []
56
- # => "No Action Taken"
57
- # => #<SknUtils::ActionService:0x007ffa62079c20 @thingy="Things">
58
- #
59
- # action.(:action_two,'samples')
60
- # => Called with: [:action_two, "samples"]
61
- # => action_two(["samples"]) with Thingy: Things
62
- # => #<SknUtils::ActionService:0x007ffa62079c20 @thingy="Things">
63
- #
64
- # action.(:action_one,'samples')
65
- # => Called with: [:action_one, "samples"]
66
- # => action_one() Thingy: Things
67
- # => #<SknUtils::ActionService:0x007ffa62079c20 @thingy="Things">
68
- #
69
- # action.(:action_one).(:action_two,'Always')
70
- # => Called with: [:action_one]
71
- # => action_one() Thingy: Things
72
- # => Called with: [:action_two, "Always"]
73
- # => action_two(["Always"]) with Thingy: Things
74
- # => #<SknUtils::ActionService:0x007ffa62079c20 @thingy="Things">
75
- #
76
- # - with dependency injection
77
- #
78
- # def do_some_action
79
- # DoSomeAction.new(http_adapter)
80
- # end
81
- #
82
- # do_some_action.(arg1, arg2)
83
- #
84
- #
85
- #
86
- # - in tests
87
- #
88
- # let(:do_some_action) { DoSomeAction.new(fake_http_adapter) }
89
- # it { is_expected.to be_connected }
90
- #