ergo 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/.index ADDED
@@ -0,0 +1,62 @@
1
+ ---
2
+ revision: 2013
3
+ type: ruby
4
+ sources:
5
+ - var
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/ergo
34
+ label: Homepage
35
+ - type: code
36
+ uri: http://github.com/rubyworks/ergo
37
+ label: Source Code
38
+ - type: bugs
39
+ uri: http://github.com/rubyworks/ergo/issues
40
+ label: Issue Tracker
41
+ repositories:
42
+ - name: upstream
43
+ scm: git
44
+ uri: git://github.com/rubyworks/ergo.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
+ created: '2010-07-05'
55
+ summary: The best build tool, logically!
56
+ title: Ergo
57
+ version: 0.3.0
58
+ name: ergo
59
+ description: ! 'Ergo is an automated build tool with a slick set-logic based
60
+
61
+ state/rules system, perfect for performing continuous integration.'
62
+ date: '2013-02-16'
@@ -0,0 +1,10 @@
1
+ --title Fire
2
+ --readme README.md
3
+ --plugin tomdoc
4
+ --private
5
+ --protected
6
+ lib
7
+ -
8
+ *.md
9
+ *.txt
10
+
@@ -0,0 +1,47 @@
1
+ # RELEASE HISTORY
2
+
3
+ ## 0.3.0 / 2013-02-13
4
+
5
+ Major release removes tasks. There are only rules now! In
6
+ addition *books* have been added which allow rules to be
7
+ grouped together. Oh! And you might have noticed the name
8
+ of the project has changed from *Fire* to *Ergo*.
9
+
10
+ Changes:
11
+
12
+ * Deprecate tasks.
13
+ * Add rule books.
14
+ * Rename project to Ergo.
15
+
16
+
17
+ ## 0.2.0 / 2013-02-12
18
+
19
+ This is the last version with tasks. Tasks are being deprecated
20
+ for two reasons: a) they add a great deal of complexity to the
21
+ syntax and the implementation via their need for dependencies;
22
+ and b) tasks have proven to be an excuse for poorly designed
23
+ rules, which, if properly written, would do the job just as well
24
+ if not better than any task. So it was decided that if tasks are
25
+ needed, then they should be provided via dedicated task system,
26
+ not via the rules system.
27
+
28
+ Changes:
29
+
30
+ * Default rule file is now `.fire/rules.rb` or `rules.rb`.
31
+ * Rules can depend on tasks using same hash notation as tasks.
32
+ * Modified the `#rule` method to define file rules given a string.
33
+ * Deprecated the `file` method for defining file rules.
34
+
35
+
36
+ ## 0.1.0 / 2012-04-10
37
+
38
+ This is the initial release of Fire. Fire is state and rules-based
39
+ continuous integration and build tool.
40
+
41
+ Special thanks to Ari Brown for letting us take over the fire gem
42
+ for this project. "Fire" is perfect fit.
43
+
44
+ Changes:
45
+
46
+ * Happy first release day!
47
+
@@ -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,161 @@
1
+ # Ergo 由
2
+
3
+ [Homepage](http://rubyworks.github.com/ergo) /
4
+ [Report Issue](http://github.com/rubyworks/ergo/issues) /
5
+ [Source Code](http://github.com/rubyworks/ergo) /
6
+ [IRC Channel](http://chat.us.freenode.net/rubyworks)
7
+
8
+ ***"Logic programming meets the build tool."***
9
+
10
+ Ergo is a build tool that promotes continuous integration via logic
11
+ programming. With Ergo, the Ruby developer defines rules and state
12
+ conditions. The rules are applied when their state conditions are
13
+ met. Through repetitive application, this allows a project to all
14
+ but manage itself.
15
+
16
+ Ergo is not complicated. It goes 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 Ergo quickly. It's just enough to give you familiarity
25
+ the basic ideas of Ergo 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 Ergo](https://github.com/rubyworks/ergo/wiki/Overview-of-Ergo)
31
+ * [Helpful FAQs](https://github.com/rubyworks/ergo/wiki/FAQ)
32
+ * [Ergo Recepies](https://github.com/rubyworks/ergo/wiki/Ergo-Recipes)
33
+ * [API Documentation](http://rubydoc.info/gems/ergo/frames)
34
+
35
+
36
+ ## Ergo in a Hot Minute
37
+
38
+ To install, either use RubyGems directly:
39
+
40
+ ```
41
+ $ gem install ergo
42
+ ```
43
+
44
+ Or add `gem "ergo"` to your Gemfile and run:
45
+
46
+ ```
47
+ $ bundle install
48
+ ```
49
+
50
+ Create a `.ergo` directory in your project.
51
+
52
+ ```
53
+ $ mkdir .ergo
54
+ ```
55
+
56
+ Edit the `.ergo/script.rb` file.
57
+
58
+ ```
59
+ $ vi .ergo/script.rb
60
+ ```
61
+
62
+ And add the following example script to the file.
63
+
64
+ ```ruby
65
+ manifest = %w[bin/**/* lib/**/* *.md]
66
+
67
+ state :need_manifest? do
68
+ if File.exist?('MANIFEST')
69
+ files = manifest.map{ |d| Dir[d] }.flatten
70
+ saved = File.readlines('MANIFEST').map{ |f| f.strip }
71
+ files != saved
72
+ else
73
+ true
74
+ end
75
+ end
76
+
77
+ desc "update manifest"
78
+ rule need_manifest? do
79
+ files = manifest.map{ |d| Dir[d] }.flatten
80
+ File.open('MANIFEST', 'w'){ |f| f << files.join("\n") }
81
+ end
82
+
83
+ desc "run my minitests"
84
+ rule 'lib/**/*.rb' do |libs|
85
+ $: << 'lib'
86
+ files = Dir.glob('test/**/*_test.rb')
87
+ files.each{|file| require "./" + file}
88
+ end
89
+ ```
90
+
91
+ Now run it with:
92
+
93
+ $ ergo
94
+
95
+ And there you go. Ergo, in a hot minute!
96
+
97
+
98
+ ## A Few More Minutes
99
+
100
+ As the capable Ruby programmer, it probable doesn't require much explanation
101
+ to understand the above code and what happened when you ran it. Just the
102
+ same it can help to go over it with the proper terminology. Of course,
103
+ the rules in our example are simplistic and they make some basic
104
+ assumptions about a project, so you will want to modify these to suite your
105
+ needs (or dispose of them and write fresh). Nonetheless, this example
106
+ provides some clear examples of the basics of writing Ergo scripts.
107
+
108
+ In the example we first create a *state* called `update_manifest?`. It
109
+ simply checks to see if the list of files in the project's MANIFEST
110
+ file matches the project files expected to be there. Notice it returns
111
+ a boolean value, true or false. Along with this state we create a *rule*
112
+ that uses the state by calling the `update_manifest?` method. This method
113
+ was created by the state definition above. The *rule procedure* updates the
114
+ MANIFEST file whenever the state return `true`, i.e. the manifest does
115
+ not have the expected content.
116
+
117
+ At the end of our example script we create an additional rule. This
118
+ one does not reference a defined state. Instead it create a *file state*
119
+ implicitly by passing a string argument to `rule`. A file state has a
120
+ very simple and very useful definition. It returns `true` whenever a
121
+ matching file has changed from one execution of `ergo` to the next.
122
+ In other words, per this example, whenever a Ruby file in the `lib`
123
+ directory changes, Ergo is going to run the units tests in the `test`
124
+ directory.
125
+
126
+ Okay, so now we have a example rules script and have a basic grasp of
127
+ how it works. And we know we can run the rules simple by invoking the
128
+ `ergo` command on command line. But if we want to have ergo run
129
+ automatically periodically, we can pass it the number of seconds to
130
+ wait between runs via the `-a/--auto` option.
131
+
132
+ $ ergo -a 180
133
+
134
+ See it pays to read all the way to the end ;)
135
+
136
+
137
+ ## Contributing
138
+
139
+ The Ergo [repository](http://github.com/rubyworks/ergo) is hosted on GitHub.
140
+ If you would like to contribute to the project (and we would be over joyed
141
+ if you did!) the rules of engagements are very simple.
142
+
143
+ 1. Fork the repo.
144
+ 2. Branch the repo.
145
+ 3. Code and test.
146
+ 4. Push the branch.
147
+ 4. Submit pull request.
148
+
149
+
150
+ ## Copyrights
151
+
152
+ Ergo is copyrighted open-source software.
153
+
154
+ Copyright (c) 2011 Rubyworks. All rights reserved.
155
+
156
+ It is modifiable and redistributable under the terms of the
157
+ [BSD-2-Clause](http::/spdx.org/licenses/BSD-2-Clause) license.
158
+
159
+ See the enclosed LICENSE.txt file for details.
160
+
161
+ (火)
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'ergo'
3
+ Ergo::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 or a specific book of rules.
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 defined with a simple always-true rule, and another
13
+ 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 = Ergo::Runner.new(:system=>@system, :root=>Dir.pwd)
27
+
28
+ runner.run
29
+
30
+ ### Simple State Rule
31
+
32
+ Given a @system defined with a simple state:
33
+
34
+ state :simple do
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 = Ergo::Runner.new(:system=>@system)
49
+
50
+ runner.run
51
+
@@ -0,0 +1 @@
1
+ require 'ae'
@@ -0,0 +1,7 @@
1
+ require 'ergo'
2
+
3
+ When 'iven a @system defined' do |text|
4
+ @system = Ergo::System.new
5
+ @system.module_eval(text)
6
+ end
7
+
File without changes
@@ -0,0 +1,20 @@
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 'ergo/core_ext'
11
+ require_relative 'ergo/match'
12
+ require_relative 'ergo/shellutils'
13
+ require_relative 'ergo/state'
14
+ require_relative 'ergo/rule'
15
+ require_relative 'ergo/ignore'
16
+ require_relative 'ergo/digest'
17
+ require_relative 'ergo/book'
18
+ require_relative 'ergo/system'
19
+ require_relative 'ergo/runner'
20
+ require_relative 'ergo/cli'
@@ -0,0 +1,62 @@
1
+ ---
2
+ revision: 2013
3
+ type: ruby
4
+ sources:
5
+ - var
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/ergo
34
+ label: Homepage
35
+ - type: code
36
+ uri: http://github.com/rubyworks/ergo
37
+ label: Source Code
38
+ - type: bugs
39
+ uri: http://github.com/rubyworks/ergo/issues
40
+ label: Issue Tracker
41
+ repositories:
42
+ - name: upstream
43
+ scm: git
44
+ uri: git://github.com/rubyworks/ergo.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
+ created: '2010-07-05'
55
+ summary: The best build tool, logically!
56
+ title: Ergo
57
+ version: 0.3.0
58
+ name: ergo
59
+ description: ! 'Ergo is an automated build tool with a slick set-logic based
60
+
61
+ state/rules system, perfect for performing continuous integration.'
62
+ date: '2013-02-16'