cru_lib 0.0.1 → 0.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5c8f38e8b4e257661870015c17629990db58161d
4
- data.tar.gz: 9998e4d8a67bb11c536e7b4cbc7c2ac6282c6fc9
3
+ metadata.gz: d936cc7dc3e60b9974dc18f658c65105ace08cd6
4
+ data.tar.gz: 908ce243da74e7f5ca825079e5c13574f9a485d4
5
5
  SHA512:
6
- metadata.gz: af8bb684ad41e2666550aef5042653c4fec652146d47d9a40eff77187c7f2123fc6a0ef8e5917e56f44342ed16c878c2a92848c9e7f764917ef4f7c33d529745
7
- data.tar.gz: 75a86c8d69ed9fb4dbb0453f425ceffc13b5d943bebdc4d1dd00dc4d0bbd79b1d13f6e4dbe378f9c7ce64526a4a9da0dd91a19f9e0176b29bb42f479b733212f
6
+ metadata.gz: 905a67249419b9ff92a0badc0b27f868fce3de6d65c40f625092dd650adf1d42e06d4ee37db163293868a89aad208a90689678129db5f6b6aee8ab655fb576c0
7
+ data.tar.gz: f9b90db5152e55630b8d7cdac145a33236043b8622c0e54b08818e1b8b7979914297febfce977744cf20f818ca23d5545f2cd797761283ce384689b6f0bd65a7
data/.gitignore CHANGED
@@ -20,3 +20,4 @@ tmp
20
20
  *.o
21
21
  *.a
22
22
  mkmf.log
23
+ .idea
data/cru_lib.gemspec CHANGED
@@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
+ spec.add_dependency "global_registry"
20
21
 
21
22
  spec.add_development_dependency "bundler", "~> 1.6"
22
23
  spec.add_development_dependency "rake"
@@ -23,17 +23,18 @@ module CruLib
23
23
  async(:async_push_to_global_registry)
24
24
  end
25
25
 
26
- def async_push_to_global_registry(parent_id = nil, parent_type = nil)
26
+ def async_push_to_global_registry(parent_id = nil, parent_type = nil, parent = nil)
27
27
  self.class.push_structure_to_global_registry
28
28
 
29
29
  if global_registry_id
30
30
  begin
31
- update_in_global_registry(parent_id, parent_type)
31
+ update_in_global_registry(parent_id, parent_type, parent)
32
32
  rescue RestClient::ResourceNotFound
33
- create_in_global_registry(parent_id, parent_type)
33
+ self.global_registry_id = nil
34
+ async_push_to_global_registry
34
35
  end
35
36
  else
36
- create_in_global_registry(parent_id, parent_type)
37
+ create_in_global_registry(parent_id, parent_type, parent)
37
38
  end
38
39
  end
39
40
 
@@ -42,24 +43,24 @@ module CruLib
42
43
  @attributes_to_push = {}
43
44
  attributes_to_push['client_integration_id'] = id unless self.class.skip_fields_for_gr.include?('client_integration_id')
44
45
  attributes_to_push['client_updated_at'] = updated_at if respond_to?(:updated_at)
45
- attributes.collect {|k, v| @attributes_to_push[k.underscore] = v}
46
+ attributes.collect {|k, v| @attributes_to_push[k.underscore] = self.class.gr_value(k.underscore, v)}
46
47
  @attributes_to_push.select! {|k, v| v.present? && !self.class.skip_fields_for_gr.include?(k)}
47
48
  end
48
49
  @attributes_to_push
49
50
  end
50
51
 
51
- def update_in_global_registry(parent_id = nil, parent_type = nil)
52
+ def update_in_global_registry(parent_id = nil, parent_type = nil, parent = nil)
52
53
  if parent_type
53
- create_in_global_registry(parent_id, parent_type)
54
+ create_in_global_registry(parent_id, parent_type, parent)
54
55
  else
55
56
  GlobalRegistry::Entity.put(global_registry_id, {entity: attributes_to_push})
56
57
  end
57
58
  end
58
59
 
59
- def create_in_global_registry(parent_id = nil, parent_type = nil)
60
+ def create_in_global_registry(parent_id = nil, parent_type = nil, parent = nil)
60
61
  entity_attributes = { self.class.global_registry_entity_type_name => attributes_to_push }
61
62
  if parent_type.present?
62
- entity_attributes = {parent_type => entity_attributes}
63
+ entity_attributes = {parent_type => entity_attributes.merge(client_integration_id: parent.id)}
63
64
  GlobalRegistry::Entity.put(parent_id, {entity: entity_attributes})
64
65
  else
65
66
  entity = GlobalRegistry::Entity.post(entity: entity_attributes)
@@ -69,6 +70,22 @@ module CruLib
69
70
  end
70
71
 
71
72
  module ClassMethods
73
+ def gr_value(column_name, value)
74
+ return value if value.blank?
75
+
76
+ column = columns_to_push.detect { |c| c[:name] == column_name }
77
+ return unless column
78
+
79
+ case column[:field_type].to_s
80
+ when 'datetime', 'date'
81
+ value.to_s(:db)
82
+ when 'boolean'
83
+ value ? 'true' : 'false'
84
+ else
85
+ value.to_s.strip
86
+ end
87
+ end
88
+
72
89
  def push_structure_to_global_registry(parent_id = nil)
73
90
  # Make sure all columns exist
74
91
  entity_type = Rails.cache.fetch(global_registry_entity_type_name, expires_in: 1.hour) do
@@ -94,7 +111,7 @@ module CruLib
94
111
  @columns_to_push ||= columns.select { |c|
95
112
  !skip_fields_for_gr.include?(c.name.underscore)
96
113
  }.collect {|c|
97
- { name: c.name.underscore, type: normalize_column_type(c.type, c.name.underscore) }
114
+ { name: c.name.underscore, field_type: normalize_column_type(c.type, c.name.underscore) }
98
115
  }
