greenenvy 0.1.1 → 0.1.2

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: c44d7ffe342cc58db10ea5d8a2ade17f2607bec6ef51362e08979ec1ca86e64b
4
- data.tar.gz: 9ea1723669d2111ac53c01ae68729451f32b0a898b4801abe547ef6aa9e1a01a
3
+ metadata.gz: fb560ddc1e83c96b74f608f32afd390ea13276e1a4b0ef92c11dfedcd75ba3eb
4
+ data.tar.gz: 1061c2c034186f8dfd706a6ae80451097becaa3a4ba119fb021058b0ae155c6f
5
5
  SHA512:
6
- metadata.gz: a7773d0521273e17a293b0869b74ac8976e896bb54a95a76ac3aba987e8310222bbd589de5092b51c518cf0eec617415279c57b6c2c7150628f6db7df0c6e719
7
- data.tar.gz: da063579e5110454fc0d8cffe812396a67b90929e989794eab879b65d1af8a9fa72d869d79acf8f721f5e16b8246314fdeab339250f8ce0e35486b58be36715a
6
+ metadata.gz: 8811bfada6f513a77d81ff91663b8ae03fcd2685c84fdba78094d6c190b422cbf10cda652e871eb49ced38d45966db9d81810ab6ee2914606b0e3e2b174896ea
7
+ data.tar.gz: fedb8fb3fe9acafc17680fc05bf9f63bc4a11a4911596d6e8e929238b30fa542dbb924c56f8d9036a1bc609993bd63ef3a93be21de0da45ac9f448ba118ede78
@@ -1,15 +1,15 @@
1
+ # frozen_string_literal: true
1
2
  require "greenenvy/context"
2
3
  require "greenenvy/exceptions"
3
4
  require "greenenvy/loader"
4
- require "greenenvy/name_checker"
5
5
  require "greenenvy/name_validator"
6
- require "greenenvy/open_struct_like"
6
+ require "greenenvy/container"
7
7
  require "greenenvy/version"
8
8
 
9
9
  module Greenenvy
10
10
  def self.load_env(env, dir)
11
- name_validator = NameValidator.new(NameChecker.new)
11
+ name_validator = NameValidator.new(Container)
12
12
  loader = Loader.new(Context, name_validator, env, dir).load
13
- OpenStructLike.new(loader)
13
+ Container.new(loader)
14
14
  end
15
15
  end
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  module Greenenvy
2
- class OpenStructLike < BasicObject
3
+ class Container
3
4
  def initialize(hash)
4
5
  @hash = hash
5
6
  @method_missing_handler = MethodMissingHandler.new(hash)
@@ -9,8 +10,8 @@ module Greenenvy
9
10
  @method_missing_handler.call(name)
10
11
  end
11
12
 
12
- def inspect
13
- @hash.inspect
13
+ def respond_to?(name, _=false)
14
+ @method_missing_handler.respond?(name) || super
14
15
  end
15
16
 
16
17
  class MethodMissingHandler
@@ -19,24 +20,27 @@ module Greenenvy
19
20
  end
20
21
 
21
22
  def call(name)
22
- name, predicate = process_predicate(name.to_s)
23
+ processed_name, predicate = process_predicate(name)
23
24
 
24
- name = name.to_sym
25
-
26
- if @hash.key?(name)
27
- result_with_predicate(name, predicate)
25
+ if @hash.key?(processed_name)
26
+ result_with_predicate(processed_name, predicate)
28
27
  else
29
- raise Exceptions::MissingKey, missing_key_message(name)
28
+ raise Exceptions::MissingKey, missing_key_message(processed_name)
30
29
  end
31
30
  end
32
31
 
32
+ def respond?(name)
33
+ processed_name, _ = process_predicate(name)
34
+ @hash.key?(processed_name)
35
+ end
36
+
33
37
  private
34
38
 
35
39
  def process_predicate(name)
36
40
  if name[-1] == "?"
