finitio 0.0.1 → 0.4.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 (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