sequoia 0.0.1 → 0.1.0

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
  SHA1:
3
- metadata.gz: 3e551c4ff8d48406a2b15d204b91d02f785213d6
4
- data.tar.gz: 5d37ac750c81303c32ec9acaea660a33beb34631
3
+ metadata.gz: cb4670af90bd4e43c4dc7b5088bba98bd15809df
4
+ data.tar.gz: d08b4ed06fe2c4e6968aaec315a7d3a2e6f50d15
5
5
  SHA512:
6
- metadata.gz: c4f214533793f0399bdd852ad6373ba333274b5e6eab74ac4d5948189771a799efaddf7dc5e0d271bbdf4b357f9bfe03697d1b92df0be36862499cab646eede4
7
- data.tar.gz: 3c9d2510b2fbe0c52d886d0e1830fe47f4346f1f44fd60653e1c081358e5c41802b7a2a6b6d5ed870237b0d6ee74f62f1b9ed9d88bae3df36ca31f87bf3538d7
6
+ metadata.gz: 4b88512b37e30fafb89304575902be384129e7c36ea3069a5feeafce901822898b1a670ad805e8a9c72636871dadfce4d4adec1fe2eae0d6cde0b6d35bde60bf
7
+ data.tar.gz: a982713a595a9b7f6e8ddde173a1dff9d72b83551c8d7c45bae61e5a6f9f1408526dc8b40e2dbc38fdf4b7aa5bca6809a02e04a557a757f4edfe048444339374
data/.gitignore CHANGED
@@ -3,6 +3,7 @@
3
3
  .bundle
4
4
  .config
5
5
  .yardoc
6
+ .rbx
6
7
  Gemfile.lock
7
8
  InstalledFiles
8
9
  _yardoc
@@ -15,4 +16,6 @@ spec/reports
15
16
  test/tmp
16
17
  test/version_tmp
17
18
  tmp
18
- TODO.md
19
+ TODO.md
20
+ .ruby-gemset
21
+ .ruby-version
data/.travis.yml CHANGED
@@ -1,9 +1,13 @@
1
+ bundler_args: --without dev
1
2
  rvm:
2
3
  - 1.9.3
3
4
  - 2.0.0
4
- - rbx-19mode
5
+ - 2.1.0
6
+ - rbx-2.2.6
5
7
  - jruby-19mode
6
8
 
7
9
  branches:
8
10
  only:
9
- - master
11
+ - master
12
+
13
+ script: bundle exec thor spec
data/Gemfile CHANGED
@@ -3,4 +3,8 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in sequoia.gemspec
4
4
  gemspec
5
5
 
6
- gem 'pry'
6
+ group :dev do
7
+ gem 'pry'
8
+ gem 'pelusa', platforms: :rbx
9
+ gem 'mutant', '~> 0.3.0.rc3', platforms: [:mri_19, :mri_20, :rbx]
10
+ end
data/README.md CHANGED
@@ -34,7 +34,7 @@ tree.configure do
34
34
  end
35
35
  end
36
36
 
37
- instance.configure :production do
37
+ tree.configure :production do
38
38
  timeout 60
39
39
  cache true
40
40
  database do
@@ -42,7 +42,7 @@ instance.configure :production do
42
42
  end
43
43
  end
44
44
 
45
- config = instance.build(:production)
45
+ config = tree.build(:production)
46
46
 
47
47
  config.working_folder #=> '/srv'
48
48
  config.timeout #=> 60
