activeyaml 0.1.4 → 0.1.6

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.
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