accessible_seed_yaml 1.0.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e1c5f8ab0391ca5c7a2ed2d56a5f1dbaa05bbbc2
4
+ data.tar.gz: 2593fd1b4465c338028b5ab9db9765a4bee4f387
5
+ SHA512:
6
+ metadata.gz: bbc8e7f9e273be8784ba1c8d0828b66dc37817b4871b745b977a0884a2b7d0bc4ec054b5a2fc3dc9dc0fb8bb8357726edbf65526fac2122986848cb5900c5d87
7
+ data.tar.gz: 9d3490313fbb241a6c3ed97fe978b567cb5843924fad932245dc8b3b2415f14fca90cbf87d6ca13cb5fbb1e1b545605b42c2743f45fdabd6554a7c1b97bcee4f
data/.coveralls.yml ADDED
@@ -0,0 +1 @@
1
+ service_name: travis-ci
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm: 2.1.2
3
+ script: rake test
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :test do
6
+ gem 'coveralls', :require => false
7
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Shinya131
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,75 @@
1
+ [![Build Status](https://travis-ci.org/Shinya131/accessible_seed_yaml.svg?branch=master)](https://travis-ci.org/Shinya131/accessible_seed_yaml)
2
+ [![Coverage Status](https://coveralls.io/repos/Shinya131/accessible_seed_yaml/badge.png?branch=develop)](https://coveralls.io/r/Shinya131/accessible_seed_yaml?branch=develop)
3
+ [![Code Climate](https://codeclimate.com/github/Shinya131/accessible_seed_yaml/badges/gpa.svg)](https://codeclimate.com/github/Shinya131/accessible_seed_yaml)
4
+
5
+ ## Introduction
6
+ `AccessibleSeedYaml` is wrapper of rails seed file.
7
+ This wrapper provides following function:
8
+
9
+ 1. Easy access interface for seed data.
10
+ 2. Hold original seed data.
11
+
12
+ ## Example
13
+ ### Sample data
14
+ numbers.yaml
15
+ ```yaml
16
+ data1:
17
+ id: 1
18
+ name: "one"
19
+ data2:
20
+ id: 2
21
+ name: "two"
22
+ data3:
23
+ id: 3
24
+ name: "three"
25
+ ```
26
+
27
+ ### Example of `AccessibleSeedYaml::Table`
28
+ ```ruby
29
+ require 'accessible_seed_yaml'
30
+
31
+ original_seed = File.read('numbers.yaml')
32
+
33
+ @table = AccessibleSeedYaml::Table.new(original_seed)
34
+
35
+ # Instance is providing data access interface.
36
+ @table.records
37
+ # =>
38
+ # [
39
+ # #<AccessibleSeedYaml::Record:0x007f91552770c0
40
+ # @original_seed="data1:\n id: 1\n name: \"one\"\n",
41
+ # @seed_data_by_hash={"data1"=>{"id"=>1, "name"=>"one"}}>,
42
+ # #<AccessibleSeedYaml::Record:0x007f915526c238
43
+ # @original_seed="data2:\n id: 2\n name: \"two\"\n",
44
+ # @seed_data_by_hash={"data2"=>{"id"=>2, "name"=>"two"}}>,
45
+ # #<AccessibleSeedYaml::Record:0x007f91552662c0
46
+ # @original_seed="data3:\n id: 3\n name: \"three\"",
47
+ # @seed_data_by_hash={"data3"=>{"id"=>3, "name"=>"three"}}>
48
+ # ]
49
+
50
+ @table.records[0]
51
+ # => #<AccessibleSeedYaml::Record:0x007f9155725068
52
+ # @original_seed="data1:\n id: 1\n name: \"one\"\n",
53
+ # @seed_data_by_hash={"data1"=>{"id"=>1, "name"=>"one"}}>
54
+
55
+ # Instance is holding original seed.
56
+ @table.original_seed == original_seed
57
+ # => true
58
+ ```
59
+ ### Example of `AccessibleSeedYaml::Record`
60
+ ```ruby
61
+ @recoed = @table.records[0]
62
+
63
+ @recoed
64
+ # => #<AccessibleSeedYaml::Record:0x007f9155725068
65
+ # @original_seed="data1:\n id: 1\n name: \"one\"\n",
66
+ # @seed_data_by_hash={"data1"=>{"id"=>1, "name"=>"one"}}>
67
+
68
+ # Instance is providing data access interface.
69
+ @recoed.attributes # => {"id"=>1, "name"=>"one"}
70
+ @recoed.attributes["id"] # => 1
71
+ @recoed.attributes["name"] # => "one"
72
+
73
+ # Instance is holding original seed.
74
+ @recoed.original_seed # => "data1:\n id: 1\n name: \"one\"\n"
75
+ ```
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << "test"
6
+ t.test_files = FileList['test/**/test_*.rb']
7
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'accessible_seed_yaml/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "accessible_seed_yaml"
8
+ spec.version = AccessibleSeedYaml::VERSION
9
+ spec.authors = ["Shinya131"]
10
+ spec.email = ["nagai3mt5b@gmail.com"]
11
+ spec.summary = "AccessibleSeedYaml is wrapper of rails seed file."
12
+ spec.description = "AccessibleSeedYaml is wrapper of rails seed file. This wrapper provides following function: 1. Easy access interface for seed data. 2. Hold original seed data."
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ end
@@ -0,0 +1,60 @@
1
+ require 'yaml'
2
+ module AccessibleSeedYaml
3
+ # This class is wrapper of seed for one record.
4
+ # Functions:
5
+ # - Fetch seed attributes by hash.
6
+ # - Stored original seed string. It can fetch anytime.
7
+ class Record
8
+ attr_reader :original_seed
9
+
10
+ # @param [String] seed_for_one_record seed string for one record.
11
+ # @raise [ArgumentError] if argument has not only one key then raise.
12
+ # @example
13
+ # <Correct>
14
+ # ````
15
+ # data1:
16
+ # id: 1
17
+ # name: "one"
18
+ # ````
19
+ # => this is one record.
20
+ #
21
+ # <Wrong>
22
+ # ````
23
+ # data1:
24
+ # id: 1
25
+ # name: "one"
26
+ # data2:
27
+ # id: 2
28
+ # name: "two"
29
+ # ````
30
+ # => this is tow record.
31
+ #
32
+ def initialize(seed_for_one_record)
33
+ @original_seed = seed_for_one_record
34
+ exchange_to_hash
35
+ end
36
+
37
+ # @return [Hash] attributes of seed data by hash.
38
+ # @example
39
+ # <source>
40
+ # data1:
41
+ # id: 1
42
+ # name: "one"
43
+ #
44
+ # <return>
45
+ # {"id" => 1, "name" => "one"}
46
+ def attributes
47
+ @seed_data_by_hash.values.first
48
+ end
49
+
50
+ private
51
+
52
+ def exchange_to_hash
53
+ @seed_data_by_hash ||= YAML.load(@original_seed)
54
+
55
+ unless @seed_data_by_hash.size == 1
56
+ raise ArgumentError.new('original_seed key size is not 1.')
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,73 @@
1
+ # This module has seed wrapper classes.
2
+ # Those wrapper provides following function:
3
+ # 1. Easy access interface for seed data.
4
+ # 2. Hold original seed data.
5
+ module AccessibleSeedYaml
6
+ # This class is wrapper of seed.
7
+ # Functions:
8
+ # - Fetch seed data by record unit.
9
+ # - Stored original seed string. It can fetch anytime.
10
+ class Table
11
+ attr_reader :original_seed
12
+
13
+ # @param [String] seed for data source.
14
+ def initialize(seed)
15
+ @original_seed = seed
16
+ end
17
+
18
+ # @return [Array of AccessibleSeedYaml::Record] seed data. It split by record unit.
19
+ # @example
20
+ #
21
+ # <source data>
22
+ # data1:
23
+ # id: 1
24
+ # name: "one"
25
+ # data2:
26
+ # id: 2
27
+ # name: "two"
28
+ #
29
+ # <return>
30
+ # [
31
+ # #<AccessibleSeedYaml::Record:0x007f91552770c0
32
+ # @original_seed="data1:\n id: 1\n name: \"one\"\n",
33
+ # @seed_data_by_hash={"data1"=>{"id"=>1, "name"=>"one"}}>,
34
+ # #<AccessibleSeedYaml::Record:0x007f915526c238
35
+ # @original_seed="data2:\n id: 2\n name: \"two\"\n",
36
+ # @seed_data_by_hash={"data2"=>{"id"=>2, "name"=>"two"}}>,
37
+ # ]
38
+ def records
39
+ setup_records if @records.nil?
40
+ @records
41
+ end
42
+
43
+ private
44
+
45
+ def setup_records
46
+ @records = []
47
+ seed = @original_seed.dup
48
+
49
+ loop do
50
+ if seed.empty?
51
+ break
52
+ end
53
+
54
+ record = Record.new(fetch_first_record!(seed))
55
+ @records << record
56
+ end
57
+ end
58
+
59
+ def fetch_first_record!(seed)
60
+ record_boader = seed.index(record_boader_regexp)
61
+
62
+ if record_boader.nil?
63
+ return seed.slice!(0..-1)
64
+ end
65
+
66
+ seed.slice!(0..record_boader)
67
+ end
68
+
69
+ def record_boader_regexp
70
+ /\n[^ ]/
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,3 @@
1
+ module AccessibleSeedYaml
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,6 @@
1
+ require "accessible_seed_yaml/version"
2
+
3
+ module AccessibleSeedYaml
4
+ require "accessible_seed_yaml/table"
5
+ require "accessible_seed_yaml/record"
6
+ end
@@ -0,0 +1,22 @@
1
+ require 'test_helper'
2
+
3
+ MiniTest::Unit.autorun
4
+
5
+ class TestRecord < MiniTest::Unit::TestCase
6
+ def setup
7
+ @record = AccessibleSeedYaml::Record.new(TestData::Seed::Record01)
8
+ end
9
+
10
+ def test_initialize
11
+ assert_raises(ArgumentError){ AccessibleSeedYaml::Record.new(TestData::Seed::Table) }
12
+ end
13
+
14
+ def test_original_seed
15
+ assert_equal(TestData::Seed::Record01, @record.original_seed)
16
+ end
17
+
18
+ def test_records
19
+ assert_equal(1, @record.attributes["id"])
20
+ assert_equal("coffee", @record.attributes["name"])
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ require 'test_helper'
2
+
3
+ MiniTest::Unit.autorun
4
+
5
+ class TestTable < MiniTest::Unit::TestCase
6
+ def setup
7
+ @seed = AccessibleSeedYaml::Table.new(TestData::Seed::Table)
8
+ end
9
+
10
+ def test_original_seed
11
+ assert_equal(TestData::Seed::Table, @seed.original_seed)
12
+ end
13
+
14
+ def test_records
15
+ assert_instance_of(AccessibleSeedYaml::Record, @seed.records.first)
16
+
17
+ assert_equal(TestData::Seed::Record01, @seed.records[0].original_seed)
18
+ assert_equal(TestData::Seed::Record02, @seed.records[1].original_seed)
19
+ assert_equal(TestData::Seed::Record03, @seed.records[2].original_seed)
20
+ end
21
+ end
data/test/test_data.rb ADDED
@@ -0,0 +1,31 @@
1
+ module TestData
2
+ module Seed
3
+ Record01 =
4
+ [
5
+ "data1:\n",
6
+ " id: 1\n",
7
+ " name: \"coffee\"\n"
8
+ ].join
9
+
10
+ Record02 =
11
+ [
12
+ "data2:\n",
13
+ " id: 2\n",
14
+ " name: \"tea\"\n"
15
+ ].join
16
+
17
+ Record03 =
18
+ [
19
+ "data3:\n",
20
+ " id: 3\n",
21
+ " name: \"water\"\n"
22
+ ].join
23
+
24
+ Table =
25
+ [
26
+ Record01,
27
+ Record02,
28
+ Record03
29
+ ].join
30
+ end
31
+ end
@@ -0,0 +1,11 @@
1
+ # coveralls
2
+ require 'coveralls'
3
+ Coveralls.wear!
4
+
5
+ # minitest
6
+ require 'minitest/unit'
7
+
8
+ # require all lib files
9
+ Dir[File.expand_path('../../lib/**/', __FILE__) << '/*.rb'].each do |file|
10
+ require file
11
+ end
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: accessible_seed_yaml
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Shinya131
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: 'AccessibleSeedYaml is wrapper of rails seed file. This wrapper provides
42
+ following function: 1. Easy access interface for seed data. 2. Hold original seed
43
+ data.'
44
+ email:
45
+ - nagai3mt5b@gmail.com
46
+ executables: []
47
+ extensions: []
48
+ extra_rdoc_files: []
49
+ files:
50
+ - ".coveralls.yml"
51
+ - ".gitignore"
52
+ - ".travis.yml"
53
+ - Gemfile
54
+ - LICENSE.txt
55
+ - README.md
56
+ - Rakefile
57
+ - accessible_seed_yaml.gemspec
58
+ - lib/accessible_seed_yaml.rb
59
+ - lib/accessible_seed_yaml/record.rb
60
+ - lib/accessible_seed_yaml/table.rb
61
+ - lib/accessible_seed_yaml/version.rb
62
+ - test/accessible_seed/test_record.rb
63
+ - test/accessible_seed/test_table.rb
64
+ - test/test_data.rb
65
+ - test/test_helper.rb
66
+ homepage: ''
67
+ licenses:
68
+ - MIT
69
+ metadata: {}
70
+ post_install_message:
71
+ rdoc_options: []
72
+ require_paths:
73
+ - lib
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ requirements: []
85
+ rubyforge_project:
86
+ rubygems_version: 2.2.0
87
+ signing_key:
88
+ specification_version: 4
89
+ summary: AccessibleSeedYaml is wrapper of rails seed file.
90
+ test_files:
91
+ - test/accessible_seed/test_record.rb
92
+ - test/accessible_seed/test_table.rb
93
+ - test/test_data.rb
94
+ - test/test_helper.rb
95
+ has_rdoc: