yew 0.0.5 → 0.0.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.
Files changed (5) hide show
  1. checksums.yaml +8 -8
  2. data/README.md +53 -0
  3. data/lib/yew.rb +43 -9
  4. data/test/test_yew_tree.rb +1 -1
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- Yjg0MjQ2N2FkYjMyYTkyMWE4YWYxZDI3ZTQ2YWRhY2Q2ZTc0MDliOQ==
4
+ MDgyM2U4N2M0NTNkZmU3MzUyZmY0MzRjYzEwMmZkZmZhZjgzYzg4NQ==
5
5
  data.tar.gz: !binary |-
6
- ODJlOTEyODk0MmQ5OTlmNTU1MTk5Y2QwMWQ5MDYxMmRjZTYzNGViZQ==
6
+ MDMyNzA0ZGNlNWY3NTJlMTI1YzA2NTEwOWUzMjA4YTBmOTJjYmVhZg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZTc5ODU2M2Y4ZmIyOGFhYTgxNzllNmQzMTg3M2ViNjY1MjVkYTM0NTk3YmYw
10
- NTc1OTRiYjI3MGY4NTgxZDMxZjExNGVhYjY2NmUxNTA3NTY3ODVlNWRmMzlj
11
- YzkyNmY1MjdlYzA4NmY4ZWE5YTVhOTY3Y2JiNGMxY2Q4YjM0MWM=
9
+ YzZkMWJkYjA5N2YwYTEwZjhlYTA5YmNmY2Q3NGNjYWIyMmU4ZTlkMzhlOTM5
10
+ YmY4MTg1OTBjNWNmYWZlZDkxYTNlYzUyZDU1M2UyNDFhYmJhYWY4YTMyOTIx
11
+ MmQ0YTEyNjAzYjRlOTVlOGY2ZmRlMzcwNTM5ODBiOTE3ZTdiM2E=
12
12
  data.tar.gz: !binary |-
13
- OTc3MDQxNDBlOWM2MWNkOWM1MTQ3YmIzMGMyOWI3ZmU2NjNiZmJmNjk0YmFj
14
- NmMyMmU4NjUwZjI3OWI2MTU3ZDMxMjg2YjY4YTRlOTQ1ZTkzMjNlZTcyMWU5
15
- Zjg2YzI0YzUzN2VmMmIzOGJhNTA4MjIyOWUyYTQ1NGJlZGQ1OTE=
13
+ YmRiNzdjNjM0MjFmNTE2MjZhMzI3OTEwMmZjMWU0OWYyNjQyMDY2YTAwNGY1
14
+ NDIxNWNhZmE0YjI0YTc2NmRkNzI4M2I4NmFlNWFiMTg3NjI2NzlkNzBlN2Zi
15
+ ODBmMjBjYjZjNjc2NzRkMTQ2NjA3MTE2ZWZkOGVjZTE1YWYyZjQ=
data/README.md CHANGED
@@ -86,8 +86,61 @@ There are two options for installation: packaged gem and source file.
86
86
  curl "https://raw.github.com/snmgian/yew/master/lib/yew.rb" 2>/dev/null -o "yew.rb"
87
87
  ```
88
88
 
89
+ ## Running tests
90
+
91
+ Tests are written in MiniTest. To run them all just execute the following from your command line:
92
+
93
+ ``` shell
94
+ ruby -I. test/ts_yew.rb
95
+ ```
96
+
97
+ ## Badges
98
+
99
+ [![Build Status](https://travis-ci.org/snmgian/yew.svg?branch=master)](https://travis-ci.org/snmgian/yew) [![Code Climate](https://codeclimate.com/github/snmgian/yew.png)](https://codeclimate.com/github/snmgian/yew)
100
+
89
101
  ## License
90
102
 
91
103
  This software is licensed under the [LGPL][lgpl] license.
92
104
 
93
105
  [lgpl]: https://www.gnu.org/licenses/lgpl.html
106
+
107
+ ## Art
108
+
109
+ ``` markdown
110
+
111
+ .: ,~ :
112
+ +7Z?~+$Z$. .
113
+ ~$ZZZZ7$OZ$.,::~:~.
114
+ .::IZ$$O8Z$ZZZ$$$7OOO7.
115
+ 7$$$$Z$$OZZOZZZOOZOOZ$$$:.+,~
116
+ .. . $Z$ZZZ$$$OZZOZ$O88$OOO8OO8ZZ~
117
+ :,?$ZOOZZ88$OOZ$OOOO8OZOOOOO88OZ~+~,
118
+ .=ZZOOOOZOO8OOZOZOO8Z8OZO8OOOOO888ZZ::.
119
+ ~7ZOZOOZOO8O8O8O8D8OOZOOZDDD8ZO8O888O?I
120
+ . +..$OZOOO8O88D8Z88OOD8ZOOO8OZOO8$O88OOZ$O:~. .
121
+ . .?.?+7ZZOOO8888D888DDO88888O8ZO88Z88Z888888OZ~.:.
122
+ ?~7$ZZZOZOZOOO88D888ZDD888D8888888OOOOODZ8OO8OZ88OZ7$+
123
+ IZOO$OZO8ZZOOD$ZO8DZ8D88888ZD8D8OD88OO8OZOO$OOOOOO8O+:
124
+ .,.$OZOZOZZZZ88O88O88OO888ON88DO888ZD8O88~7ZOO$$Z88OOO+
125
+ ~ZZ?ZZZZOZO8O8ZOZOZO888888888O8O8888D88D8~8888O88O8ZO8$.=
126
+ ?ZZZ8OZOO8O8OOO8OOO8888888DD8O8O88ODO8D88DD88DZ8888O88$ZI ..
127
+ .. ?$?O8OOO8OZ8D8OZ8ZOODOOO8888D8ODZDDD8ONDO888OO8O88D8OOZOZZ7.~..
128
+ ,+.7ZO8O8888O88O888888OO7?DD888888D88O8888OOOD88OZD8Z88888OOOZ+: ,
129
+ ?.I$ZOO8OO8OZ88D8OO8OOO8DDZ7?88NO88O88DD888DO88888DO8888888888O8ZZO~
130
+ .I=8OOO$8$7.I$888888888D88DDDO8DO8DD8D8D8DD8DD8D88OODZD8DO88O8888O.
131
+ .$7O888888888O8888D8DOO878D88$O78888D8888?ZOO87O8888D8DD888$O8OO8OI=.
132
+ =~O8OO87O88OIDDZ7Z=?D88DZN8D8OO8O88DD88DO88O8D8ODDZDD888DO+OZ8O8O88$=:.
133
+ .:OZO7OO88$D8Z+8~8ZD$88DDNO8$8ODO,OD8DODNOZO8D8DOOO88D8OO8888888Z8ZZO.
134
+ :Z7888DD88D8DODD$D~~,Z?OONDNI?ZDDDNDD8D8D+7Z~:DD8I8888888888DO88OOO$.
135
+ .~8O8D8O88D8ZO8Z$8Z:OZO$=88DDDDDDDDOOD8DDDDDNN~~,~DD88O88DD88OZ$O+,.
136
+ .=DDNNDD88O+ZDDI88OO,,88DDDDDNDDDNN?7Z:ZDNNDN7+$+Z?8888OZO$$,.~ .
137
+ .DND+7+,,I~~=7$:Z=IO=?Z$DONDDD88OZ.:?ZNNNNDDDD8888Z7=7+I+ ,
138
+ .+=, .:=~:.II....Z8DD88DOOO:.,=+::+~8OD88OZ~=ZZ+.
139
+ .I,/ZO?7O8OZD$$Z:$: +I7+$\\7+8ZI.
140
+ //~,.==7Z?$Z$=$ ~,$ \\~.
141
+ /: ~=.7Z?OO?$$,
142
+ .-+--$-?--?--..++::=~, +7I7ZO7I7$,
143
+ ,,. .,:,,=~+..??.:I?,.?+-,,-.,,../7I7ZO7I7$.,,,,..,,,..=.+~..7:7,.7.,-~.+,
144
+ ../7Z+=ZZ077Z$~,,..,.,,. ,:,???+?+.:+.,.+.=I=.=:.
145
+ .... . .. .
146
+
data/lib/yew.rb CHANGED
@@ -1,24 +1,43 @@
1
1
  require 'yaml'
