humidifier 1.6.0 → 1.6.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -94,10 +94,6 @@ The default rake task runs the tests. Coverage is reported on the command line,
94
94
 
95
95
  The specs pulled from the CFN docs is saved to `CloudFormationResourceSpecification.json`. You can update it by running `bundle exec rake specs`. This script will pull down the latest [resource specification](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-resource-specification.html) to be used with Humidifier.
96
96
 
97
- ### Extension
98
-
99
- The `underscore` string utility method does a lot of the heavy lifting of changing AWS property names over to ruby method names. As such, it's been extracted to a native extension to increase speed and efficiency. To compile it locally run `rake compile`.
100
-
101
97
  ### Contributing
102
98
 
103
99
  Bug reports and pull requests are welcome on GitHub at https://github.com/localytics/humidifier.
@@ -8,7 +8,7 @@ module Humidifier
8
8
  attr_accessor :type, *PROPERTIES.values
9
9
 
10
10
  def initialize(opts = {})
11
- PROPERTIES.values.each { |prop| send(:"#{prop}=", opts[prop]) }
11
+ PROPERTIES.each_value { |prop| send(:"#{prop}=", opts[prop]) }
12
12
  self.type = opts.fetch(:type, 'String')
13
13
  end
14
14
 
@@ -14,8 +14,8 @@ module Humidifier
14
14
  self.id = opts[:id]
15
15
  self.default_identifier = self.class.next_default_identifier
16
16
 
17
- ENUMERABLE_RESOURCES.values.each { |prop| send(:"#{prop}=", opts.fetch(prop, {})) }
18
- STATIC_RESOURCES.values.each { |prop| send(:"#{prop}=", opts[prop]) }
17
+ ENUMERABLE_RESOURCES.each_value { |prop| send(:"#{prop}=", opts.fetch(prop, {})) }
18
+ STATIC_RESOURCES.each_value { |prop| send(:"#{prop}=", opts[prop]) }
19
19
  end
20
20
 
21
21
  # Add a resource to the stack and optionally set its attributes
@@ -1,6 +1,13 @@
1
1
  module Humidifier
2
2
  # Dumps an object to CFN syntax
3
3
  module Utils
4
+ # convert from UpperCamelCase to lower_snake_case
5
+ def self.underscore(name)
6
+ return nil unless name
7
+ name.gsub(/([A-Z]+)([0-9]|[A-Z]|\z)/) { "#{$1.capitalize}#{$2}" }
8
+ .gsub(/(.)([A-Z])/, '\1_\2').downcase
9
+ end
10
+
4
11
  # a frozen hash of the given names mapped to their underscored version
5
12
  def self.underscored(names)
6
13
  names.map { |name| [name, underscore(name).to_sym] }.to_h.freeze
@@ -1,4 +1,4 @@
1
1
  module Humidifier
2
2
  # Gem version
3
- VERSION = '1.6.0'.freeze
3
+ VERSION = '1.6.1'.freeze
4
4
  end
data/lib/humidifier.rb CHANGED
@@ -3,9 +3,7 @@ require 'json'
3
3
  require 'pathname'
4
4
  require 'yaml'
5
5
 
6
- require 'humidifier/humidifier'
7
6
  require 'humidifier/utils'
8
-
9
7
  require 'humidifier/fn'
10
8
  require 'humidifier/ref'
11
9
  require 'humidifier/props'
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: humidifier
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Localytics
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-13 00:00:00.000000000 Z
11
+ date: 2017-09-20 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: benchmark-ips
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '2.7'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '2.7'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: bundler
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -94,20 +80,6 @@ dependencies:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
82
  version: '12.0'
97
- - !ruby/object:Gem::Dependency
98
- name: rake-compiler
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '1.0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '1.0'
111
83
  - !ruby/object:Gem::Dependency
112
84
  name: rubocop
113
85
  requirement: !ruby/object:Gem::Requirement
@@ -141,16 +113,12 @@ description: Programmatically generate and manage AWS CloudFormation templates,
141
113
  email:
142
114
  - oss@localytics.com
143
115
  executables: []
144
- extensions:
145
- - ext/humidifier/extconf.rb
116
+ extensions: []
146
117
  extra_rdoc_files: []
147
118
  files:
148
119
  - CloudFormationResourceSpecification.json
149
120
  - LICENSE
150
121
  - README.md
151
- - ext/humidifier/extconf.rb
152
- - ext/humidifier/humidifier.c
153
- - ext/humidifier/humidifier.h
154
122
  - lib/humidifier.rb
