topping 0.0.1 → 0.0.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
  SHA1:
3
- metadata.gz: d56837f3a227355acadb988324896023b04bb271
4
- data.tar.gz: 6d78c71af47e6453e3ee5e0edf58ff6b97f5da2b
3
+ metadata.gz: a1147486fdb5ceb1e12f992681b5d6e86745d332
4
+ data.tar.gz: e622771370993c6881fd67b8b94a72685617cd54
5
5
  SHA512:
6
- metadata.gz: fcf70b23f49fdba1509b6eb5a988d942a8ba8ffbc00956ef40a195a641b01d70766f8a67f929e9a35034907b8e3fa904de6c2f8e14718bdd244ade49b87061ec
7
- data.tar.gz: 10533fe300383d34b1c37040d01ebb486a8d65654da5dac4466fbf7d6f5cbec17babe5eacd28fbe18fa19a6c6e3bf69ab32f7a2cc8bdaf62e80974327c07e8ca
6
+ metadata.gz: d5c089fa4a81fdfeee5e6dbef54c7006669c96941c999ee28e856a7002882b1db9275983501ac22983a3fae4761d610d417af19452a57dd79d31acfdbd37bb10
7
+ data.tar.gz: 342d2a23a9bdcb56c1a5d8ab092676616d7d69a7e6c2b9cfd823366e3ae138b007fb15be9b3002471185b381a2a3878039678bf9bce899cc4372d3916515db34
data/.rubocop.yml CHANGED
@@ -1,6 +1,6 @@
1
1
 
2
2
  AllCops:
3
- TargetRubyVersion: 2.3.4
3
+ TargetRubyVersion: 2.3
4
4
  Exclude:
5
5
  - 'vendor/**/*'
6
6
  - 'spec/fixtures/**/*'
