finitio 0.0.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (177) hide show
  1. data/CHANGELOG.md +22 -0
  2. data/Gemfile +12 -0
  3. data/Gemfile.lock +64 -0
  4. data/LICENCE.md +22 -0
  5. data/Manifest.txt +11 -0
  6. data/README.md +148 -0
  7. data/Rakefile +11 -0
  8. data/finitio.gemspec +186 -0
  9. data/lib/finitio.rb +66 -0
  10. data/lib/finitio/Finitio/default.fio +29 -0
  11. data/lib/finitio/data_type.rb +29 -0
  12. data/lib/finitio/errors.rb +23 -0
  13. data/lib/finitio/support.rb +5 -0
  14. data/lib/finitio/support/attribute.rb +53 -0
  15. data/lib/finitio/support/collection_type.rb +25 -0
  16. data/lib/finitio/support/dress_helper.rb +68 -0
  17. data/lib/finitio/support/heading.rb +57 -0
  18. data/lib/finitio/support/type_factory.rb +184 -0
  19. data/lib/finitio/syntax.rb +50 -0
  20. data/lib/finitio/syntax/ad_type.rb +32 -0
  21. data/lib/finitio/syntax/any_type.rb +16 -0
  22. data/lib/finitio/syntax/attribute.rb +15 -0
  23. data/lib/finitio/syntax/builtin_type.rb +17 -0
  24. data/lib/finitio/syntax/constraint_def.rb +17 -0
  25. data/lib/finitio/syntax/constraints.rb +22 -0
  26. data/lib/finitio/syntax/contract.rb +37 -0
  27. data/lib/finitio/syntax/definitions.rb +18 -0
  28. data/lib/finitio/syntax/expression.rb +12 -0
  29. data/lib/finitio/syntax/external_pair.rb +17 -0
  30. data/lib/finitio/syntax/finitio.citrus +220 -0
  31. data/lib/finitio/syntax/finitio.sexp +114 -0
  32. data/lib/finitio/syntax/heading.rb +19 -0
  33. data/lib/finitio/syntax/inline_pair.rb +16 -0
  34. data/lib/finitio/syntax/lambda_expr.rb +15 -0
  35. data/lib/finitio/syntax/named_constraint.rb +17 -0
  36. data/lib/finitio/syntax/relation_type.rb +15 -0
  37. data/lib/finitio/syntax/seq_type.rb +16 -0
  38. data/lib/finitio/syntax/set_type.rb +16 -0
  39. data/lib/finitio/syntax/sub_type.rb +17 -0
  40. data/lib/finitio/syntax/support.rb +13 -0
  41. data/lib/finitio/syntax/system.rb +21 -0
  42. data/lib/finitio/syntax/tuple_type.rb +15 -0
  43. data/lib/finitio/syntax/type_def.rb +18 -0
  44. data/lib/finitio/syntax/type_ref.rb +17 -0
  45. data/lib/finitio/syntax/union_type.rb +16 -0
  46. data/lib/finitio/syntax/unnamed_constraint.rb +17 -0
  47. data/lib/finitio/system.rb +63 -0
  48. data/lib/finitio/type.rb +64 -0
  49. data/lib/finitio/type/ad_type.rb +112 -0
  50. data/lib/finitio/type/any_type.rb +47 -0
  51. data/lib/finitio/type/builtin_type.rb +56 -0
  52. data/lib/finitio/type/relation_type.rb +81 -0
  53. data/lib/finitio/type/seq_type.rb +51 -0
  54. data/lib/finitio/type/set_type.rb +52 -0
  55. data/lib/finitio/type/sub_type.rb +94 -0
  56. data/lib/finitio/type/tuple_type.rb +99 -0
  57. data/lib/finitio/type/union_type.rb +78 -0
  58. data/lib/finitio/version.rb +14 -0
  59. data/spec/acceptance/Finitio/test_default.rb +96 -0
  60. data/spec/acceptance/Finitio/test_parsing.rb +15 -0
  61. data/spec/acceptance/ad_type/test_in_finitio.rb +82 -0
  62. data/spec/acceptance/ad_type/test_in_ruby.rb +60 -0
  63. data/spec/spec_helper.rb +79 -0
  64. data/spec/unit/attribute/test_equality.rb +26 -0
  65. data/spec/unit/attribute/test_fetch_on.rb +50 -0
  66. data/spec/unit/attribute/test_initialize.rb +13 -0
  67. data/spec/unit/attribute/test_to_name.rb +10 -0
  68. data/spec/unit/heading/test_each.rb +28 -0
  69. data/spec/unit/heading/test_equality.rb +28 -0
  70. data/spec/unit/heading/test_initialize.rb +36 -0
  71. data/spec/unit/heading/test_size.rb +30 -0
  72. data/spec/unit/heading/test_to_name.rb +32 -0
  73. data/spec/unit/qrb/system.q +1 -0
  74. data/spec/unit/qrb/test_ast.rb +43 -0
  75. data/spec/unit/qrb/test_parse.rb +32 -0
  76. data/spec/unit/syntax/nodes/test_ad_type.rb +166 -0
  77. data/spec/unit/syntax/nodes/test_any_type.rb +30 -0
  78. data/spec/unit/syntax/nodes/test_attribute.rb +38 -0
  79. data/spec/unit/syntax/nodes/test_builtin_type.rb +44 -0
  80. data/spec/unit/syntax/nodes/test_comment.rb +26 -0
  81. data/spec/unit/syntax/nodes/test_constraint_def.rb +41 -0
  82. data/spec/unit/syntax/nodes/test_constraints.rb +86 -0
  83. data/spec/unit/syntax/nodes/test_contract.rb +134 -0
  84. data/spec/unit/syntax/nodes/test_expression.rb +43 -0
  85. data/spec/unit/syntax/nodes/test_heading.rb +58 -0
  86. data/spec/unit/syntax/nodes/test_named_constraint.rb +43 -0
  87. data/spec/unit/syntax/nodes/test_relation_type.rb +59 -0
  88. data/spec/unit/syntax/nodes/test_seq_type.rb +38 -0
  89. data/spec/unit/syntax/nodes/test_set_type.rb +38 -0
  90. data/spec/unit/syntax/nodes/test_spacing.rb +25 -0
  91. data/spec/unit/syntax/nodes/test_sub_type.rb +81 -0
  92. data/spec/unit/syntax/nodes/test_system.rb +48 -0
  93. data/spec/unit/syntax/nodes/test_tuple_type.rb +59 -0
  94. data/spec/unit/syntax/nodes/test_type_def.rb +33 -0
  95. data/spec/unit/syntax/nodes/test_type_ref.rb +37 -0
  96. data/spec/unit/syntax/nodes/test_union_type.rb +38 -0
  97. data/spec/unit/syntax/nodes/test_unnamed_constraint.rb +43 -0
  98. data/spec/unit/syntax/test_compile_type.rb +22 -0
  99. data/spec/unit/system/test_add_type.rb +47 -0
  100. data/spec/unit/system/test_dsl.rb +30 -0
  101. data/spec/unit/system/test_dup.rb +30 -0
  102. data/spec/unit/system/test_fetch.rb +42 -0
  103. data/spec/unit/system/test_get_type.rb +30 -0
  104. data/spec/unit/system/test_initialize.rb +10 -0
  105. data/spec/unit/test_finitio.rb +15 -0
  106. data/spec/unit/type/ad_type/test_default_name.rb +15 -0
  107. data/spec/unit/type/ad_type/test_dress.rb +55 -0
  108. data/spec/unit/type/ad_type/test_include.rb +22 -0
  109. data/spec/unit/type/ad_type/test_initialize.rb +40 -0
  110. data/spec/unit/type/ad_type/test_name.rb +20 -0
  111. data/spec/unit/type/any_type/test_default_name.rb +12 -0
  112. data/spec/unit/type/any_type/test_dress.rb +22 -0
  113. data/spec/unit/type/any_type/test_equality.rb +26 -0
  114. data/spec/unit/type/any_type/test_include.rb +22 -0
  115. data/spec/unit/type/any_type/test_initialize.rb +10 -0
  116. data/spec/unit/type/any_type/test_name.rb +24 -0
  117. data/spec/unit/type/builtin_type/test_default_name.rb +12 -0
  118. data/spec/unit/type/builtin_type/test_dress.rb +33 -0
  119. data/spec/unit/type/builtin_type/test_equality.rb +26 -0
  120. data/spec/unit/type/builtin_type/test_include.rb +22 -0
  121. data/spec/unit/type/builtin_type/test_initialize.rb +12 -0
  122. data/spec/unit/type/builtin_type/test_name.rb +24 -0
  123. data/spec/unit/type/relation_type/test_default_name.rb +16 -0
  124. data/spec/unit/type/relation_type/test_dress.rb +164 -0
  125. data/spec/unit/type/relation_type/test_equality.rb +32 -0
  126. data/spec/unit/type/relation_type/test_include.rb +46 -0
  127. data/spec/unit/type/relation_type/test_initialize.rb +26 -0
  128. data/spec/unit/type/relation_type/test_name.rb +24 -0
  129. data/spec/unit/type/seq_type/test_default_name.rb +14 -0
  130. data/spec/unit/type/seq_type/test_dress.rb +49 -0
  131. data/spec/unit/type/seq_type/test_equality.rb +26 -0
  132. data/spec/unit/type/seq_type/test_include.rb +43 -0
  133. data/spec/unit/type/seq_type/test_initialize.rb +28 -0
  134. data/spec/unit/type/seq_type/test_name.rb +24 -0
  135. data/spec/unit/type/set_type/test_default_name.rb +14 -0
  136. data/spec/unit/type/set_type/test_dress.rb +66 -0
  137. data/spec/unit/type/set_type/test_equality.rb +26 -0
  138. data/spec/unit/type/set_type/test_include.rb +43 -0
  139. data/spec/unit/type/set_type/test_initialize.rb +28 -0
  140. data/spec/unit/type/set_type/test_name.rb +24 -0
  141. data/spec/unit/type/sub_type/test_default_name.rb +14 -0
  142. data/spec/unit/type/sub_type/test_dress.rb +75 -0
  143. data/spec/unit/type/sub_type/test_equality.rb +34 -0
  144. data/spec/unit/type/sub_type/test_include.rb +34 -0
  145. data/spec/unit/type/sub_type/test_initialize.rb +16 -0
  146. data/spec/unit/type/sub_type/test_name.rb +24 -0
  147. data/spec/unit/type/tuple_type/test_default_name.rb +14 -0
  148. data/spec/unit/type/tuple_type/test_dress.rb +112 -0
  149. data/spec/unit/type/tuple_type/test_equality.rb +32 -0
  150. data/spec/unit/type/tuple_type/test_include.rb +38 -0
  151. data/spec/unit/type/tuple_type/test_initialize.rb +30 -0
  152. data/spec/unit/type/tuple_type/test_name.rb +24 -0
  153. data/spec/unit/type/union_type/test_default_name.rb +12 -0
  154. data/spec/unit/type/union_type/test_dress.rb +43 -0
  155. data/spec/unit/type/union_type/test_equality.rb +30 -0
  156. data/spec/unit/type/union_type/test_include.rb +28 -0
  157. data/spec/unit/type/union_type/test_initialize.rb +24 -0
  158. data/spec/unit/type/union_type/test_name.rb +20 -0
  159. data/spec/unit/type_factory/dsl/test_adt.rb +54 -0
  160. data/spec/unit/type_factory/dsl/test_any.rb +28 -0
  161. data/spec/unit/type_factory/dsl/test_attribute.rb +37 -0
  162. data/spec/unit/type_factory/dsl/test_attributes.rb +41 -0
  163. data/spec/unit/type_factory/dsl/test_builtin.rb +45 -0
  164. data/spec/unit/type_factory/dsl/test_relation.rb +85 -0
  165. data/spec/unit/type_factory/dsl/test_seq.rb +57 -0
  166. data/spec/unit/type_factory/dsl/test_set.rb +57 -0
  167. data/spec/unit/type_factory/dsl/test_subtype.rb +91 -0
  168. data/spec/unit/type_factory/dsl/test_tuple.rb +73 -0
  169. data/spec/unit/type_factory/dsl/test_union.rb +81 -0
  170. data/spec/unit/type_factory/factory/test_builtin.rb +24 -0
  171. data/spec/unit/type_factory/factory/test_seq_type.rb +44 -0
  172. data/spec/unit/type_factory/factory/test_set_type.rb +44 -0
  173. data/spec/unit/type_factory/factory/test_sub_type.rb +53 -0
  174. data/spec/unit/type_factory/factory/test_tuple_type.rb +43 -0
  175. data/tasks/gem.rake +73 -0
  176. data/tasks/test.rake +31 -0
  177. metadata +323 -7
