condi 0.0.8 → 1.0.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
+ .yardoc
2
+ .bundle
3
+ Gemfile.lock
4
+ doc
5
+ coverage
6
+ pkg
7
+ .rvmrc
@@ -0,0 +1,7 @@
1
+ --no-private
2
+ --protected
3
+ --title "Condi Documentation"
4
+ --markup markdown
5
+ --readme README.md
6
+ -
7
+ MIT-LICENSE
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ # this file is provided in case you wish to setup a development environment for the gem quickly
2
+ # using 'bundle install'. It is not a requirement of using the gem itself.
3
+
4
+ source 'https://rubygems.org'
5
+
6
+ # Specify your gem's dependencies in data_hut.gemspec
7
+ gemspec
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.libs << 'lib'
7
+ t.test_files = FileList['test/test*.rb']
8
+ t.verbose = true
9
+ end
10
+ task :default => :test
11
+
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/condi/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Larry Kyrala"]
6
+ gem.email = ["larry.kyrala@gmail.com"]
7
+ gem.description = %q{Conditional UI predicates for Rails - a clean and simple approach to separate business logic from your views and models.}
8
+ gem.summary = %q{Lightweight rules engine for Rails}
9
+ gem.homepage = "https://github.com/coldnebo/condi"
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "condi"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Condi::VERSION
17
+
18
+ gem.add_dependency 'actionpack'
19
+
20
+ gem.add_development_dependency 'mocha'
21
+ gem.add_development_dependency 'pry'
22
+ gem.add_development_dependency 'yard'
23
+ gem.add_development_dependency 'redcarpet'
24
+ gem.add_development_dependency 'simplecov'
25
+
26
+ end
@@ -1,65 +1,2 @@
1
- # Include this module in an ActionController to define predicates or synonyms within an action context that
2
- # can be used later in the related action view.
3
- # @example
4
- # class StoreController
5
- # include Condi
6
- # ...
7
- # end
8
- module Condi
9
-
10
- # define a method on the controller which is callable from the related view and returns a true or false value.
11
- # @example define a predicate that determines whether or not to show a "free shipping" option.
12
- # predicate(:show_free_shipping?) { user.new_customer? && cart.amount > 100 }
13
- # @example define a predicate that takes an element of a collection as an argument.
14
- # predicate(:shipping?) { |item| @items.count >= 3 &&
15
- # item.status == :shipped &&
16
- # DeliveryService.status(item.tracking_number) !~ /arrived/ }
17
- # @example define a synonym that returns a css class based on item status
18
- # synonym(:css_for_item_status) do |item|
19
- # if @items.count >= 3 && item.status == :shipped
20
- # if DeliveryService.status(item.tracking_number) !~ /arrived/
21
- # "shipping"
22
- # else
23
- # "shipped"
24
- # end
25
- # else
26
- # "processing"
27
- # end
28
- # end
29
- # @param [Symbol] method_name name of the predicate or synonym method. (e.g. :show_action_button?)
30
- # @param [Proc] block {} or do...end block.
31
- # @note A *synonym* is an alias for defining methods that return values other than true or false.
32
- # @note You are not required to end a predicate with a question mark, however it is conventional in Ruby to do so.
33
- # @note Predicates can only be called during the request scope they are defined in, otherwise a RuntimeError is raised. This restriction prevents the associated closures from inadvertently leaking previous request data when the controller classes are cached (i.e. in production).
34
- # @note Predicates are semantically lambdas and may contain returns.
35
- # @see the full example in the <a href="index.html">README</a>.
36
- def predicate(method_name, &block)
37
- self.class.instance_eval do
38
- # this is the request id at the moment the predicate is defined
39
- request_id = eval("request.object_id",block.binding)
40
-
41
- # We need to keep the block impl as a method/lambda so that it supports returns
42
- # by using this particular invocation of define_method...
43
- method_name_impl = "impl_#{method_name}".to_sym
44
- define_method(method_name_impl, &block)
45
-
46
- # Next, this invocation of define_method creates a Proc, which
47
- # wraps the impl and allows us to check the request id.
48
- define_method(method_name) do |*args|
49
- # this is the request id at the moment the predicate is called
50
- check_request_id = request.object_id
51
- # if they don't match, raise an error!
52
- unless check_request_id == request_id
53
- raise RuntimeError, "predicate '#{method_name}' cannot be called outside of the request scope it was defined in (#{request_id}). please redefine the predicate in this request scope (#{check_request_id}).", caller(2)
54
- end
55
- send(method_name_impl, *args)
56
- end
57
-
58
- # finally, expose the wrapped predicate to the view.
59
- helper_method(method_name)
60
- end
61
- end
62
-
63
- # a synonym can be used to define methods that return values besides true and false.
64
- alias_method :synonym, :predicate
65
- end
1
+ require "condi/version"
2
+ require "condi/condi"
@@ -0,0 +1,65 @@
1
+ # Include this module in an ActionController to define predicates or synonyms within an action context that
2
+ # can be used later in the related action view.
3
+ # @example
4
+ # class StoreController
5
+ # include Condi
6
+ # ...
7
+ # end
8
+ module Condi
9
+
10
+ # define a method on the controller which is callable from the related view and returns a true or false value.
11
+ # @example define a predicate that determines whether or not to show a "free shipping" option.
12
+ # predicate(:show_free_shipping?) { user.new_customer? && cart.amount > 100 }
13
+ # @example define a predicate that takes an element of a collection as an argument.
14
+ # predicate(:shipping?) { |item| @items.count >= 3 &&
15
+ # item.status == :shipped &&
16
+ # DeliveryService.status(item.tracking_number) !~ /arrived/ }
17
+ # @example define a synonym that returns a css class based on item status
18
+ # synonym(:css_for_item_status) do |item|
19
+ # if @items.count >= 3 && item.status == :shipped
20
+ # if DeliveryService.status(item.tracking_number) !~ /arrived/
21
+ # "shipping"
22
+ # else
23
+ # "shipped"
24
+ # end
25
+ # else
26
+ # "processing"
27
+ # end
28
+ # end
29
+ # @param [Symbol] method_name name of the predicate or synonym method. (e.g. :show_action_button?)
30
+ # @param [Proc] block {} or do...end block.
31
+ # @note A *synonym* is an alias for defining methods that return values other than true or false.
32
+ # @note You are not required to end a predicate with a question mark, however it is conventional in Ruby to do so.
33
+ # @note Predicates can only be called during the request scope they are defined in, otherwise a RuntimeError is raised. This restriction prevents the associated closures from inadvertently leaking previous request data when the controller classes are cached (i.e. in production).
34
+ # @note Predicates are semantically lambdas and may contain returns.
35
+ # @see the full example in the <a href="index.html">README</a>.
36
+ def predicate(method_name, &block)
37
+ self.class.instance_eval do
38
+ # this is the request id at the moment the predicate is defined
39
+ request_id = eval("request.object_id",block.binding)
40
+
41
+ # We need to keep the block impl as a method/lambda so that it supports returns
42
+ # by using this particular invocation of define_method...
43
+ method_name_impl = "impl_#{method_name}".to_sym
44
+ define_method(method_name_impl, &block)
45
+
46
+ # Next, this invocation of define_method creates a Proc, which
47
+ # wraps the impl and allows us to check the request id.
48
+ define_method(method_name) do |*args|
49
+ # this is the request id at the moment the predicate is called
50
+ check_request_id = request.object_id
51
+ # if they don't match, raise an error!
52
+ unless check_request_id == request_id
53
+ raise RuntimeError, "predicate '#{method_name}' cannot be called outside of the request scope it was defined in (#{request_id}). please redefine the predicate in this request scope (#{check_request_id}).", caller(2)
54
+ end
55
+ send(method_name_impl, *args)
56
+ end
57
+
58
+ # finally, expose the wrapped predicate to the view.
59
+ helper_method(method_name)
60
+ end
61
+ end
62
+
63
+ # a synonym can be used to define methods that return values besides true and false.
64
+ alias_method :synonym, :predicate
65
+ end
@@ -0,0 +1,3 @@
1
+ module Condi
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,3 @@
1
+ module Condi
2
+ VERSION = "0.0.8"
3
+ end
@@ -2,7 +2,7 @@ require 'simplecov'
2
2
  SimpleCov.start