99
116
  end
100
117
 
@@ -17,7 +17,7 @@ module CruLib
17
17
  # @param [String] relationship_name
18
18
  # @param [String] related_name
19
19
  # @param [Object] related_object
20
- def attributes_to_push(relationship_name = nil, related_name = nil, related_object = nil)
20
+ def attributes_to_push(relationship_name: nil, related_name: nil, related_object: nil, base_object: nil)
21
21
  if global_registry_id
22
22
  attributes_to_push = super
23
23
  attributes_to_push
@@ -26,7 +26,8 @@ module CruLib
26
26
  "#{relationship_name}:relationship" => {
27
27
  client_integration_id: id,
28
28
  related_name => related_object.global_registry_id
29
- }
29
+ },
30
+ client_integration_id: base_object.id
30
31
  }
31
32
  end
32
33
  end
@@ -36,7 +37,7 @@ module CruLib
36
37
  def create_in_global_registry(base_object, relationship_name)
37
38
  entity = GlobalRegistry::Entity.put(
38
39
  base_object.global_registry_id,
39
- entity: {base_object.class.global_registry_entity_type_name => attributes_to_push}
40
+ entity: { base_object.class.global_registry_entity_type_name => attributes_to_push(base_object: base_object) }
40
41
  )
41
42
 
42
43
  base_object_id = entity['entity'][base_object.class.global_registry_entity_type_name]['id']
@@ -1,3 +1,3 @@
1
1
  module CruLib
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,28 @@
1
+ # To include some tests for global_registry_methods automatically, copy this file to
2
+ # spec/support/shared_examples_for_global_registry_models.rb in the enclosing app then
3
+ # add include_examples "global_registry_methods" to the enclosing spec
4
+ #
5
+ # for example:
6
+ #
7
+ # RSpec.describe Address, :type => :model do
8
+ # include_examples "global_registry_methods"
9
+ # end
10
+ #
11
+ # there should be some lines in your spec_helper.rb like this:
12
+ #
13
+ # # Requires supporting ruby files with custom matchers and macros, etc,
14
+ # # in spec/support/ and its subdirectories.
15
+ # Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
16
+ #
17
+ # that will automatically include the file once it's copied to spec/support
18
+ #
19
+ shared_examples "global_registry_methods" do
20
+ context "self.skip_fields_for_gr" do
21
+ it "should run" do
22
+ expect(described_class.skip_fields_for_gr.class).to eq(Array), "Expected #{described_class}.skip_fields_for_gr to return an Array"
23
+ expect(described_class.skip_fields_for_gr.collect(&:class).uniq).to eq([String]), "Expected #{described_class}.skip_fields_for_gr to return an Array of Strings"
24
+ expect(described_class.skip_fields_for_gr.uniq).to eq(described_class.skip_fields_for_gr), "Expected #{described_class}.skip_fields_for_gr to return an Array with no duplicates (#{described_class.skip_fields_for_gr.find_all{ |c| described_class.skip_fields_for_gr.count(c) > 1 }.uniq} are all in the array at least twice)"
25
+ expect(described_class.skip_fields_for_gr - described_class.column_names - described_class.attribute_aliases.keys).to be_empty, "Expected #{described_class}.skip_fields_for_gr to return an Array of Strings where each string is a column or attribute alias (#{described_class.skip_fields_for_gr - described_class.column_names - described_class.attribute_aliases.keys} are not columns or attribute aliases)"
26
+ end
27
+ end
28
+ end
metadata CHANGED
@@ -1,41 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cru_lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Starcher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-10 00:00:00.000000000 Z
11
+ date: 2015-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: global_registry
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - ~>
31
+ - - "~>"
18
32
  - !ruby/object:Gem::Version
19
33
  version: '1.6'
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - ~>
38
+ - - "~>"
25
39
  - !ruby/object:Gem::Version
26
40
  version: '1.6'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - '>='
45
+ - - ">="
32
46
  - !ruby/object:Gem::Version
33
47
  version: '0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - '>='
52
+ - - ">="
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  description: Collection of common ruby logic used by a number of Cru apps
@@ -45,7 +59,7 @@ executables: []
45
59
  extensions: []
46
60
  extra_rdoc_files: []
47
61
  files:
48
- - .gitignore
62
+ - ".gitignore"
49
63
  - Gemfile
50
64
  - LICENSE.txt
51
65
  - README.md
@@ -56,6 +70,7 @@ files:
56
70
  - lib/cru_lib/global_registry_methods.rb
57
71
  - lib/cru_lib/global_registry_relationship_methods.rb
58
72
  - lib/cru_lib/version.rb
73
+ - spec/shared_examples_for_global_registry_models.rb
59
74
  homepage: ''
60
75
  licenses:
61
76
  - MIT
@@ -66,18 +81,19 @@ require_paths:
66
81
  - lib
67
82
  required_ruby_version: !ruby/object:Gem::Requirement
68
83
  requirements:
69
- - - '>='
84
+ - - ">="
70
85
  - !ruby/object:Gem::Version
71
86
  version: '0'
72
87
  required_rubygems_version: !ruby/object:Gem::Requirement
73
88
  requirements:
74
- - - '>='
89
+ - - ">="
75
90
  - !ruby/object:Gem::Version
76
91
  version: '0'
77
92
  requirements: []
78
93
  rubyforge_project:
79
- rubygems_version: 2.2.1
94
+ rubygems_version: 2.4.5
80
95
  signing_key:
81
96
  specification_version: 4
82
97
  summary: Misc libraries for Cru
83
- test_files: []
98
+ test_files:
99
+ - spec/shared_examples_for_global_registry_models.rb