rulebow 0.4.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: efb2f96a12212f411d2f026740cdbc3b1134b7f6
4
+ data.tar.gz: e6c235f0892da2fad2bd5b630a9ef32bc0815936
5
+ SHA512:
6
+ metadata.gz: fa905ec3302359749739885dcf93ebd069eb20aa20f91ce6116ebe463aa6caa6899e981fc9202fc7b9b2fe17635f7a6733f994eb388650046c8518536df4e2ec
7
+ data.tar.gz: e3f6ed30330abbc90a777b77ca1e3e33225d861f83988622dd6341c9a1fdea99423d6787458202ae8bf7604b28a8d3ce93ff8a425bbfbda10be626a596297d59
data/.index ADDED
@@ -0,0 +1,61 @@
1
+ ---
2
+ revision: 2013
3
+ type: ruby
4
+ sources:
5
+ - INDEX.yml
6
+ authors:
7
+ - name: trans
8
+ email: transfire@gmail.com
9
+ organizations:
10
+ - name: Rubyworks
11
+ requirements:
12
+ - name: notify
13
+ - groups:
14
+ - build
15
+ development: true
16
+ name: detroit
17
+ - groups:
18
+ - build
19
+ development: true
20
+ name: mast
21
+ - groups:
22
+ - test
23
+ development: true
24
+ name: qed
25
+ - groups:
26
+ - test
27
+ development: true
28
+ name: ae
29
+ conflicts: []
30
+ alternatives: []
31
+ resources:
32
+ - type: home
33
+ uri: http://rubyworks.github.com/rulebow
34
+ label: Homepage
35
+ - type: code
36
+ uri: http://github.com/rubyworks/rulebow
37
+ label: Source Code
38
+ - type: bugs
39
+ uri: http://github.com/rubyworks/rulebow/issues
40
+ label: Issue Tracker
41
+ repositories:
42
+ - name: upstream
43
+ scm: git
44
+ uri: git://github.com/rubyworks/rulebow.git
45
+ categories: []
46
+ copyrights:
47
+ - holder: Rubyworks
48
+ year: '2010'
49
+ license: BSD-2-Clause
50
+ customs: []
51
+ paths:
52
+ lib:
53
+ - lib
54
+ name: rulebow
55
+ title: RULEBOW
56
+ version: 0.4.0
57
+ summary: An autological build tool.
58
+ description: Rulebow is an automated build tool with a set-logic based rule system.
59
+ Rulebow is the perfect tool for performing continuous integration during development.
60
+ created: '2010-07-05'
61
+ date: '2015-02-28'
@@ -0,0 +1,10 @@
1
+ --title Ergo
2
+ --readme README.md
3
+ --plugin tomdoc
4
+ --private
5
+ --protected
6
+ lib
7
+ -
8
+ *.md
9
+ *.txt
10
+
@@ -0,0 +1,62 @@
1
+ # RELEASE HISTORY
2
+
3
+ ## 0.4.0 / 2014-02-29
4
+
5
+ This major release renames the project from **Ergo** to **Rulebow**.
6
+ This will be the last name change. Promise. In addition a number of
7
+ other adjustments and code improvements have been made. This may be
8
+ the first release that's actually usable in production.
9
+
10
+ Changes:
11
+
12
+ * Rename project to Rulebow.
13
+ * Rename `book` method to `ruleset`.
14
+ * Rename `state` method to `fact`.
15
+ * Use single `Rulebook` file.
16
+
17
+
18
+ ## 0.3.0 / 2013-02-13
19
+
20
+ Major release removes tasks. There are only rules now! In
21
+ addition *books* have been added which allow rules to be
22
+ grouped together. Oh! And you might have noticed the name
23
+ of the project has changed from *Fire* to *Ergo*.
24
+
25
+ Changes:
26
+
27
+ * Deprecate tasks.
28
+ * Add rule books.
29
+ * Rename project to Ergo.
30
+
31
+
32
+ ## 0.2.0 / 2013-02-12
33
+
34
+ This is the last version with tasks. Tasks are being deprecated
35
+ for two reasons: a) they add a great deal of complexity to the
36
+ syntax and the implementation via their need for dependencies;
37
+ and b) tasks have proven to be an excuse for poorly designed
38
+ rules, which, if properly written, would do the job just as well
39
+ if not better than any task. So it was decided that if tasks are
40
+ needed, then they should be provided via dedicated task system,
41
+ not via the rules system.
42
+
43
+ Changes:
44
+
45
+ * Default rule file is now `.fire/rules.rb` or `rules.rb`.
46
+ * Rules can depend on tasks using same hash notation as tasks.
47
+ * Modified the `#rule` method to define file rules given a string.
48
+ * Deprecated the `file` method for defining file rules.
49
+
50
+
51
+ ## 0.1.0 / 2012-04-10
52
+
53
+ This is the initial release of Fire. Fire is state and rules-based
54
+ continuous integration and build tool.
55
+
56
+ Special thanks to Ari Brown for letting us take over the fire gem
57
+ for this project.
58
+
59
+ Changes:
60
+
61
+ * Happy first release day!
62
+
@@ -0,0 +1,25 @@
1
+ (BSD-2-Clause License)
2
+
3
+ Redistribution and use in source and binary forms,
4
+ with or without modification, are permitted provided that the following
5
+ conditions are met:
6
+
7
+ 1. Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+
10
+ 2. Redistributions in binary form must reproduce the above copyright
11
+ notice, this list of conditions and the following disclaimer in the
12
+ documentation and/or other materials provided with the distribution.
13
+
14
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
15
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
16
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
17
+ COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
18
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
22
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
23
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24
+
25
+
@@ -0,0 +1,168 @@
1
+ # RULEBOW
2
+
3
+ [Homepage](http://rubyworks.github.com/rulebow) -
4
+ [Report Issue](http://github.com/rubyworks/rulebow/issues) -
5
+ [Source Code](http://github.com/rubyworks/rulebow) -
6
+ [IRC Channel](http://chat.us.freenode.net/rubyworks)
7
+
8
+ ***"Hey, you got logic in my build tool!"***
9
+
10
+ Rulebow is a build tool that promotes continuous integration via logic
11
+ programming. With Rulebow, the Ruby developer defines *rules* and state
12
+ conditions called *facts*. The rules are applied when their conditions
13
+ are met. Through repetitive application, this allows a project to all
14
+ but manage itself.
15
+
16
+ Rulebow is not complicated. It does not require a bazillion plug-ins.
17
+ Although some external tools can be helpful and used with it, and
18
+ it makes some procedures more convenient. For example, it makes
19
+ FileUtils methods directly available in the build script context.
20
+ Mostly it just trusts the developer to know how to write the build
21
+ scripts they need.
22
+
23
+ Below you will find a brief "Hot Minute" guide for getting up and
24
+ running with Rulebow quickly. It's just enough to give you familiarity
25
+ the basic ideas of Rulebow and how to start putting it to good use.
26
+ For more detailed instruction, explanation of terms and how the
27
+ dickens does it work under-the-hood, please consider any of the
28
+ following resources.
29
+
30
+ * [Overview of Rulebow](https://github.com/rubyworks/rulebow/wiki/Overview)
31
+ * [Helpful FAQs](https://github.com/rubyworks/rulebow/wiki/FAQ)
32
+ * [Rulebow Recepies](https://github.com/rubyworks/rulebow/wiki/Recipes)
33
+ * [API Documentation](http://rubydoc.info/gems/rulebow/frames)
34
+
35
+
36
+ ## Rulebow in a Hot Minute
37
+
38
+ To install, either use RubyGems directly:
39
+
40
+ ```
41
+ $ gem install rulebow
42
+ ```
43
+
44
+ Or add `gem "rulebow"` to your Gemfile and run:
45
+
46
+ ```
47
+ $ bundle
48
+ ```
49
+
50
+ Creat a `Rulebook` file in your project.
51
+
52
+ ```
53
+ $ vi Rulebook
54
+ ```
55
+
56
+ And add the following example script to the file.
57
+
58
+ ```ruby
59
+ ruleset :default => [:manifest, :test]
60
+
61
+ ruleset :manifest do
62
+ desc "update manifest"
63
+
64
+ globs = %w[bin/**/* lib/**/* *.md]
65
+
66
+ fact :need_manifest? do
67
+ if File.exist?('MANIFEST')
68
+ files = globs.map{ |d| Dir[d] }.flatten
69
+ saved = File.readlines('MANIFEST').map{ |f| f.strip }
70
+ files != saved
71
+ else
72
+ true
73
+ end
74
+ end
75
+
76
+ rule :need_manifest? do
77
+ files = globs.map{ |d| Dir[d] }.flatten
78
+ File.open('MANIFEST', 'w'){ |f| f << files.join("\n") }
79
+ end
80
+ end
81
+
82
+ ruleset :test do
83
+ desc "run my minitests"
84
+
85
+ rule 'lib/**/*.rb' do |libs|
86
+ $: << 'lib'
87
+ files = Dir.glob('test/**/*_test.rb')
88
+ files.each{|file| require "./" + file}
89
+ end
90
+ ```
91
+
92
+ Now run it with:
93
+
94
+ $ bow
95
+
96
+ And there you go. Rulebow, in a hot minute!
97
+
98
+
99
+ ## A Few More Minutes
100
+
101
+ As the capable Ruby programmer, it probable doesn't require much explanation
102
+ to understand the above code and what happened when you ran it. Just the
103
+ same, it can help to go over it with the proper terminology. Of course,
104
+ the rules in our example are simplistic and they make some basic
105
+ assumptions about a project, so you will want to modify these to suite your
106
+ needs (or dispose of them and write fresh). Nonetheless, this example
107
+ provides some clear examples of the basics of writing Rulebow scripts.
108
+
109
+ The first line in the script defines the defauly ruleset. This is the
110
+ ruleset the is executes when no specific ruleset is designated on
111
+ the command line. In this case we see that it simply depends on two
112
+ other rulesets, `test` and `manifest`.
113
+
114
+ Nex in the example we create the `manifest` ruleset. In it we first
115
+ create a *state* called `update_manifest?`. It simply checks to see
116
+ if the list of files in the project's MANIFEST file matches the project
117
+ files expected to be there. Notice it returns a boolean value, true or
118
+ false. Along with this state we create a *rule* that uses the state by
119
+ calling the `update_manifest?` method. This method was created by the
120
+ state definition above. The *rule procedure* updates the MANIFEST file
121
+ whenever the state returns `true`, i.e. the manifest does not have the
122
+ expected content.
123
+
124
+ At the end of our example script we create an additional ruleset. This
125
+ one does not reference a defined state. Instead it creates a *file state*
126
+ implicitly by passing a string argument to `rule`. A file state has a
127
+ very simple and very useful definition. It returns `true` whenever a
128
+ matching file has changed from one execution of `rulebow` to the next.
129
+ In other words, per this example, whenever a Ruby file in the `lib`
130
+ directory changes, Rulebow is going to run the units tests in the `test`
131
+ directory.
132
+
133
+ Okay, so now we have an example rulebook and have a basic grasp of
134
+ how it works. And we know we can run the rules simple by invoking the
135
+ `rulebow` command on the command line. But if we want to have rulebow run
136
+ automatically periodically, we can pass it the number of seconds to
137
+ wait between runs via the `-a/--auto` option.
138
+
139
+ $ bow -a 180
140
+
141
+ See it pays to read all the way to the end ;)
142
+
143
+
144
+ ## Contributing
145
+
146
+ The Rulebow [repository](http://github.com/rubyworks/rulebow) is hosted on GitHub.
147
+ If you would like to contribute to the project (and we would be over joyed
148
+ if you did!) the rules of engagements are very simple.
149
+
150
+ 1. Fork the repo.
151
+ 2. Branch the repo.
152
+ 3. Code and test.
153
+ 4. Push the branch.
154
+ 4. Submit pull request.
155
+
156
+
157
+ ## Copyrights
158
+
159
+ Rulebow is copyrighted open-source software.
160
+
161
+ Copyright (c) 2011 Rubyworks. All rights reserved.
162
+
163
+ It is modifiable and redistributable under the terms of the
164
+ [BSD-2-Clause](http::/spdx.org/licenses/BSD-2-Clause) license.
165
+
166
+ See the enclosed LICENSE.txt file for details.
167
+
168
+ (火 由)
data/bin/bow ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rulebow'
3
+ Rulebow::CLI.fire!
4
+
@@ -0,0 +1,51 @@
1
+ ## Applying Rules
2
+
3
+ The `Runner` class handles running rules. It takes `System` as an argument and
4
+ can run all applicable rules of a specific book.
5
+
6
+ ### True/False Rules
7
+
8
+ The simplist rule state is `true`, which means it will always run, or
9
+ `false` which means it will never run. These states are not very useful,
10
+ but they should still work.
11
+
12
+ Given a @system and a @ruleset defined with a simple always-true rule,
13
+ and another always-false rule:
14
+
15
+ rule(true) do
16
+ assert true
17
+ end
18
+
19
+ rule(false) do
20
+ assert false
21
+ end
22
+
23
+ Then the Runner should run the true rule and not the false rule when
24
+ applying the system's rules.
25
+
26
+ runner = Rulebow::Runner.new(:system=>@system)
27
+
28
+ runner.run('example')
29
+
30
+ ### Simple State Rule
31
+
32
+ Given a @system and a @ruleset defined with a simple state:
33
+
34
+ def simple
35
+ true
36
+ end
37
+
38
+ rule :simple do
39
+ assert true
40
+ end
41
+
42
+ rule false do
43
+ assert false
44
+ end
45
+
46
+ Then the Runner should run the simple rule, but not the other.
47
+
48
+ runner = Rulebow::Runner.new(:system=>@system)
49
+
50
+ runner.run('example')
51
+
@@ -0,0 +1 @@
1
+ require 'ae'
@@ -0,0 +1,11 @@
1
+ require 'rulebow'
2
+
3
+ When 'iven a @system and a @ruleset defined with' do |text|
4
+ @system = Rulebow::System.new(:root=>Dir.pwd, :statefile=>'example.state')
5
+ @ruleset = (
6
+ @system.ruleset(:example) do
7
+ module_eval(text)
8
+ end
9
+ )
10
+ end
11
+
File without changes
@@ -0,0 +1,21 @@
1
+ # ruby standard library
2
+ require 'fileutils'
3
+ require 'digest/sha1'
4
+ require 'ostruct'
5
+
6
+ # third party library
7
+ require 'notify'
8
+
9
+ # internal library
10
+ require_relative 'rulebow/core_ext'
11
+ require_relative 'rulebow/match'
12
+ require_relative 'rulebow/shellutils'
13
+ require_relative 'rulebow/fact'
14
+ require_relative 'rulebow/rule'
15
+ #require_relative 'rulebow/ignore'
16
+ require_relative 'rulebow/watchlist'
17
+ require_relative 'rulebow/digest'
18
+ require_relative 'rulebow/ruleset'
19
+ require_relative 'rulebow/system'
20
+ require_relative 'rulebow/runner'
21
+ require_relative 'rulebow/cli'
@@ -0,0 +1,61 @@
1
+ ---
2
+ revision: 2013
3
+ type: ruby
4
+ sources:
5
+ - INDEX.yml
6
+ authors:
7
+ - name: trans
8
+ email: transfire@gmail.com
9
+ organizations:
10
+ - name: Rubyworks
11
+ requirements:
12
+ - name: notify
13
+ - groups:
14
+ - build
15
+ development: true
16
+ name: detroit
17
+ - groups:
18
+ - build
19
+ development: true
20
+ name: mast
21
+ - groups:
22
+ - test
23
+ development: true
24
+ name: qed
25
+ - groups:
26
+ - test
27
+ development: true
28
+ name: ae
29
+ conflicts: []
30
+ alternatives: []
31
+ resources:
32
+ - type: home
33
+ uri: http://rubyworks.github.com/rulebow
34
+ label: Homepage
35
+ - type: code
36
+ uri: http://github.com/rubyworks/rulebow
37
+ label: Source Code
38
+ - type: bugs
39
+ uri: http://github.com/rubyworks/rulebow/issues
40
+ label: Issue Tracker
41
+ repositories:
42
+ - name: upstream
43
+ scm: git
44
+ uri: git://github.com/rubyworks/rulebow.git
45
+ categories: []
46
+ copyrights:
47
+ - holder: Rubyworks
48
+ year: '2010'
49
+ license: BSD-2-Clause
50
+ customs: []
51
+ paths:
52
+ lib:
53
+ - lib
54
+ name: rulebow
55
+ title: RULEBOW
56
+ version: 0.4.0
57
+ summary: An autological build tool.
58
+ description: Rulebow is an automated build tool with a set-logic based rule system.
59
+ Rulebow is the perfect tool for performing continuous integration during development.
60
+ created: '2010-07-05'
61
+ date: '2015-02-28'