cog 0.3.2 → 0.3.3
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 +7 -0
- data/built_in/templates/cog/c++/feature.cpp.erb +5 -1
- data/built_in/templates/cog/c++/feature.h.erb +2 -1
- data/built_in/templates/cog/c++/seed.h.erb +2 -0
- data/lib/cog/dsl/feature_dsl.rb +1 -1
- data/lib/cog/dsl/seed_dsl.rb +26 -0
- data/lib/cog/language.rb +26 -0
- data/lib/cog/native_extensions/string.rb +4 -1
- data/lib/cog/primitive.rb +8 -0
- data/lib/cog/seed/feature.rb +25 -2
- data/lib/cog/spec_helpers/runner.rb +19 -8
- data/lib/cog/version.rb +1 -1
- metadata +118 -138
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e1f8ad2d26be0b178e872bf2bb7f4b19e5500c35
|
4
|
+
data.tar.gz: 88a8343d3f76b4c2f26c44d77a2b643e760a5973
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a20bef1a00a8a084a0fc3274f59ecd4a7e8cb9cceb58ea4a3a23f27533e508b03fb8449e541c95bea886339eefd5aba097dc82934946c93c1ea3509836d83e6c
|
7
|
+
data.tar.gz: 564cc0f972a33830b20223727e733456ba7fb4ec3ec4836faecbf77b0c8ae734b564f4c5718738b1beb7317ea24cb36bed9e43b7a786d2ef27d4569ca67b695b
|
@@ -1,7 +1,11 @@
|
|
1
1
|
<% unless abstract? %>
|
2
2
|
<%= return_type.to_prim %> <%= seed.name %>::<%= name %>(<%= params.collect(&:stamp_decl).join ', ' %>)
|
3
3
|
{
|
4
|
-
// keep: <%= keep_name %>
|
4
|
+
// keep: <%= keep_name %> {
|
5
|
+
<% if returns_a_value? %>
|
6
|
+
return <%= return_type.default_lit %>;
|
7
|
+
<% end %>
|
8
|
+
// keep: }
|
5
9
|
}
|
6
10
|
|
7
11
|
<% end %>
|
@@ -1,7 +1,8 @@
|
|
1
|
+
<%= access %>:
|
1
2
|
/**
|
2
3
|
<%= desc %>
|
3
4
|
<% params.each do |p| %>
|
4
5
|
@param <%= p.name %> <%= p.desc %>
|
5
6
|
<% end %>
|
6
7
|
*/
|
7
|
-
|
8
|
+
<% if virtual? %>virtual <% end %><%= return_type.to_prim %> <%= name %>(<%= params.collect(&:stamp_decl).join ', ' %>)<% if abstract? %> = 0<% end %>;
|
data/lib/cog/dsl/feature_dsl.rb
CHANGED
data/lib/cog/dsl/seed_dsl.rb
CHANGED
@@ -29,8 +29,34 @@ module Cog
|
|
29
29
|
feature :destructor, &block
|
30
30
|
end
|
31
31
|
|
32
|
+
# @api_developer
|
33
|
+
def respond_to?(meth)
|
34
|
+
meth.to_s.end_with?('_feature') || super(meth)
|
35
|
+
end
|
36
|
+
|
37
|
+
# @api developer
|
38
|
+
def method_missing(meth, *args, &block)
|
39
|
+
meth = meth.to_s
|
40
|
+
if meth.end_with? '_feature'
|
41
|
+
opt = args.last.is_a?(Hash) ? args.pop : {}
|
42
|
+
if /(?:\b|_)(public|protected|private)(?:\b|_)/ =~ meth
|
43
|
+
opt[:access] = $1.to_sym
|
44
|
+
end
|
45
|
+
if /(?:\b|_)(abstract|virtual)(?:\b|_)/ =~ meth
|
46
|
+
opt[$1.to_sym] = true
|
47
|
+
end
|
48
|
+
args << opt
|
49
|
+
feature(*args, &block)
|
50
|
+
else
|
51
|
+
super(meth, *args, &block)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
32
55
|
# Define a new feature for this seed
|
33
56
|
# @param name [String] name of the feature
|
57
|
+
# @option opt [Symbol] :access (:private) one of `:public`, `:protected`, or `private`
|
58
|
+
# @option opt [Boolean] :abstract (false) is this an abstract feature? If so, no implementation will be generated
|
59
|
+
# @option opt [Boolean] :virtual (false) is this a virtual feature? Virtual features can be replaced in subclasses
|
34
60
|
# @yieldparam f [FeatureDSL] use this to further specify the feature
|
35
61
|
# @return [nil]
|
36
62
|
def feature(name, opt={}, &block)
|
data/lib/cog/language.rb
CHANGED
@@ -203,6 +203,32 @@ module Cog
|
|
203
203
|
raise Errors::PrimitiveNotSupported.new :object => obj
|
204
204
|
end
|
205
205
|
|
206
|
+
# @param name [Symbol] name of a primitive cog type
|
207
|
+
# @return [String] default value literal for the given primitive cog type
|
208
|
+
# @example
|
209
|
+
# # For C++
|
210
|
+
# lang.to_default_value :string # => '""'
|
211
|
+
def default_lit_for(name)
|
212
|
+
case name
|
213
|
+
when :boolean
|
214
|
+
to_boolean false
|
215
|
+
when :integer
|
216
|
+
to_integer 0
|
217
|
+
when :long
|
218
|
+
to_long 0
|
219
|
+
when :float
|
220
|
+
to_lit 0.0
|
221
|
+
when :double
|
222
|
+
to_double 0.0
|
223
|
+
when :char
|
224
|
+
to_char ''
|
225
|
+
when :string
|
226
|
+
to_string ''
|
227
|
+
when :null
|
228
|
+
to_null nil
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
206
232
|
private
|
207
233
|
|
208
234
|
# @api developer
|
@@ -43,7 +43,10 @@ class String
|
|
43
43
|
# @api developer
|
44
44
|
# @return [String, String] source and type, where type is one of <tt>:project</tt>, <tt>:user</tt>, <tt>:built_in</tt>, <tt>:gem</tt>, or <tt>:unknown</tt>
|
45
45
|
def cog_source_and_type
|
46
|
-
if
|
46
|
+
if ((Cog.project_root && start_with?(Cog.project_root)) ||
|
47
|
+
(Cog.project_template_path && start_with?(Cog.project_template_path)) ||
|
48
|
+
(Cog.project_generator_path && start_with?(Cog.project_generator_path)) ||
|
49
|
+
(Cog.project_plugin_path && start_with?(Cog.project_plugin_path)))
|
47
50
|
[File.basename(Cog.project_root), :project]
|
48
51
|
elsif start_with? Cog.user_dir
|
49
52
|
[File.basename(ENV['HOME']), :user]
|
data/lib/cog/primitive.rb
CHANGED
@@ -12,6 +12,14 @@ class Symbol
|
|
12
12
|
def to_prim
|
13
13
|
Cog.active_language.to_prim(self)
|
14
14
|
end
|
15
|
+
|
16
|
+
# @return [String] assuming this symbol represents a cog primitive type, returns the literal representation of the default value for that type
|
17
|
+
# @example
|
18
|
+
# # For Objective-C
|
19
|
+
# :string.default_lit # => '@""'
|
20
|
+
def default_lit
|
21
|
+
Cog.active_language.default_lit_for(self)
|
22
|
+
end
|
15
23
|
end
|
16
24
|
|
17
25
|
# Helpers for {Bignum} and {Fixnum}
|
data/lib/cog/seed/feature.rb
CHANGED
@@ -6,21 +6,34 @@ module Cog
|
|
6
6
|
|
7
7
|
include Generator
|
8
8
|
|
9
|
+
# @api developer
|
10
|
+
# @return [Seed] seed to which this feature belongs
|
9
11
|
attr_reader :seed
|
10
12
|
|
13
|
+
# @return [Symbol] access modifier. One of `:public`, `:protected`, or `:private`
|
14
|
+
attr_reader :access
|
15
|
+
|
11
16
|
# @return [String] name of the method
|
12
17
|
attr_reader :name
|
13
18
|
|
19
|
+
# @return [Array<Var>] list of parameters
|
14
20
|
attr_reader :params
|
15
21
|
|
22
|
+
# @return [Symbol] the return type of the feature
|
16
23
|
attr_reader :return_type
|
17
24
|
|
18
25
|
# @api developer
|
19
|
-
# @param
|
26
|
+
# @param seed [Seed] seed to which this feature belongs
|
27
|
+
# @param name [String] name of the feature
|
28
|
+
# @option opt [Symbol] :access (:private) one of `:public`, `:protected`, or `private`
|
29
|
+
# @option opt [Boolean] :abstract (false) is this an abstract feature? If so, no implementation will be generated. Note that all abstract features are virtual
|
30
|
+
# @option opt [Boolean] :virtual (false) is this a virtual feature? Virtual features can be replaced in subclasses
|
20
31
|
def initialize(seed, name, opt={})
|
21
32
|
@seed = seed
|
22
33
|
@name = name.to_s.to_ident
|
23
|
-
@
|
34
|
+
@access = (opt[:access] || :private).to_sym
|
35
|
+
@abstract = !!opt[:abstract]
|
36
|
+
@virtual = !!opt[:virtual]
|
24
37
|
@params = [] # [Var]
|
25
38
|
@return_type = :void
|
26
39
|
end
|
@@ -30,6 +43,16 @@ module Cog
|
|
30
43
|
@abstract
|
31
44
|
end
|
32
45
|
|
46
|
+
# @return [Boolean] is this a virtual method?
|
47
|
+
def virtual?
|
48
|
+
@abstract || @virtual
|
49
|
+
end
|
50
|
+
|
51
|
+
# @return [Boolean] does this feature return a value?
|
52
|
+
def returns_a_value?
|
53
|
+
@return_type != :void
|
54
|
+
end
|
55
|
+
|
33
56
|
def desc
|
34
57
|
@desc || 'Undocumented'
|
35
58
|
end
|
@@ -6,17 +6,25 @@ module Cog
|
|
6
6
|
# Points to the +cog+ command-line app
|
7
7
|
class Runner
|
8
8
|
|
9
|
-
# @param
|
10
|
-
|
11
|
-
|
9
|
+
# @param exec_path [String] path to the executable
|
10
|
+
# @option opt [Array<String>] :flags (['--colorless']) command line flags to pass each time the executable is invoked
|
11
|
+
# @option opt [Boolean] :use_bundler (true) Should `bundle exec` prefix each invocation of the executable?
|
12
|
+
def initialize(exec_path = nil, opt={})
|
13
|
+
@exec_path = if exec_path
|
14
|
+
exec_path
|
15
|
+
else
|
16
|
+
File.expand_path File.join(File.dirname(__FILE__), '..', '..', '..', 'bin', 'cog')
|
17
|
+
end
|
18
|
+
@flags = opt[:flags] || ['--colorless']
|
19
|
+
@use_bundler = opt[:use_bundler].nil? ? true : opt[:use_bundler]
|
12
20
|
end
|
13
21
|
|
14
22
|
# Run cog with the given arguments
|
15
23
|
# @param args [Array<String>] arguments to pass to +cog+
|
16
24
|
# @return [Invocation] an object which can be used with custom {Matchers}
|
17
25
|
def run(*args)
|
18
|
-
|
19
|
-
Invocation.new(
|
26
|
+
cmd = ([@exec_path] + @flags + args).collect &:to_s
|
27
|
+
Invocation.new(cmd, :use_bundler => @use_bundler)
|
20
28
|
end
|
21
29
|
end
|
22
30
|
|
@@ -26,9 +34,11 @@ module Cog
|
|
26
34
|
class Invocation
|
27
35
|
|
28
36
|
# @api developer
|
29
|
-
# @param cmd [Array<String>]
|
37
|
+
# @param cmd [Array<String>]
|
38
|
+
# @option opt [Boolean] :use_bundler (false)
|
30
39
|
def initialize(cmd, opt={})
|
31
40
|
@cmd = cmd
|
41
|
+
@use_bundler = opt[:use_bundler]
|
32
42
|
end
|
33
43
|
|
34
44
|
# Execute the command
|
@@ -36,9 +46,10 @@ module Cog
|
|
36
46
|
# @yield [stdin, stdout, stderr] standard pipes for the invocation
|
37
47
|
# @return [nil]
|
38
48
|
def exec(&block)
|
39
|
-
|
49
|
+
full_cmd = @cmd
|
50
|
+
full_cmd = ['bundle', 'exec'] + full_cmd if @use_bundler
|
40
51
|
ENV['HOME'] = SpecHelpers.active_home_fixture_dir
|
41
|
-
Open3.popen3
|
52
|
+
Open3.popen3 *full_cmd do |i,o,e,t|
|
42
53
|
block.call i,o,e
|
43
54
|
end
|
44
55
|
end
|
data/lib/cog/version.rb
CHANGED
metadata
CHANGED
@@ -1,143 +1,134 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: cog
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 3
|
9
|
-
- 2
|
10
|
-
version: 0.3.2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.3
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Kevin Tonon
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2013-04-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
21
14
|
name: active_support
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 3
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
32
20
|
type: :runtime
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: gli
|
36
21
|
prerelease: false
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: gli
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
46
34
|
type: :runtime
|
47
|
-
version_requirements: *id002
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: i18n
|
50
35
|
prerelease: false
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: i18n
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
60
48
|
type: :runtime
|
61
|
-
version_requirements: *id003
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: rainbow
|
64
49
|
prerelease: false
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rainbow
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
74
62
|
type: :runtime
|
75
|
-
version_requirements: *id004
|
76
|
-
- !ruby/object:Gem::Dependency
|
77
|
-
name: rake
|
78
63
|
prerelease: false
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
88
76
|
type: :development
|
89
|
-
version_requirements: *id005
|
90
|
-
- !ruby/object:Gem::Dependency
|
91
|
-
name: redcarpet
|
92
77
|
prerelease: false
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: redcarpet
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
102
90
|
type: :development
|
103
|
-
version_requirements: *id006
|
104
|
-
- !ruby/object:Gem::Dependency
|
105
|
-
name: rspec
|
106
91
|
prerelease: false
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
116
104
|
type: :development
|
117
|
-
version_requirements: *id007
|
118
|
-
- !ruby/object:Gem::Dependency
|
119
|
-
name: yard
|
120
105
|
prerelease: false
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: yard
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
130
118
|
type: :development
|
131
|
-
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
132
125
|
description:
|
133
126
|
email: kevin@betweenconcepts.com
|
134
|
-
executables:
|
127
|
+
executables:
|
135
128
|
- cog
|
136
129
|
extensions: []
|
137
|
-
|
138
130
|
extra_rdoc_files: []
|
139
|
-
|
140
|
-
files:
|
131
|
+
files:
|
141
132
|
- bin/cog
|
142
133
|
- BuiltIn.cogfile
|
143
134
|
- LICENSE
|
@@ -196,37 +187,26 @@ files:
|
|
196
187
|
- yard-templates/default/fulldoc/html/css/common.css
|
197
188
|
homepage: https://github.com/ktonon/cog
|
198
189
|
licenses: []
|
199
|
-
|
190
|
+
metadata: {}
|
200
191
|
post_install_message:
|
201
192
|
rdoc_options: []
|
202
|
-
|
203
|
-
require_paths:
|
193
|
+
require_paths:
|
204
194
|
- lib
|
205
195
|
- lib
|
206
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
none: false
|
217
|
-
requirements:
|
218
|
-
- - ">="
|
219
|
-
- !ruby/object:Gem::Version
|
220
|
-
hash: 3
|
221
|
-
segments:
|
222
|
-
- 0
|
223
|
-
version: "0"
|
196
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
197
|
+
requirements:
|
198
|
+
- - '>='
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
version: '0'
|
201
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
202
|
+
requirements:
|
203
|
+
- - '>='
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '0'
|
224
206
|
requirements: []
|
225
|
-
|
226
207
|
rubyforge_project:
|
227
|
-
rubygems_version:
|
208
|
+
rubygems_version: 2.0.3
|
228
209
|
signing_key:
|
229
|
-
specification_version:
|
210
|
+
specification_version: 4
|
230
211
|
summary: This is a utility to help you write code generators.
|
231
212
|
test_files: []
|
232
|
-
|