data/README.md CHANGED
@@ -1,5 +1,4 @@
1
- # Topping
2
-
1
+ # Topping [![Gem Version](https://badge.fury.io/rb/topping.svg)](https://badge.fury.io/rb/topping) [![Build Status](https://travis-ci.org/rike422/topping.svg?branch=master)](https://travis-ci.org/rike422/topping) [![Code Climate](https://codeclimate.com/github/rike422/topping/badges/gpa.svg)](https://codeclimate.com/github/rike422/topping) [![Coverage Status](https://coveralls.io/repos/github/rike422/topping/badge.svg?branch=master)](https://coveralls.io/github/rike422/topping?branch=master)
3
2
  Configuration library for like a [Lita](https://github.com/litaio/lita) style application
4
3
 
5
4
  ## Installation
@@ -17,8 +16,19 @@ gem 'topping'
17
16
  require 'topping'
18
17
 
19
18
  module MockApplication
20
- class Application
21
- include Topping::Configurable::HQ
19
+ class BaseApplication
20
+ extend Topping::Configurable::HQ
21
+ config :store, default: :memory
22
+ config :name, default: 'myapp'
23
+ config :dir, type: String
24
+ end
25
+ end
26
+
27
+ module MockApplication
28
+ class Application < MockApplication::BaseApplication
29
+ config.store = :redis
30
+ config.name = 'topping_app'
31
+ config.dir = 'work'
22
32
  end
23
33
  end
24
34
 
@@ -40,7 +50,7 @@ module MockApplication
40
50
  end
41
51
  end
42
52
 
43
- MockApplication::Application.build
53
+ Topping.build
44
54
 
45
55
  MockApplication::Application.configure do |c|
46
56
  c.features.net.host = 'github.com'
@@ -51,13 +61,19 @@ MockApplication::Application.configure do |c|
51
61
  end
52
62
 
53
63
  net = MockApplication::Features::Net.new
54
- user = MockApplication::Features::User.new
64
+ user = MockApplication::Features::User.new
65
+
66
+ p MockApplication::Application.config.name
67
+ # => 'topping_app'
68
+ p MockApplication::Application.config.store
69
+ # => :redis
70
+ p MockApplication::Application.config.dir
71
+ # => 'work'
55
72
 
56
73
  p net.config.host
57
74
  # => 'github.com'
58
75
  p net.config.port
59
76
  # => 89
60
-
61
77
  p user.config.username
62
78
  # => 'akira takahashi'
63
79
  p user.config.password
@@ -68,11 +84,20 @@ p user.config.password
68
84
  or
69
85
 
70
86
  ```ruby
87
+
71
88
  require 'topping'
72
89
 
73
90
  module MockApplication
74
- class Application
75
- include Topping::Configurable::HQ
91
+ class BaseApplication
92
+ extend Topping::Configurable::HQ
93
+ config :store, default: :memory
94
+ config :name, default: 'myapp'
95
+ config :dir, type: String
96
+ end
97
+ end
98
+
99
+ module MockApplication
100
+ class Application < MockApplication::BaseApplication
76
101
  end
77
102
  end
78
103
 
@@ -94,7 +119,7 @@ module MockApplication
94
119
  end
95
120
  end
96
121
 
97
- MockApplication::Application.build
122
+ Topping.build
98
123
 
99
124
  MockApplication::Features::Net.configure do |c|
100
125
  c.host = 'github.com'
@@ -106,6 +131,15 @@ MockApplication::Features::User.configure do |c|
106
131
  c.password = 'password'
107
132
  end
108
133
 
134
+ p MockApplication::Application.config.name
135
+ # => 'topping_app'
136
+
137
+ p MockApplication::Application.config.store
138
+ # => :redis
139
+
140
+ p MockApplication::Application.config.dir
141
+ # => 'work'
142
+
109
143
  p MockApplication::Application.config.features.net.host
110
144
  # => 'github.com'
111
145
  p MockApplication::Application.config.features.net.port
@@ -25,41 +25,8 @@ module Topping
25
25
  end
26
26
 
27
27
  module ChildClassMethods
28
- # A block to be executed after configuration is finalized.
29
- # @return [#call, nil] The block.
30
- # @since 0.0.1
31
- # @api private
32
- attr_accessor :after_config_block
28
+ include Topping::Configurable
33
29
 
34
- # The plugins's {ConfigurationBuilder} object.
35
- # @return [ConfigurationBuilder] The configuration builder.
36
- # @since 0.0.1
37
- # @api public
38
- attr_accessor :configuration_builder
39
- # Registers a block to be executed after configuration is finalized.
40
- # @yieldparam config [Configuration] The handler's configuration object.
41
- # @return [void]
42
- # @since 0.0.1
43
- def after_config(&block)
44
- self.after_config_block = block
45
- end
46
-
47
- # Sets a configuration attribute on the plugin.
48
- # @return [void]
49
- # @since 0.0.1
50
- # @see ConfigurationBuilder#config
51
- def config(*args, **kwargs, &block)
52
- if block
53
- configuration_builder.config(*args, **kwargs, &block)
54
- else
55
- configuration_builder.config(*args, **kwargs)
56
- end
57
- end
58
-
59
- # Yields the configuration object
60
- # @yieldparam [Configuration] config The configuration object.
61
- # @since 0.0.1
62
- # @see ConfigurationBuilder#config
63
30
  def configure(&block)
64
31
  configuration_builder.configure(&block)
65
32
  end
@@ -11,29 +11,29 @@ module Topping
11
11
  # @api private
12
12
  attr_accessor :name_space
13
13
 
14
- # Yields the configuration object
15
- # @yieldparam [Configuration] config The configuration object.
14
+ # Sets a configuration attribute on the application.
15
+ # @return [void]
16
16
  # @since 0.0.1
17
17
  # @see ConfigurationBuilder#config
18
- def configure
19
- yield root.configuration.send(name_space.first.to_sym)
18
+ def config(*args, **kwargs, &block)
19
+ if block
20
+ root.config(*args, **kwargs, &block)
21
+ else
22
+ root.config(*args, **kwargs)
23
+ end
24
+ build
20
25
  end
21
26
 
22
- # User configuration store
23
- # @return [Configuration] The root attribute.
27
+ # Sets a configuration attribute on the application.
28
+ # @return [void]
24
29
  # @since 0.0.1
25
- def config
26
- root.configuration.send(name_space.first.to_sym)
27
- end
28
-
29
30
  def build
30
- @root.build
31
+ root.build
31
32
  end
32
33
 
33
34
  # @api private
34
35
  def mapping(klass)
35
- keys = Topping::Configurable::HQ.undersocre_namespace(klass)
36
- keys.delete(name_space)
36
+ keys = Topping.underscore_namespace(klass) - name_space
37
37
  klass_name = keys.pop
38
38
 
39
39
  parent = keys.reduce(root) do |memo, key|
@@ -44,16 +44,17 @@ module Topping
44
44
  parent.combine(klass_name, klass.configuration_builder)
45
45
  end
46
46
 
47
+ def inherited(klass)
48
+ klass.extend(Topping::Configurable::HQ::ChildClassMethods)
49
+ klass.root = root
50
+ end
51
+
47
52
  class << self
48
53
  # The top-level Configurable Class
49
54
  # @api private
50
55
  # @return [Configuration] The root attribute.
51
56
  attr_accessor :hq_class
52
57
 
53
- def included(klass)
54
- klass.extend(Topping::Configurable::HQ)
55
- end
56
-
57
58
  def mapping(klass)
58
59
  hq_class.mapping(klass)
59
60
  end
@@ -61,23 +62,31 @@ module Topping
61
62
  def extended(klass)
62
63
  super
63
64
  self.hq_class = klass
64
- root_config = ConfigurationBuilder.new
65
- klass.root = root_config
66
- klass.name_space = Topping::Configurable::HQ.undersocre_namespace(klass)
65
+ klass.name_space = Topping.underscore_namespace(klass)
66
+
67
+ config = Topping.root.config(klass.name_space.first)
68
+ klass.root = config
67
69
  end
70
+ end
68
71
 
69
- def undersocre_namespace(klass)
70
- klass.name.split('::').map do |key|
71
- Topping::Configurable::HQ.underscore(key)
72
- end
72
+ module ChildClassMethods
73
+ # The top-level {ConfigurationBuilder} attribute.
74
+ # @return [Configuration] The root attribute.
75
+ attr_accessor :root
76
+
77
+ # Yields the configuration object
78
+ # @yieldparam [Configuration] config The configuration object.
79
+ # @since 0.0.1
80
+ # @see ConfigurationBuilder#config
81
+ def configure
82
+ yield root.configuration
73
83
  end
74
84
 
75
- def underscore(str)
76
- str.gsub(/::/, '/').
77
- gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
78
- gsub(/([a-z\d])([A-Z])/, '\1_\2').
79
- tr('-', '_').
80
- downcase
85
+ # User configuration store
86
+ # @return [Configuration] The root attribute.
87
+ # @since 0.0.1
88
+ def config
89
+ root.configuration
81
90
  end
82
91
  end
83
92
  end
@@ -59,6 +59,12 @@ module Topping
59
59
  @name = :root
60
60
  end
61
61
 
62
+ # Merges two configuration builders by making one an attribute on the other.
63
+ # @yield The configuration object
64
+ def configure
65
+ yield configuration
66
+ end
67
+
62
68
  # Builds a {Configuration} object from the attributes defined on the builder.
63
69
  # @param object [Configuration] The empty configuration object that will be extended to
64
70
  # create the final form.
@@ -93,10 +99,6 @@ module Topping
93
99
  children << attribute
94
100
  end
95
101
 
96
- def configure
97
- yield configuration
98
- end
99
-
100
102
  # rubocop:disable Metrics1/ParameterLists
101
103
  # Declares a configuration attribute.
102
104
  # @param name [String, Symbol] The attribute's name.
@@ -1,3 +1,3 @@
1
1
  module Topping
2
- VERSION = '0.0.1'.freeze
2
+ VERSION = '0.0.2'.freeze
3
3
  end
data/lib/topping.rb CHANGED
@@ -1,9 +1,35 @@
1
1
  require 'topping/version'
2
+ require 'topping/configuration_builder'
3
+ require 'topping/errors'
2
4
 
3
5
  module Topping
4
6
  # Your code goes here...
7
+ class << self
8
+ # rubocop:disable Style/ClassVars
9
+ @@root = ConfigurationBuilder.new
10
+
11
+ def root
12
+ @@root
13
+ end
14
+
15
+ def build
16
+ root.build
17
+ end
18
+
19
+ def underscore_namespace(klass)
20
+ klass.name.split('::').map do |key|
21
+ Topping.underscore(key)
22
+ end
23
+ end
24
+
25
+ def underscore(str)
26
+ str.gsub(/::/, '/').
27
+ gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
28
+ gsub(/([a-z\d])([A-Z])/, '\1_\2').
29
+ tr('-', '_').
30
+ downcase
31
+ end
32
+ end
5
33
  end
6
34
 
7
35
  require 'topping/configurable'
8
- require 'topping/configuration_builder'
9
- require 'topping/errors'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: topping
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Akira Takahashi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-07-18 00:00:00.000000000 Z
11
+ date: 2017-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler