arrayfu 0.0.8 → 0.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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/arrayfu.gemspec +0 -0
  3. data/lib/arrayfu/array_definition.rb +84 -0
  4. data/lib/arrayfu/arrayfu.rb +31 -0
  5. data/lib/arrayfu/generate_mutators.rb +28 -0
  6. data/lib/arrayfu/{readable_step.rb → generate_readers.rb} +6 -4
  7. data/lib/arrayfu/generate_visitors.rb +18 -0
  8. data/lib/arrayfu/{writeable_step.rb → generate_writers.rb} +6 -4
  9. data/lib/arrayfu/initializer.rb +21 -0
  10. data/lib/arrayfu/item_constraint.rb +17 -0
  11. data/lib/arrayfu/module_registry.rb +9 -7
  12. data/lib/arrayfu/mutator_definition.rb +15 -0
  13. data/lib/arrayfu/version.rb +1 -1
  14. data/lib/arrayfu/visitor_definition.rb +19 -0
  15. data/lib/arrayfu.rb +10 -9
  16. data/spec/examples/{instance_usage.rb → usage.rb} +169 -72
  17. data/spec/specs/{dsl_spec.rb → array_definition_spec.rb} +20 -22
  18. data/spec/specs/dsl_usage_spec.rb +86 -52
  19. data/spec/specs/{mutator_step_spec.rb → generate_mutators_spec.rb} +5 -5
  20. data/spec/specs/{readable_step_spec.rb → generate_readers_spec.rb} +3 -3
  21. data/spec/specs/{visitor_detail_step_spec.rb → generate_visitors_spec.rb} +5 -5
  22. data/spec/specs/{writeable_step_spec.rb → generate_writers_step_spec.rb} +3 -3
  23. data/spec/specs/{object_extensions_spec.rb → initializer_spec.rb} +4 -1
  24. data/spec/specs/{add_criterion_spec.rb → item_constraint_spec.rb} +11 -11
  25. data/spec/specs/sample.rb +2 -0
  26. metadata +28 -29
  27. data/lib/arrayfu/add_criterion.rb +0 -16
  28. data/lib/arrayfu/dsl.rb +0 -43
  29. data/lib/arrayfu/mutator_detail.rb +0 -10
  30. data/lib/arrayfu/mutator_step.rb +0 -18
  31. data/lib/arrayfu/object_extensions.rb +0 -27
  32. data/lib/arrayfu/visitor_detail.rb +0 -10
  33. data/lib/arrayfu/visitor_detail_step.rb +0 -14
  34. data/spec/examples/class_usage.rb +0 -210
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 58efd4dea89c84e7f69003b057039d86eb8b898c
4
- data.tar.gz: 791459773138860ed2c01b06774602394f213acc
3
+ metadata.gz: a90d155b62053d740976ddc34cfbbcf0f5b30d04
4
+ data.tar.gz: bfd56440c6bfc8e35b43b9614f13135c3c75effc
5
5
  SHA512:
6
- metadata.gz: a6f67fc454e8582bf2440ac91db60261f85c1d2573f07b4a5f0bde76e4e524196fbc43097482647e39f27efe46a08b630fddd47cdfd4e57e381bc230b8371881
7
- data.tar.gz: b77ea3885f8597eb06859afd678f35776d98dc63a6c3e6815bb4609d7d1d57c5f94d93ade98a02cbd13e217b041f73acc87e788231fc31aaeef85b202fe6622e
6
+ metadata.gz: f5eb88f16b8067459c963d21389ff8904fa2b7a3d139ae0cdfabfd1278d0da9d52479df80ad37d4ca12e91a99d9b7c14b73fc7336d02184efb995b7aeb79d611
7
+ data.tar.gz: 2ef91b2bca6aaaa484d7074db470c74462dc49d59a69dfad750218778e61d246908517858020b7d8468ddd347eda992f28881d03b215dc059f641eaa5c27e119
data/arrayfu.gemspec CHANGED
File without changes
@@ -0,0 +1,84 @@
1
+ module ArrayFu
2
+ class ArrayDefinition
3
+ include Initializer
4
+
5
+ attr_accessor :name
6
+ attr_accessor :writable
7
+ attr_accessor :readable
8
+ attr_accessor :mutators
9
+ attr_accessor :visitors
10
+ attr_accessor :constraints
11
+
12
+ def initialize(name)
13
+ @name = name
14
+ initialize_arrays :mutators, :visitors, :constraints
15
+ initialize_false :writable, :readable
16
+ end
17
+
18
+ def read_and_write
19
+ writable
20
+ readable
21
+ end
22
+
23
+ def writable
24
+ @writable = true
25
+ end
26
+
27
+ def readable
28
+ @readable = true
29
+ end
30
+
31
+ def writable?
32
+ @writable ||= false
33
+ end
34
+
35
+ def readable?
36
+ @readable ||= false
37
+ end
38
+
39
+ def configure_using(*configurators)
40
+ configurators.each do|configurator|
41
+ method = configurator.respond_to?(:configure) ? :configure : 'call'.to_sym
42
+ configurator.send(method, self)
43
+ end
44
+ end
45
+
46
+ def mutator(*names, &block)
47
+ names.each do |mutator_name|
48
+ self.mutators.push(MutatorDefinition.new(mutator_name, block))
49
+ end
50
+ end
51
+
52
+ module NoFailure
53
+ extend self
54
+
55
+ def run(description, value)
56
+ end
57
+ end
58
+
59
+ def each_mutator(&block)
60
+ mutators.each &block
61
+ end
62
+
63
+ def each_constraint(&block)
64
+ constraints.each &block
65
+ end
66
+
67
+ def each_visitor(&block)
68
+ visitors.each &block
69
+ end
70
+
71
+ def addition_constraint(constraint, fail_option = NoFailure)
72
+ self.constraints.push(ItemConstraint.new(constraint, fail_option))
73
+ end
74
+ alias :new_item_must :addition_constraint
75
+
76
+ def process_using(name,visitor)
77
+ self.visitors.push(VisitorDefinition.new(name, visitor))
78
+ end
79
+
80
+ def variable_name
81
+ "@#{@name}"
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,31 @@
1
+ module ArrayFu
2
+ include Initializer
3
+
4
+ def self.included(base)
5
+ base.extend ClassMethods
6
+ end
7
+
8
+ def initialize_arrayfu
9
+ self.class.each_array_definition do |array_definition|
10
+ initialize_arrays(array_definition.name)
11
+ ArrayFu::ModuleRegistry.configure(self, array_definition)
12
+ end
13
+ end
14
+
15
+ module ClassMethods
16
+ def array_definitions
17
+ @array_definitions ||= []
18
+ end
19
+
20
+ def each_array_definition(&block)
21
+ array_definitions.each &block
22
+ end
23
+
24
+ def array(name, &block)
25
+ array_definition = ArrayDefinition.new(name)
26
+ yield array_definition if block_given?
27
+ array_definitions << array_definition
28
+ array_definition
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,28 @@
1
+ module ArrayFu
2
+ module GenerateMutators
3
+ extend self
4
+
5
+ def create_using(builder)
6
+ Module.new do
7
+ builder.each_mutator do |mutator|
8
+ define_method(mutator.name) do|value|
9
+ array_var = instance_variable_get(builder.variable_name)
10
+ continue_add = true
11
+
12
+ builder.each_constraint do |constraint|
13
+ continue_add &= constraint.apply_to(value)
14
+ end
15
+
16
+ return unless continue_add
17
+
18
+ if mutator.block
19
+ mutator.run(self, value)
20
+ else
21
+ array_var.push(value)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,13 +1,15 @@
1
1
  module ArrayFu
2
- class ReadableStep
2
+ module GenerateReaders
3
+ extend self
4
+
3
5
  def create_using(builder)
4
6
  Module.new do
5
- if (builder.readable)
7
+ if builder.readable?
6
8
  define_method(builder.name) do
7
- return instance_variable_get("@#{builder.name}")
9
+ return instance_variable_get(builder.variable_name)
8
10
  end
9
11
  end
10
12
  end
11
- end
12
13
  end
13
14
  end
15
+ end
@@ -0,0 +1,18 @@
1
+ module ArrayFu
2
+ module GenerateVisitors
3
+ extend self
4
+
5
+ def create_using(builder)
6
+ Module.new do
7
+ builder.each_visitor do |visitor|
8
+ define_method(visitor.name) do
9
+ array_var = instance_variable_get(builder.variable_name)
10
+ array_var.each do |item|
11
+ visitor.process(item)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,13 +1,15 @@
1
1
  module ArrayFu
2
- class WriteableStep
2
+ module GenerateWriters
3
+ extend self
4
+
3
5
  def create_using(builder)
4
6
  Module.new do
