usable 3.2.0 → 3.3.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 +4 -4
- data/CHANGELOG.md +10 -0
- data/bin/console +2 -2
- data/lib/usable/config.rb +10 -2
- data/lib/usable/mod_extender.rb +1 -1
- data/lib/usable/struct.rb +24 -0
- data/lib/usable/version.rb +1 -1
- data/lib/usable.rb +8 -9
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 37d7979f36f818a019b5e938f9271a09021d8740
|
4
|
+
data.tar.gz: 52f7607ba637d7e1e50c2423797c0680c390af47
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: be661c7880726a1fd3235c88c6ac27218f5ed88dad72088ee72da40493ba54208e71743c8951c424095936249a09c2c8db329f262e781be683088d6a4fa0d7bf
|
7
|
+
data.tar.gz: d074eea1d75951eaf494de6680a94d2cea4f721324570ef50a39c147276fedf85adac77ca5c464cc9d46a1e99a6a6a4d6281e992573196b8f2536affcdde4f6d
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
3.3.0 (12/4/2016)
|
2
|
+
=================
|
3
|
+
|
4
|
+
* FIX - `Usable::ModExtender` doesn't require the target to be "usable"
|
5
|
+
* NEW - `Usable::Struct(a: :b)` creates value classes with defaults (optional `require 'usable/struct'`)
|
6
|
+
* NEW - `usables.merge` converts usables to a hash and merges w/ the other
|
7
|
+
* NEW - Usable::Config#initialize takes a hash to set the initial attributes
|
8
|
+
* NEW - Usable politely defines `.config(&block)`
|
9
|
+
* FIX - `usables.freeze` to also freeze `@spec` so errors are raised when modifying
|
10
|
+
|
1
11
|
3.2 (12/1/2016)
|
2
12
|
===============
|
3
13
|
|
data/bin/console
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
require "bundler/setup"
|
4
4
|
require "usable"
|
5
|
+
require "usable/struct"
|
6
|
+
require "irb"
|
5
7
|
|
6
8
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
9
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -76,6 +78,4 @@ end
|
|
76
78
|
|
77
79
|
Model.usable PersistenceOverride, method: 'prepend'
|
78
80
|
|
79
|
-
require "irb"
|
80
|
-
|
81
81
|
IRB.start
|
data/lib/usable/config.rb
CHANGED
@@ -8,9 +8,10 @@ module Usable
|
|
8
8
|
include ConfigRegister
|
9
9
|
include ConfigMulti
|
10
10
|
|
11
|
-
def initialize
|
12
|
-
@spec = OpenStruct.new
|
11
|
+
def initialize(attributes = {})
|
12
|
+
@spec = OpenStruct.new(attributes)
|
13
13
|
@lazy_loads = Set.new
|
14
|
+
# @attributes = Set.new attributes.keys.map(&:to_s)
|
14
15
|
end
|
15
16
|
|
16
17
|
def spec
|
@@ -36,12 +37,18 @@ module Usable
|
|
36
37
|
|
37
38
|
alias to_hash to_h
|
38
39
|
|
40
|
+
def merge(other)
|
41
|
+
to_h.merge(other)
|
42
|
+
end
|
43
|
+
|
39
44
|
def method_missing(key, *args, &block)
|
40
45
|
if block
|
41
46
|
@lazy_loads << key
|
47
|
+
# @attributes << key.to_s
|
42
48
|
@spec.define_singleton_method(key) { yield }
|
43
49
|
else
|
44
50
|
key = key.to_s.tr('=', '')
|
51
|
+
# @attributes << key
|
45
52
|
if args.empty?
|
46
53
|
value = @spec[key] ||= call_spec_method(key)
|
47
54
|
define_singleton_method(key) { @spec[key] }
|
@@ -60,6 +67,7 @@ module Usable
|
|
60
67
|
|
61
68
|
def freeze
|
62
69
|
to_h.each { |key, value| define_singleton_method(key) { value } }
|
70
|
+
@spec.freeze
|
63
71
|
super
|
64
72
|
end
|
65
73
|
|
data/lib/usable/mod_extender.rb
CHANGED
@@ -26,7 +26,7 @@ module Usable
|
|
26
26
|
target.send :remove_const, const_name if target.const_defined? const_name, false
|
27
27
|
target.const_set const_name, copy
|
28
28
|
end
|
29
|
-
target.usables.add_module copy
|
29
|
+
target.usables.add_module copy if target.respond_to?(:usables)
|
30
30
|
target.send options[:method], copy
|
31
31
|
end
|
32
32
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Usable
|
2
|
+
def self.Struct(attributes = {})
|
3
|
+
Class.new do
|
4
|
+
extend Usable
|
5
|
+
|
6
|
+
self.usables = Usable::Config.new(attributes)
|
7
|
+
|
8
|
+
define_singleton_method(:inherited) do |child|
|
9
|
+
child.usables = usables.clone
|
10
|
+
end
|
11
|
+
|
12
|
+
attributes.keys.each do |key|
|
13
|
+
define_method(key) { @attrs[key] }
|
14
|
+
define_method("#{key}=") { |new_val| @attrs[key] = new_val }
|
15
|
+
end
|
16
|
+
|
17
|
+
attr_accessor :attrs
|
18
|
+
|
19
|
+
def initialize(attrs = {})
|
20
|
+
@attrs = usables.merge(attrs)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/usable/version.rb
CHANGED
data/lib/usable.rb
CHANGED
@@ -6,22 +6,21 @@ require 'usable/mod_extender'
|
|
6
6
|
require 'usable/config'
|
7
7
|
|
8
8
|
module Usable
|
9
|
-
|
10
9
|
def self.extended(base)
|
11
|
-
base.class_eval do
|
12
|
-
def usable_method(method_name)
|
13
|
-
self.class.usable_method(self, method_name)
|
14
|
-
end
|
15
|
-
end
|
16
10
|
if base.is_a? Class
|
17
11
|
# Define an instance level version of +usables+
|
18
12
|
base.class_eval do
|
19
13
|
def usables
|
20
14
|
self.class.usables
|
21
15
|
end
|
16
|
+
|
17
|
+
def usable_method(method_name)
|
18
|
+
self.class.usable_method(self, method_name)
|
19
|
+
end
|
22
20
|
end
|
23
|
-
|
24
|
-
|
21
|
+
end
|
22
|
+
|
23
|
+
unless base.respond_to?(:config)
|
25
24
|
base.instance_eval do
|
26
25
|
def config(&block)
|
27
26
|
if block
|
@@ -29,7 +28,7 @@ module Usable
|
|
29
28
|
else
|
30
29
|
usables
|
31
30
|
end
|
32
|
-
end
|
31
|
+
end
|
33
32
|
end
|
34
33
|
end
|
35
34
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: usable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Buckley
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-12-
|
11
|
+
date: 2016-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- lib/usable/config_multi.rb
|
83
83
|
- lib/usable/config_register.rb
|
84
84
|
- lib/usable/mod_extender.rb
|
85
|
+
- lib/usable/struct.rb
|
85
86
|
- lib/usable/version.rb
|
86
87
|
- usable.gemspec
|
87
88
|
homepage: https://github.com/ridiculous/usable
|