brief 1.3.0 → 1.3.1

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: 4b51f1b01a40cf21a7cbe99d0c90bf6275ccacb3
4
- data.tar.gz: df60ebe9cb374863ecd6b3c7df5f066c08e32910
3
+ metadata.gz: f76fe6d3f07ffe657ecf1457f3b3895a882b5e7c
4
+ data.tar.gz: 7721891fd080e174065958f0112757506c31fe1c
5
5
  SHA512:
6
- metadata.gz: cef0b7d00b3c7fd405f6bcc3fce826078eb9889d18993e826844e5bfa7ed9caf26933f35fb243703eabc1958a16d398dca723682d40055d9b29e971a3e3a2486
7
- data.tar.gz: 6aeb9e3cb3f3dd1bdc7ca24d4a956bd18d24ffe0bd5012bd6ad275df99d4f977dc34867b89ff420cc1d116e427859f8a01c1cc5f69c9ea2dbce6dfe8439b4c31
6
+ metadata.gz: 64c0b59e9917dec20b4affbe230e358418af652b47b16a8ca56f5789c2b44463291883e08ca60c9ff6db12f05f7aad24c84f4063764ea7c5d79ba99efb415eaf
7
+ data.tar.gz: 677548043e04af7deddf8a30211b939101265587620a280c5987351c8728311091c41274c1203419029013f670a42b73b646fa2e2ed454953e9299a48e4f3891
data/lib/brief/dsl.rb CHANGED
@@ -7,9 +7,28 @@ module Brief
7
7
  end
8
8
 
9
9
  def define(*args, &block)
10
- definition = Brief::Model::Definition.new(args.first, args.extract_options!)
11
- definition.instance_eval(&block) if block_given?
12
- definition.validate!
10
+ options = args.dup.extract_options!
11
+ name = args.first
12
+ type_alias = options.fetch(:type_alias) { name.downcase.parameterize.gsub(/-/, '_') }
13
+
14
+ namespace = Brief.configuration.model_namespace || Brief::Model
15
+
16
+ klass = namespace.const_get(type_alias.camelize) rescue nil
17
+
18
+ if klass
19
+ # raise class already defined
20
+ end
21
+
22
+ klass ||= namespace.const_set(type_alias.camelize, Class.new).tap do |k|
23
+ k.send(:include, Brief::Model)
24
+ k.definition ||= Brief::Model::Definition.new(args.first, args.extract_options!)
25
+ k.name ||= name
26
+ k.type_alias ||= type_alias
27
+ Brief::Model.classes << k
28
+ end
29
+
30
+ klass.definition.instance_eval(&block) if block_given?
31
+ klass.definition.validate!
13
32
  end
14
33
 
15
34
  # defines a method on the model instance named after the identifier
@@ -6,6 +6,7 @@ module Brief
6
6
  :content_schema,
7
7
  :options,
8
8
  :defined_helpers,
9
+ :defined_actions,
9
10
  :section_mappings,
10
11
  :template_body,
11
12
  :example_body
@@ -25,20 +26,7 @@ module Brief
25
26
  end
26
27
 
27
28
  def validate!
28
- definition = self
29
-
30
29
  if valid?
31
- create_model_class.tap do |k|
32
- k.send(:include, Brief::Model)
33
-
34
- k.definition ||= definition
35
-
36
- k.name ||= name
37
- k.type_alias ||= type_alias
38
-
39
- Brief::Model.classes << k
40
- end
41
-
42
30
  apply_config
43
31
  end
44
32
  end
@@ -56,16 +44,13 @@ module Brief
56
44
  end
57
45
 
58
46
  # defined helpers adds an anonymous module include
59
- Array(defined_helpers).each { |mod| model_class.send(:include, mod) }
47
+ Array(self.defined_helpers).each { |mod| model_class.send(:include, mod) }
60
48
 
61
- model_class.defined_actions += Array(defined_actions)
62
49
  true
63
50
  end
64
51
 
65
- def create_model_class
66
- unless (model_namespace.const_get(type_alias.camelize) rescue nil)
67
- model_namespace.const_set(type_alias.camelize, Class.new)
68
- end
52
+ def defined_helper_methods
53
+ defined_helpers.map(&:instance_methods).flatten
69
54
  end
70
55
 
71
56
  def model_class
@@ -103,24 +88,27 @@ module Brief
103
88
  end
104
89
 
105
90
  def has_actions?
106
- !@defined_actions.empty?
91
+ self.defined_actions.empty?
107
92
  end
108
93
 
109
94
  def actions(&block)
110
- helpers(&block)
111
- end
112
-
113
- def defined_actions
114
- Array(defined_helpers).map(&:instance_methods).flatten
95
+ self.defined_actions ||= []
96
+ helpers(true, &block)
115
97
  end
116
98
 
117
- def helpers(&block)
99
+ def helpers(include_in_command_list=false, &block)
118
100
  self.defined_helpers ||= []
119
101
 
120
102
  if block
121
103
  mod = Module.new
122
104
  mod.module_eval(&block)
123
105
 
106
+ if include_in_command_list
107
+ self.defined_actions ||= []
108
+ self.defined_actions += mod.instance_methods
109
+ self.defined_actions.uniq!
110
+ end
111
+
124
112
  self.defined_helpers << mod
125
113
  end
126
114
  end
data/lib/brief/model.rb CHANGED
@@ -13,10 +13,9 @@ module Brief
13
13
  include AccessorMethods
14
14
  include Persistence
15
15
 
16
- class_attribute :models, :after_initialization_hooks, :defined_actions
16
+ class_attribute :models, :after_initialization_hooks
17
17
 
18
18
  self.models = Array(models).to_set
19
- self.defined_actions = Array(defined_actions).to_set
20
19
 
21
20
  class << self
22
21
  include Enumerable
@@ -94,6 +93,10 @@ module Brief
94
93
  definition.has_actions?
95
94
  end
96
95
 
96
+ def defined_actions
97
+ definition.defined_actions ||= []
98
+ end
99
+
97
100
  def finalize
98
101
  klass = self
99
102
 
@@ -182,6 +185,8 @@ module Brief
182
185
  if %w(meta content template example actions helpers).include?(meth.to_s)
183
186
  definition.send(meth, *args, &block)
184
187
  finalize
188
+ elsif %w(defined_helper_methods defined_actions).include?(meth.to_s)
189
+ definition.send(meth)
185
190
  elsif meth.to_s.match(/^on_(.*)_change$/)
186
191
  create_change_handler(Regexp.last_match[1], *args, &block)
187
192
  else
data/lib/brief/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Brief
2
- VERSION = '1.3.0'
2
+ VERSION = '1.3.1'
3
3
  end
@@ -7,4 +7,13 @@ describe "The Configuration DSL" do
7
7
  it "can create methods on our models" do
8
8
  expect(briefcase.user_stories.first.defined_helper_method).to eq(true)
9
9
  end
10
+
11
+ it "treats actions as available commands" do
12
+ expect(Brief::Epic.defined_actions).to include(:custom_action)
13
+ end
14
+
15
+ it "doesnt treat helpers as available commands" do
16
+ expect(Brief::Epic.defined_helper_methods).to include(:user_stories)
17
+ expect(Brief::Epic.defined_actions).not_to include(:user_stories)
18
+ end
10
19
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brief
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Soeder