3
3
 
4
4
  require 'test/unit'
5
- require 'mocha'
5
+ require 'mocha/setup'
6
6
 
7
7
  require 'action_controller'
8
8
  require 'condi'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: condi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,20 +9,125 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-14 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2013-03-03 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: actionpack
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: mocha
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: pry
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: yard
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: redcarpet
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: simplecov
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
14
110
  description: Conditional UI predicates for Rails - a clean and simple approach to
15
111
  separate business logic from your views and models.
16
- email: larry.kyrala@gmail.com
112
+ email:
113
+ - larry.kyrala@gmail.com
17
114
  executables: []
18
115
  extensions: []
19
116
  extra_rdoc_files: []
20
117
  files:
21
- - lib/condi.rb
22
- - README.md
118
+ - .gitignore
119
+ - .yardopts
120
+ - Gemfile
23
121
  - MIT-LICENSE
122
+ - README.md
123
+ - Rakefile
124
+ - condi.gemspec
125
+ - lib/condi.rb
126
+ - lib/condi/condi.rb
127
+ - lib/condi/version.rb
128
+ - lib/version.rb
24
129
  - test/test_condi.rb
25
- homepage: http://github.com/coldnebo/condi
130
+ homepage: https://github.com/coldnebo/condi
26
131
  licenses: []
27
132
  post_install_message:
28
133
  rdoc_options: []
@@ -34,21 +139,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
34
139
  - - ! '>='
35
140
  - !ruby/object:Gem::Version
36
141
  version: '0'
37
- segments:
38
- - 0
39
- hash: 737326911507565152
40
142
  required_rubygems_version: !ruby/object:Gem::Requirement
41
143
  none: false
42
144
  requirements:
43
145
  - - ! '>='
44
146
  - !ruby/object:Gem::Version
45
147
  version: '0'
46
- requirements:
47
- - rails
148
+ requirements: []
48
149
  rubyforge_project:
49
150
  rubygems_version: 1.8.24
50
151
  signing_key:
51
152
  specification_version: 3
52
- summary: Condi
153
+ summary: Lightweight rules engine for Rails
53
154
  test_files:
54
155
  - test/test_condi.rb
156
+ has_rdoc: