better-struct 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
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: []