data/Thorfile ADDED
@@ -0,0 +1,43 @@
1
+ $:.unshift File.expand_path("../lib", __FILE__)
2
+
3
+ require 'sequoia/version'
4
+
5
+ begin
6
+ require 'mutant'
7
+ rescue LoadError
8
+ end
9
+
10
+ class Default < Thor
11
+ desc 'spec [TYPE]', 'Run RSpec code examples (integration, unit or all)'
12
+ def spec(type=nil)
13
+ exec "rspec --color spec/#{type}"
14
+ end
15
+
16
+ desc 'coverage [TYPE]', 'Generate code coverage'
17
+ def coverage(type=nil)
18
+ ENV['COVERAGE'] = 'true'
19
+ spec(type)
20
+ end
21
+
22
+ desc 'mutant [NAMESPACE]', 'Run mutation tests for NAMESPACE'
23
+ def mutant(namespace='*')
24
+ Mutant::CLI.run(%W(--include lib --require sequoia ::Sequoia#{namespace} --rspec))
25
+ end
26
+
27
+ desc 'build', "Build sequoia-#{Sequoia::VERSION}.gem into the pkg directory"
28
+ def build
29
+ Bundler::GemHelper.new.build_gem
30
+ end
31
+
32
+ desc 'install', "Build and install sequoia-#{Sequoia::VERSION}.gem into system gems"
33
+ def install
34
+ helper = Bundler::GemHelper.new
35
+ helper.install_gem(helper.build_gem)
36
+ end
37
+
38
+ desc 'release', "Create tag v#{Sequoia::VERSION} and build and push sequoia-#{Sequoia::VERSION}.gem to Rubygems"
39
+ def release
40
+ helper = Bundler::GemHelper.new
41
+ helper.release_gem(helper.build_gem)
42
+ end
43
+ end
@@ -6,13 +6,37 @@ module Sequoia
6
6
  # Yields the block with definitions and then build keys and values
7
7
  # Also works as a chainable builder
8
8
  #
9
- class Builder
10
-
9
+ class Builder < BasicObject
11
10
  ##
12
11
  # Storage for builded attributes
13
12
  #
14
13
  attr_reader :attrs
15
14
 
15
+ ##
16
+ # Returns the class of object
17
+ #
18
+ # This method must always be called with an explicit receiver, as `class` is also a reserved word in Ruby
19
+ #
20
+ def class
21
+ Builder
22
+ end
23
+
24
+ ##
25
+ # Of course we respond to any key name
26
+ #
27
+ def respond_to?(*)
28
+ true
29
+ end
30
+
31
+ ##
32
+ # Represent builder as string
33
+ #
34
+ def to_s
35
+ "#<Sequoia::Builder attrs=#{attrs}>"
36
+ end
37
+ alias :inspect :to_s
38
+ alias :pretty_inspect :to_s
39
+
16
40
  private
17
41
 
18
42
  ##
@@ -25,8 +49,7 @@ module Sequoia
25
49
  #
26
50
  def initialize(attrs=Store.new, &block)
27
51
  @attrs = attrs
28
-
29
- instance_eval(&block) if block_given?
52
+ instance_eval(&block) if ::Kernel.block_given?
30
53
  end
31
54
 
32
55
  ##
@@ -41,18 +64,14 @@ module Sequoia
41
64
  # Yields: Block with nested definitions
42
65
  #
43
66
  def method_missing(method_name, *args, &block)
44
- key = normalize_method_name(method_name)
45
- value = normalize_arguments(args, &block)
46
-
47
- result = attrs[key] ||= (args.length > 0 || block_given? ? value : Store.new)
48
- result.class == Store ? self.class.new(result) : result
49
- end
67
+ key = normalize_method_name(method_name)
50
68
 
51
- ##
52
- # Private: Of course we respond to any key name
53
- #
54
- def respond_to_missing?(*)
55
- true
69
+ if args.length > 0
70
+ attrs[key] = args.length > 1 ? args : args[0]
71
+ else
72
+ attrs[key] ||= Store.new
73
+ self.class.new(attrs[key], &block)
74
+ end
56
75
  end
57
76
 
58
77
  ##
@@ -69,24 +88,5 @@ module Sequoia
69
88
  method_string.to_sym
70
89
  end
71
90
 
72
- ##
73
- # Private: Get value for assignment
74
- #
75
- # Params:
76
- # - args {Array} Array of arguments
77
- #
78
- # Yields: Block with nested definitions
79
- #
80
- # Returns: Result of nested Builder#attrs or first argument from args or
81
- # array of arguments if args.length > 1 or nil
82
- #
83
- def normalize_arguments(args, &block)
84
- if block_given?
85
- self.class.new(&block).attrs
86
- else
87
- args.length > 1 ? args : args[0]
88
- end
89
- end
90
-
91
91
  end
92
92
  end
@@ -17,7 +17,7 @@ module Sequoia
17
17
  # Returns: {Sequoia::Builder} builder instance
18
18
  #
19
19
  def configure(env=:default, &block)
20
- environment = @config_attributes[env.to_sym] ||= Store.new
20
+ environment = config_attributes[env.to_sym] ||= Store.new
21
21
 
22
22
  Builder.new(environment, &block)
23
23
  end
@@ -31,16 +31,18 @@ module Sequoia
31
31
  # Returns: {Sequoia::Entity} builded configuration object
32
32
  #
33
33
  def build(env=nil)
34
- result = @config_attributes[:default]
35
- result.deep_merge(@config_attributes[env.to_sym]) if env
34
+ result = config_attributes[:default]
35
+ result.deep_merge!(config_attributes[env.to_sym]) if env
36
36
  Entity.create(result)
37
37
  end
38
38
 
39
- private
39
+ protected
40
40
 
41
- def initialize(*)
42
- @config_attributes = { default: Store.new }
43
- super
41
+ ##
42
+ # Config environments storage
43
+ #
44
+ def config_attributes
45
+ @config_attributes ||= { default: Store.new }
44
46
  end
45
47
 
46
48
  end
@@ -13,14 +13,18 @@ module Sequoia
13
13
  # Factory: Create new instance of entity
14
14
  #
15
15
  # Returns: {Sequoia::Entity}
16
- def self.create(store)
16
+ def self.create(store=Store.new)
17
17
  keys = store.keys
18
18
 
19
19
  values = store.values.map do |value|
20
20
  value.class == Store ? create(value) : value
21
21
  end
22
22
 
23
- new(*keys).new(*values)
23
+ if keys.any?
24
+ new(*keys).new(*values).freeze
25
+ else
26
+ Object.new.freeze
27
+ end
24
28
  end
25
29
 
26
30
  ##
@@ -51,15 +55,5 @@ module Sequoia
51
55
  PP.pp(to_hash, '')
52
56
  end
53
57
 
54
- private
55
-
56
- ##
57
- # Private: Initialize and freeze the struct class
58
- #
59
- def initialize(*)
60
- super
61
- freeze
62
- end
63
-
64
58
  end
65
59
  end
data/lib/sequoia/store.rb CHANGED
@@ -6,10 +6,10 @@ module Sequoia
6
6
  #
7
7
  class Store < ::Hash
8
8
 
9
- def deep_merge(store)
9
+ def deep_merge!(store)
10
10
  store.each_pair do |key, value|
11
- if self[key].class == Store && value.class == Store
12
- self[key].deep_merge(value)
11
+ if self[key].is_a?(Store)
12
+ self[key].deep_merge!(value)
13
13
  else
14
14
  self[key] = value
15
15
  end
@@ -27,8 +27,7 @@ module Sequoia
27
27
  # - hash {Hash} Hash object to convert
28
28
  #
29
29
  def initialize(hash={})
30
- super(nil)
31
- self.merge!(hash)
30
+ merge!(hash)
32
31
  end
33
32
  end
34
33
  end
@@ -1,3 +1,3 @@
1
1
  module Sequoia
2
- VERSION = '0.0.1'
2
+ VERSION = '0.1.0'
3
3
  end
data/sequoia.gemspec CHANGED
@@ -18,9 +18,10 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
+ spec.required_ruby_version = '>= 1.9.2'
22
+
21
23
  spec.add_development_dependency 'bundler', '~> 1.3'
22
- spec.add_development_dependency 'rake'
24
+ spec.add_development_dependency 'thor'
23
25
  spec.add_development_dependency 'rspec'
24
- spec.add_development_dependency 'reek'
25
26
  spec.add_development_dependency 'simplecov'
26
27
  end
@@ -6,6 +6,7 @@ describe Sequoia::Configurator do
6
6
  let(:config) do
7
7
  instance.configure do
8
8
  working_folder '/srv'
9
+ puts 22
9
10
  timeout 30
10
11
  database do
11
12
  adapter 'postgres'
@@ -41,6 +42,7 @@ describe Sequoia::Configurator do
41
42
  it 'should build config' do
42
43
  expect(result.working_folder).to eql('/srv')
43
44
  expect(result.timeout).to eql(30)
45
+ expect(result.puts).to eql(22)
44
46
  end
45
47
  end
46
48
 
data/spec/spec_helper.rb CHANGED
@@ -14,10 +14,6 @@ require 'sequoia'
14
14
  #
15
15
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
16
16
  RSpec.configure do |config|
17
- config.treat_symbols_as_metadata_keys_with_true_values = true
18
- config.run_all_when_everything_filtered = true
19
- config.filter_run :focus
20
-
21
17
  # Run specs in random order to surface order dependencies. If you find an
22
18
  # order dependency and want to debug it, you can fix the order by providing
23
19
  # the seed, which is printed after each run.
@@ -0,0 +1,84 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sequoia::Builder, '#attrs' do
4
+ let(:subject) { instance.attrs }
5
+
6
+ shared_examples 'builder_attributes' do
7
+ it 'should have values' do
8
+ expect(subject[:working_folder]).to eql('/srv')
9
+ expect(subject[:timeout]).to eql(30)
10
+ end
11
+
12
+ it 'should have namespaces' do
13
+ expect(subject[:database][:name]).to eql('test_db')
14
+ end
15
+
16
+ it 'should have deep namespaces' do
17
+ expect(subject[:database][:creds][:user]).to eql('admin')
18
+ expect(subject[:database][:creds][:pass]).to eql('secret')
19
+ end
20
+
21
+ it 'should handle booleans' do
22
+ expect(subject[:async]).to be_false
23
+ end
24
+
25
+ it 'should store hashes as hashes' do
26
+ expect(subject[:database]).to be_instance_of(Sequoia::Store)
27
+ expect(subject[:creds]).to be_instance_of(Hash)
28
+ end
29
+ end
30
+
31
+ context 'Block-style' do
32
+ let(:instance) do
33
+ described_class.new do
34
+ working_folder '/srv'
35
+ timeout 30
36
+ async false
37
+ creds(user: 'admin', pass: 'secret')
38
+
39
+ database do
40
+ creds do
41
+ user 'admin'
42
+ end
43
+ name 'test_db'
44
+ end
45
+
46
+ database do
47
+ creds do
48
+ pass 'secret'
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ it_behaves_like 'builder_attributes'
55
+ end
56
+
57
+ context 'Object-style' do
58
+ let(:instance) do
59
+ inst = described_class.new
60
+
61
+ inst.working_folder = '/srv'
62
+ inst.timeout = 30
63
+ inst.async = false
64
+ inst.creds = { user: 'admin', pass: 'secret' }
65
+
66
+ inst.database.creds.user = 'admin'
67
+ inst.database.creds.pass = 'secret'
68
+ inst.database.name = 'test_db'
69
+
70
+ inst
71
+ end
72
+
73
+ it_behaves_like 'builder_attributes'
74
+ end
75
+
76
+ context 'Empty' do
77
+ let(:instance) { described_class.new }
78
+
79
+ it "should be an empty store" do
80
+ expect(subject).to eq({})
81
+ end
82
+ end
83
+
84
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sequoia::Builder, '#class' do
4
+ let(:subject) { instance.class }
5
+ let(:instance) { described_class.new }
6
+
7
+ it 'should return class of instance' do
8
+ expect(subject).to eql(described_class)
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sequoia::Builder, '#respond_to?' do
4
+ let(:instance) { described_class.new }
5
+
6
+ it 'should respond to any method' do
7
+ expect(instance).to respond_to(:qqeeellzmls)
8
+ expect(instance.respond_to?(:qqeeellzmls)).to be_true
9
+ end
10
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sequoia::Builder, '#to_s' do
4
+ let(:subject) { instance.to_s }
5
+ let(:instance) { described_class.new }
6
+
7
+ it 'should return string' do
8
+ expect(subject.class).to eql(String)
9
+ end
10
+
11
+ it 'should contain class name' do
12
+ expect(subject).to start_with('#<Sequoia::Builder')
13
+ end
14
+
15
+ it 'should contain attrs hash' do
16
+ expect(subject).to match(/attrs={.*}/)
17
+ end
18
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sequoia::Configurable, '#build' do
4
+ let(:instance) { Class.new.send(:include, Sequoia::Configurable).new }
5
+
6
+ it 'should return object if empty' do
7
+ expect(instance.build).to be_an(Object)
8
+ end
9
+
10
+ it 'should return entity if not empty' do
11
+ instance.configure do
12
+ path '/home'
13
+ end
14
+
15
+ expect(instance.build).to be_a(Sequoia::Entity)
16
+ end
17
+
18
+ it 'should merge envs' do
19
+ instance.configure do
20
+ path '/home'
21
+ end
22
+
23
+ instance.configure :test do
24
+ log_level :info
25
+ end
26
+
27
+ expect(instance.build('test').path).to eq('/home')
28
+ expect(instance.build(:test).log_level).to eq(:info)
29
+ end
30
+ end
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sequoia::Configurable, '#configure' do
4
+ let(:object) {
5
+ Class.new do
6
+ include Sequoia::Configurable
7
+ attr_reader :foo
8
+ private
9
+ def initialize(foo)
10
+ @foo = foo
11
+ end
12
+ end
13
+ }
14
+ let(:instance) { object.new(5) }
15
+ let(:attrs) { instance.instance_variable_get(:@config_attributes) }
16
+
17
+ it 'should not be broken when included' do
18
+ expect { instance.configure }.to_not raise_error
19
+ end
20
+
21
+ it 'should create default environment' do
22
+ instance.configure do
23
+ path '/home'
24
+ end
25
+
26
+ expect(attrs[:default]).to have_key(:path)
27
+ end
28
+
29
+ it 'environment should be a store' do
30
+ instance.configure do
31
+ path '/home'
32
+ end
33
+
34
+ expect(attrs[:default]).to be_instance_of(Sequoia::Store)
35
+ end
36
+
37
+ it 'should create custom environment' do
38
+ instance.configure :development do
39
+ path '/home'
40
+ end
41
+
42
+ expect(attrs[:development]).to have_key(:path)
43
+ end
44
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sequoia::Entity, '.create' do
4
+ let(:subject) { Sequoia::Entity.create(hash) }
5
+ let(:empty_subject) { Sequoia::Entity.create }
6
+
7
+ let(:hash) do
8
+ Sequoia::Store.new({
9
+ working_folder: '/srv',
10
+ database: Sequoia::Store.new(name: 'test_db', user: 'inferno'),
11
+ creds: { user: 'admin', pass: 'secret' }
12
+ })
13
+ end
14
+
15
+ it 'should create empty object if empty' do
16
+ expect(empty_subject).to be_instance_of(Object)
17
+ expect(empty_subject).to be_frozen
18
+ end
19
+
20
+ it 'should be frozen' do
21
+ expect(subject).to be_frozen
22
+ end
23
+
24
+ it 'should keep hashes' do
25
+ expect { subject.creds.user }.to raise_error
26
+ expect(subject.creds[:user]).to eql('admin')
27
+ end
28
+
29
+ context 'as object' do
30
+ it 'should get keys' do
31
+ expect(subject.working_folder).to eql('/srv')
32
+ end
33
+
34
+ it 'should get namespaces' do
35
+ expect(subject.database.name).to eql('test_db')
36
+ end
37
+ end
38
+
39
+ context 'as hash' do
40
+ it 'should get keys' do
41
+ expect(subject[:working_folder]).to eql('/srv')
42
+ end
43
+
44
+ it 'should get namespaces' do
45
+ expect(subject[:database][:name]).to eql('test_db')
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sequoia::Entity, '#pretty_inspect' do
4
+ let(:subject) { instance.pretty_inspect }
5
+ let(:instance) { Sequoia::Entity.create(hash) }
6
+ let(:hash) { Sequoia::Store.new(working_folder: '/srv') }
7
+
8
+ it 'should return string' do
9
+ expect(subject).to be_instance_of(String)
10
+ end
11
+
12
+ it 'should represent hash' do
13
+ expect(subject).to match(/^\{\:?working_folder.*srv/)
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sequoia::Entity, '#to_hash' do
4
+ let(:subject) { instance.to_hash }
5
+ let(:instance) { Sequoia::Entity.create(hash) }
6
+ let(:hash) { Sequoia::Store.new(working_folder: '/srv') }
7
+
8
+ it 'should convert instance to hash' do
9
+ expect(subject).to be_instance_of(Hash)
10
+ expect(subject).to eq({working_folder: '/srv'})
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sequoia::Entity, '#to_s' do
4
+ let(:subject) { instance.to_s }
5
+ let(:instance) { Sequoia::Entity.create(hash) }
6
+ let(:hash) { Sequoia::Store.new(working_folder: '/srv') }
7
+
8
+ it 'should return string' do
9
+ expect(subject).to be_instance_of(String)
10
+ end
11
+
12
+ it 'should represent hash' do
13
+ expect(subject).to match(/^\{\:?working_folder.*srv/)
14
+ end
15
+ end
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sequoia::Store, '#deep_merge!' do
4
+ let(:subject) { instance.deep_merge!(secondary_hash) }
5
+ let(:instance) { described_class.new(start_hash) }
6
+ let(:start_hash) do
7
+ {
8
+ working_folder: '/srv',
9
+ database: { name: 'test_db' },
10
+ creds: Sequoia::Store.new(name: 'admin')
11
+ }
12
+ end
13
+
14
+ context 'empty store' do
15
+ let(:instance) { described_class.new }
16
+ let(:secondary_hash) { Sequoia::Store.new(working_folder: '/srv') }
17
+
18
+ it 'should merge' do
19
+ expect(subject[:working_folder]).to eql('/srv')
20
+ end
21
+ end
22
+
23
+ context 'nested stores' do
24
+ let(:secondary_hash) { Sequoia::Store.new(creds: Sequoia::Store.new(pass: 'secret')) }
25
+
26
+ it 'should merge' do
27
+ expect(subject[:creds][:name]).to eql('admin')
28
+ expect(subject[:creds][:pass]).to eql('secret')
29
+ end
30
+ end
31
+
32
+ context 'nested hashes' do
33
+ let(:secondary_hash) { { database: { user: 'postgres' } } }
34
+
35
+ it 'should rewrite' do
36
+ expect(subject[:database][:user]).to eql('postgres')
37
+ expect(subject[:database][:name]).to be_nil
38
+ end
39
+ end
40
+
41
+ context 'nested hash and store' do
42
+ let(:secondary_hash) { Sequoia::Store.new(database: Sequoia::Store.new(user: 'postgres')) }
43
+
44
+ it 'should rewrite' do
45
+ expect(subject[:database][:user]).to eql('postgres')
46
+ expect(subject[:database][:name]).to be_nil
47
+ end
48
+ end
49
+
50
+ context 'nested store and hash' do
51
+ let(:secondary_hash) { { creds: { pass: 'secret' } } }
52
+
53
+ it 'should merge' do
54
+ expect(subject[:creds][:name]).to eql('admin')
55
+ expect(subject[:creds][:pass]).to eql('secret')
56
+ end
57
+ end
58
+
59
+ context 'simple value' do
60
+ let(:secondary_hash) { { database: 'postgres://localhost/test_db' } }
61
+
62
+ it 'should rewrite' do
63
+ expect(subject[:database]).to eql('postgres://localhost/test_db')
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sequoia::Store, '#[]' do
4
+ let(:instance) { described_class.new(hash) }
5
+ let(:hash) {
6
+ {
7
+ working_folder: '/srv',
8
+ database: { name: 'test_db' }
9
+ }
10
+ }
11
+
12
+ it 'should read keys' do
13
+ expect(instance[:working_folder]).to eql('/srv')
14
+ end
15
+
16
+ it 'should should store nested hashes' do
17
+ expect(instance[:database]).to be_a(Hash)
18
+ end
19
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequoia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey Savchenko
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-04 00:00:00.000000000 Z
12
+ date: 2014-03-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -26,7 +26,7 @@ dependencies:
26
26
  - !ruby/object:Gem::Version
27
27
  version: '1.3'
28
28
  - !ruby/object:Gem::Dependency
29
- name: rake
29
+ name: thor
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - '>='
@@ -53,20 +53,6 @@ dependencies:
53
53
  - - '>='
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
- - !ruby/object:Gem::Dependency
57
- name: reek
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - '>='
61
- - !ruby/object:Gem::Version
62
- version: '0'
63
- type: :development
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
56
  - !ruby/object:Gem::Dependency
71
57
  name: simplecov
72
58
  requirement: !ruby/object:Gem::Requirement
@@ -96,7 +82,7 @@ files:
96
82
  - Gemfile
97
83
  - LICENSE.txt
98
84
  - README.md
99
- - Rakefile
85
+ - Thorfile
100
86
  - lib/sequoia.rb
101
87
  - lib/sequoia/builder.rb
102
88
  - lib/sequoia/configurable.rb
@@ -107,9 +93,18 @@ files:
107
93
  - sequoia.gemspec
108
94
  - spec/integration/configurator_spec.rb
109
95
  - spec/spec_helper.rb
110
- - spec/unit/builder_spec.rb
111
- - spec/unit/entity_spec.rb
112
- - spec/unit/store_spec.rb
96
+ - spec/unit/sequoia/builder/attrs_spec.rb
97
+ - spec/unit/sequoia/builder/class_spec.rb
98
+ - spec/unit/sequoia/builder/respond_to_predicate_spec.rb
99
+ - spec/unit/sequoia/builder/to_s_spec.rb
100
+ - spec/unit/sequoia/configurable/build_spec.rb
101
+ - spec/unit/sequoia/configurable/configure_spec.rb
102
+ - spec/unit/sequoia/entity/class_methods/create_spec.rb
103
+ - spec/unit/sequoia/entity/pretty_inspect_spec.rb
104
+ - spec/unit/sequoia/entity/to_hash_spec.rb
105
+ - spec/unit/sequoia/entity/to_s_spec.rb
106
+ - spec/unit/sequoia/store/deep_merge_bang_spec.rb
107
+ - spec/unit/sequoia/store/element_reader_spec.rb
113
108
  homepage: https://github.com/Ptico/sequoia
114
109
  licenses:
115
110
  - MIT
@@ -122,7 +117,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
122
117
  requirements:
123
118
  - - '>='
124
119
  - !ruby/object:Gem::Version
125
- version: '0'
120
+ version: 1.9.2
126
121
  required_rubygems_version: !ruby/object:Gem::Requirement
127
122
  requirements:
128
123
  - - '>='
@@ -130,13 +125,23 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
125
  version: '0'
131
126
  requirements: []
132
127
  rubyforge_project:
133
- rubygems_version: 2.0.3
128
+ rubygems_version: 2.0.14
134
129
  signing_key:
135
130
  specification_version: 4
136
131
  summary: Gem for building data structures
137
132
  test_files:
138
133
  - spec/integration/configurator_spec.rb
139
134
  - spec/spec_helper.rb
140
- - spec/unit/builder_spec.rb
141
- - spec/unit/entity_spec.rb
142
- - spec/unit/store_spec.rb
135
+ - spec/unit/sequoia/builder/attrs_spec.rb
136
+ - spec/unit/sequoia/builder/class_spec.rb
137
+ - spec/unit/sequoia/builder/respond_to_predicate_spec.rb
138
+ - spec/unit/sequoia/builder/to_s_spec.rb
139
+ - spec/unit/sequoia/configurable/build_spec.rb
140
+ - spec/unit/sequoia/configurable/configure_spec.rb
141
+ - spec/unit/sequoia/entity/class_methods/create_spec.rb
142
+ - spec/unit/sequoia/entity/pretty_inspect_spec.rb
143
+ - spec/unit/sequoia/entity/to_hash_spec.rb
144
+ - spec/unit/sequoia/entity/to_s_spec.rb
145
+ - spec/unit/sequoia/store/deep_merge_bang_spec.rb
146
+ - spec/unit/sequoia/store/element_reader_spec.rb
147
+ has_rdoc:
data/Rakefile DELETED
@@ -1,20 +0,0 @@
1
- require 'bundler/gem_tasks'
2
- require 'rspec/core/rake_task'
3
- require 'reek/rake/task'
4
-
5
- task :default => :spec
6
-
7
- desc 'Test sequoia'
8
- RSpec::Core::RakeTask.new('spec')
9
-
10
- namespace :metrics do
11
- desc 'Generate code coverage'
12
- task :coverage do
13
- ENV['COVERAGE'] = 'true'
14
- Rake::Task['spec'].execute
15
- end
16
-
17
- Reek::Rake::Task.new do |reek|
18
- reek.reek_opts = '--quiet'
19
- end
20
- end
@@ -1,71 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Sequoia::Builder do
4
-
5
- let(:result) { instance.attrs }
6
-
7
- shared_examples 'block_attributes' do
8
- it 'should set values' do
9
- expect(result[:working_folder]).to eql('/srv')
10
- expect(result[:timeout]).to eql(30)
11
- end
12
-
13
- it 'should set namespaces' do
14
- expect(result[:database][:name]).to eql('test_db')
15
- end
16
-
17
- it 'should manage deep namespaces' do
18
- expect(result[:database][:creds][:user]).to eql('admin')
19
- expect(result[:database][:creds][:pass]).to eql('secret')
20
- end
21
-
22
- it 'should handle booleans' do
23
- expect(result[:async]).to be_false
24
- end
25
-
26
- it 'should store hashes as hashes' do
27
- expect(result[:database].class).to eql(Sequoia::Store)
28
- expect(result[:creds].class).to eql(Hash)
29
- end
30
- end
31
-
32
- describe 'Block-style' do
33
- let(:instance) do
34
- described_class.new do
35
- working_folder '/srv'
36
- timeout 30
37
- async false
38
- creds(user: 'admin', pass: 'secret')
39
-
40
- database do
41
- creds do
42
- user 'admin'
43
- pass 'secret'
44
- end
45
- name 'test_db'
46
- end
47
- end
48
- end
49
-
50
- it_behaves_like 'block_attributes'
51
- end
52
-
53
- describe 'Object-style' do
54
- let(:instance) do
55
- inst = described_class.new
56
-
57
- inst.working_folder = '/srv'
58
- inst.timeout = 30
59
- inst.async = false
60
- inst.creds = { user: 'admin', pass: 'secret' }
61
-
62
- inst.database.creds.user = 'admin'
63
- inst.database.creds.pass = 'secret'
64
- inst.database.name = 'test_db'
65
-
66
- inst
67
- end
68
-
69
- it_behaves_like 'block_attributes'
70
- end
71
- end
@@ -1,46 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Sequoia::Entity do
4
- let(:instance) { Sequoia::Entity.create(hash) }
5
-
6
- let(:hash) do
7
- Sequoia::Store.new({
8
- working_folder: '/srv',
9
- database: Sequoia::Store.new(name: 'test_db', user: 'inferno'),
10
- creds: { user: 'admin', pass: 'secret' }
11
- })
12
- end
13
-
14
- it 'should be frozen' do
15
- expect(instance).to be_frozen
16
- end
17
-
18
- it 'should respond to keys' do
19
- expect(instance).to respond_to(:working_folder)
20
- end
21
-
22
- it 'should keep hashes' do
23
- expect { instance.creds.user }.to raise_error
24
- expect(instance.creds[:user]).to eql('admin')
25
- end
26
-
27
- context 'as object' do
28
- it 'should get keys' do
29
- expect(instance.working_folder).to eql('/srv')
30
- end
31
-
32
- it 'should get namespaces' do
33
- expect(instance.database.name).to eql('test_db')
34
- end
35
- end
36
-
37
- context 'as hash' do
38
- it 'should get keys as hash keys' do
39
- expect(instance[:working_folder]).to eql('/srv')
40
- end
41
-
42
- it 'should get namespaces' do
43
- expect(instance[:database][:name]).to eql('test_db')
44
- end
45
- end
46
- end
@@ -1,26 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Sequoia::Store do
4
- let(:instance) { described_class.new(hash) }
5
- let(:hash) do
6
- {
7
- working_folder: '/srv',
8
- database: { name: 'test_db' },
9
- creds: Sequoia::Store.new(name: 'admin')
10
- }
11
- end
12
-
13
- it 'should create instance from hash' do
14
- expect(instance[:working_folder]).to eql('/srv')
15
- end
16
-
17
- it 'should set nested hashes' do
18
- expect(instance[:database]).to be_a(Hash)
19
- end
20
-
21
- it 'should merge nested stores' do
22
- instance.deep_merge(Sequoia::Store.new(creds: Sequoia::Store.new(pass: 'secret')))
23
- expect(instance[:creds][:name]).to eql('admin')
24
- expect(instance[:creds][:pass]).to eql('secret')
25
- end
26
- end