data/CHANGELOG.md ADDED
@@ -0,0 +1,22 @@
1
+ # 0.4.0 / 2014-03-20
2
+
3
+ * Finitio(-rb) is born from the sources of Q(rb) 0.3.0
4
+ * Finitio.parse now recognizes Path-like objects (responding to :to_path),
5
+ allowing to parse files directly (through Pathname, Path, etc.).
6
+
7
+ # 0.3.0 / 2014-03-09
8
+
9
+ * Added AnyType abstraction, aka '.'
10
+ * Added support for external contracts in ADTs
11
+ * Added support for extracting an Abstract Syntax Tree from parsing result
12
+ * Allows camelCasing in constraint names
13
+
14
+ # 0.2.0 / 2014-03-04
15
+
16
+ * Fix dependencies in gemspec (judofyr)
17
+
18
+ # 0.1.0 / 2014-03-03
19
+
20
+ * Enhancements
21
+
22
+ * Birthday!
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :development do
6
+ gem "rake", "~> 10.0"
7
+ gem "rspec", "~> 2.14"
8
+ gem "cucumber", "~> 1.3"
9
+ gem "path", "~> 1.3"
10
+ gem "awesome_print", "~> 1.2"
11
+ gem 'coveralls', require: false
12
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,64 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ finitio (0.4.0)
5
+ citrus (~> 2.4)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ awesome_print (1.2.0)
11
+ builder (3.2.2)
12
+ citrus (2.4.1)
13
+ coveralls (0.7.0)
14
+ multi_json (~> 1.3)
15
+ rest-client
16
+ simplecov (>= 0.7)
17
+ term-ansicolor
18
+ thor
19
+ cucumber (1.3.8)
20
+ builder (>= 2.1.2)
21
+ diff-lcs (>= 1.1.3)
22
+ gherkin (~> 2.12.1)
23
+ multi_json (>= 1.7.5, < 2.0)
24
+ multi_test (>= 0.0.2)
25
+ diff-lcs (1.2.5)
26
+ docile (1.1.3)
27
+ gherkin (2.12.2)
28
+ multi_json (~> 1.3)
29
+ mime-types (2.1)
30
+ multi_json (1.8.4)
31
+ multi_test (0.0.2)
32
+ path (1.3.3)
33
+ rake (10.1.1)
34
+ rest-client (1.6.7)
35
+ mime-types (>= 1.16)
36
+ rspec (2.14.1)
37
+ rspec-core (~> 2.14.0)
38
+ rspec-expectations (~> 2.14.0)
39
+ rspec-mocks (~> 2.14.0)
40
+ rspec-core (2.14.7)
41
+ rspec-expectations (2.14.4)
42
+ diff-lcs (>= 1.1.3, < 2.0)
43
+ rspec-mocks (2.14.4)
44
+ simplecov (0.8.2)
45
+ docile (~> 1.1.0)
46
+ multi_json
47
+ simplecov-html (~> 0.8.0)
48
+ simplecov-html (0.8.0)
49
+ term-ansicolor (1.3.0)
50
+ tins (~> 1.0)
51
+ thor (0.18.1)
52
+ tins (1.0.0)
53
+
54
+ PLATFORMS
55
+ ruby
56
+
57
+ DEPENDENCIES
58
+ awesome_print (~> 1.2)
59
+ coveralls
60
+ cucumber (~> 1.3)
61
+ finitio!
62
+ path (~> 1.3)
63
+ rake (~> 10.0)
64
+ rspec (~> 2.14)
data/LICENCE.md ADDED
@@ -0,0 +1,22 @@
1
+ # The MIT Licence
2
+
3
+ Copyright (c) 2014 - Bernard Lambeau
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Manifest.txt ADDED
@@ -0,0 +1,11 @@
1
+ CHANGELOG.md
2
+ Gemfile
3
+ Gemfile.lock
4
+ lib/**/*
5
+ LICENCE.md
6
+ Manifest.txt
7
+ finitio.gemspec
8
+ Rakefile
9
+ README.md
10
+ spec/**/*
11
+ tasks/**/*
data/README.md ADDED
@@ -0,0 +1,148 @@
1
+ [![Build Status](https://travis-ci.org/blambeau/finitio-rb.png)](https://travis-ci.org/blambeau/finitio-rb)
2
+ [![Dependency Status](https://gemnasium.com/blambeau/finitio-rb.png)](https://gemnasium.com/blambeau/finitio-rb)
3
+ [![Code Climate](https://codeclimate.com/github/blambeau/finitio-rb.png)](https://codeclimate.com/github/blambeau/finitio-rb)
4
+ [![Coverage Status](https://coveralls.io/repos/blambeau/finitio-rb/badge.png?branch=master)](https://coveralls.io/r/blambeau/finitio-rb)
5
+
6
+ # Finitio(-rb)
7
+
8
+ *Finitio* is a language for capturing information structure. Think "JSON/XML
9
+ schema" but the right way. For more information about *Finitio* itself, see
10
+ [www.finitio.io](http://www.finitio.io)
11
+
12
+ `finitio-rb` is the ruby binding of *Finitio*. It allows defining data schemas
13
+ and validating and coercing data against them in an idiomatic ruby way.
14
+
15
+ ## Example
16
+
17
+ ```ruby
18
+ require 'finitio'
19
+ require 'json'
20
+
21
+ # Let load a schema
22
+ schema = Finitio::DEFAULT_SYSTEM.parse <<-FIO
23
+ {
24
+ name: String( s | s.strip.size > 0 ),
25
+ at: DateTime
26
+ }
27
+ FIO
28
+
29
+ # Let load some JSON document
30
+ data = JSON.parse <<-JSON
31
+ { "name": "Finitio", "at": "20142-03-01" }
32
+ JSON
33
+
34
+ # And try dressing that data
35
+ puts schema.dress(data)
36
+ ```
37
+
38
+ ## ADTs with internal contracts
39
+
40
+ `finitio-rb` tries to provide an idiomatic binding for ruby developers. In
41
+ particular, it uses a simple convention-over-configuration protocol for
42
+ information contracts. This protocol is easily described through an example.
43
+ The following ADT definition:
44
+
45
+ ```ruby
46
+ Color = .Color <rgb> {r: Byte, g: Byte, b: Byte}
47
+ ```
48
+
49
+ expects the following ruby class:
50
+
51
+ ```ruby
52
+ class Color
53
+
54
+ # Constructor & internal representation
55
+ def initialize(r, g, b)
56
+ @r, @g, @b = r, g, b
57
+ end
58
+ attr_reader :r, :g, :b
59
+
60
+ # Public dresser for the RGB information contract on the class
61
+ def self.rgb(tuple)
62
+ new(tuple[:r], tuple[:g], tuple[:b])
63
+ end
64
+
65
+ # Public undresser on the instance
66
+ def to_rgb
67
+ { r: @r, g: @g, b: @b }
68
+ end
69
+
70
+ # ...
71
+
72
+ end
73
+ ```
74
+
75
+ ## ADTs with external contracts
76
+
77
+ When the scenario above is not possible or not wanted (would require core
78
+ extensions for instance), `finitio-rb` allows defining ADTs with external
79
+ contracts. The following ADT definition:
80
+
81
+ ```ruby
82
+ Color = .Color <rgb> {r: Byte, g: Byte, b: Byte} .RgbContract
83
+ ```
84
+
85
+ expected the following ruby module:
86
+
87
+ ```ruby
88
+ module RgbContract
89
+
90
+ def self.dress(tuple)
91
+ Color.new(tuple[:r], tuple[:g], tuple[:b])
92
+ end
93
+
94
+ def self.undress(color)
95
+ { r: color.r, g: color.g, b: color.b }
96
+ end
97
+
98
+ end
99
+ ```
100
+
101
+ ## About representations
102
+
103
+ The `Rep` representation function mapping *Finitio* types to ruby classes is
104
+ as follows:
105
+
106
+ ```ruby
107
+ # Any type is represented by Ruby's Object class
108
+ Rep(.) = Object
109
+
110
+ # Builtins are represented by the corresponding ruby class
111
+ Rep(.Builtin) = Builtin
112
+
113
+ # Sub types are represented by the same representation as the super type
114
+ Rep(SuperType( s | ... )) = Rep(SuperType)
115
+
116
+ # Unions are represented by the corresponding classes. The guaranteed result
117
+ # class is thus the least common super class (^) of the corresponding
118
+ # representations of candidate types
119
+ Rep(T1 | ... | Tn) = Rep(T1) ^ ... ^ Rep(Tn)
120
+
121
+ # Sequences are represented through ::Array.
122
+ Rep([ElmType]) = Array<Rep(ElmType)>
123
+
124
+ # Sets are represented through ::Set.
125
+ Rep({ElmType}) = Set<Rep(ElmType)>
126
+
127
+ # Tuples are represented through ruby ::Hash. Attribute names are always
128
+ # symbolized
129
+ Rep({Ai => Ti}) = Hash<Symbol => Rep(Ti)>
130
+
131
+ # Relations are represented through ruby ::Set of ::Hash.
132
+ Rep({{Ai => Ti}}) = Set<Hash<Symbol => Rep(Ti)>>
133
+
134
+ # Abstract data types are represented through the corresponding class when
135
+ # specified. ADTs behave as Union types if no class is bound.
136
+ Rep(.Builtin <rep> ...) = Builtin
137
+ ```
138
+
139
+ ## About the default system
140
+
141
+ See `lib/finitio/Finitio/default.fio` for the precise definition of the default
142
+ system. In summary,
143
+
144
+ * Most ruby native (data) classes are already aliased to avoid explicit use of
145
+ builtins. In particular, `Integer`, `String`, etc.
146
+ * A `Boolean` union type also hides the TrueClass and FalseClass distinction.
147
+ * Date, Time and DateTime ADTs are also provided that perform common
148
+ conversions from JSON strings, through iso8601.
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ # We run tests by default
2
+ task :default => :test
3
+
4
+ #
5
+ # Install all tasks found in tasks folder
6
+ #
7
+ # See .rake files there for complete documentation.
8
+ #
9
+ Dir["tasks/*.rake"].each do |taskfile|
10
+ load taskfile
11
+ end
data/finitio.gemspec ADDED
@@ -0,0 +1,186 @@
1
+ # We require your library, mainly to have access to the VERSION number.
2
+ # Feel free to set $version manually.
3
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
4
+ require "finitio/version"
5
+ $version = Finitio::Version.to_s
6
+
7
+ #
8
+ # This is your Gem specification. Default values are provided so that your library
9
+ # should be correctly packaged given what you have described in the .noespec file.
10
+ #
11
+ Gem::Specification.new do |s|
12
+
13
+ ################################################################### ABOUT YOUR GEM
14
+
15
+ # Gem name (required)
16
+ s.name = "finitio"
17
+
18
+ # Gem version (required)
19
+ s.version = $version
20
+
21
+ # A short summary of this gem
22
+ #
23
+ # This is displayed in `gem list -d`.
24
+ s.summary = "Finitio - in Ruby"
25
+
26
+ # A long description of this gem (required)
27
+ #
28
+ # The description should be more detailed than the summary. For example,
29
+ # you might wish to copy the entire README into the description.
30
+ s.description = "Implements the Finitio information language in Ruby."
31
+
32
+ # The URL of this gem home page (optional)
33
+ s.homepage = "https://github.com/blambeau/finitio"
34
+
35
+ # Gem publication date (required but auto)
36
+ #
37
+ # Today is automatically used by default, uncomment only if
38
+ # you know what you do!
39
+ #
40
+ # s.date = Time.now.strftime('%Y-%m-%d')
41
+
42
+ # The license(s) for the library. Each license must be a short name, no
43
+ # more than 64 characters.
44
+ #
45
+ # s.licences = %w{}
46
+
47
+ # The rubyforge project this gem lives under (optional)
48
+ #
49
+ # s.rubyforge_project = nil
50
+
51
+ ################################################################### ABOUT THE AUTHORS
52
+
53
+ # The list of author names who wrote this gem.
54
+ #
55
+ # If you are providing multiple authors and multiple emails they should be
56
+ # in the same order.
57
+ #
58
+ s.authors = ["Bernard Lambeau"]
59
+
60
+ # Contact emails for this gem
61
+ #
62
+ # If you are providing multiple authors and multiple emails they should be
63
+ # in the same order.
64
+ #
65
+ # NOTE: Somewhat strangly this attribute is always singular!
66
+ # Don't replace by s.emails = ...
67
+ s.email = ["blambeau@gmail.com"]
68
+
69
+ ################################################################### PATHS, FILES, BINARIES
70
+
71
+ # Paths in the gem to add to $LOAD_PATH when this gem is
72
+ # activated (required).
73
+ #
74
+ # The default 'lib' is typically sufficient.
75
+ s.require_paths = ["lib"]
76
+
77
+ # Files included in this gem.
78
+ #
79
+ # By default, we take all files included in the Manifest.txt file on root
80
+ # of the project. Entries of the manifest are interpreted as Dir[...]
81
+ # patterns so that lazy people may use wilcards like lib/**/*
82
+ #
83
+ here = File.expand_path(File.dirname(__FILE__))
84
+ s.files = File.readlines(File.join(here, 'Manifest.txt')).
85
+ inject([]){|files, pattern| files + Dir[File.join(here, pattern.strip)]}.
86
+ collect{|x| x[(1+here.size)..-1]}
87
+
88
+ # Test files included in this gem.
89
+ #
90
+ s.test_files = Dir["test/**/*"] + Dir["spec/**/*"]
91
+
92
+ # The path in the gem for executable scripts (optional)
93
+ #
94
+ s.bindir = "bin"
95
+
96
+ # Executables included in the gem.
97
+ #
98
+ s.executables = (Dir["bin/*"]).collect{|f| File.basename(f)}
99
+
100
+ ################################################################### REQUIREMENTS & INSTALL
101
+ # Remember the gem version requirements operators and schemes:
102
+ # = Equals version
103
+ # != Not equal to version
104
+ # > Greater than version
105
+ # < Less than version
106
+ # >= Greater than or equal to
107
+ # <= Less than or equal to
108
+ # ~> Approximately greater than
109
+ #
110
+ # Don't forget to have a look at http://lmgtfy.com/?q=Ruby+Versioning+Policies
111
+ # for setting your gem version.
112
+ #
113
+ # For your requirements to other gems, remember that
114
+ # ">= 2.2.0" (optimistic: specify minimal version)
115
+ # ">= 2.2.0", "< 3.0" (pessimistic: not greater than the next major)
116
+ # "~> 2.2" (shortcut for ">= 2.2.0", "< 3.0")
117
+ # "~> 2.2.0" (shortcut for ">= 2.2.0", "< 2.3.0")
118
+ #
119
+ s.add_dependency("citrus", "~> 2.4")
120
+
121
+ #
122
+ # One call to add_dependency('gem_name', 'gem version requirement') for each
123
+ # runtime dependency. These gems will be installed with your gem.
124
+ # One call to add_development_dependency('gem_name', 'gem version requirement')
125
+ # for each development dependency. These gems are required for developers
126
+ #
127
+ # We use Gemfile for development dependencies.
128
+
129
+
130
+ # The version of ruby required by this gem
131
+ #
132
+ # Uncomment and set this if your gem requires specific ruby versions.
133
+ #
134
+ # s.required_ruby_version = ">= 0"
135
+
136
+ # The RubyGems version required by this gem
137
+ #
138
+ # s.required_rubygems_version = ">= 0"
139
+
140
+ # The platform this gem runs on. See Gem::Platform for details.
141
+ #
142
+ # s.platform = nil
143
+
144
+ # Extensions to build when installing the gem.
145
+ #
146
+ # Valid types of extensions are extconf.rb files, configure scripts
147
+ # and rakefiles or mkrf_conf files.
148
+ #
149
+ s.extensions = []
150
+
151
+ # External (to RubyGems) requirements that must be met for this gem to work.
152
+ # It’s simply information for the user.
153
+ #
154
+ s.requirements = nil
155
+
156
+ # A message that gets displayed after the gem is installed
157
+ #
158
+ # Uncomment and set this if you want to say something to the user
159
+ # after gem installation
160
+ #
161
+ s.post_install_message = nil
162
+
163
+ ################################################################### SECURITY
164
+
165
+ # The key used to sign this gem. See Gem::Security for details.
166
+ #
167
+ # s.signing_key = nil
168
+
169
+ # The certificate chain used to sign this gem. See Gem::Security for
170
+ # details.
171
+ #
172
+ # s.cert_chain = []
173
+
174
+ ################################################################### RDOC
175
+
176
+ # An ARGV style array of options to RDoc
177
+ #
178
+ # See 'rdoc --help' about this
179
+ #
180
+ s.rdoc_options = []
181
+
182
+ # Extra files to add to RDoc such as README
183
+ #
184
+ s.extra_rdoc_files = Dir["README.md"] + Dir["CHANGELOG.md"] + Dir["LICENCE.md"]
185
+
186
+ end