Commit Graph
100 Commits
Author SHA1 Message Date
Thibault Jouan 4c0a7f0fc7 Rename Interpreter class as Worker 2014-01-09 01:08:49 +00:00
Thibault Jouan cdc3128727 Implement Action#remote (delegates to remote.fs) 2014-01-09 00:51:16 +00:00
Thibault Jouan 29c26ab961 Implement Action#remote (delegates to env.remote) 2014-01-09 00:45:26 +00:00
Thibault Jouan e567c61e4e Implement Action#output (delegates to env.output) 2014-01-09 00:43:01 +00:00
Thibault Jouan 103b9d1230 Rename Remote::FS#{has_,}file? 2014-01-08 22:30:52 +00:00
Thibault Jouan 19b091a15c Rename Remote::Environment#{has_,}key? 2014-01-08 22:28:23 +00:00
Thibault Jouan 56ea377e31 Fix coding standards (empty blocks) 2014-01-08 22:16:51 +00:00
Thibault Jouan 9971283841 Improve Recipe::DSL#initialize spec 2014-01-08 22:14:16 +00:00
Thibault Jouan 352fcd37f8 Modify recipe DSL API to take env on initialization 2014-01-08 22:13:14 +00:00
Thibault Jouan 1d6ae126ed Modify task DSL API to take env on initialization 2014-01-08 22:11:30 +00:00
Thibault Jouan 356d778746 Improve guard-rspec config (fail-fast and restart all) 2014-01-08 21:51:07 +00:00
Thibault Jouan edca69ffad Refactor Recipe specs:
* Use more classic specs for .evaluate_from_file;
* Fix coding standards.
2014-01-08 02:28:24 +00:00
Thibault Jouan b1010e44c5 Bump version to 0.1.9 2014-01-08 02:19:03 +00:00
Thibault Jouan 7dfbc3905b Rewrite CLI#run:
* Rename #run! to #run;
* Add #load_recipe method;
* Remove most builder/accessor/memoizable methods.
2014-01-08 02:10:18 +00:00
Thibault Jouan 4d34f66ec5 Add EX_USAGE constant in CLI class 2014-01-07 21:23:15 +00:00
Thibault Jouan 512c380517 Bump version to 0.1.9 2014-01-07 21:21:42 +00:00
Thibault Jouan f7efd9c42f Refactor CLI usage into CLI.run!:
* Add Producer::Core::CLI::ArgumentError class;
* Raise ArgumentError in CLI.new when recipe is missing;
* Remove #check_arguments! and #print_usage_and_exit, move code into
  .run! method.