5
- if (builder.writable)
7
+ if (builder.writable?)
6
8
  define_method("#{builder.name}=") do|value|
7
- instance_variable_set("@#{builder.name}",value)
9
+ instance_variable_set(builder.variable_name, value)
8
10
  end
9
11
  end
10
12
  end
11
- end
12
13
  end
13
14
  end
15
+ end
@@ -0,0 +1,21 @@
1
+ module ArrayFu
2
+ module Initializer
3
+ def initialize_defaults(builder, *names)
4
+ names.each do|item|
5
+ instance_variable_set("@#{item}", builder.call)
6
+ end
7
+ end
8
+
9
+ def initialize_arrays(*names)
10
+ initialize_defaults(lambda { [] }, *names)
11
+ end
12
+
13
+ def initialize_hashes(*names)
14
+ initialize_defaults(lambda { {} }, *names)
15
+ end
16
+
17
+ def initialize_false(*names)
18
+ initialize_defaults(lambda { false }, *names)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ module ArrayFu
2
+ class ItemConstraint
3
+ attr_accessor :constraint
4
+ attr_accessor :failure_action
5
+
6
+ def initialize(constraint, failure_action)
7
+ @constraint = constraint
8
+ @failure_action = failure_action
9
+ end
10
+
11
+ def apply_to(value)
12
+ result = constraint.matches?(value)
13
+ failure_action.run(constraint.name, value) unless result
14
+ return result
15
+ end
16
+ end
17
+ end
@@ -1,16 +1,18 @@
1
1
  module ArrayFu
2
- class ModuleRegistry
2
+ module ModuleRegistry
3
3
  def self.all_modules
4
4
  return [
5
- MutatorStep.new,
6
- VisitorDetailStep.new,
7
- WriteableStep.new,
8
- ReadableStep.new
5
+ GenerateMutators,
6
+ GenerateVisitors,
7
+ GenerateWriters,
8
+ GenerateReaders
9
9
  ]
10
10
  end
11
11
 
12
- def self.configure(target,dsl)
13
- all_modules.each{|the_module| target.extend(the_module.create_using(dsl))}
12
+ def self.configure(target, dsl)
13
+ all_modules.each do |the_module|
14
+ target.extend(the_module.create_using(dsl))
15
+ end
14
16
  end
15
17
  end
16
18
  end
@@ -0,0 +1,15 @@
1
+ module ArrayFu
2
+ class MutatorDefinition
3
+ attr_reader :name
4
+ attr_reader :block
5
+
6
+ def initialize(name, block)
7
+ @name = name
8
+ @block = block
9
+ end
10
+
11
+ def run(target, value)
12
+ target.instance_exec value, &block
13
+ end
14
+ end
15
+ end
@@ -1,3 +1,3 @@
1
1
  module ArrayFu
2
- VERSION = "0.0.8"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -0,0 +1,19 @@
1
+ module ArrayFu
2
+ class VisitorDefinition
3
+ attr_accessor :name
4
+ attr_accessor :visitor
5
+
6
+ def initialize(name, visitor)
7
+ @name = name
8
+ @visitor = visitor
9
+ end
10
+
11
+ def process(item)
12
+ if visitor.respond_to?(:run_using)
13
+ visitor.run_using(item)
14
+ else
15
+ item.send(visitor)
16
+ end
17
+ end
18
+ end
19
+ end
data/lib/arrayfu.rb CHANGED
@@ -1,10 +1,11 @@
1
- require 'arrayfu/add_criterion'
2
- require 'arrayfu/dsl'
1
+ require 'arrayfu/initializer'
2
+ require 'arrayfu/item_constraint'
3
+ require 'arrayfu/array_definition'
3
4
  require 'arrayfu/module_registry'
4
- require 'arrayfu/mutator_detail'
5
- require 'arrayfu/mutator_step'
6
- require 'arrayfu/object_extensions'
7
- require 'arrayfu/readable_step'
8
- require 'arrayfu/visitor_detail'
9
- require 'arrayfu/visitor_detail_step'
10
- require 'arrayfu/writeable_step'
5
+ require 'arrayfu/mutator_definition'
6
+ require 'arrayfu/generate_mutators'
7
+ require 'arrayfu/generate_readers'
8
+ require 'arrayfu/visitor_definition'
9
+ require 'arrayfu/generate_visitors'
10
+ require 'arrayfu/generate_writers'
11
+ require 'arrayfu/arrayfu'