contracter 1.0.5 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -11
- data/assets/banner.png +0 -0
- data/assets/banner.xcf +0 -0
- data/lib/contracter.rb +6 -13
- data/lib/contracter/contract.rb +23 -12
- data/lib/contracter/errors/contracterror.rb +2 -0
- data/lib/contracter/version.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e8ab75360b23d74f04742fffe810649c520bed5
|
4
|
+
data.tar.gz: 8ffb585e5114bbdf3c9b14ab5ff225b711fa209d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 988d156e1a4552c2f8466aaee3f40c53d398e334982fc2cb4fd78bb1c4e99a7faa86deaf6b0ffc4a676c5100586c1ce9074fe346b5dc3afe9271b14c6080169c
|
7
|
+
data.tar.gz: 374c18db65abad1e2b919c63e4ad74f1417fd20264bec0982b2ca517fe38141d3d84eeb8b0ced7de5e0b15265c2165046e9afc1b19a795fa90772ae388f8f137
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
![contracter](assets/banner.png)
|
2
2
|
|
3
3
|
Contracter is a quality of life gem that provides a simple Domain Specific Language for anyone to use in generating contracts for clients and services from templates. The default template is my personal contract template based on the popular open-source contract available [here](https://stuffandnonsense.co.uk/projects/contract-killer/).
|
4
4
|
|
@@ -26,22 +26,22 @@ First, require the gem:
|
|
26
26
|
require 'contracter'
|
27
27
|
```
|
28
28
|
|
29
|
-
Then generate a contract by using the Contracter
|
29
|
+
Then generate a contract by using the Contracter syntax:
|
30
30
|
|
31
31
|
```ruby
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
browsers 'Safari', 'Google Chrome'
|
32
|
+
# This fills the default template
|
33
|
+
contract = Contracter.build_from do
|
34
|
+
# Any property can be used here, and will get replaced with the given value in the template where the method name appears in the format [name]
|
35
|
+
test_value 'Test Value Please Ignore'
|
36
|
+
end
|
38
37
|
|
39
|
-
|
40
|
-
|
38
|
+
# You can also fill a custom template, by passing Contracter the path
|
39
|
+
contract = Contracter.build_from 'path/to/custom/template' do
|
40
|
+
test_value 'Test Value Please Ignore'
|
41
41
|
end
|
42
42
|
```
|
43
43
|
|
44
|
-
The contract will be built from the template and returned as a
|
44
|
+
The contract will be built from the template and returned as a string.
|
45
45
|
|
46
46
|
## Development
|
47
47
|
|
data/assets/banner.png
ADDED
Binary file
|
data/assets/banner.xcf
ADDED
Binary file
|
data/lib/contracter.rb
CHANGED
@@ -1,19 +1,12 @@
|
|
1
|
-
|
1
|
+
Dir["#{File.dirname(__FILE__)}/contracter/**/*.rb"].each { |e| require e unless e == 'version.rb' }
|
2
2
|
|
3
3
|
class Contracter
|
4
|
-
def self.
|
5
|
-
c = Contract.new
|
4
|
+
def self.build_from(path = "#{File.expand_path('..', File.dirname(__FILE__))}/data/contracter/template.md", &block)
|
5
|
+
c = Contract.new File.read(path, :encoding => "UTF-8")
|
6
|
+
c.load_params
|
6
7
|
c.instance_eval(&block)
|
8
|
+
c.replace_params
|
7
9
|
|
8
|
-
|
9
|
-
self.fill_template(File.read(t, :encoding => "UTF-8"), c)
|
10
|
-
end
|
11
|
-
|
12
|
-
private
|
13
|
-
def self.fill_template t, c
|
14
|
-
c.instance_variables.map(&:to_s).each do |v|
|
15
|
-
t.gsub!(/\[#{Regexp.quote(v.gsub("@", ""))}\]/, c.instance_variable_get(v))
|
16
|
-
end
|
17
|
-
t.gsub(/\[\w+?\]/, "MISSING")
|
10
|
+
c.template
|
18
11
|
end
|
19
12
|
end
|
data/lib/contracter/contract.rb
CHANGED
@@ -1,15 +1,26 @@
|
|
1
1
|
class Contract
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
def
|
13
|
-
|
2
|
+
attr_accessor :template
|
3
|
+
|
4
|
+
def params
|
5
|
+
@params ||= Hash.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def initialize p
|
9
|
+
@template = p
|
10
|
+
end
|
11
|
+
|
12
|
+
def method_missing(method_sym, *args)
|
13
|
+
raise ContractError, "Cannot find [#{method_sym}] in template." unless self.params.has_key?(method_sym)
|
14
|
+
raise ContractError, "Must provide only one value for [#{method_sym}]." unless args.length == 1
|
15
|
+
self.params[method_sym] = args.first
|
16
|
+
end
|
17
|
+
|
18
|
+
def load_params
|
19
|
+
self.template.scan(/\[(\w+?)\]/).flatten.each { |p| self.params[p.to_sym] = nil }
|
20
|
+
end
|
21
|
+
|
22
|
+
def replace_params
|
23
|
+
raise ContractError, "Missing values for #{self.params.select { |k, v| v.nil? }.keys.map { |e| "[#{e}]"}.join ', '}." if self.params.has_value? nil
|
24
|
+
self.params.each { |k, v| self.template.gsub!(/\[#{Regexp.quote(k.to_s)}\]/, v) }
|
14
25
|
end
|
15
26
|
end
|
data/lib/contracter/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: contracter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Remi Gelinas
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -65,12 +65,15 @@ files:
|
|
65
65
|
- Gemfile
|
66
66
|
- README.md
|
67
67
|
- Rakefile
|
68
|
+
- assets/banner.png
|
69
|
+
- assets/banner.xcf
|
68
70
|
- bin/console
|
69
71
|
- bin/setup
|
70
72
|
- contracter.gemspec
|
71
73
|
- data/contracter/template.md
|
72
74
|
- lib/contracter.rb
|
73
75
|
- lib/contracter/contract.rb
|
76
|
+
- lib/contracter/errors/contracterror.rb
|
74
77
|
- lib/contracter/version.rb
|
75
78
|
homepage: https://github.com/remi-gelinas/contracter
|
76
79
|
licenses: []
|
@@ -91,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
94
|
version: '0'
|
92
95
|
requirements: []
|
93
96
|
rubyforge_project:
|
94
|
-
rubygems_version: 2.
|
97
|
+
rubygems_version: 2.5.1
|
95
98
|
signing_key:
|
96
99
|
specification_version: 4
|
97
100
|
summary: A quality of life gem for templated contract generation.
|