2014-01-07 21:06:14 +00:00
Thibault Jouan dc9e7f1412 Improve CLI API related to standard output 2014-01-07 18:47:56 +00:00
Thibault Jouan d670d5dbdd Replace env.output interface with an IO like object 2013-12-23 23:31:15 +00:00
Thibault Jouan e8b0900721 Improve `echo' action cucumber feature wording 2013-12-23 23:31:15 +00:00
Thibault Jouan 9b975836dc Fix gemspec:
* Remove $LOAD_PATH modification;
* Dup VERSION string;
* Add a real summary.
2013-12-23 00:54:48 +00:00
Thibault Jouan 012c776880 Simplify Remote::Environment with factory method:
* Implement .new_from_string factory class method;
* Rename private method #parse_from_string as class method
  .string_to_hash;
* Remove argument kind detection logic in constructor.
2013-12-21 03:08:01 +00:00
Thibault Jouan 4885483d75 Bump version to 0.1.7 2013-12-20 23:35:02 +00:00
Thibault Jouan e8be44d1f0 Implement `macro' recipe keyword 2013-12-20 23:19:16 +00:00
Thibault Jouan 43a781dc78 Remove Task::DSL.evaluate method 2013-12-20 11:43:18 +00:00
Thibault Jouan 366c682152 Remove Recipe::DSL.evaluate method 2013-12-20 11:24:30 +00:00
Thibault Jouan d83b11d07b Remove Condition::DSL.evaluate method 2013-12-20 11:24:30 +00:00
Thibault Jouan 9422705ad4 Fix coding standards in Remote (extra parentheses) 2013-12-20 11:24:30 +00:00
Thibault Jouan 9251c6af8e Improve coding standards 2013-12-20 06:46:28 +00:00
Thibault Jouan 0b68a8165d Bump version to 0.1.6 2013-12-20 06:28:03 +00:00
Thibault Jouan 892a9862fc Implement `file_write' action 2013-12-20 06:26:21 +00:00
Thibault Jouan 188ca2e08d Fix coding standards in Remote::FS specs 2013-12-20 00:11:05 +00:00
Thibault Jouan 96daed624f Bump version to 0.1.5 2013-12-19 23:26:26 +00:00
Thibault Jouan 653a630645 Improve Env#target spec 2013-12-19 23:25:34 +00:00
Thibault Jouan 1ed17e6064 Fix Condition#! specs 2013-12-19 23:17:03 +00:00
Thibault Jouan 5fd4f3b371 Move Task::DSL#condition specs to better location 2013-12-19 22:49:20 +00:00
Thibault Jouan 921fc8d3f9 Refactor Remote::Environment spec 2013-12-19 22:49:20 +00:00
Thibault Jouan ef0307fbb5 Improve small details in specs:
* Fix coding standards;
* Simplify some expectations (eq instead of be matcher);
* Expect identity on block instead of calling;
* Change some before call as oneliners;
* Avoid shadowing variable names;
* Improve wording where needed.
2013-12-19 22:46:56 +00:00
Thibault Jouan f5224c7569 Improve wording in Env#initialize specs 2013-12-19 21:00:11 +00:00
Thibault Jouan a80843699e Improve Condition.evaluate specs 2013-12-19 20:57:05 +00:00
Thibault Jouan fe1eb5bc1a Simplify actions specs 2013-12-19 20:37:49 +00:00
Thibault Jouan 35621e1f5f Implement condition DSL negated test prefix (no_*)
* Allow no_* to be used for every tests in condition DSL:
  condition { no_has_env :shell, '/bin/sh' };
* Modify Test constructor to accept negated: named argument, implement
  #negated? and #pass?;
* Rename #success? to #verify in all test classes.
2013-12-19 20:22:44 +00:00
Thibault Jouan cfe9a009ae Revert "Remove deprecated rspec option"
This reverts commit 5e6f5f4861.
2013-12-19 20:21:24 +00:00
Thibault Jouan b9e48a9cc4 Fix some wording issues in Test specs 2013-12-19 19:52:07 +00:00
Thibault Jouan 5e6f5f4861 Remove deprecated rspec option 2013-12-19 19:47:29 +00:00
Thibault Jouan a692efe96d Replace be_true' matchers with be true' in specs 2013-12-19 19:46:32 +00:00
Thibault Jouan 3b3542fc66 Fix an example in Task::DSL.evaluate specs 2013-12-19 19:45:37 +00:00
Thibault Jouan 217b8a203a Add missing empty line in test spec 2013-10-01 19:38:17 +00:00
Thibault Jouan a36b30dd3c Bump version to 0.1.4 2013-10-01 19:38:09 +00:00
Thibault Jouan 85a47df547 Use SSH user name configured for a given target:
When a user is configured for the targeted host name, use it for SSH
authentification instead of the name of current user logged in.

* Modify Remote#user_name to use configured user name.
2013-09-28 20:07:36 +00:00
Thibault Jouan 768a6755de Implement Remote#config:
Load SSH configuration for targeted host name.
2013-09-26 19:22:07 +00:00
Thibault Jouan 9985fceb63 Extract logic for current target ssh user name:
Add Remote#user_name method, with code returning which user name
will be used for SSH authentication.
2013-09-26 18:34:19 +00:00
Thibault Jouan 868c502531 Remove multibyte char from Remote::FS spec 2013-09-26 01:00:06 +00:00
Thibault Jouan c281687bfb Bump version to 0.1.3 2013-09-26 00:30:41 +00:00
Thibault Jouan 2cbe1726f7 Implement `has_file' condition keyword 2013-09-26 00:28:40 +00:00
Thibault Jouan 3492382968 Implement Remote::FS#has_file? 2013-09-26 00:28:40 +00:00
Thibault Jouan 91f2bc3567 Implement Remote#fs 2013-09-26 00:28:40 +00:00
Thibault Jouan 99710b0df9 Implement Remote::FS#sftp 2013-09-26 00:28:40 +00:00
Thibault Jouan d240df0281 Add Remote::FS class 2013-09-26 00:28:40 +00:00
Thibault Jouan 8531c49e6d Implement NetSSHStoryHelpers#sftp_story 2013-09-26 00:28:39 +00:00
Thibault Jouan 0529fab3c2 Import Net::SSH::Test::Channel code from net-sftp:
This class is included in net-ssh, but net-sftp adds some new methods
that we need for our tests. This code resides in net-sftp test helper,
and can't be required dynamicaly, this change adds a copy of the code we
need, hardcoded in NetSSHStoryHelpers.
2013-09-26 00:28:39 +00:00
Thibault Jouan b2dbd60830 Add net-sftp gem dependency 2013-09-26 00:28:39 +00:00
Thibault Jouan c01e143c86 Enable sftp subsystem in cucumber sshd config 2013-09-26 00:28:39 +00:00
Thibault Jouan e51adbdefa Bump version to 0.1.2 2013-09-26 00:20:39 +00:00
Thibault Jouan 9040420360 Improve net-ssh mock connection usage in specs 2013-09-24 21:08:01 +00:00
Thibault Jouan e676eb40d6 Transform Tests class in a module 2013-09-23 21:44:50 +00:00
Thibault Jouan 0307d6020a Remove uneeded once() calls from spec 2013-09-22 22:38:13 +00:00
Thibault Jouan 36cf2e041f Improve wording in sh cucumber feature 2013-09-07 21:40:59 +00:00
Thibault Jouan 85109afd46 Fix missing Then keywords in cucumber features 2013-09-07 21:40:25 +00:00
Thibault Jouan 33a2b9de5a Refactor producer invocation in cucumber features:
Use "When I successfully execute" instead of "When I execute", and
assert that exit status code was successful in this new step.
2013-09-06 20:10:28 +00:00
Thibault Jouan 0a9f7e38af Simplify Task::DSL.evaluate spec 2013-08-22 10:45:12 +00:00
Thibault Jouan 782c8f8498 Fix coding standards in specs (parenthesis usage) 2013-08-22 00:23:07 +00:00
Thibault Jouan a555df40c6 Refactor interpreter spec 2013-08-22 00:22:16 +00:00
Thibault Jouan 856e78245f Remove extra empty line in echo action spec 2013-08-22 00:21:43 +00:00
Thibault Jouan 7a1c01a299 Remove empty cucumber support file 2013-08-22 00:11:09 +00:00
Thibault Jouan 8247f3a973 Bump version to 0.1.1 2013-08-20 03:53:38 +00:00
Thibault Jouan f42fd856ff Fix missing gem description 2013-08-20 03:53:22 +00:00
Thibault Jouan 5d3173977f Bump version to 0.1.0 2013-08-20 03:16:45 +00:00
Thibault Jouan 04afc82a29 Implement `has_env' condition keyword 2013-08-20 03:03:17 +00:00
Thibault Jouan b0ea7d876e Implement Remote#environment:
Build and return a Remote::Environment instance, with the output of
`env` command execution.
2013-08-20 03:03:07 +00:00
Thibault Jouan 513ba4eedb Implement basic Remote::Environment class:
Represent a registry for remote environment variables, will follow an
API similar to Hash except the constructor. Currently only #has_key? is
implemented.
2013-08-20 02:13:54 +00:00
Thibault Jouan ed99c191e0 Build conditions with DSL evaluated tests:
In Condition:

  * Modify constructor to accepts tests and a default return value;
  * Implement #met?;
  * Modify #! so that it return the negated value returned by #met?.

  In Condition::DSL:

  * Modify .evaluate to build the condition with tests and the value
    returned by a the evaluated condition block.

  Add a basic Test base class, with env and arguments as attributes.

  Add some spec helpers to build some easily testable kind of Test
instances (as test doubles).
2013-08-18 00:29:36 +00:00
Thibault Jouan 00a11e159f Use instance_eval in Condition::DSL#evaluate:
Use instance_eval so that the assigned block is evaluated inside the
DSL sandbox instance, giving access to all required methods and instance
variables.
2013-08-18 00:29:36 +00:00
Thibault Jouan 3a0ce82799 Improve Condition DSL framework:
Add the necessary API so that we can implement new tests easily as new
standalone classes.

  In Condition::DSL:

* Add #tests accessor;
* Modify constructor so that it accepts the env;
* Implement .define_test(keyword, class) method.
2013-08-18 00:29:36 +00:00
Thibault Jouan 639bdc1c73 Implement basic condition DSL framework for tests:
Instead of interrupting task evaluation when condition is not met,
allow the whole task to be evaluated (including condition and
evaluation) so that the interpreter will get all tasks actions (whether
condition is met or not) and be able to query the condition.

* Modify Interpreter#process_task: test if task condition is met before
  applying the actions;
* Implement condition handling in Task and Task::DSL;
* Implement Condition and Condition::DSL (useless as they are, but
  needed to implement later test keywords as part of the condition DSL.
2013-08-18 00:29:14 +00:00
Thibault Jouan 0008f0255a Fix confusing local variable name in Task spec 2013-08-17 00:45:09 +00:00
Thibault Jouan b4e6fa3ef6 Fix sort order of main internal requires 2013-08-17 00:44:28 +00:00
Thibault Jouan b6adc0ba43 Fix wording in Task#initialize spec 2013-08-16 21:08:33 +00:00
Thibault Jouan e4a4211a7b Rename Worker class as Interpreter 2013-08-16 19:30:51 +00:00
Thibault Jouan 5a4c8c02bc Fix coding standards in Task class 2013-08-15 22:35:10 +00:00
Thibault Jouan a028b8922f Increase Task.evaluate spec coverage 2013-08-15 22:34:13 +00:00
Thibault Jouan d4d5222261 Refactor task DSL usages:
Remove most of task evaluation code from Task class, rely on
Task::DSL.evaluate to get an evaluated task.

* Task: remove #evaluate, change constructor prototype to accept actions
  instead of a block, implement .evaluate(name, env &block);
* Implement Task::DSL.evaluate method;
* Recipe::DSL: remove tasks evaluation from#evaluate, modify #task to
  use Task.evaluate to return the new task to be rigstered.
2013-08-15 22:28:16 +00:00
Thibault Jouan 000c21e094 Remove uneeded call in Recipe::DSL#env spec 2013-08-15 22:28:11 +00:00
Thibault Jouan a675c9c910 Implement `echo' task action 2013-08-14 23:43:36 +00:00
Thibault Jouan f0e144cebd Refactor and simplify recipe DSL evaluation usages:
Remove most of recipe evaluation code in Recipe class, and rely on
Recipe::DSL to get evaluated recipes.