155
123
  - lib/humidifier/aws_adapters/base.rb
156
124
  - lib/humidifier/aws_adapters/noop.rb
@@ -160,7 +128,6 @@ files:
160
128
  - lib/humidifier/condition.rb
161
129
  - lib/humidifier/configuration.rb
162
130
  - lib/humidifier/fn.rb
163
- - lib/humidifier/humidifier.bundle
164
131
  - lib/humidifier/loader.rb
165
132
  - lib/humidifier/mapping.rb
166
133
  - lib/humidifier/output.rb
@@ -204,7 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
204
171
  version: '0'
205
172
  requirements: []
206
173
  rubyforge_project:
207
- rubygems_version: 2.6.11
174
+ rubygems_version: 2.6.13
208
175
  signing_key:
209
176
  specification_version: 4
210
177
  summary: CloudFormation made easy
@@ -1,2 +0,0 @@
1
- require 'mkmf'
2
- create_makefile 'humidifier/humidifier'
@@ -1,81 +0,0 @@
1
- #include "humidifier.h"
2
-
3
- // takes a substring from underscore_preprocess like EC2T or AWST and converts
4
- // it to Ec2T or AwsT
5
- static void format_substring(char* substr, const int substr_idx, const int capitalize)
6
- {
7
- int idx;
8
-
9
- for (idx = 0; idx < substr_idx; idx++) {
10
- if (idx == 0) {
11
- substr[idx] = toupper(substr[idx]);
12
- }
13
- else if ((idx != substr_idx - 1) || capitalize == 0) {
14
- substr[idx] = tolower(substr[idx]);
15
- }
16
- }
17
- }
18
-
19
- // finds occurences of EC2Thing or AWSThing and makes them into Ec2Thing and
20
- // AwsThing so that underscore can be simpler and just look for capitals
21
- static void preprocess(char* str)
22
- {
23
- char substr[strlen(str)];
24
- int idx, substr_idx;
25
-
26
- for (idx = 0, substr_idx = 0; str[idx] != '\0'; idx++) {
27
- if (isupper(str[idx])) {
28
- substr[substr_idx++] = str[idx];
29
-
30
- if (str[idx + 1] == '\0') {
31
- format_substring(substr, substr_idx, 0);
32
- memcpy(str + (idx - substr_idx) + 1, substr, substr_idx);
33
- }
34
- }
35
- else if (isdigit(str[idx]) || (substr_idx != 0)) {
36
- if (substr_idx != 1) {
37
- format_substring(substr, substr_idx, islower(str[idx]));
38
- memcpy(str + (idx - substr_idx), substr, substr_idx);
39
- }
40
- substr_idx = 0;
41
- }
42
- }
43
- }
44
-
45
- // takes a string and returns a downcased version where capitals are now
46
- // separated by underscores
47
- static VALUE underscore(VALUE self, VALUE str)
48
- {
49
- if (TYPE(str) == T_NIL) return Qnil;
50
-
51
- char *str_value = rb_string_value_cstr(&str);
52
- char orig_str[strlen(str_value) + 1];
53
-
54
- strcpy(orig_str, str_value);
55
- preprocess(orig_str);
56
-
57
- // manually null-terminating the string because on Fedora for strings of
58
- // length 16 this breaks otherwise
59
- orig_str[strlen(str_value)] = '\0';
60
-
61
- char new_str[strlen(orig_str) * 2];
62
- char prev;
63
- int orig_idx, new_idx;
64
-
65
- for (orig_idx = 0, new_idx = 0; orig_str[orig_idx] != '\0'; orig_idx++) {
66
- if (orig_idx != 0 && isupper(orig_str[orig_idx])) {
67
- new_str[new_idx++] = '_';
68
- }
69
- new_str[new_idx++] = tolower(orig_str[orig_idx]);
70
- prev = tolower(orig_str[orig_idx]);
71
- }
72
-
73
- return rb_str_new(new_str, new_idx);
74
- }
75
-
76
- void Init_humidifier()
77
- {
78
- VALUE Humidifier = rb_define_module("Humidifier");
79
- VALUE Utils = rb_define_module_under(Humidifier, "Utils");
80
- rb_define_singleton_method(Utils, "underscore", underscore, 1);
81
- }
@@ -1,9 +0,0 @@
1
- #ifndef RUBY_HUMIDIFIER
2
- #define RUBY_HUMIDIFIER
3
-
4
- #include <ctype.h>
5
- #include <ruby.h>
6
-
7
- void Init_humidifier();
8
-
9
- #endif
Binary file