better-struct 1.0.5

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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/better-struct.rb +49 -0
  3. metadata +59 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 15460506cbca1a7f09fbb8228c9ed049f5b1918b
4
+ data.tar.gz: c6134b724ea391ae12144e4e1230fc0ceabfa6e9
5
+ SHA512:
6
+ metadata.gz: f8e32de86bf5e666f6e50e29aa90bc80bd2867b53d202cf2545b19f5aaa8c494b379a67b7b909742cb8e46066dc2de9c23852c10505957baa2cb7d5648c52a36
7
+ data.tar.gz: 13a9dd9dfd6bbfcc3cc174046f45d61c88f1606d8343f00cf69464f45a055ba09f923705c069e69bb511281e6af4533ee4f59b5736f7613daf102b32c1d08413
@@ -0,0 +1,49 @@
1
+ require 'active_model'
2
+
3
+ class BetterStruct
4
+ include ActiveModel::Validations
5
+
6
+ delegate :_required_params, :_optional_params, to: self
7
+
8
+ def initialize(hashish)
9
+ hashish.each do |key, val|
10
+ send(:"#{key}=", val)
11
+ end
12
+ end
13
+
14
+ def to_h
15
+ {}.tap do |attrs|
16
+ instance_variables.each do |var|
17
+ str = var.to_s.gsub /^@/, ''
18
+ if respond_to? "#{str}="
19
+ attrs[str.to_sym] = instance_variable_get var
20
+ end
21
+ end
22
+ end.compact
23
+ end
24
+
25
+ def self.required_params(*required_keys)
26
+ _required_params |= Array.wrap(required_keys)
27
+ required_keys.each(&method(:attr_accessor))
28
+ required_keys.each(&method(:validates_presence_of))
29
+ end
30
+
31
+ def self.optional_params(*optional_keys)
32
+ _optional_params |= Array.wrap(optional_keys)
33
+ optional_keys.each(&method(:attr_accessor))
34
+ end
35
+
36
+ class << self
37
+
38
+ attr_accessor :_required_params, :_optional_params
39
+
40
+ def _required_params
41
+ @required_params ||= []
42
+ end
43
+
44
+ def _optional_params
45
+ @optional_params ||= []
46
+ end
47
+
48
+ end
49
+ end
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: better-struct
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.5
5
+ platform: ruby
6
+ authors:
7
+ - "@BananaNeil"
8
+ - "@TastyCode"
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2017-08-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activemodel
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '2.1'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '2.1'
28
+ description: OpenStruct with parameter enforcements
29
+ email: engineering@countable.us
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - lib/better-struct.rb
35
+ homepage: http://rubygems.org/gems/better-struct.rb
36
+ licenses:
37
+ - MIT
38
+ metadata: {}
39
+ post_install_message:
40
+ rdoc_options: []
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ requirements: []
54
+ rubyforge_project:
55
+ rubygems_version: 2.5.2
56
+ signing_key:
57
+ specification_version: 4
58
+ summary: Better than OpenStruct
59
+ test_files: []