data_depo 0.0.1 → 0.0.2
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 +4 -4
- data/README.md +11 -5
- data/data_depo.gemspec +1 -1
- data/lib/data_depo.rb +1 -0
- data/lib/data_depo/array_data.rb +14 -10
- data/lib/data_depo/loader.rb +1 -0
- data/lib/data_depo/query.rb +1 -0
- data/spec/data_depo/array_data_spec.rb +52 -0
- data/spec/data_depo_spec.rb +15 -0
- data/spec/samples/animals/a.yml +12 -0
- data/spec/samples/animals/b.yml +14 -0
- data/spec/samples/animals/c.yml +14 -0
- data/spec/samples/animals_action.rb +14 -0
- metadata +12 -6
- data/lib/data_pitcher.rb +0 -25
- data/lib/data_pitcher/category.rb +0 -20
- data/lib/data_pitcher/holder.rb +0 -45
- data/lib/data_pitcher/loader.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bd02a9bfaa21f3a7e33f71d9f3ea41104f61d4bc
|
4
|
+
data.tar.gz: 3e78b7f459050c4f40e2df4489a59465e9d3c16a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff21242222621c3145f933f3806b9f3ded6ba82720a3ca6828a491a5d41473a276eb72f7516bd636deca670739ca4a8ad35bb47f7e2738c68cf64973f06928d3
|
7
|
+
data.tar.gz: 12676ece7801289b0fd7d4421ab2b2653f0bfe43638cab28e641ee344423be4cc6c0d3d0f9224ec30410c71e2c3c586e83af246109743038ba781d4696b334d7
|
data/README.md
CHANGED
@@ -2,10 +2,16 @@
|
|
2
2
|
|
3
3
|
`DataDepo` is data depository utility for testing, etc.
|
4
4
|
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
```
|
8
|
+
$ gem install data_depo
|
9
|
+
```
|
10
|
+
|
5
11
|
## Basic Usage
|
6
12
|
|
7
13
|
When you write the following data file in YAML file
|
8
|
-
as `
|
14
|
+
as `depots/users.yml`...
|
9
15
|
|
10
16
|
```
|
11
17
|
- name: John Doe
|
@@ -24,7 +30,7 @@ you can access the contents the following manner:
|
|
24
30
|
```ruby
|
25
31
|
require 'data_depo'
|
26
32
|
|
27
|
-
DataDepo.definition_path = '
|
33
|
+
DataDepo.definition_path = 'depots'
|
28
34
|
DataDepo.users.each do |u|
|
29
35
|
puts u["name"]
|
30
36
|
end
|
@@ -37,7 +43,7 @@ end
|
|
37
43
|
You can have multiple data files as one group.
|
38
44
|
In case you have the following two YAML files:
|
39
45
|
|
40
|
-
(`
|
46
|
+
(`depots/users/foo.yml`)
|
41
47
|
```
|
42
48
|
- name: John Doe
|
43
49
|
email: john.doe@xxx.xx
|
@@ -47,7 +53,7 @@ In case you have the following two YAML files:
|
|
47
53
|
password: drowssap
|
48
54
|
```
|
49
55
|
|
50
|
-
(`
|
56
|
+
(`depots/users/baa.yml`)
|
51
57
|
```
|
52
58
|
- name: John Roe
|
53
59
|
email: john.roe@xxx.xx
|
@@ -62,7 +68,7 @@ You can access contents of the both files in the same manner.
|
|
62
68
|
```ruby
|
63
69
|
require 'data_depo'
|
64
70
|
|
65
|
-
DataDepo.definition_path = '
|
71
|
+
DataDepo.definition_path = 'depots'
|
66
72
|
DataDepo.users.each do |u|
|
67
73
|
puts u["name"]
|
68
74
|
end
|
data/data_depo.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.homepage = "https://github.com/hosim/data_depo"
|
11
11
|
s.files = `git ls-files`.split("\n")
|
12
12
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
13
|
-
s.version = "0.0.
|
13
|
+
s.version = "0.0.2"
|
14
14
|
s.license = "MIT"
|
15
15
|
|
16
16
|
s.add_development_dependency 'rspec'
|
data/lib/data_depo.rb
CHANGED
data/lib/data_depo/array_data.rb
CHANGED
@@ -6,18 +6,22 @@ module DataDepo
|
|
6
6
|
def gen(name, array)
|
7
7
|
a = self[*array]
|
8
8
|
nm = name.to_s.split('/').first
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
nm.split('_').map {|s| s.capitalize }.join
|
13
|
-
end
|
14
|
-
mod << 'Action'
|
15
|
-
if DataDepo.const_defined?(mod)
|
16
|
-
sig = class << a; self; end
|
17
|
-
sig.__send__(:include, DataDepo.const_get(mod))
|
18
|
-
end
|
9
|
+
a.instance_variable_set(:@name, nm)
|
10
|
+
mod = action_module(nm)
|
11
|
+
(class << a; self; end).__send__(:include, mod) if mod
|
19
12
|
a
|
20
13
|
end
|
14
|
+
|
15
|
+
private
|
16
|
+
def action_module(name)
|
17
|
+
nm = if name.respond_to?(:camelize)
|
18
|
+
name.camelize
|
19
|
+
else
|
20
|
+
name.split('_').map {|s| s.capitalize }.join
|
21
|
+
end
|
22
|
+
nm << 'Action'
|
23
|
+
DataDepo.const_defined?(nm) ? DataDepo.const_get(nm) : nil
|
24
|
+
end
|
21
25
|
end
|
22
26
|
end
|
23
27
|
end
|
data/lib/data_depo/loader.rb
CHANGED
data/lib/data_depo/query.rb
CHANGED
@@ -0,0 +1,52 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'data_depo'
|
4
|
+
|
5
|
+
describe DataDepo::ArrayData do
|
6
|
+
describe '.gen' do
|
7
|
+
context "when passing `foo' as name" do
|
8
|
+
let(:foo) do
|
9
|
+
DataDepo::ArrayData.gen('foo', [:a, :b, :c, :d, :e])
|
10
|
+
end
|
11
|
+
|
12
|
+
it "has `foo' as an instance variable `name'" do
|
13
|
+
name = foo.instance_variable_get(:@name)
|
14
|
+
expect(name).to eq 'foo'
|
15
|
+
end
|
16
|
+
|
17
|
+
context "when DataDepo::FooAction module is defined and " \
|
18
|
+
"it has `abcde' method" do
|
19
|
+
before do
|
20
|
+
module DataDepo::FooAction
|
21
|
+
def abcde; self; end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
after do
|
26
|
+
DataDepo.class_eval { remove_const(:FooAction) }
|
27
|
+
end
|
28
|
+
|
29
|
+
it "responds to `abcde'" do
|
30
|
+
expect(foo).to respond_to(:abcde)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "when DataDepo::BaaAction module is defined and " \
|
35
|
+
"it has `vwxyz' method" do
|
36
|
+
before do
|
37
|
+
module DataDepo::BaaAction
|
38
|
+
def vwxyz; self; end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
after do
|
43
|
+
DataDepo.class_eval { remove_const(:BaaAction) }
|
44
|
+
end
|
45
|
+
|
46
|
+
it "does not respond to `vwxyz'" do
|
47
|
+
expect(foo).not_to respond_to(:vwxyz)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/spec/data_depo_spec.rb
CHANGED
@@ -122,5 +122,20 @@ describe DataDepo do
|
|
122
122
|
expect(path).to eq [:foo, :baa, :baz]
|
123
123
|
end
|
124
124
|
end
|
125
|
+
|
126
|
+
context "when a custom action is loaded" do
|
127
|
+
require "#{File.dirname(__FILE__)}/samples/animals_action"
|
128
|
+
|
129
|
+
before do
|
130
|
+
DataDepo.definition_path = "#{File.dirname(__FILE__)}/samples"
|
131
|
+
end
|
132
|
+
|
133
|
+
it "returns a value with calling the custom action" do
|
134
|
+
query = DataDepo.animals
|
135
|
+
value = query.custom_action_a
|
136
|
+
expect(value).to be_an_instance_of(Hash)
|
137
|
+
expect(value.keys).to include(:mammal)
|
138
|
+
end
|
139
|
+
end
|
125
140
|
end
|
126
141
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: data_depo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- hosim
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -41,12 +41,13 @@ files:
|
|
41
41
|
- lib/data_depo/loader.rb
|
42
42
|
- lib/data_depo/query.rb
|
43
43
|
- lib/data_depo/yaml_loader.rb
|
44
|
-
-
|
45
|
-
- lib/data_pitcher/category.rb
|
46
|
-
- lib/data_pitcher/holder.rb
|
47
|
-
- lib/data_pitcher/loader.rb
|
44
|
+
- spec/data_depo/array_data_spec.rb
|
48
45
|
- spec/data_depo/query_spec.rb
|
49
46
|
- spec/data_depo_spec.rb
|
47
|
+
- spec/samples/animals/a.yml
|
48
|
+
- spec/samples/animals/b.yml
|
49
|
+
- spec/samples/animals/c.yml
|
50
|
+
- spec/samples/animals_action.rb
|
50
51
|
- spec/samples/capitals/1.yml
|
51
52
|
- spec/samples/capitals/2.yml
|
52
53
|
- spec/samples/users.yml
|
@@ -76,8 +77,13 @@ signing_key:
|
|
76
77
|
specification_version: 4
|
77
78
|
summary: Data depository utility for testing, etc.
|
78
79
|
test_files:
|
80
|
+
- spec/data_depo/array_data_spec.rb
|
79
81
|
- spec/data_depo/query_spec.rb
|
80
82
|
- spec/data_depo_spec.rb
|
83
|
+
- spec/samples/animals/a.yml
|
84
|
+
- spec/samples/animals/b.yml
|
85
|
+
- spec/samples/animals/c.yml
|
86
|
+
- spec/samples/animals_action.rb
|
81
87
|
- spec/samples/capitals/1.yml
|
82
88
|
- spec/samples/capitals/2.yml
|
83
89
|
- spec/samples/users.yml
|
data/lib/data_pitcher.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
require "data_pitcher/holder"
|
4
|
-
|
5
|
-
module DataPitcher
|
6
|
-
class << self
|
7
|
-
def definiton_paths=(paths)
|
8
|
-
@definition_paths = Array(paths)
|
9
|
-
end
|
10
|
-
|
11
|
-
def load
|
12
|
-
(@definition_paths || []).uniq.each do |path|
|
13
|
-
if File.directory?(path)
|
14
|
-
Dir.glob(File.join(path, '**', '*.yml')).each do |file|
|
15
|
-
Holder.add(file, path)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def throw(name, key)
|
22
|
-
item = Holder.select(name.to_s)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
module DataPitcher
|
4
|
-
class Category
|
5
|
-
def initialize
|
6
|
-
@key_items = {}
|
7
|
-
@path_items = {}
|
8
|
-
end
|
9
|
-
|
10
|
-
def register(item, key)
|
11
|
-
hash = key.is_a?(Array) ? @path_items : @key_items
|
12
|
-
hash[key] = item
|
13
|
-
end
|
14
|
-
|
15
|
-
def has?(key)
|
16
|
-
hash = key.is_a?(Array) ? @path_items : @key_items
|
17
|
-
hash.has_key?(key)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
data/lib/data_pitcher/holder.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
require 'yaml'
|
4
|
-
require 'data_pitcher/category'
|
5
|
-
require 'data_pitcher/loader'
|
6
|
-
|
7
|
-
module DataPitcher
|
8
|
-
class Holder
|
9
|
-
class << self
|
10
|
-
def add(path, root)
|
11
|
-
item = Loader.load(path, root)
|
12
|
-
category = (items[item.category] ||= Category.new)
|
13
|
-
category.register(item.data, item.name) unless category.has?(item.name)
|
14
|
-
category.register(item.data, item.pieces)
|
15
|
-
end
|
16
|
-
|
17
|
-
def keys
|
18
|
-
items.keys
|
19
|
-
end
|
20
|
-
|
21
|
-
def select(category)
|
22
|
-
items[category]
|
23
|
-
end
|
24
|
-
|
25
|
-
private :new
|
26
|
-
private
|
27
|
-
def items
|
28
|
-
@items ||= {}
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
attr_reader :category, :name, :pieces, :data
|
33
|
-
|
34
|
-
def initialize(path, root)
|
35
|
-
@path = path
|
36
|
-
pieces = path[root.length..-1].split('/')
|
37
|
-
@name = pieces.pop[0...-4]
|
38
|
-
@category = pieces.shift
|
39
|
-
@category = pieces.shift if @category and @category.empty?
|
40
|
-
@name ||= @name
|
41
|
-
@pieces = Array[*(pieces || []), @name]
|
42
|
-
@data = YAML.load_file(@path)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
data/lib/data_pitcher/loader.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
require 'yaml'
|
4
|
-
|
5
|
-
module DataPitcher
|
6
|
-
module Loader
|
7
|
-
class << self
|
8
|
-
def load(path, root)
|
9
|
-
pieces = path[root.length..-1].split('/')
|
10
|
-
name = pieces.pop[0...((File.extname(path) + 1) * -1)]
|
11
|
-
category = pieces.shift
|
12
|
-
category = pieces.shift if category and category.empty?
|
13
|
-
category ||= name
|
14
|
-
breadcrumb = Array[*(pieces || []), name]
|
15
|
-
data = YAML.load_fie(path)
|
16
|
-
|
17
|
-
DataItem.new(category, name, breadcrumb, data)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
DataItem = Struct.new(:category, :name, :breadcrumb, :data)
|
22
|
-
end
|
23
|
-
end
|