2
2
 
3
3
  module Yew
4
+
5
+ # Creates an object tree based on a given list of yml files.
6
+ #
7
+ # @param [*String] Yaml source files
8
+ #
9
+ # @return [Yew::Tree]
4
10
  def self.load(*yml_files)
5
11
  env_hash = yml_files.inject({}) do |memo, yml|
6
- memo.merge! YAML.load(File.read(yml))
12
+ memo.merge!(YAML.load(File.read(yml)))
7
13
  end
8
14
 
9
15
  Tree.new(env_hash)
10
16
  end
11
17
 
18
+ # The object tree. Allows root-to-leave navigation in the form of ordinary method calls.
12
19
  class Tree < BasicObject
20
+
21
+ # @param [Hash] env
22
+ # @param root Tree's root. Used for notifying a not found entry at an exact path point.
13
23
  def initialize(env, root = nil)
14
24
  @env = env
15
25
  @root = root
16
26
  end
17
27
 
28
+ # Fetches a branch or leaf.
29
+ #
30
+ # If no key is received, returns the underlying Hash.
31
+ #
32
+ # @param key Node's name.
33
+ #
34
+ # @return [Yew::Tree] When the request node is still a tree.
35
+ # @return [Hash] Underlying Hash.
36
+ # @return [Object] When the requested node is a leaf.
18
37
  def [](*key)
19
38
  if key.any?
20
39
  key = key.first
21
- Utils.fetch_as_tree(key, @env, @root)
40
+ Utils.fetch(key, @env, @root)
22
41
 
23
42
  else
24
43
  @env
@@ -26,9 +45,10 @@ module Yew
26
45
  end
27
46
 
28
47
  def method_missing(m, *attrs, &block)
29
- Utils.fetch_as_tree(m, @env, @root)
48
+ Utils.fetch(m, @env, @root)
30
49
  end
31
50
 
51
+ # Define methods for printing inspection.
32
52
  if $YEW_DEBUG
33
53
  def inspect
34
54
  "<Envy::Env:#{__id__} -> #@env>"
@@ -41,12 +61,15 @@ module Yew
41
61
  end
42
62
 
43
63
  module Utils
44
- def self.fetch_as_tree(key, env, root)
45
- value = env.fetch(key) do
46
- env.fetch(key.to_s) do
47
- raise "Attribute #{key} not found at /#{root}"
48
- end
49
- end
64
+
65
+ # Fetches the key's value.
66
+ #
67
+ # Returns a tree if the value is a hash. Otherwise it returns the raw value.
68
+ #
69
+ # @return [Yew::Tree]
70
+ # @return [Object]
71
+ def self.fetch(key, env, root)
72
+ value = raw_fetch(key, env, root)
50
73
 
51
74
  if value.is_a?(Hash)
52
75
  path = key
@@ -57,5 +80,16 @@ module Yew
57
80
  value
58
81
  end
59
82
  end
83
+
84
+ # Fetches a value from the env.
85
+ #
86
+ # @raise [RuntimeError] When key not found.
87
+ def self.raw_fetch(key, env, root)
88
+ env.fetch(key) do
89
+ env.fetch(key.to_s) do
90
+ raise "Attribute #{key} not found at /#{root}"
91
+ end
92
+ end
93
+ end
60
94
  end
61
95
  end
@@ -70,7 +70,7 @@ class TestYew < Test::Unit::TestCase
70
70
 
71
71
  begin
72
72
  @tree.orientdb.timeout
73
- rescue StandardError => e; end
73
+ rescue RuntimeError => e; end
74
74
 
75
75
  assert_match(/timeout not found at \/orientdb/, e.message)
76
76
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yew
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gianfranco Zas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-27 00:00:00.000000000 Z
11
+ date: 2014-03-28 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Reads from .yml files and provides an object for key traversing.
14
14
  email: snmgian@gmail.com