contracter 1.0.5 → 1.1.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/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
|
+

|
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.
|