* Remove Recipe#evaluate call from CLI, rely on
  Recipe.evaluate_from_file to get the evaluated recipe;
* Implement Recipe.evaluate_from_file(filepath, env);
* Implement Recipe::DSL.evaluate(code, env);
* Remove code and filepath accessor on Recipe;
* Remove Recipe.from_file and Recipe#evaluate methods;
* Move task evaluations in Recipe::DSL#evaluate;
* Modify Recipe constructor so that it accepts tasks as argument.
2013-08-14 19:48:43 +00:00
Thibault Jouan 7c5d5b0417 Improve Recipe::DSL#initialize spec
Fix current examples by testing assignations, and add missing example
about @tasks assignation.
2013-08-13 22:47:23 +00:00
Thibault Jouan 53db841b2d Remove Env#current_recipe attribute 2013-08-13 01:36:33 +00:00
Thibault Jouan a5d9ca26f4 Remove error handling for evaluation errors 2013-08-13 00:42:14 +00:00
Thibault Jouan 0904fa1fc9 Implement Worker class:
* Move recipe processing code in the worker;
* Refactor CLI and use the the worker;
* Implement Recipe#tasks and remove tasks application during evaluation,
  tasks are now applied by the worker after all evaluations are done.
2013-08-10 14:47:02 +00:00
Thibault Jouan ec44d01c36 Fix coding standards in shell command action spec 2013-08-10 14:46:31 +00:00