altair 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 65b7c35da511837c4258f69bb240843582ad39e4f7fb769c8e73acdb5becea7e
4
+ data.tar.gz: 138c89449ed2e6a2abcd5beee0b85d76142c60d0de0c7b9b8d337852a283cc1b
5
+ SHA512:
6
+ metadata.gz: 93b3ac5f2d0da4b7bcd7212b5a0ae73fa8ee6502241e55cf23bb354d1db74b8ad49f83e58ce7ed68bb1350602712417640de7ec2bdd6a0181552a2078e119726
7
+ data.tar.gz: 2ec97f4ad2626306e7c03e6e0d77a3c73d505ae4524f6093fb933bd773fdf9dd181f59c68a39122b18eea369fe0cc2b4e1c1e98697c90ed03f96e3245749bf7a
@@ -0,0 +1,32 @@
1
+ require 'indifferent-hash'
2
+
3
+ module Altair
4
+ class Document < IndifferentHash
5
+ attr_accessor :fields
6
+
7
+ def initialize(fields, data = {})
8
+ @fields = fields
9
+
10
+ fields.each do |key, field|
11
+ case field
12
+ when Hash
13
+ define_singleton_method(:"#{key}") { get(key) }
14
+ self[key] = Document.new(field, data[key] || {})
15
+ when Field
16
+ define_singleton_method(:"#{key}") { get(key) }
17
+ define_singleton_method(:"#{key}=") { |value| set(key, value) }
18
+
19
+ set(key, data[key])
20
+ end
21
+ end
22
+ end
23
+
24
+ def get(key)
25
+ self[key]
26
+ end
27
+
28
+ def set(key, value)
29
+ self[key] = fields[key].parse! value
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,14 @@
1
+ module Altair
2
+ class Field
3
+ attr_accessor :type, :options
4
+
5
+ def initialize(options)
6
+ @type = options[:type]
7
+ @options = options
8
+ end
9
+
10
+ def parse!(value)
11
+ Altair.converter[value.class][type].call(value)
12
+ end
13
+ end
14
+ end
data/lib/altair.rb ADDED
@@ -0,0 +1,47 @@
1
+ require 'boolean'
2
+ require 'altair/field'
3
+ require 'altair/document'
4
+
5
+ module Altair
6
+ attr_accessor :converter
7
+
8
+ def config(options = {})
9
+ @converter = options[:converter] || default_converter
10
+ end
11
+
12
+ def default_converter
13
+ {
14
+ String => {
15
+ String => Proc.new { |value| value.to_s },
16
+ Symbol => Proc.new { |value| value.to_sym },
17
+ Integer => Proc.new { |value| value.to_i },
18
+ Float => Proc.new { |value| value.to_f },
19
+ Date => Proc.new { |value| Date.parse(value) },
20
+ DateTime => Proc.new { |value| DateTime.parse(value) }
21
+ },
22
+ Integer => {
23
+ Integer => Proc.new { |value| value.to_i },
24
+ Float => Proc.new { |value| value.to_f },
25
+ String => Proc.new { |value| value.to_s }
26
+ },
27
+ Float => {
28
+ Float => Proc.new { |value| value.to_f },
29
+ Integer => Proc.new { |value| value.to_i },
30
+ String => Proc.new { |value| value.to_s }
31
+ },
32
+ TrueClass => {
33
+ Boolean => Proc.new { |value| value }
34
+ },
35
+ FalseClass => {
36
+ Boolean => Proc.new { |value| value }
37
+ },
38
+ Hash => {
39
+ Array => Proc.new { |hash| hash.values }
40
+ }
41
+ }
42
+ end
43
+
44
+ extend self
45
+ end
46
+
47
+ Altair.config
data/lib/boolean.rb ADDED
@@ -0,0 +1,9 @@
1
+ module Boolean; end
2
+
3
+ class TrueClass
4
+ extend Boolean
5
+ end
6
+
7
+ class FalseClass
8
+ extend Boolean
9
+ end
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: altair
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Felipe Cabrera
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-03-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: indifferent-hash
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'
27
+ description:
28
+ email: fecabrera0@outlook.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/altair.rb
34
+ - lib/altair/document.rb
35
+ - lib/altair/field.rb
36
+ - lib/boolean.rb
37
+ homepage: https://gitlab.com/armizh/altair
38
+ licenses:
39
+ - BSD-2-Clause
40
+ metadata: {}
41
+ post_install_message:
42
+ rdoc_options: []
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ requirements: []
56
+ rubygems_version: 3.0.1
57
+ signing_key:
58
+ specification_version: 4
59
+ summary: Basic document validation
60
+ test_files: []