37
- [name[0..-2], true]
41
+ [name[0..-2].to_sym, true]
38
42
  else
39
- [name, false]
43
+ [name.to_sym, false]
40
44
  end
41
45
  end
42
46
 
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
1
2
  module Greenenvy
2
3
  class Context
3
- def initialize(name_validator, env, code, container_class=OpenStructLike)
4
+ def initialize(name_validator, env, code, container_class=Container)
4
5
  @name_validator = name_validator
5
6
  @env = env
6
7
  @code = code
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Greenenvy
2
3
  module Exceptions
3
4
  MissingKey = Class.new(StandardError)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Greenenvy
2
3
  class Loader
3
4
  def initialize(context_class, name_validator, env, dir)
@@ -1,13 +1,34 @@
1
+ # frozen_string_literal: true
1
2
  module Greenenvy
2
3
  class NameValidator
3
- def initialize(name_checker)
4
- @name_checker = name_checker
4
+ REGEXP = %r{\A[A-Za-z]+\w+\z}.freeze
5
+
6
+ def initialize(klass)
7
+ @klass = klass
5
8
  end
6
9
 
7
10
  def validate!(name)
8
- unless @name_checker.valid?(name)
11
+ name = name.to_sym
12
+ if reserved_method?(name) || !valid_pattern?(name)
9
13
  raise Exceptions::InvalidKey, "Invalid key, #{name}."
10
14
  end
15
+ name
16
+ end
17
+
18
+ private
19
+
20
+ def reserved_method?(name)
21
+ @klass.instance_methods.include?(name)
22
+ end
23
+
24
+ if String.instance_methods.include?(:match?)
25
+ def valid_pattern?(name)
26
+ REGEXP.match?(name)
27
+ end
28
+ else
29
+ def valid_pattern?(name)
30
+ name =~ REGEXP ? true : false
31
+ end
11
32
  end
12
33
  end
13
34
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Greenenvy
2
- VERSION = "0.1.1"
3
+ VERSION = "0.1.2"
3
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: greenenvy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Gibralter
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-03-03 00:00:00.000000000 Z
11
+ date: 2018-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -72,12 +72,11 @@ files:
72
72
  - bin/setup
73
73
  - greenenvy.gemspec
74
74
  - lib/greenenvy.rb
75
+ - lib/greenenvy/container.rb
75
76
  - lib/greenenvy/context.rb
76
77
  - lib/greenenvy/exceptions.rb
77
78
  - lib/greenenvy/loader.rb
78
- - lib/greenenvy/name_checker.rb
79
79
  - lib/greenenvy/name_validator.rb
80
- - lib/greenenvy/open_struct_like.rb
81
80
  - lib/greenenvy/version.rb
82
81
  homepage: https://github.com/agibralter/greenenvy
83
82
  licenses:
@@ -1,43 +0,0 @@
1
- module Greenenvy
2
- class NameChecker
3
- BASIC_OBJECT_METHODS = [
4
- :!,
5
- :!=,
6
- :==,
7
- :__id__,
8
- :__send__,
9
- :equal?,
10
- :instance_eval,
11
- :instance_exec,
12
- :method_missing,
13
- :singleton_method_added,
14
- :singleton_method_removed,
15
- :singleton_method_undefined,
16
- :initialize,
17
- :inspect,
18
- ].freeze
19
-
20
- REGEXP = %r{\A[A-Za-z]+\w+\z}.freeze
21
-
22
- def valid?(name)
23
- name = name.to_s
24
- !reserved_method?(name) && valid_pattern?(name)
25
- end
26
-
27
- private
28
-
29
- def reserved_method?(name)
30
- BASIC_OBJECT_METHODS.include?(name)
31
- end
32
-
33
- if String.instance_methods.include?(:match?)
34
- def valid_pattern?(name)
35
- REGEXP.match?(name)
36
- end
37
- else
38
- def valid_pattern?(name)
39
- name =~ REGEXP ? true : false
40
- end
41
- end
42
- end
43
- end