activeyaml 0.1.4 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2a0ae13d0234df31efaf43a77ce974bc1c51fc250a1172ec6b0e3d01ecbc63cb
4
- data.tar.gz: 941f51b22c2da9e192797caaf0c332979743f87ce640c1526a41bcec843f6bb9
3
+ metadata.gz: b056e87f15b5ee397b8e5c317bdaf91703b264461931cac2e1faf274767161ff
4
+ data.tar.gz: 4b3841e988d29773aacbf01d5c9e721d8cae0ec6eb41225bc95307c02bed7bde
5
5
  SHA512:
6
- metadata.gz: 52542244c4b5b9524817c7ae501918a7c3c52c5ef44e2c1ae71e26b960f7418a1bd753af511a4f287a0ed4fe6eaddfdc27864c37b7fb09d9e42b7320759e3cb3
7
- data.tar.gz: 4fe3c6de770022c413026f56a53aec1f1b642384490c181654630b90f25c7375000ed0a5730c86e496a81eb90f9db718e3625e05320eae857ba0953a77bd8a92
6
+ metadata.gz: 2827cb64f8e4f83452b2a8e4627ec2af41abd75121203ec053a611f3139422eb628c003b0441b56ddf6742fe072cea3f8fe1869ea5948ca794a88d59575107fa
7
+ data.tar.gz: ea713ef1ea725ba2756138fee5fee7e39769b80d3fa7276ad827f2b55080a9c67f500d6f8f3b61b0c3f9ff083cd266c43ec3f0d80e424b15bd603b838880716b
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'parser'
4
+ require_relative 'yaml_hash'
5
+
6
+ module ActiveYaml
7
+ # A module with methods that allows you,
8
+ # to work with Yaml files without creating models.
9
+ module FactoryHash
10
+ def create(file_path)
11
+ hash = Parser.parse(file_path)
12
+ YamlHash.new(hash)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'yaml_hash'
4
+
5
+ module ActiveYaml
6
+ # A module with methods for implementing tracking methods.
7
+ # In the model in order to proxy them into a hash with YML data
8
+ module MethodRedirection
9
+ def method_missing(method, *args, &block)
10
+ value = yaml_data[method.to_s]
11
+
12
+ if value
13
+ return value unless value.is_a?(Hash)
14
+
15
+ YamlHash.new(value)
16
+ else
17
+ super
18
+ end
19
+ end
20
+
21
+ def respond_to_missing?(method, include_private = false)
22
+ yaml_data[method.to_s] || super
23
+ end
24
+ end
25
+ end
@@ -3,7 +3,7 @@
3
3
  require 'psych'
4
4
 
5
5
  module ActiveYaml
6
- # base parser
6
+ # The main parser of Yaml files, uses psych under the hood
7
7
  class Parser
8
8
  def self.parse(file_path)
9
9
  Psych.safe_load_file(file_path)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveYaml
4
- VERSION = '0.1.4'
4
+ VERSION = '0.1.6'
5
5
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveYaml
4
+ # Class for creating hashes of similar objects
5
+ class YamlHash
6
+ def initialize(hash)
7
+ @hash = hash || {}
8
+ end
9
+
10
+ def method_missing(method, *args, &block)
11
+ value = hash[method.to_s]
12
+
13
+ if value
14
+ return self.class.new(value) if value.is_a?(Hash)
15
+
16
+ value
17
+ else
18
+ super
19
+ end
20
+ end
21
+
22
+ def inspect
23
+ hash
24
+ end
25
+
26
+ def to_s
27
+ hash.to_s
28
+ end
29
+
30
+ def respond_to_missing?(method, include_private = false)
31
+ hash.key?(method.to_s) || super
32
+ end
33
+
34
+ private
35
+
36
+ attr_reader :hash
37
+ end
38
+ end
data/lib/active_yaml.rb CHANGED
@@ -1,16 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'active_yaml/parser'
4
- require_relative 'active_yaml/method_mapper'
4
+ require_relative 'active_yaml/method_redirection'
5
+ require_relative 'active_yaml/factory_hash'
5
6
 
7
+ # The main module from which work with gem begins
6
8
  module ActiveYaml
7
- # base
8
- class Base < MethodMapper
9
- def self.yaml(file_path)
10
- define_method(:yaml_file_path) do
11
- @yaml_file_path = yaml_file_path
12
- end
9
+ extend FactoryHash
13
10
 
11
+ # Base class to inherit from to create models
12
+ class Base
13
+ include MethodRedirection
14
+
15
+ def self.yaml(file_path)
14
16
  define_method(:yaml_data) do
15
17
  @yaml_data = Parser.parse(file_path)
16
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activeyaml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kirill Leonov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-30 00:00:00.000000000 Z
11
+ date: 2023-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: psych
@@ -31,9 +31,11 @@ extensions: []
31
31
  extra_rdoc_files: []
32
32
  files:
33
33
  - lib/active_yaml.rb
34
- - lib/active_yaml/method_mapper.rb
34
+ - lib/active_yaml/factory_hash.rb
35
+ - lib/active_yaml/method_redirection.rb
35
36
  - lib/active_yaml/parser.rb
36
37
  - lib/active_yaml/version.rb
38
+ - lib/active_yaml/yaml_hash.rb
37
39
  homepage: https://github.com/leonovk/activeyaml
38
40
  licenses:
39
41
  - MIT
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveYaml
4
- # base mapper
5
- class MethodMapper
6
- def initialize; end
7
- end
8
- end